数值分析教案 - 图文(8)

2020-02-20 22:37

19.2815 求其1-条件数

>>cond_1=cond(H,1) cond_1 = 27.0000 求其无穷大条件数

>>cond_inf=cond(H,inf) cond_inf = 27.0000 还可求其F-条件数

>>cond_f=cond(H,'fro') cond_f = 19.3333

2.2 Matlab解线性方程组常用命令介绍

1. 求秩命令rank

在解线性方程组时,为了判断是否存在解,我们应先判断矩阵的秩.调用格式为:

c=rank(A)

2. 矩阵零空间向量null

当线性方程组Ax?0的秩r(A)?n时,方程组有无穷多个解,使用x=null(A)可得到满足Ax?0的一个解向量, A可为符号矩阵或数值矩阵:

x=null(A) 或 x=null(sym(A)) 3. 方阵的LU分解命令lu

调用格式为: [L,U]=lu(A)

L为准下三角矩阵,U为上三角矩阵,满足A=LU. [L,U,P]=lu(A)

L为下三角矩阵,U为上三角矩阵,P为变换方阵元素位置的换位阵,满足PA=PL. 其它调用格式请用help lu获得更多信息. 4. Cholsky分解chol

L=chol(A)

其中L为一个下三角矩阵,满足A?LLT. A必须为正定矩阵. 5. 条件数cond

c=cond(A,p)

A可为向量或矩阵,P取值为下列之一: 1——向量或矩阵的返回1—条件数. 2——返回向量或矩阵的2—条件数. inf——返回向量或矩阵的?—条件数.

36

'fro'——返回向量或矩阵的F—条件数. 6. 奇异值分解svd

[U,S,V]=svd(A)

将A分解为正交矩阵U,对角矩阵S和正交矩阵V的乘积,使得A=USVT. 7. 线性方程组的符号解linsolve

X=linsolve(A,b)

它等价于X=sym(A)\\sym(b).返回方程组的符号解.

3 线性方程组的迭代解法

3.1 例题解答

例 3.1 用Jacobi迭代法解以下方程:

??10x1?2x2?x3?3??2x1?10x2?x3?15 ???x1?2x2?5x3?10解:

编制迭代计算的M文件程序如下:

%Jacobi迭代法求解例3.1 % A为方程组的增广矩阵 clc;

A=[10 -2 -1 3;-2 10 -1 15;-1 -2 5 10] MAXTIME=50;%最多进行50次迭代 eps=1e-5;%迭代误差 [n,m]=size(A);

x=zeros(n,1);%迭代初值 y=zeros(n,1); k=0;

%进入迭代计算

disp('迭代过程X的值情况如下:') disp('X='); while 1

disp(x'); for i=1:1:n s=0.0; for j=1:1:n if j~=i

s=s+A(i,j)*x(j); end

y(i)=(A(i,n+1)-s)/A(i,i);

37

end end

for i=1:1:n

maxeps=max(0,abs(x(i)-y(i))); %检查是否满足迭代精度要求 end

if maxeps<=eps%小于迭代精度退出迭代 for i=1:1:n

x(i)=y(i);%将结果赋给x end return; end

for i=1:1:n%若不满足迭代精度要求继续进行迭代 x(i)=y(i); y(i)=0.0; end k=k+1;

if k>MAXTIME%超过最大迭代次数退出 error('超过最大迭代次数,退出'); return; end end

运行该程序结果如下: A =

10 -2 -1 3 -2 10 -1 15 -1 -2 5 10 迭代过程X的值情况如下:

X=

0 0 0

0.3000 1.5000 2.0000 0.8000 1.7600 2.6600 0.9180 1.9260 2.8640 0.9716 1.9700 2.9540 0.9894 1.9897 2.9823 0.9962 1.9961 2.9938 0.9986 1.9986 2.9977 0.9995 1.9995 2.9992 0.9998 1.9998 2.9997 0.9999 1.9999 2.9999 1.0000 2.0000 3.0000 1.0000 2.0000 3.0000

38

容易看出迭代计算最后结果为: x?(1,2,3)T

例 3.2 用Gauss-Seidel迭代法计算例3.1并作比较. 解:

编制求解程序Gauss_Seidel.m如下:

%Gauss_Seidel.m

%Gauss_Seidel迭代法求解例3.2 % A为方程组的增广矩阵 clc;

format long;

A=[10 -2 -1 3;-2 10 -1 15;-1 -2 5 10] [n,m]=size(A);

%最多进行50次迭代 Maxtime=50; %控制误差 Eps=10E-5; %初始迭代值 x=zeros(1,n); disp('x=');

%迭代次数小于最大迭代次数,进入迭代 for k=1:Maxtime disp(x); for i=1:n s=0.0; for j=1:n if i~=j

s=s+A(i,j)*x(j);%计算和 end end

x(i)=(A(i,n+1)-s)/A(i,i);%求出此时迭代的值 end

%因为方程的精确解为整数,所以这里将迭代结果向整数靠近的误差作为判断迭代是否停止的条件

if sum((x-floor(x)).^2)

disp('迭代结果:'); X

format short;

39

完成后直接在Matlab命令窗口中输入Gauss_Seidel回车后可得到如下结果: >>Gauss_Seidel A =

10 -2 -1 3 -2 10 -1 15 -1 -2 5 10 x=

0 0 0 0.300000000000000 2.684000000000000 0.880400000000000 2.953872000000000 0.984283200000000 2.993754176000000 0.997824185600000 2.999140939008000 0.999702144844800 2.999882238116864 0.999959128385638 2.999983845472654 0.999994394445028 2.999997784263514 0.999999231113606 2.999999696082350 0.999999894538049 2.999999958313948 0.999999985534564 2.999999994282236 0.999999998015885 2.999999999215737 0.999999999727854 2.999999999892429 0.999999999962672 2.999999999985246 0.999999999994880 2.999999999997976 0.999999999999298 2.999999999999722 0.999999999999904 2.999999999999962 0.999999999999987 2.999999999999995 0.999999999999998

40

1.560000000000000 1.944480000000000 1.992243840000000 1.998940254720000 1.999854522869760 1.999980049488814 1.999997263436271 1.999999624649072 1.999999948515845 1.999999992938308 1.999999999031401 1.999999999867145 1.999999999981778 1.999999999997501 1.999999999999657 1.999999999999953 1.999999999999994 1.999999999999999


数值分析教案 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2019最新冀教版八上第9课《新文化运动》教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: