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

4.4.3 超松弛迭代法的MATLAB程序

4.4.3  超松弛迭代法的MATLAB程序

用超松弛迭代法解线性方程组的MATLAB主程序

function X=cscdd (A,b,X,om,wucha,max1)

D=diag(diag(A));U=-triu(A,1);

L=-tril(A,-1); jX=A\b;[n m]=size(A);

  iD=inv(D-om*L); B2=iD*(om*U+(1-om)*D);

H=eig(B2);mH=norm(H,inf);

for k=1:max1

iD=inv(D-om*L); B2=iD*(om*U+(1-om)*D);

f2= om*iD*b; X1= B2*X+f2;

X=X1; djwcX=norm(X1-jX,inf); xdwcX=djwcX/(norm(X,inf)+eps);

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

      disp('谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX,迭代次数i如下: ') 

      mH,D,U,L,jX=jX', i=k-1,

     return

    if i> max1

disp('迭代次数已经超过最大迭代次数max1,谱半径mH,方程组的精确解jX,迭代次数i如下: ')

mH,D,U,L,jX=jX', i=k-1,

end

end

end

if mH>=1

disp('请注意:因为谱半径不小于1,所以超松弛迭代序列发散.')

disp('谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX,迭代次数i和迭代序列X如下:')

i=k-1,mH,D,U,L,jX,

else

      disp('因为谱半径小于1,所以超松弛迭代序列收敛,近似解X如下: ')

end

function X=cscdd1 (A,b,X,om,wucha,max1)

D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1); jX=A\b;[n m]=size(A);

  iD=inv(D-om*L); B2=iD*(om*U+(1-om)*D);

H=eig(B2);mH=norm(H,inf);

for k=1:max1

iD=inv(D-om*L); B2=iD*(om*U+(1-om)*D);

f2= om*iD*b; X1= B2*X+f2; X=X1; djwcX=norm(X1-jX,inf);

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

end

if mH>=1

disp('请注意:因为谱半径不小于1,所以超松弛迭代序列发散.谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下:')

else

disp('请注意:因为谱半径小于1,所以超松弛迭代序列收敛.')

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

        disp('谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下: ') 

       mH,D,U,L,jX=jX',

else

disp('迭代次数已经超过最大迭代次数max1,谱半径mH,方程组的精确解jX和迭代向量X如下: ')

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

return

end

end

 

例4.4.3  用超松弛迭代法(取=1.15和5)解例4.4.1中的线性方程组.

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

>> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7];b=[4;1;6;-3];

X=[0 0 0 0]';X=cscdd (A,b,X,1.15,0.001,100),

运行后输出结果

谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX,迭代次数i如下:

mH =

    0.1596

D =

     5     0     0     0

     0     8     0     0

     0     0    -4     0

     0     0     0     7

U =

     0    -1     1     2

     0     0    -1    -3

     0     0     0     1

     0     0     0     0

L =

     0     0     0     0

    -2     0     0     0

    -1     2     0     0

     1    -3    -2     0

jX =

    0.4491    0.2096   -1.4850   -0.0299

i =

     3

因为谱半径小于1,所以超松弛迭代序列收敛,近似解X如下:

X =

    0.4484

    0.2100

   -1.4858

   -0.0303

(2)当取=5时,保存名为cscdd.m的M文件,然后在MATLAB工作窗口输入程序

>> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7];b=[4;1;6;-3];

X=[0 0 0 0]';X=cscdd (A,b,X,5,0.001,100),

运行后输出结果如下:

请注意:因为谱半径不小于1,所以超松弛迭代序列发散.

谱半径mH,A的分解矩阵D,U,L和方程组的精确解jX,迭代次数i和迭代序列X如下:

i =             mH =

    99               14.1082

D =

     5     0     0     0

     0     8     0     0

     0     0    -4     0

     0     0     0     7

U =

     0    -1     1     2

     0     0    -1    -3

     0     0     0     1

     0     0     0     0

L =

     0     0     0     0

    -2     0     0     0

    -1     2     0     0

     1    -3    -2     0

jX =                 X =1.0e+114 *

    0.4491            -0.3122

    0.2096            1.0497

   -1.4850            -3.7174

   -0.0299             3.9615

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