第二章 解线性方程组的直接方法 matlab用法范文
更新时间:2023-12-19 16:06:01 阅读量: 教育文库 文档下载
- 第二章大圣归来小说推荐度:
- 相关推荐
第二章 解线性方程组的直接方法
在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法.
2.1 方程组的逆矩阵解法及其MATLAB程序
2.1.3 线性方程组有解的判定条件及其MATLAB程序 判定线性方程组Am?nX?b是否有解的MATLAB程序
function [RA,RB,n]=jiepb(A,b)
B=[A b];n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0,
disp('请注意:因为RA~=RB,所以此方程
组无解.')
return end
if RA==RB if RA==n
disp('请注意:因为RA=RB=n,所以此方
程组有唯一解.')
else
disp('请注意:因为RA=RB 程组有无穷多解.') end end 例2.1.4 判断下列线性方程组解的情况.如果有唯一解,则用表 3-2方法求解. (1) ?2x1?3x2?x3?5x4?0,?3x?x?2x?7x?0,?1234??4x1?x2?3x3?6x4?0,??x1?2x2?4x3?7x4?0; (2) 第二章 解线性方程组的直接方法的MATLAB程序 ?3x1?4x2?5x3?7x4?0,?2x?3x?3x?2x?0,?1234 ??4x1?11x2?13x3?16x4?0,??7x1?2x2?x3?3x4?0;?4x1?2x2?x3?2,?2x?y?z?w?1,?(3) ?3x1?x2?2x3?10, (4) ??4x?2y?2z?w?2, ?11x?3x?8;?2x?y?z?w?1.?12? 解 在MATLAB工作窗口输入程序 >> A=[2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7]; b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b) 运行后输出结果为 请注意:因为RA=RB=n,所以此方程组有唯一 解. RA = 4,RB =4,n =4 在MATLAB工作窗口输入 >>X=A\\b, 运行后输出结果为 X =(0 0 0 0)’. (2) 在MATLAB工作窗口输入程序 >> A=[3 4 -5 7;2 -3 3 -2;4 11 -13 16;7 -2 1 3];b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b) 运行后输出结果 请注意:因为RA=RB 多解. RA =2,RB =2,n =4 (3) 在MATLAB工作窗口输入程序 >> A=[4 2 -1;3 -1 2;11 3 0]; b=[2;10;8]; [RA,RB,n]=jiepb(A,B) 运行后输出结果 请注意:因为RA~=RB,所以此方程组无解. RA =2,RB =3,n =3 25. (4)在MATLAB工作窗口输入程序 >> A=[2 1 -1 1;4 2 -2 1;2 1 -1 -1]; b=[1; 2; 1]; [RA,RB,n]=jiepb(A,b) 运行后输出结果 请注意:因为RA=RB 多解. RA =2,RB =2,n =3 2.2 三角形方程组的解法及其MATLAB程序 2.2.2 解三角形方程组的MATLAB程序 解上三角形线性方程组AX?b的MATLAB程序 function [RA,RB,n,X]=shangsan(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB,所以此方程 组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n,所以此 方程组有唯一解.') X=zeros(n,1); X(n)=b(n)/A(n,n); for k=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=RB 方程组有无穷多解.') end end 第二章 解线性方程组的直接方法的MATLAB程序 例2.2.2 用解上三角形线性方程组的MATLAB程序解方程组 ?5x1?x2?2x3?3x4?20,??2x?7x?4x??7,?234. ?6x3?5x4?4,??3x4?6.?解 在MATLAB工作窗口输入程序 >>A=[5 -1 2 3;0 -2 7 -4;0 0 6 5;0 0 0 3]; b=[20; -7; 4;6]; [RA,RB,n,X]=shangsan(A,b) 运行后输出结果 请注意:因为RA=RB=n,所以此方程组有唯一 解. RA = RB = 4, 4, n = 4, X =[2.4 -4.0 -1.0 2.0]’ 2.3 高斯(Gauss)消元法和列主元消元法及其MATLAB程序 2.3.1 高斯消元法及其MATLAB程序 用高斯消元法解线性方程组AX?b的MATLAB程序 function [RA,RB,n,X]=gaus(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 for k=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); for q=n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end else 27. disp('请注意:因为RA=RB 例2.3.2 用高斯消元法和MATLAB程序求解下面的非齐次线性方程组,并且用逆矩阵解方程组的方法验证. ?x1?x2?x3?3x4?1,??x2?x3?x4?0, ???2x1?2x2?4x3?6x4??1,??x1?2x2?4x3?x4??1.解 在MATLAB工作窗口输入程序 >> A=[1 -1 1 -3; 0 -1 -1 1;2 -2 -4 6;1 -2 -4 1]; b=[1;0; -1;-1]; [RA,RB,n,X] =gaus (A,b) 运行后输出结果 请注意:因为RA=RB=n,所以此方程组有唯一解. RA = X = 4 0 RB = -0.5000 4 0.5000 n = 0 4 2.3.2 列主元消元法及其MATLAB程序 用列主元消元法解线性方程组AX?b的MATLAB程序 function [RA,RB,n,X]=liezhu(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 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; for k=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); for q=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=RB 例2.3.3 用列主元消元法解线性方程组的MATLAB程序解方程组 第二章 解线性方程组的直接方法的MATLAB程序 ?x2?x3?x4?0,??x?x?x?3x?1,?1234. ??2x1?2x2?4x3?6x4??1,??x1?2x2?4x3?x4??1.解 在MATLAB工作窗口输入程序 >> A=[0 -1 -1 1;1 -1 1 -3;2 -2 -4 6;1 -2 -4 1]; b=[0;1;-1;-1]; [RA,RB,n,X]=liezhu(A,b) 运行后输出结果 请注意:因为RA=RB=n,所以此方程组有唯一解. RA = 4,RB = 4,n = 4,X =[0 -0.5 0.5 0]’ 2.4 LU分解法及其MATLAB程序 2.4.1判断矩阵LU分解的充要条件及其MATLAB程序 判断矩阵A能否进行LU分解的MATLAB程序 function hl=pdLUfj(A) [n n] =size(A); RA=rank(A); if RA~=n disp('请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A 的秩RA如下:'), RA,hl=det(A); return end if RA==n for p=1:n,h(p)=det(A(1:p, 1:p));, end hl=h(1:n); for i=1:n if h(1,i)==0 disp('请注意:因为A的r阶主子式等于零,所以A不能进行LU分 解.A的秩RA和各阶顺序主子式值hl依次如下:'),hl;RA,return end end if h(1,i)~=0 disp('请注意:因为A的各阶主子式都不等于零,所以A能进行LU分 解.A的秩RA和各阶顺序主子式值hl依次如下:') hl;RA end end 例2.4.1 判断下列矩阵能否进行LU分解,并求矩阵的秩. ?123??123??123???????(1)?1127?;(2)?127?;(3)?123?. ?456??456??456???????解 (1)在MATLAB工作窗口输入程序 >> A=[1 2 3;1 12 7;4 5 6];hl=pdLUfj(A) 运行后输出结果为 请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和 各阶顺序主子式值hl依次如下: RA = 3, hl = 1 10 -48 (2)在MATLAB工作窗口输入程序 >> A=[1 2 3;1 2 7;4 5 6];hl=pdLUfj(A) 运行后输出结果为 请注意:因为A的r阶主子式等于零,所以A不能进行LU分解.A的秩RA和各阶 顺序主子式值hl依次如下: 29. RA = 3, hl =1 0 12 (3)在MATLAB工作窗口输入程序 >> A=[1 2 3;1 2 3;4 5 6];hl=pdLUfj(A) 运行后输出结果为 请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A的秩RA如下 RA = 2, hl = 0 2.4.2 直接LU分解法及其MATLAB程序 将矩阵A进行直接LU分解的MATLAB程序 function hl=zhjLU(A) [n n] =size(A); RA=rank(A); if RA~=n disp('请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A 的秩RA如下:'), RA,hl=det(A); return end if RA==n for p=1:n h(p)=det(A(1:p, 1:p)); end hl=h(1:n); for i=1:n if h(1,i)==0 disp('请注意:因为A的r阶主子式等于零,所以A不能进行LU分解.A 的秩RA和各阶顺序主子式值hl依次如下:'), hl;RA return end end if h(1,i)~=0 disp('请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A 的秩RA和各阶顺序主子式值hl依次如下:') for j=1:n U(1,j)=A(1,j); end for k=2:n for i=2:n for j=2:n L(1,1)=1;L(i,i)=1; if i>j L(1,1)=1;L(2,1)=A(2,1)/U(1,1); L(i,1)=A(i,1)/U(1,1); L(i,k)=(A(i,k)- L(i,1:k-1)*U(1:k-1,k))/U(k,k); else U(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j); end end end end hl;RA,U,L end end 例2.4.3 用矩阵进行直接LU分解的MATLAB程序分解矩阵 第二章 解线性方程组的直接方法的MATLAB程序 ?1020????0101?. A??1243????0103???解 在MATLAB工作窗口输入程序 >> A=[1 0 2 0;0 1 0 1;1 2 4 3;0 1 0 3]; hl=zhjLU(A) 运行后输出结果 请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA 和各阶顺序主子式值hl依次如下: L = 1 0 0 0 RA = 4 0 1 0 0 U = 1 0 2 0 1 2 1 0 0 1 0 1 0 1 0 1 0 0 2 1 0 0 0 2 hl = 1 1 2 4 2.4.4 判断正定对称矩阵的方法及其MATLAB程序 判断矩阵A是否是正定对称矩阵的MATLAB程序 function hl=zddc(A) [n n] =size(A); for p=1:n h(p)=det(A(1:p, 1:p)); end hl=h(1:n);zA=A'; for i=1:n if h(1,i)<=0 disp('请注意:因为A的各阶顺序主子式hl不全大于零,所以A不是正 定的.A的转置矩阵zA和各阶顺序主子式值hl依次如下:'), hl;zA,return end end if h(1,i)>0 disp('请注意:因为A的各阶顺序主子式hl都大于零,所以A是正定的.A的 转置矩阵zA和各阶顺序主子式值hl依次如下:') hl;zA end 例2.4.5 判断下列矩阵是否是正定对称矩阵: ?0.1234??1?121?1?1???211??????00???2?;(1)??12?34?;(2) ??130?3?; (3) ?2(4)?1?60??. 1?1??11211341??209?6?00????10?4?22?????????5789??1?3?619?11??0????0?????0?0?2122?1???2?解 (1)在MATLAB工作窗口输入程序 >> A=[0.1 2 3 4;-1 2 -3 4;11 21 13 41;5 7 8 9];hl=zddc(A) 运行后输出结果 请注意: A不是对称矩阵 请注意:因为A的各阶顺序主子式hl不全大于零,所以A不是正定的.A的转 置矩阵zA和各阶顺序主子式值hl依次如下: zA = 1/10 -1 11 5 2 2 21 7 3 -3 13 8 4 4 41 9 hl = 1/10 11/5 -1601/10 3696/5 因此,A即不是正定矩阵,也不是对称矩阵. (2)在MATLAB工作窗口输入程序 >> A=[1 -1 2 1;-1 3 0 -3;2 0 9 -6;1 -3 -6 19],hl=zddc(A) 31. 运行后输出结果 A = 1 -1 2 1 -1 3 0 -3 2 0 9 -6 1 -3 -6 19 请注意: A是对称矩阵 请注意:因为A的各阶顺序主子式hl都大于零,所以A是正定的.A的转置矩阵zA 和各阶顺序主子式值hl依次如下: zA = 1 -1 2 1 -1 3 0 -3 2 0 9 -6 1 -3 -6 19 hl = 1 2 6 24 (3)在MATLAB工作窗口输入程序 >> A=[1/sqrt(2) -1/sqrt(2) 0 0; -1/sqrt(2) 1/sqrt(2) 0 0; 0 0 1/sqrt(2) -1/sqrt(2); 0 0 -1/sqrt(2) 1/sqrt(2)], hl=zddc(A) 运行后输出结果 A= 985/1393 -985/1393 0 0 -985/1393 985/1393 0 0 0 0 985/1393 -985/1393 0 0 -985/1393 985/1393 请注意: A是对称矩阵 请注意:因为A的各阶顺序主子式hl不全大于零,所以A不是正定的.A的转置 矩阵zA和各阶顺序主子式值hl依次如下: zA = 985/1393 -985/1393 0 0 -985/1393 985/1393 0 0 0 0 985/1393 -985/1393 0 0 -985/1393 985/1393 hl = 985/1393 0 0 0 T 可见,A不是正定矩阵,是半正定矩阵;因为A= A 因此,A是对称矩阵. (4)在MATLAB工作窗口输入程序 >> A=[-2 1 1;1 -6 0;1 0 -4];hl=zddc(A) 运行后输出结果 A = -2 1 1 1 -6 0 1 0 -4 请注意: A是对称矩阵 请注意:因为A的各阶顺序主子式hl不全大于零,所以A不是正定的.A的转置 矩阵zA和各阶顺序主子式值hl依次如下: zA = -2 1 1 hl = -2 11 -38 1 -6 0 1 0 -4 T 可见A不是正定矩阵,是负定矩阵;因为A = A 因此,A是对称矩阵. 2.5 求解线性方程组的LU方法及其MATLAB程序 2.5.1 解线性方程组的楚列斯基(Cholesky)分解法及其MATLAB程序 例3.5.1 先将矩阵A进行楚列斯基分解,然后解矩阵方程AX?b,并用其他方法验证. 1??1?12?1??????130?3???3?. A??,b??5?209?6??????1?3?619??7?????第二章 解线性方程组的直接方法的MATLAB程序 解 在工作窗口输入 >>A=[1 -1 2 1;-1 3 0 -3; 2 0 9 -6;1 -3 -6 19]; b1=1:2:7; b=b1'; R=chol(A);C=A-R'*R,R1=inv(R);R2=R1'; x=R1*R2*b,Rx=A\\b-x 运行后输出方程组的解和验证结果 x = Rx = 1.0e-014 * C = 1.0e-015 * -8.0000 -0.7105 0 0 0 0 0.3333 -0.0833 0 -0.4441 0 0 3.6667 0.2220 0 0 0 0 2.0000 0.1332 0 0 0 0 2.5.2 解线性方程组的直接LU分解法及其MATLAB程序 例3.5.2 首先将矩阵A直接进行LU分解,然后解矩阵方程AX?b ?1??1020?????2?. ?0101?,b??A????1?1243??????5??0103?????解 (1) 首先将矩阵A直接进行LU分解.在MATLAB工作窗口输入程序 >> A=[1 0 2 0;0 1 0 1;1 2 4 3;0 1 0 3];b=[1;2;-1;5]; hl=zhjLU(A),A-L*U 运行后输出LU分解 请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA 和各阶顺序主子式值hl依次如下: L = 1 0 0 0 RA = 4 0 1 0 0 U = 1 0 2 0 1 2 1 0 0 1 0 1 0 1 0 1 0 0 2 1 hl = 1 1 2 4 0 0 0 2 A分解为一个单位下三角形矩阵L和一个上三角形矩阵U的积 A?LU. (2)在工作窗口输入 >> U=[1 0 2 0;0 1 0 1;0 0 2 1;0 0 0 2]; L=[1 0 0 0;0 1 0 0;1 2 1 0;0 1 0 1]; b=[1;2;-1;5];U1=inv(U); L1=inv(L); X=U1*L1*b,x=A\\b 运行后输出方程组的解 X = 8.000 0.000 -3.000 1.000 2.5.3 解线性方程组的选主元的LU方法及其MATLAB程序 例3.5.3 先将矩阵A进行LU分解,然后解矩阵方程AX?b 其中 34??0.12?1??????12?34??,?2?. A??b???1?11211341??????5??5?789????解 方法1 根据(3.28)式编写MATLAB程序,然后在工作窗口输入 >> A=[0.1 2 3 4;-1 2 -3 4;11 21 13 41;5 7 8 9]; b=[1;2;-1;5]; [L U P]=LU(A), U1=inv(U); L1=inv(L); X=U1* L1*P*b 运行后输出结果 L = 1.0000 0 0 0 P = 0 0 1 0 0 1 0 0 1 0 0 0 33. 0 0 0 1 X =[-1.2013 3.3677 0.0536 -1.4440]’ -0.0909 1.0000 0 0 0.0091 0.4628 1.0000 0 0.4545 -0.6512 0.2436 1.0000 U =11.0000 21.0000 13.0000 41.0000 0 3.9091 -1.8182 7.7273 0 0 3.7233 0.0512 0 0 0 -4.6171 方法2 根据(3.29)式编写MATLAB程序,然后在工作窗口输入 >> A=[0.1 2 3 4;-1 2 -3 4;11 21 13 41;5 7 8 9]; b=[1;2;-1;5]; [F U]=LU(A), U1=inv(U); F1=inv(F); X=U1*F1*b 运行后输出结果 F=0.0091 0.4628 1.0000 0 U=11.0000 21.0000 13.0000 41.0000 -0.0909 1.0000 0 0 0 3.9091 -1.8182 7.7273 1.0000 0 0 0 0 0 3.7233 0.0512 0.4545 -0.6512 0.2436 1.0000 0 0 0 -4.6171 X =[-1.2013 3.3677 0.0536 -1.4440]’ 用LU分解法解线性方程组Am?nX?b的MATLAB程序 function [RA,RB,n,X,Y]=LUjfcz(A,b) [n n] =size(A);B=[A b]; RA=rank(A); RB=rank(B); for p=1:n h(p)=det(A(1:p, 1:p)); end hl=h(1:n); for i=1:n if h(1,i)==0 disp('请注意:因为A的r阶主子式等于零,所以A不能进行LU分解.A 的秩RA和各阶顺序主子式值hl依次如下:') hl;RA return end end if h(1,i)~=0 disp('请注意:因为A的各阶主子式都不等于零,所以A能进行LU分 解.A的秩RA和各阶顺序主子式值hl依次如下:') X=zeros(n,1); Y=zeros(n,1); C=zeros(1,n);r=1:1; for p=1:n-1 [max1,j]=max(abs(A(p:n,p))); C=A(p,:); A(p,:)= A(j+P1,:); C= A(j+P1,:); g=r(p); r(p)= r(j+P1); r(j+P1)=g; for k=p+1:n H= A(k,p)/A(p,p); A(k,p) = H; A(k,p+1:n)=A(k,p+1:n)- H* A(p,p+1:n); end end Y(1)=B(r(1)); for k=2:n Y(k)= B(r(k))- A(k,1:k-1)* Y(1:k-1); end X(n)= Y(n)/ A(n,n); for i=n-1:-1:1 X(i)= (Y(i)- A(i, i+1:n) * X (i+1:n))/ A(i,i); end end [RA,RB,n,X,Y]’; 2.6 误差分析及其两种MATLAB程序 第二章 解线性方程组的直接方法的MATLAB程序 2.6.1 用MATLAB软件作误差分析 例2.6.2 解下列矩阵方程AX?b,并比较方程(1)和(2)有何区别,它们的解有何变化.其中 1/21/31/41/51/61/7?1??1?????1/31/41/51/61/71/8?2??1/2??2??1/3?1/41/51/61/71/81/9?? ??A??1/41/51/61/71/81/91/10?,b??2?;?2??1/5?1/61/71/81/91/101/11?????2??1/61/71/81/91/101/111/12?????1/71/81/91/101/111/121/13?2????1?1/7?1.0011/21/31/41/51/6?????1/31/41/51/61/71/8??2??1/2?2??1/31/41/51/61/71/81/9??? ??A??1/41/51/61/71/81/91/10?,b??2?.?2??1/51/61/71/81/91/101/11??????2??1/61/71/81/91/101/111/12??????2??1/71/81/91/101/111/121/13?(1)(2)解 (1) 矩阵方程AX?b的系数矩阵A为7阶希尔伯特(Hilbert)矩阵,我们可 以用下列命令计算n阶希尔伯特矩阵 >>h=hilb(n) % 输出h为n阶Hilbert矩阵 在MATLAB工作窗口输入程序 >> A=hilb(7);b=[1;2;2;2;2;2;2];X=A\\b 运行后输出AX?b的解为 X =(-35 504 -1260 -4200 20790 -27720 12012)T. (2)在MATLAB工作窗口输入程序 >> B =[0.001,zeros(1,6);zeros(6,1),zeros(6,6)]; A=(B+hilb(7)); b=[1;2;2;2;2;2;2];X=A\\b T运行后输出方程的解为 X=(-33 465 -966 -5181 22409 -29015 12413). 在MATLAB工作窗口输入程序 >> X =[-33, 465,-966,-5181,22409,-29015,12413]'; X1 =[-35,504,-1260,-4200,20790,-27720,12012]'; wu=X1'- X' 运行后输出方程(1)和(2)的解的误差为 ?X?(-2 39 -294 981 -1619 1295 -401)T. 方程(1)和(2)的系数矩阵的差为?A???的解的差为?X?0.001O1?6??,常数向量相同,则Ax?b??O6?1O6?6?T?(?239?294981?16191295?401).A的微小变化, 引起X的很大变化,即X对A的扰动是敏感的. 2.6.2 求P 条件数和讨论AX?b解的性态的MATLAB程序 求P条件数和讨论AX?b解的性态的MATLAB程序 function Acp=zpjxpb(A) Acw = cond (A, inf);Ac1= cond (A,1); Ac2= cond (A,2);Acf = cond (A,'fro');dA=det(A); if (Acw>50)&(dA<0.1) disp('请注意:AX=b是病态的,A的∞条件数,1条件数,2条件数, 弗罗贝尼乌斯条件数和A的行列式的值依次如下:') Acp=[Acw Ac1 Ac2 Acf dA]'; else disp(' AX=b是良态的,A的∞条件数,1条件数,2条件数,弗罗贝尼乌斯条 35. 件数和A的行列式的值依次如下:') Acp=[Acw Ac1 Ac2 Acf dA]'; end 例2.6.3 根据定理3.10,讨论线性方程组AX?b解的性态,并且求出A的4种条件数.其中 ?2?(1)A为7阶希尔伯特矩阵;(2)?3A??4??1?311?2?12?345???7?. 6???7??解 (1)首先将求P条件数和讨论AX?b解的性态的MATLAB程序保存名为 zpjxpb.m 的M文件,然后在MATLAB工作窗口输入程序 >> Acp =zpjxpb(hilb(7)); Acp',det(hilb(7)) 运行后输出结果 请注意:AX=b是病态的,A的∞条件数,1条件数,2条件数, 弗罗贝尼乌斯条 件数和A的行列式的值依次如下: ans = 1.0e+008 * 9.8519 9.8519 4.7537 4.8175 0.0000 ans = 4.8358e-025 (2)在MATLAB工作窗口输入程序 >> A=[2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7];Acp=zpjxpb(A); Acp' 运行后输出结果 AX=b是良态的,A的∞条件数,1条件数,2条件数, 弗罗贝尼乌斯条件数和A 的行列式的值依次如下: ans = 14.1713 19.4954 8.2085 11.4203 327.0000 2.6.3 用P范数讨论AX?b解和A的性态的MATLAB程序 用P范数讨论AX?b解和A的性态的MATLAB程序 function Acp=zpjwc(A,jA,b,jb,P) Acp = cond (A,P);dA=det(A); X=A\\b; dertaA=A-jA; PndA=norm(dertaA, P);dertab=b-jb;Pndb=norm(dertab, P); if Pndb>0 jX=A\\jb; Pnb= norm(b, P);PnjX = norm(jX,P); dertaX=X-jX; PnjdX= norm(dertaX, P);jxX= PnjdX/PnjX; PnjX = norm(jX,P); PnX = norm(X,P); jxX= PnjdX/PnjX; xX= PnjdX/PnX; Pndb=norm(dertab,P); xAb=Pndb/Pnb;Pnbj=norm(jb,P); xAbj=Pndb/Pnbj; Xgxx= Acp*xAb; end if PndA>0 jX=jA\\b; dertaX=X-jX;PnX = norm(X,P); PnjdX= norm(dertaX, P); PnjX = norm(jX,P); jxX= PnjdX/PnjX;xX= PnjdX/PnX; PnjA=norm(jA,P); PnA=norm(A,P); PndA=norm(dertaA,P);xAbj= PndA/PnjA;xAb= PndA/PnA; Xgxx= Acp*xAb; end if (Acp >50)&(dA<0.1) disp('请注意:AX=b是病态的,A的P条件数Acp,A的行列式值dA,解 X,近似解jX,解的相对误差jxX,解的相对误差估计值Xgxx,b或A的相对误差xAb依次如下:') Acp,dA,X',jX',xX',jxX',Xgxx',xAb',xAbj' 第二章 解线性方程组的直接方法的MATLAB程序 else disp('请注意: AX=b是良态的,A的P条件数Acp,A的行列式值dA, 解X,近似解jX,解的相对误差jxX,解的相对误差估计值Xgxx,b或A的相对误差xAb依次如下:') Acp,dA,X',jX',xX',jxX',Xgxx',xAb',xAbj' end 例2.6.4 根据定理3.10,讨论线性方程组AX?b解的性态,并利用(3.32)式讨论当A的每个元都取4位有效数字时,其解的相对误差.其中A为7阶希尔伯特矩阵, b?1?1342222?T. 解 (1)取?范数和?条件数,线性方程组AX?b的b不变时,取?范数和?条件数,系数矩阵A为7阶希尔伯特矩阵,A中的每个元素取4位有效数字. 用P范数讨论AX?b解和A的性态的MATLAB程序保存名为zpjwc.m的文件,然后在工作窗口输入MATLAB程序 >> jA =[1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 0.0769]; A=hilb(7);b=[1;1/3;4;2;2;2;2]; jb=[1;0.3333;4;2;2;2;2]; Acp=zpjwc(A,jA,b,jb,inf) 运行后输出结果 请注意:AX=b是病态的,A的P 条件数Acp,A的行列式值dA,解X,近似 解jX,解的相对误差jxX,解的相对误差估计值Xgxx,b或A的相对误差xAb依次如下: Acp = dA = 9.8519e+008 4.8358e-025 ans = 1.0e+007 * 0.0020 -0.0697 0.6243 -2.3054 4.0677 -3.4123 1.0943 ans = 1.0e+004 * 0.0349 -0.4807 2.1126 -5.1087 7.6557 -6.3239 2.1112 xX = jxX = Xgxx = 0.9981 530.3248 4.9291e+004 xAb = xAbj = 5.0032e-005 5.0031e-005 由此可见,因为?条件数Cond(A)??985 194 889.719 848 3??1,所以此方程组为病态的AX?b的解 X ?(19565, -697256, 6243300,-2.305380,40676790,-34123320,10942932)T, (jA)X?b的解为 jX ?(349, -48079, 21126,-51087,76557,-63239,21112)T 解的相对误差 ?XX???0.99812, ?X??X??X?49291.27 , ?X?X??X?530.32?, ?AA???5.0032?10?5, 即相对误差放大了约985 194 889.72倍. (2) 如果取2范数和2条件数计算,在MATLAB工作窗口输入程序 37. >> Acp =zpjwc(A,jA,b,jb,2) 运行后输出结果 请注意:AX=b是病态的,A的P 条件数Acp,A的行列式值dA,解X,近似 解jX,解的相对误差jxX,解的相对误差估计值Xgxx,b或A的相对误差xAb依次如下: Acp = dA = 4.7537e+008 4.8358e-025 ans = 1.0e+007 * 0.0020 -0.0697 0.6243 -2.3054 4.0677 -3.4123 1.0943 ans = 1.0e+004 * 0.0349 -0.4807 2.1126 -5.1087 7.6557 -6.3239 2.1112 xX = jxX = Xgxx= 0.9981 511.0640 2.9951e+004 xAb = xAbj = 6.3006e-005 6.3005e-005 因为2条件数Cond(A)2? 475 367 356.59??1,所以此方程组为病态的.解的相对误差 ?X2?A2?X2?A2? 0.9981,?29950.85. ?6.3005?10?5,?511.06,X2A??A2A2X??X2即相对误差放大了约475 367 356.59倍.
正在阅读:
第二章 解线性方程组的直接方法 matlab用法范文12-19
大学语文诗歌部分04-04
中考英语必考作文30篇05-16
纪律作风教育整顿心得体会【优秀5篇】03-26
关于印发《集团公司VIP会员制工作实施方案》的通知09-29
一阶倒立摆项目报告03-03
2005年初级资格考试《初级会计实务》试题及参考答案12-26
老挝首都02-06
初中七年级上册生物复习提纲全册精品03-09
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 方程组
- 线性
- 用法
- 范文
- 直接
- 第二章
- 方法
- matlab
- 浅谈企业并购重组中的税收筹划
- 机务理论深化班《无线电罗盘》课程教学设计-2019年教育文档
- 德育课教学中学生职业道德培养的探讨
- 小学语文参与式教学的价值和教学策略
- 酒店微笑服务演讲稿
- (目录)2017年中国煤炭机械行业研究报告-市场研究分析报告
- 狠刹三股歪风教育活动个人剖析材料
- 草业专业培养质量评价指标体系构建调查问卷的设计 - 图文
- 牛杂中药香料绝密配方有什么?
- 《淝水之战》学案 语文版必修2
- 老旧小区改造施工方案及技术措施 - 图文
- 广西钦州市第二中学2014年高中英语教研组论文 浅谈高中英语阅读课文的欣赏
- 动态可变分区存储管理模拟系统
- LED电子显示屏产品说明书资料 - 图文
- 哈尔滨市中等职业学校名录2018版103家
- 除数是整十数的口算与笔算
- 国资委直属机关第二届十大杰出青年、优秀青年
- 2011年9月全国计算机等级考试二级C语言上机题库
- 基于人机合作的船舶管路布局优化设计研究
- 塑性成形过程中的有限元法