MATLAB解线性方程组的直接方法.docx
《MATLAB解线性方程组的直接方法.docx》由会员分享,可在线阅读,更多相关《MATLAB解线性方程组的直接方法.docx(23页珍藏版)》请在冰豆网上搜索。
MATLAB解线性方程组的直接方法
在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法•
3.1方程组的逆矩阵解法及其MATLA程序
3.1.3线性方程组有解的判定条件及其MATLAB?
序
判定线性方程组AmnX二b是否有解的MATLA醉序
end
function[RA,RB,n]=jiepb(A,b)B=[Ab];n=length(b);RA=rank(A);RB=rank(B);zhica=RB-RA;
if
zhica>0,
disp('请注意:
因为RA~=RB,所以此方程组无解.')
return
end
if
RA==RB
ifRA==n
disp('请注意:
因为RA=RB=n,所以此方程组有唯一解.')
else
disp('请注意:
因为RA=RBend
解在MATLABT作窗口输入程序
>>A=[23-15;312-7;41-36;1-24-7];
b=[0;0;0;0];[RA,RB,n]=jiepb(A,b)
运行后输出结果为
请注意:
因为RA=RB=n,所以此方程组有唯一解
RA=4,RB=4,n=4
在MATLABT作窗口输入
>>X=A\b,
运行后输出结果为X=(0000)'.
(2)在MATLABT作窗口输入程序
>>A=[34-57;2-33-2;411-1316;7-213];b=[0;0;0;0];
[RA,RB,n]=jiepb(A,b)
运行后输出结果
请注意:
因为RA=RBRA=2,RB=2,n=4
(3)在MATLABT作窗口输入程序
>>A=[42-1;3-12;1130];b=[2;10;8];[RA,RB,n]=jiepb(A,B)
运行后输出结果
请注意:
因为RA~=RB,所以此方程组无解•
RA=2,RB=3,n=3
(4)在MATLABT作窗口输入程序
>>A=[21-11;42-21;21-1-1];
b=[1;2;1];[RA,RB,n]=jiepb(A,b)
运行后输出结果
请注意:
因为RA=RBRA=2,RB=2,n=3
3.2三角形方程组的解法及其MATLA程序
3.2.2解三角形方程组的MATLAB?
序
解上三角形线性方程组AX二b的MATLAB^序
function[RA,RB,n,X]=shangsan(A,b)
B=[Ab];n=length(b);RA=rank(A);
RB=rank(B);zhica=RB-RA;
ifzhica>0,
disp('请注意:
因为RA~=RB,所以此方程组无解.')return
end
ifRA==RB
ifRA==n
disp('请注意:
因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1);X(n)=b(n)/A(n,n);
fork=n-1:
-1:
1
X(k)=(b(k)-sum(A(k,k+1:
n)*X(k+1:
n)))/A(k,k);
end
else
disp('请注意:
因为RA=RBend
end
例3.2.2用解上三角形线性方程组的MATLAB程序解方程组
馭-x2+2x3+3x4=20,
*-2X2+7X3-4X4=-7,
|6x3+5X4=4,
J3X4=6.
解在MATLABT作窗口输入程序
>>A=[5-123;0-27-4;0065;0003];
b=[20;-7;4;6];
[RA,RB,n,X]=shangsan(A,b)
运行后输出结果
请注意:
因为RA=RB=n,所以此方程组有唯一解.
RA=RB=
4,4,
3.3高斯(GausS消元法和列主元消元法及其MATLA程序
3.3.1高斯消元法及其MATLAB?
序
用高斯消元法解线性方程组AX二b的MATLA龍序
function[RA,RB,n,X]=gaus(A,b)
B=[Ab];n=length(b);RA=rank(A);
RB=rank(B);zhica=RB-RA;
ifzhica>0,
disp('请注意:
因为RA~=RB,所以此方程组无解.')return
end
ifRA==RB
ifRA==n
disp('请注意:
因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1);C=zeros(1,n+1);
forp=1:
n-1
fork=p+1:
n
m=B(k,p)/B(p,p);
B(k,p:
n+1)=B(k,p:
n+1)_m*B(p,p:
n+1);
end
end
b=B(1:
n,n+1);A=B(1:
n,1:
n);X(n)=b(n)/A(n,n);
forq=n-1:
-1:
1
X(q)=(b(q)-sum(A(q,q+1:
n)*X(q+1:
n)))/A(q,q);
end
else
disp('请注意:
因为RA=RBend
end
例3.3.2用高斯消元法和MATLAB^序求解下面的非齐次线性方程组,并且用逆矩
阵解方程组的方法验证.
乙一x2x3—3x4=1,
-X2-X3+X4=0,2X1-2x?
-4X3'6X4=—1,
Ix1-2x2-4x3x4--1.解在MATLABT作窗口输入程序
>>A=[1-11-3;0-1-11;2-2-46;1-2-41];
b=[1;0;-1;-1];[RA,RB,n,X]=gaus(A,b)
运行后输出结果
RA=
RB=
4
n=
请注意:
因为RA=RB=n,所以此方程组有唯一解.
X=
0-0.50000.5000
3.3.2列主元消元法及其MATLAB?
序
用列主元消元法解线性方程组AX二b的MATLAB^序
function[RA,RB,n,X]=liezhu(A,b)
B=[Ab];n=length(b);RA=rank(A);
RB=rank(B);zhica=RB-RA;ifzhica>0,
disp('请注意:
因为RA~=RB,所以此方程组无解.')return
end
ifRA==RB
ifRA==n
disp('请注意:
因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1);C=zeros(1,n+1);
forp=1:
n-1
[Y,j]=max(abs(B(p:
n,p)));C=B(p,:
);B(p,:
)=B(j+p-1,:
);B(j+p-1,:
)=C;
fork=p+1:
n
m=B(k,p)/B(p,p);
B(k,p:
n+1)=B(k,p:
n+1)_m*B(p,p:
n+1);
end
end
b=B(1:
n,n+1);A=B(1:
n,1:
n);X(n)=b(n)/A(n,n);
forq=n-1:
-1:
1
X(q)=(b(q)-sum(A(q,q+1:
n)*X(q+1:
n)))/A(q,q);
end
else
disp('请注意:
因为RA=RBend
end
例333用列主元消元法解线性方程组的MATLAB程序解方程组
—X2—X3+X4=0,
X1-X2+X3-3X4=1,
_2x2_4x36x4=-1,
x1_2x2_4x3x4=_1.
解在MATLABT作窗口输入程序
>>A=[0-1-11;1-11-3;2-2-46;1-2-41];
b=[0;1;-1;-1];[RA,RB,n,X]=liezhu(A,b)
运行后输出结果
请注意:
因为RA=RB=n,所以此方程组有唯一解•
RA=4,RB=4,n=4,X=[0-0.50.50]'
3.4LU分解法及其MATLA程序
3.4.1判断矩阵LU分解的充要条件及其MATLAB?
序
判断矩阵A能否进行LU分解的MATLAB^序
functionhl=pdLUfj(A)
[nn]=size(A);RA=rank(A);ifRA~=n
disp('请注意:
因为A的n阶行列式hl等于零,所以A不能进行LU分解.A
的秩RA如下:
'),RA,hl=det(A);return
endifRA==n
forp=1:
n,h(p)=det(A(1:
p,1:
p));,end
hl=h(1:
n);
fori=1:
n
ifh(1,i)==0
disp('请注意:
因为A的r阶主子式等于零,所以A不能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:
'),hl;RA,return
end
end
ifh(1,i)~=0
disp('请注意:
因为A的各阶主子式都不等于零,所以A能进行LU分
解.A的秩RA和各阶顺序主子式值hl依次如下:
')
hl;RA
end
例341
end
1
2
3、
1
2
3'
q
2
3、
1
12
7
;
(2)
1
2
7
;(3)
1
2
3
I4
5
6」
I4
5
6>
1
<4
5
6」
判断下列矩阵能否进行
LU分解,并求矩阵的秩
(1)
解
(1)在MATLA工作窗口输入程序
>>A=[123;1127;456];hl=pdLUfj(A)
运行后输出结果为
A能进行LU分解.A的秩RA和
请注意:
因为A的各阶主子式都不等于零,所以各阶顺序主子式值hl依次如下:
RA=3,hl=110-48
(2)在MATLA工作窗口输入程序
>>A=[123;127;456];hl=pdLUfj(A)
运行后输出结果为
请注意:
因为A的r阶主子式等于零,所以A不能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:
RA=3,hl=1012
(3)在MATLA工作窗口输入程序
>>A=[123;123;456];hl=pdLUfj(A)运行后输出结果为
请注意:
因为A的n阶行列式hl等于零,所以A不能进行LU分解.A的秩RA如下
RA=2,hl=0
3.4.2直接LU分解法及其MATLA程序
将矩阵A进行直接LU分解的MATLAB^序
functionhl=zhjLU(A)
[nn]=size(A);RA=rank(A);ifRA~=n
disp('请注意:
因为A的n阶行列式hl等于零,所以A不能进行LU分解.A
的秩RA如下:
’),RA,hl=det(A);
return
endifRA==nforp=1:
n