数值分析上机试题作业.doc_第1页
数值分析上机试题作业.doc_第2页
数值分析上机试题作业.doc_第3页
数值分析上机试题作业.doc_第4页
数值分析上机试题作业.doc_第5页
免费预览已结束,剩余13页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值分析上机实习报告姓名: * 学号: * 专业: 电话: 序 言1. 所用程序语言:本次数值分析上机实习采用Visual Basic.Net和Matlab作为程序设计语言,利用Visual Basic.Net可视化的编程实现方法,采用对话框形式进行设计计算程序界面,并将结果用表格或文档的格式给出。2. 程序概述:(1) 第一题中在Matlab中用雅格比法与高斯赛德尔迭代法解方程组,并研究二者的收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛影响度。(2) 第二题使用Visual Basic.NET程序设计语言完成了“松弛因子对SOR法收敛速度的影响” ,通过在可视化界面下输入不同的n和w值,点击按钮直接可看到迭代次数及计算结果,观察了不同的松弛因子w对收敛速度的影响。目 录一雅格比法与高斯塞德尔迭代法解方程组31. 计算结果31)雅格比法计算结果32)高斯塞德尔迭代法计算结果42. 结果分析53. 程序清单51)雅格比法52)高斯塞德尔迭代法6二松弛因子对SOR法收敛速度的影响81. 迭代次数计算结果81)n=10时迭代次数81)n=20时迭代次数92. 计算X()结果101)n=10时X()计算结果102)n=20时X()计算结果113. 对比分析124. 程序清单:12三实习总结16实验课题(一)用雅格比法与高斯赛德尔迭代法解方程组一、用雅格比法与高斯赛德尔迭代法解下列方程组Ax=b,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。(1)A行分别为A1=6,2,-1,A2=1,4,-2,A3=-3,1,4;b1=-3,2,4T, b2=100,-200,345T,(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,-10T,(3)A行分别为A1=1,3,A2=-7,1;b=4,6T。1、计算结果1)雅格比法计算结果:当A行分别为A1=6,2,-1,A2=1,4,-2,A3=-3,1,4时:(1) 当b1=-3,2,4T 时结果为: -0.7282 0.8076 0.2548迭代次数: 9(2)当b2=100,-200,345T 时 结果为: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,-10T时经试算(变换N值),雅克比法发散! (3) 结果为: 经试算(变换N值),雅克比法发散!2)高斯赛德尔迭代法计算结果当A行分别为A1=6,2,-1,A2=1,4,-2,A3=-3,1,4时:(1) 当b1=-3,2,4T 时结果为: -0.7254 0.8086 0.2538迭代次数: 6(2) 当b2=100,-200,345T 时 结果为:36.3637 -2.0751 114.0415迭代次数: 11当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时 结果为: 5.7854 0.7704 -4.2446迭代次数: 17(2) 当b2=5,0,-10T时 结果为: 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 )%UNTITLED1 Summary of this function goes here% Detailed explanation goes hereclear;A=1 3;-7 1;B=4;6;Err_user=0.01;N=500;m,n=size(A);X=zeros(n,1);k=1;while k=N; Xk=X; for i=1:n for j=1:n if i=j AX(j)=A(i,j)*Xk(j); end end Sum_AX=sum(AX); AX=0; X(i)=(B(i)-Sum_AX)/A(i,i); end E=max(abs(Xk-X); if EErr_user break; end k=k+1;enddisp(X); %显示迭代结果disp(k); %显示迭代次数 2)高斯赛德尔迭代法:function gauss( A,B )%UNTITLED1 Summary of this function goes here% Detailed explanation goes hereclear;A=1 3;-7 1;B=4;6;Err_user=0.01;N=1000;m,n=size(A);X=zeros(n,1);k=1;while k=N Xk=X; for i=1:n for j=1:n if i=j AX(j)=A(i,j)*X(j); end end Sum_AX=sum(AX); AX=0; X(i)=(B(i)-Sum_AX)/A(i,i); end Er=max(abs(Xk-X); if Er=Err_user break; end k=k+1;enddisp(X); %显示迭代结果disp(k); %显示迭代次数实验课题(二) 松弛因子对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.1 w=1.3 w=1.5 w=1.7 w=1.9(2)当n=20,由于松弛因子较多,在此取松弛因子分别为1.1、1.3、1.5、1.7、1.9的情况下迭代后的x()的值,所求的x()的结果分别如下所示 w=1.1 w=1.3 w=1.5 w=1.7 w=1.93、 对比分析通过对松弛法的上机编程实习,分析对比实验结果可得:当松弛因子w为0或2时,不进行迭代,迭代次数结果直接为0,松弛法迭代不收敛。当0w2时,松弛法迭代收敛,且当矩阵阶数一定时,若0w1,松弛因子越大,收敛越快,称为低松弛;若1w2;松弛因子越小,收敛越快,称为超松弛;同时,对于相同的松弛因子,阶数越大时,迭代次数越多。当w2时,程序计算结果返回迭代次数,求得的x()的值显示为非数字,表明当w2时,松弛法迭代是不收敛的。4、 程序清单利用Visual Basic.NET编程实现程序清单如下所示:Public Function SOR(ByVal a(,) As Double, ByVal b() As Double, ByVal x0() As Double, ByVal n As Integer, ByVal w As Double) As Integer 此为松弛法的函数,对于任何形式的系数矩阵a(n,n)以及常数项矩阵b(n),调用此函数可求得迭代次数 a()为系数矩阵,b()为常数项矩阵b,x0()为x()初值,n为矩阵阶数,w为松弛因子,返回值为满足条件时的迭代次数k Dim i, j As Integer Dim k As Integer = 0 k为迭代次数 Dim x(n) As Double x() Dim XI(n) As Double Dim err As Double | |行范数,相邻两次迭代结果对应分量差值的绝对值 Dim e As Double = 0.000001误差限 Dim Item1(n), Item2(n), Item3(n), Item4(n) As Double 分别为教案公式3-15中的四项 For i = 0 To n x(i) = x0(i) x0()为给x()赋初始值 Next k = 1 While k = 10000设置最大迭代次数 err = 0 For i = 0 To n XI(i) = x(i) Item1(i) = (1 - w) * x(i) Item2(i) = w * b(i) / a(i, i) For j = 0 To i - 1 Item3(i) += w * a(i, j) * x(j) / a(i, i) Next For j = i + 1 To n Item4(i) += w * a(i, j) * x(j) / a(i, i) Next x(i) = Item1(i) + Item2(i) - Item3(i) - Item4(i) Item1(i) = 0 : Item2(i) = 0 Item3(i) = 0 : Item4(i) = 0 Item(i)清零 If err Abs(XI(i) - x(i) Then err = Abs(XI(i) - x(i)相邻两次迭代结果对应分量差值的绝对值 End If Next If err e Then Return k 满足条件(误差限),返回k Else k += 1不满足条件,继续进行迭代 End If End While End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 此为主程序,通过输入不同的n,w值,调用松弛法函数,求得迭代次数K Dim n As Integer 矩阵阶数 Dim w As Double 松弛因子 n = Val(TextBox1.Text) - 1 通过TextBox输入矩阵阶数 w = Val(TextBox2.Text) 输入TextBox松弛因子 Dim a(n, n) As Double 系数矩阵 Dim b(n) As Double 常数项矩阵 Dim x0(n) As Double 矩阵x()的初始值 Dim M As Integer 所求迭代次数 Dim i, j As Integer /给系数矩阵a(n,n)赋值 For i = 1 To n - 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 Next /给常数矩阵b(n)赋值 For i = 1 To n - 1 b(0) = -3 b(n) = -3 b(i) = -2 Next /给矩阵x0(n)赋值为0 For i = 0 To n x0(i) = 0 Next /前面完成对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()的结果End Sub三实习总结:1. 本次上机实习让我从实践的角度更为深入地掌握了数值分析算法中的雅格比法、高斯塞德尔迭代法以及解方程组中松弛因子对SOR法收敛速度的影响。如果说老师上课是教给我们算法,那么这次上机实习则是将老师讲授的这些算法真正变成自己的东西。在老师讲课的时候,我对于这些算法中涉及的迭代流程并没有一个连贯的理解,总觉得中间有些接不上,通过这次实习中一步步的编码实现,让我把中间断开的部分衔接上了,对这些算法的实现过程有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论