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

4.3.3 高斯-塞德尔迭代两种MATLAB程序

4.3.3  高斯-塞德尔迭代两种MATLAB程序

(一) 高斯-塞德尔迭代定义的MATLAB程序1

用高斯-塞德尔迭代定义解线性方程组的MATLAB主程序1

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

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

if dD==0

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

else

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

iD=inv(D-L); B2=iD*U;f2=iD*b;jX=A\b; X=X0;

[n m]=size(A);

for k=1:max1

X1= B2*X+f2; djwcX=norm(X1-X,P);

xdwcX=djwcX/(norm(X,P)+eps);

if (djwcX<wucha)|(xdwcX<wucha)

                 return

              else

                  k,X1',k=k+1;X=X1;

end

end

if (djwcX<wucha)|(xdwcX<wucha)

                 disp('请注意:高斯-塞德尔迭代收敛,此A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下: ') 

else

disp('请注意:高斯-塞德尔迭代的结果没有达到给定的精度,并且迭代次数已经超过最大迭代次数max1,方程组的精确解jX和迭代向量X如下: ')

X=X';jX=jX'

end

end

X=X';D,U,L,jX=jX'

 

例4.3.3  用高斯-塞德尔迭代定义的MATLAB主程序解下列线性方程组,取初始值,要求当时,迭代终止.

(1)(2)

解  (1)首先保存名为gsdddy.m的M文件,然后在MATLAB工作窗口输入程序

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

X0=[0 0 0]';

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

运行后输出结果

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


请注意:高斯-塞德尔迭代收敛,此A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下:

此近似解与例4.2.3中的(1)中②的解=(24.073 8, 24.173 8, 104.797 4)T比较,在相同的条件下, 高斯-塞德尔迭代比雅可比迭代得到的近似解的精度更高.

(2)在MATLAB工作窗口输入程序

>>  A=[3 4 -5 7;2 -8 3 -2;4 51 -13 16;7 -2 21 3];b=[5;2;-1;21];

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

运行后输出结果

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

请注意:高斯-塞德尔迭代的记过没有达到给定的精度,并且迭代次数已经超过最大迭代次数max1,方程组的精确解jX和迭代向量X如下:

jX =   

0.1821   -0.2571    0.7286    1.3036

X =  1.0e+142 *

    0.2883    0.1062    0.3622   -3.1374

 

(二) 高斯-塞德尔迭代公式的MATLAB程序2

用高斯-塞德尔迭代解线性方程组的MATLAB主程序2

function X=gsdd(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

      for j=1:m

        if j==1

X(1)=(b(1)-A(1,2:m)*X0(2:m))/A(1,1)

end

if j==m

X(m)=(b(m)-A(m,1:M1)*X(1:M1)')/A(m,m);

end

for j=2:M1

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

end

end

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',

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