首页 > 其他分享 >数值分析实验4:线性方程组的迭代法解法

数值分析实验4:线性方程组的迭代法解法

时间:2022-11-10 23:56:22浏览次数:39  
标签:迭代 线性方程组 nargin rate 0.2500 迭代法 x0 解法

线性方程组的迭代法解法

(一)实验目的与要求

1.通过编程计算实践,理解体会古典迭代法的思想。

2.通过编程计算实践,熟练各种算法的计算流程。

3.通过各种方法对同一题目的求解,体会各种方法的精度差异。

4.通过编程计算实践,深入领会和掌握迭代算法的改进思路,提高对算法

改进技巧的本质的认识以及算法流程的实际控制技术。

(二)实验内容或原理

 

 

 

1.分别用Jacobi/Gauss-Seidel/SOR迭代法解上述线性方程组。

2.画出上述三种简单迭代算法算法流程图。

3.分析各种方法的差异率:分析收敛速度和总计算量之间的关系。


(三)实验主要仪器设备及材料

PC微机,Mcrosoft Windows 操作系统,Microsoft Office Powerpoint 2003。C语言等计算机编程语言。

(四)实验报告要求

填写实验报告,包括姓名、学号、专业班级和实验名称等项。完成以下各项具体要求后,交给老师。


Jacobi迭代法

l  程序:

 

function x=jacobi(A,b,x0,ep,N)

n=length(b);

if nargin>5,Warning('传递的参数个数错误');end

if nargin<5,N=500;end

if nargin<4,ep=1e-6;end

if nargin<3,x0=zeros(n,1);end

 

x=zeros(n,1);k=0;

 

while k<N

    for i=1:n

        x(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i);

    end

    if norm(x-x0,inf)<ep,break;end

    x0=x;k=k+1;

end

if k==N,Warning('已达到迭代次数上限');end

 

D=diag(diag(A))      %对角矩阵

L=-tril(A,-1)             %负下三角矩阵

U=-triu(A,1)            %负上三角矩阵

B1=inv(D)*(L+U)       %迭代矩阵B

rate_1=-log(abs(eigs(B1,1)));   %渐进收敛速度

disp(['迭代次数k=',num2str(k)])

disp(['收敛速度rate=',num2str(rate_1)])

 

l  运行结果:

B1 =

 

         0    0.2500         0         0

    0.2500         0    0.2500         0

         0    0.2500         0    0.2500

         0         0    0.2500         0

 

迭代次数k=17

收敛速度rate=0.90508

 

x =

 

    1.3264

   -0.5345

    2.0355

    1.3464

 

Gauss-Seidel迭代法

l  程序:

 

function x=nags(A,b,x0,e,N)

n=length(b);

if nargin<5,N=500;end

if nargin<4,e=1e-4;end

if nargin<3,x0=zeros(n,1);end

x=x0;x0=x+2*e;

k=0;Al=tril(A);iAl=inv(Al);     %%Al为A的下三角矩阵

while norm(x0-x,inf)>e&k<N,

    k=k+1;

    x0=x;x=-iAl*(A-Al)*x0+iAl*b;

    x'

end

if k==N,Warning('已达迭代次数上限');end

D=diag(diag(A))

L=-tril(A,-1)

U=-triu(A,1)

B2=inv(D-L)*U

rate_2=-log(abs(eigs(B2,1)))   %渐进收敛速度

disp(['迭代次数k=',num2str(k)])

disp(['收敛速度rate=',num2str(rate_2)])

l  运行结果:

 

B2 =

 

         0    0.2500         0         0

         0    0.0625    0.2500         0

         0    0.0156    0.0625    0.2500

         0    0.0039    0.0156    0.0625

 

 

rate_2 =

 

    1.8102

 

迭代次数k=8

收敛速度rate=1.8102

 

x =

 

    1.3264

   -0.5345

    2.0355

    1.3464

 

SOR迭代法

l  程序:

 

function x=nasor(A,b,omega,x0,e,N)

n=length(b);

if nargin<6,N=500;end

if nargin<5,e=1e-4;end

if nargin<4,x0=zeros(n,1);end

if nargin<3,omega=1.05;end

x=x0;x0=x+2*e;

k=0;L=tril(A,-1);U=triu(A,1);

while norm(x0-x,inf)>e&k<N,

    k=k+1,x0=x;

    for i=1:n

        x1(i)=(b(i)-L(i,1:i-1)*x(1:i-1,1)-U(i,i+1:n)*x0(i+1:n,1))/A(i,i);

        x(i)=(1-omega)*x0(i)+omega*x1(i);

    end

    x'

end

if k==N,Warning('已达迭代次数上限');end

D=diag(diag(A))

L=-tril(A,-1)

U=-triu(A,1)

B3=inv((D-omega*L))*((1-omega)*D+omega*U)

rate_3=-log(abs(eigs(B3,1)))   %渐进收敛速度

disp(['迭代次数k=',num2str(k)])

disp(['收敛速度rate=',num2str(rate_3)])

l  运行结果:

 

B3 =

 

   -0.0500    0.2625         0         0

   -0.0131    0.0189    0.2625         0

   -0.0034    0.0050    0.0189    0.2625

   -0.0009    0.0013    0.0050    0.0189

 

 

rate_3 =

 

    2.9957

 

迭代次数k=6

收敛速度rate=2.9957

 

x =

 

    1.3264

   -0.5345

    2.0355

1.3464

收敛速度

由运行结果可知,jacobi迭代法的渐进收敛速度最快。

标签:迭代,线性方程组,nargin,rate,0.2500,迭代法,x0,解法
From: https://www.cnblogs.com/zhangfurong/p/16879261.html

相关文章