用matlab實現高斯列主元消去法解線性方程及LU分解function x=gaussLinearEquation(A,b)%高斯法解線性方程Ax=bdisp("原方程為AX=b:")Abdisp("------------------------")n=length(b);eps=10^-2;for k=1:n-1%找列主元[mainElement,index]=max(abs(A(k:n,k)));index=index+k-1;%index在A(k:n,k)中的行號轉換為在A中的行號if abs(mainElement)<epsdisp("列元素太小!!");break;elseif index>k%列主元所在行不是當前行,將當前行與列主元所在行交換temp=A(k,:);A(k,:)=A(index,:);A(index,:)=temp;end%消元for i=k+1:nm(i,k)=A(i,k)/A(k,k);%A(k,k)將A(i,k)消為0所乘係數A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n);%第i行消元處理b(i)=b(i)-m(i,k)*b(k);%還有b也需要處理!!endenddisp("消元后所得到的上三角陣是")A%回代b(n)=b(n)/A(n,n);for i=n-1:-1:1%sum(A(i,i+1:n).*b(i+1:n)")表示已知b(i)=(b(i)-sum(A(i,i+1:n).*b(i+1:n)"))/A(i,i);endclear x;x=b;disp("AX=b的解x是")x用法:在控制檯輸入:A=[1.003 0.333 1.504 -0.333;-2.011 1.455 0.506 2.956;4.329 -1.952 0.006 2.087;5.113 -4.004 3.332 -1.112];b=[ 3.005,5.407,0.136,3.772 ]";執行gaussLinearEquation(A,b);即可得到結果。
用matlab實現高斯列主元消去法解線性方程及LU分解function x=gaussLinearEquation(A,b)%高斯法解線性方程Ax=bdisp("原方程為AX=b:")Abdisp("------------------------")n=length(b);eps=10^-2;for k=1:n-1%找列主元[mainElement,index]=max(abs(A(k:n,k)));index=index+k-1;%index在A(k:n,k)中的行號轉換為在A中的行號if abs(mainElement)<epsdisp("列元素太小!!");break;elseif index>k%列主元所在行不是當前行,將當前行與列主元所在行交換temp=A(k,:);A(k,:)=A(index,:);A(index,:)=temp;end%消元for i=k+1:nm(i,k)=A(i,k)/A(k,k);%A(k,k)將A(i,k)消為0所乘係數A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n);%第i行消元處理b(i)=b(i)-m(i,k)*b(k);%還有b也需要處理!!endenddisp("消元后所得到的上三角陣是")A%回代b(n)=b(n)/A(n,n);for i=n-1:-1:1%sum(A(i,i+1:n).*b(i+1:n)")表示已知b(i)=(b(i)-sum(A(i,i+1:n).*b(i+1:n)"))/A(i,i);endclear x;x=b;disp("AX=b的解x是")x用法:在控制檯輸入:A=[1.003 0.333 1.504 -0.333;-2.011 1.455 0.506 2.956;4.329 -1.952 0.006 2.087;5.113 -4.004 3.332 -1.112];b=[ 3.005,5.407,0.136,3.772 ]";執行gaussLinearEquation(A,b);即可得到結果。