数值分析上机试题作业Word格式.docx

上传人:b****5 文档编号:19496580 上传时间:2023-01-06 格式:DOCX 页数:19 大小:222.58KB
下载 相关 举报
数值分析上机试题作业Word格式.docx_第1页
第1页 / 共19页
数值分析上机试题作业Word格式.docx_第2页
第2页 / 共19页
数值分析上机试题作业Word格式.docx_第3页
第3页 / 共19页
数值分析上机试题作业Word格式.docx_第4页
第4页 / 共19页
数值分析上机试题作业Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数值分析上机试题作业Word格式.docx

《数值分析上机试题作业Word格式.docx》由会员分享,可在线阅读,更多相关《数值分析上机试题作业Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

数值分析上机试题作业Word格式.docx

1)n=10时迭代次数8

1)n=20时迭代次数9

2.计算X()结果10

1)n=10时X()计算结果10

2)n=20时X()计算结果11

3.对比分析12

4.程序清单:

12

三.实习总结16

实验课题

(一)用雅格比法与高斯-赛德尔迭代法解方程组

一、用雅格比法与高斯-赛德尔迭代法解下列方程组Ax=b,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。

(1)A行分别为A1=[6,2,-1],A2=[1,4,-2],A3=[-3,1,4];

b1=[-3,2,4]T,b2=[100,-200,345]T,

(2)A行分别为A1=[1,0,8,0.8],A2=[0.8,1,0.8],A3=[0.8,0.8,1];

b1=[3,2,1]T,b2=[5,0,-10]T,

(3)A行分别为A1=[1,3],A2=[-7,1];

b=[4,6]T。

1、计算结果

1)雅格比法计算结果:

当A行分别为A1=[6,2,-1],A2=[1,4,-2],A3=[-3,1,4]时:

(1)当b1=[-3,2,4]T时

结果为:

-0.7282

0.8076

0.2548

迭代次数:

9

(2)当b2=[100,-200,345]T时

结果为:

36.3619

-2.0737

114.0417

15

当A行分别为A1=[1,0,8,0.8],A2=[0.8,1,0.8],A3=[0.8,0.8,1]时

(1)当b1=[3,2,1]T时

经程序计算(变换N值),雅克比法发散!

(2)当b2=[5,0,-10]T时

经试算(变换N值),雅克比法发散!

(3)结果为:

经试算(变换N值),雅克比法发散!

2)高斯-赛德尔迭代法计算结果

-0.7254

0.8086

0.2538

6

(2)当b2=[100,-200,345]T时

结果为:

36.3637

-2.0751

114.0415

11

(1)当b1=[3,2,1]T时

5.7854

0.7704

-4.2446

17

(2)当b2=[5,0,-10]T时

32.6912

7.7129

-42.3233

23

(3)当b=[4,6]T时

经试算(变换N值),高斯法发散!

2、结果分析

通过对雅克比法和高斯法的上机编程实习,分析对比实验结果可得:

在方程组Ax=b中,右端项对迭代收敛是有影响的,即当b增大时,迭代次数增加,收敛速度降低。

并且通过对比可知,在相同条件下,高斯-赛德尔迭代法比雅克比迭代法收敛速度快;

方法的选择也很重要,比如第二问,用雅克比迭代法是发散的,而用高斯迭代法则是收敛的。

通过上机验证,我们也得出结论:

理论分析是正确的,即当迭代矩阵的谱半径小于1时,迭代法是收敛的,而当迭代矩阵谱半径大于1的时,迭代法都是发散的。

3、程序清单

利用Matlab编程实现程序清单如下所示:

1)雅格比法:

function[output_args]=Untitled1(input_args)

%UNTITLED1Summaryofthisfunctiongoeshere

%Detailedexplanationgoeshere

clear;

A=[13;

-71];

B=[4;

6];

Err_user=0.01;

N=500;

[m,n]=size(A);

X=zeros(n,1);

k=1;

whilek<

=N;

Xk=X;

fori=1:

n

forj=1:

ifi~=j

AX(j)=A(i,j)*Xk(j);

end

Sum_AX=sum(AX);

AX=0;

X(i)=(B(i)-Sum_AX)/A(i,i);

E=max(abs(Xk-X));

ifE<

Err_user

break;

k=k+1;

end

disp(X);

%显示迭代结果

disp(k);

%显示迭代次数

2)高斯-赛德尔迭代法:

functiongauss(A,B)

N=1000;

=N

AX(j)=A(i,j)*X(j);

Er=max(abs(Xk-X));

ifEr<

=Err_user

实验课题

(二)松弛因子对SOR法收敛速度的影响

二、编写一个用SOR法解方程组

得计算机程序,其中

分别对不同的阶数(例如

)取

,进行迭代,记录近似解

达到

时所用的迭代次数

,观察松弛因子对收敛速度的影响。

并上机验证取

时会有什么结果?

1、迭代次数计算结果

(1)当n=10时,w=1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9所求的迭代次数结果如下:

(2)当n=20时,求其迭代次数方法如上,在此不一一列举,只写出当w=1.1,1.3,1.5,1.7,1.9时的迭代次数,计算结果如下:

2、计算x()结果

(1)当n=10,由于松弛因子较多,在此取松弛因子分别为1.1、1.3、1.5、1.7、1.9的情况下迭代后的x()的值,所求的x()的结果分别如下所示:

w=1.1w=1.3w=1.5

w=1.7w=1.9

