matlab数值分析程序--高等数学,数值代数的matlab实现-文字版, matlab电子书, 和matlab 有关的电子书:

4.2.3 雅可比迭代的两种MATLAB程序

4.2.3  雅可比迭代的两种MATLAB程序

 

(一)  雅可比迭代公式的MATLAB程序

用雅可比迭代解线性方程组的MATLAB主程序

function X=jacdd(A,b,X0,P,wucha,max1)

[n m]=size(A);

  for j=1:m

a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j)));

end

for i=1:n

if a(i)>=0

disp('请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛')

return

end

end

if a(i)<0

disp('请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛 ')

end

for k=1:max1

k

  for j=1:m

X(j)=(b(j)-A(j,[1:j-1,j+1:m])*X0([1: j-1,j+1:m]))/A(j,j);

end

X,djwcX=norm(X'-X0,P); xdwcX=djwcX/(norm(X',P)+eps); X0=X';X1=A\b;

if (djwcX<wucha)&(xdwcX<wucha)

   disp('请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下:')

return

end

end

if (djwcX>wucha)&(xdwcX>wucha)

disp('请注意:雅可比迭代次数已经超过最大迭代次数max1 ')

end

a,X=X;jX=X1',

 

例4.2.3  用范数和判别雅可比迭代的MATLAB主程序解例4.2.2 中的方程组,解的精度为0.001,分别取最大迭代次数max1=100,5,初始向量X0=(0 0 0)T,并比较它们的收敛速度.

解  (1)取最大迭代次数max1=100时.

①首先保存名为jacdd.m的M文件,然后在MATLAB工作窗口输入程序

>> A=[10 -1 -2;-1 10 -2;-1 -1 5]; b=[7.2;8.3;4.2];

 X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,100)

运行后输出结果

        请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛

请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下:

a =   

-8    -8    -1

jX =   

1.1000    1.2000    1.3000

X =   

1.0994    1.1994    1.2993

②在MATLAB工作窗口输入程序

>> A=[10 -1 -2;-1 10 -2;-1 -1 0.5]; b=[7.2;8.3;4.2]; X0=[0 0 0]';

X=jacdd(A,b,X0,inf, 0.001,100)

运行后输出结果

请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛

请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下:

a =  

-8.0000   -8.0000    3.5000

jX = 

 24.5000   24.6000  106.6000

X =  

24.0738   24.1738  104.7974

(2)取最大迭代次数max1=5时,

①在MATLAB工作窗口输入程序

>> A=[10 -1 -2;-1 10 -2;-1 -1 5];

b=[7.2;8.3;4.2]; X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,5)

运行后输出结果

请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,雅可比迭代收敛

请注意:雅可比迭代次数已经超过最大迭代次数max1

a =   

-8    -8    -1

jX =   

1.1000    1.2000    1.3000

X =   

1.0951    1.1951    1.2941

②在MATLAB工作窗口输入程序

>> A=[10 -1 -2;-1 10 -2;-1 -1 0.5]; b=[7.2;8.3;4.2];

 X0=[0 0 0]'; X=jacdd(A,b,X0,inf, 0.001,5)

运行后输出结果

请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛

请注意:雅可比迭代次数已经超过最大迭代次数max1

a =  

-8.0000   -8.0000    3.5000

jX =  

24.5000   24.6000  106.6000

X =   

5.5490    5.6490   27.6553

由(1)和(2)可见,如果系数矩阵是严格对角占优的,则雅可比迭代收敛的速度快;如果系数矩阵不是严格对角占优的,则雅可比迭代收敛的速度慢.因此,   的值越小,雅可比迭代收敛的速度越快.

 

(二)利用雅可比迭代定义编写的解线性方程组的MATLAB程序

利用雅可比迭代定义编写解线性方程组(4.5)的MATLAB程序的一般步骤

步骤1  在MATLAB工作窗口输入程序

>> A=[a11 a12 …a1n; a21 a22 …a2n;…; an1 an2 …ann;];

D=diag(A) U=triu(A,1), L=tril(A,-1)

运行后即可输出

步骤2  在MATLAB工作窗口输入程序

>>dD=det(D);

if dD==0

disp('请注意:因为对角矩阵D奇异,所以此方程组无解.')

else

disp('请注意:因为对角矩阵D非奇异,所以此方程组有解.')

iD=inv(D); B1=iD*(L+U);f1=iD*b;

for k=1:max1

X= B1*X0+ f1; X0=X; djwcX=norm(X-X0,P);

 xdwcX=djwcX/(norm(X,P)+eps); X1=A\b;

if (djwcX<wucha)&(xdwcX<wucha)

 disp('请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下: ') 

return

end

end

if (djwcX>wucha)|(xdwcX>wucha)

disp('请注意:雅可比迭代次数已经超过最大迭代次数max1 ')

end

end

a,X=X;jX=X1',

欢迎转载,转载请注明来自一手册:http://yishouce.com/book/3/3040203.html
友情链接It题库(ittiku.com)| 版权归yishouce.com所有| 友链等可联系 admin#yishouce.com|粤ICP备16001685号-1