高斯消去法分为两个过程:第一步是前向消元(forward elimination),也就是将系数矩阵转化成上三角矩阵的过程;第二步是回代(back substitution)过程,自底向上求解方程组的过程。
选择主元(pivoting),主元(pivot)一定不能为0.且主元应当尽可能大。所以一般情况下,我们采取部分选主元(partial pivoting)。选择主元为所在各列中绝对值最大的元素(或者非0亦可)。然后将对应的该行与主元行进行交换,然后消元。
function x = gausselimination(A,b) ab = [A,b]; [r,c] = size(ab); for k=1:r-1 [rm,im]=max(abs(ab(k:r,k))); im = im +k-1; if(ab(im,k)~=0) if(im~=k) ab([k im],:)=ab([im k],:); end end for i=k+1:r ab(i,k:c)=ab(i,k:c)-ab(i,k)/ab(k,k)*ab(k,k:c); end end x=zeros(r,1); x(r)=ab(r,c)/ab(r,r); for i=r-1:-1:1 x(i)=(ab(i,c)-ab(i,i+1:r)*x(i+1:r))/ab(i,i); end
以上是matlab代码实现(保存为gausselimination.m)。以下是运行结果:
>> A = [10 -7 0;-3 2 6;5 -1 5]
A =
10 -7 0
-3 2 6
5 -1 5
>> b = [7;4;6]
b =
7
4
6
>> gausselimination(A,b)
ans =
0.0000
-1.0000
1.0000
原文:http://my.oschina.net/donngchao/blog/525496