(2)当n=20,由于松弛因子较多,在此取松弛因子分别为1.1、1.3、1.5、1.7、1.9的情况下迭代后的x()的值,所求的x()的结果分别如下所示

3、对比分析

通过对松弛法的上机编程实习,分析对比实验结果可得:

当松弛因子w为0或2时,不进行迭代,迭代次数结果直接为0,松弛法迭代不收敛。

当0<

w<

2时,松弛法迭代收敛,且当矩阵阶数一定时,若0<

1,松弛因子越大,收敛越快,称为低松弛;

若1<

2;

松弛因子越小,收敛越快,称为超松弛;

同时,对于相同的松弛因子,阶数越大时,迭代次数越多。

当w<

0或w>

2时,程序计算结果返回迭代次数,求得的x()的值显示为非数字,表明当w<

2时,松弛法迭代是不收敛的。

4、程序清单

  利用VisualBasic.NET编程实现程序清单如下所示:

PublicFunctionSOR(ByVala(,)AsDouble,ByValb()AsDouble,ByValx0()AsDouble,ByValnAsInteger,ByValwAsDouble)AsInteger

'

此为松弛法的函数,对于任何形式的系数矩阵a(n,n)以及常数项矩阵b(n),调用此函数可求得迭代次数

'

a()为系数矩阵,b()为常数项矩阵b,x0()为x()初值,n为矩阵阶数,w为松弛因子,返回值为满足条件时的迭代次数k

Dimi,jAsInteger

DimkAsInteger=0'

k为迭代次数

Dimx(n)AsDouble'

x()

DimXI(n)AsDouble

DimerrAsDouble'

||||行范数,相邻两次迭代结果对应分量差值的绝对值

DimeAsDouble=0.000001'

误差限

DimItem1(n),Item2(n),Item3(n),Item4(n)AsDouble'

分别为教案公式3-15中的四项

Fori=0Ton

x(i)=x0(i)'

x0()为给x()赋初始值

Next

k=1

Whilek<

=10000'

设置最大迭代次数

err=0

XI(i)=x(i)

Item1(i)=(1-w)*x(i)

Item2(i)=w*b(i)/a(i,i)

Forj=0Toi-1

Item3(i)+=w*a(i,j)*x(j)/a(i,i)

Forj=i+1Ton

Item4(i)+=w*a(i,j)*x(j)/a(i,i)

x(i)=Item1(i)+Item2(i)-Item3(i)-Item4(i)

Item1(i)=0:

Item2(i)=0

        Item3(i)=0:

Item4(i)=0'

Item(i)清零

Iferr<

Abs(XI(i)-x(i))Then

err=Abs(XI(i)-x(i))'

相邻两次迭代结果对应分量差值的绝对值

EndIf

eThen

Returnk'

满足条件(误差限),返回k

Else

k+=1'

不满足条件,继续进行迭代

EndWhile

EndFunction

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click

此为主程序,通过输入不同的n,w值,调用松弛法函数,求得迭代次数K

DimnAsInteger'

矩阵阶数

DimwAsDouble'

松弛因子

n=Val(TextBox1.Text)-1'

通过TextBox输入矩阵阶数

w=Val(TextBox2.Text)'

输入TextBox松弛因子

Dima(n,n)AsDouble'

系数矩阵

Dimb(n)AsDouble'

常数项矩阵

Dimx0(n)AsDouble'

矩阵x()的初始值

DimMAsInteger'

所求迭代次数

////给系数矩阵a(n,n)赋值

Fori=1Ton-1

a(0,0)=-4

a(0,1)=1

a(n,n)=-4

a(n,n-1)=1

a(i,i)=-4

a(i,i-1)=1

a(i,i+1)=1

////给常数矩阵b(n)赋值

b(0)=-3

b(n)=-3

b(i)=-2

////给矩阵x0(n)赋值为0

x0(i)=0

////前面完成对SOR函数中5个参数(a(),b(),x0(),n,w)进行赋值

M=SOR(a,b,x0,n,w)'

////////调用SOR函数,求迭代次数k

TextBox3.Text=CStr(M)'

在TextBox显示所求迭代次数k

Console.Read()'

在控制台上输入X()的结果

EndSub

三.实习总结:

1.本次上机实习让我从实践的角度更为深入地掌握了数值分析算法中的雅格比法、高斯—塞德尔迭代法以及解方程组中松弛因子对SOR法收敛速度的影响。

如果说老师上课是教给我们算法,那么这次上机实习则是将老师讲授的这些算法真正变成自己的东西。

在老师讲课的时候,我对于这些算法中涉及的迭代流程并没有一个连贯的理解,总觉得中间有些接不上,通过这次实习中一步步的编码实现,让我把中间断开的部分衔接上了,对这些算法的实现过程有了清晰的思路。

2.除了每题中的核心算法,这次实习还涉及到了数值分析中一些比较通用的算法,例如求迭代矩阵谱半径、高斯—塞德尔迭代法中的求逆阵等,编码实现这些算法不仅能够回顾数值分析中的一些基本内容,还能够通过与核心算法的结合达到知识融会贯通的效果。

3.本次上机实习中除了上述算法思路的掌握,还进一步学习了VisualBasic.Net、Matlab等开发语言,并涉及程序代码效率的部分,力求通过编写出正确又高效的算法。

通过此次实习,我对VisualBasic.NET语言进行了深入的学习,基本掌握了本门语言的编程方法,为以后的科学研究打下了坚实的基础。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1