用matlab實(shí)現(xiàn)高斯列主元消去法解線性方程及LU分解
2017-03-06 by:CAE仿真在線 來(lái)源:互聯(lián)網(wǎng)
用matlab實(shí)現(xiàn)高斯列主元消去法解線性方程及LU分解
function x=gaussLinearEquation(A,b)
%高斯法解線性方程Ax=b
disp('原方程為AX=b:')
A
b
disp('------------------------')
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)中的行號(hào)轉(zhuǎn)換為在A中的行號(hào)
if abs(mainElement)<eps
disp('列元素太小!!');
break;
elseif index>k
%列主元所在行不是當(dāng)前行,將當(dāng)前行與列主元所在行交換
temp=A(k,:);
A(k,:)=A(index,:);
A(index,:)=temp;
end
%消元
for i=k+1:n
m(i,k)=A(i,k)/A(k,k);%A(k,k)將A(i,k)消為0所乘系數(shù)
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也需要處理!!
end
end
disp('消元后所得到的上三角陣是')
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);
end
clear x;
x=b;
disp('AX=b的解x是')
x
用法:
在控制臺(tái)輸入:
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 ]';
執(zhí)行g(shù)aussLinearEquation(A,b);即可得到結(jié)果。
使用matlab實(shí)現(xiàn)矩陣的LU分解 function [L,U]=myLU(A) %實(shí)現(xiàn)對(duì)矩陣A的LU分解,L為下三角矩陣 A [n,n]=size(A); L=zeros(n,n); U=zeros(n,n); for i=1:n L(i,i)=1; end for k=1:n for j=k:n U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j)');
end for i=k+1:n L(i,k)=(A(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)'))/U(k,k); end
end 用法,在控制臺(tái)輸入 A=[1 2 3 -4;-3 -4 -12 13;2 10 0 -3;4 14 9 -13]; 然后執(zhí)行[l,u]=myLU(A); 這樣得到l和u,可以通過(guò)l*u與A比較來(lái)驗(yàn)證LU分解的正確性。
注意: [L1,U1]=lu(x) [L2,U2,P]=lu(x) [L3,U3,P,Q] = lu(X) MATLAB中[L1,U1]=lu(x)的結(jié)果:L是下三角的置換矩陣即L1=p*L2,U是上三角陣。Matlab中LU分解采用高斯消元法,結(jié)果是不唯一的,只要[L1,U1]=lu(x)滿足L1*U1=x, [L2,U2,P]=lu(x)滿足L2*U2=p*x,[L3,U3,P,Q] = lu(X)滿足L3*U3= P*X*Q就行了。 |
相關(guān)標(biāo)簽搜索:用matlab實(shí)現(xiàn)高斯列主元消去法解線性方程及LU分解 MatLab培訓(xùn) MatLab培訓(xùn)課程 MatLab在線視頻教程 MatLab技術(shù)學(xué)習(xí)教程 MatLab軟件教程 MatLab資料下載 MatLab代做 MatLab基礎(chǔ)知識(shí) Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn) Abaqus培訓(xùn)