// 找到最大的列主元
3 H6 D9 H0 o# B4 y* ~% { for(j = i; j < size; j++)
" j9 ]0 i1 Y% r { {( k: B5 [! q$ m3 e% {, I
if(p[j] > largest)
& \" d; w6 L3 Z; [ {
: y' h( m$ y4 E/ d6 x$ n! b largest = p[j];
8 k+ d! } G* i8 U! S swap_index = j;
6 H- ^# x" O: T( Z }
% ?! Q" X8 n& ~# e: L }* t0 w9 s7 v6 {$ m! W; s
//如果最大列主元不在子块的第一行,那么进行交换6 O% y7 @% x& t
if(i != swap_index)
4 s+ c1 h' O% V {. l% K, h, C! {9 ?
double temp = 0;* \$ c$ o" {* }7 F
for(j = 0; j < size; j++)1 s- n( E8 o0 m
{/ L7 l4 Z5 x0 X* ~' Z" j, B
temp = p[j];& x. I" t- S( |
p[j] = p[swap_index][j];
9 m* R7 r' M% f* U! r p[swap_index][j] = temp;- w% P( D& Q' c" w( A+ _2 ^
}& O/ T7 f s" h3 @ s
temp = B;
1 ^4 }' u4 z" F+ a" \8 m B = B[swap_index];$ m% k# @4 h/ d4 m
B[swap_index] = temp;
- ~9 f, r- m) X& r( } }& [9 _5 O* ]* ~7 D
//进行消元
: f( J8 s9 L& q9 A double mi = 1.0;1 p9 Q' `1 L* v+ K5 z! F: d& ~+ N
for(j = i + 1; j < size; j++)! G# y8 w6 q x( Z
{5 K7 q3 n) E3 J& x
mi = p[j]/p;
) Q* f4 V, u+ [+ b for(int k = i; k < size; k++)
2 E7 X9 L% ^5 l5 n {
4 x( [" ^+ \% T. t1 I ?1 g: v p[j][k] = p[j][k] - mi * p[k];
" \1 j; x& f7 c! K; l% X }& `+ b' N& E& k2 X+ ~" e) I
B[j] = B[j] - mi * B;% |# o( v! V. |- x4 k6 m
}" T! j9 U" J0 ~% z& f& m
} |