实验报告八 上机综合练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称 数值计算方法
实验项目名称 上机综合练习
实验成绩 指导老师(签名 ) 日期 2019/12/24
一. 实验目的和要求
1. 用Matlab 软件掌握非线性方程、线性方程组的数值解法的综合练习;
2. 通过实例学习用数值计算方法去分析问题、给出算法,并对算法的误差、稳定性等作出
分析。
二. 实验内容和原理
编程题2-1要求写出Matlab 源程序(m 文件),并有适当的注释语句;分析应用题2-2要求将问题的分析过程、Matlab 源程序和运行结果和结果的解释、算法的分析写在实验报告上。
2-1
考虑牛顿最早讨论过的方程3
250x x --=,已知该方程有一实根,两个复根。选取合适的迭代初始值,用牛顿迭代法求出方程的实根,其中迭代终止条件为前后两次迭代值差的绝对值小于310-,写出牛顿迭代法的公式和计算步骤以及结果。
function NewtonMethod(x0,epsi,N)
k=1; %表示迭代次数的初始值
while k<=N %当迭代次数不大于最大迭代次数时
x1=x0-((x0).^3-2*(x0)-5)/(3*(x0).^2-2); %具体函数的迭代公式
if abs(x1-x0) x1 %x1即为所求的解,输出x1 n=k %表示迭代次数 return else k=k+1; %若不满足上述情况,迭代次数加一 end x0=x1; %将x1的值赋给x0,进行下一次迭代 end 'Method failed after N iterations',N %输出错误信息,停止程序 end >> NewtonMethod(0,0.001,50) x1 = 2.0946 n = 18 2-2 已知矩阵 12122211111,222221112A A --⎛⎫⎛⎫ ⎪ ⎪== ⎪ ⎪ ⎪ ⎪--⎝⎭⎝⎭ ,上机编程用得到的结果证明 1)求解以1A 为系数矩阵线性方程组的Jacobi 迭代是收敛的,而Gauss-Seidel 迭代是发散的; Jacobi 迭代: function Jacobimethod(A,b,x0,Nmax,eps) D=diag(diag(A)); %取原矩阵的对角矩阵 U=-triu(A,1); %抽取上三角矩阵,并将矩阵中的元素取其相反数 L=-tril(A,-1); %抽取下三角矩阵,并将矩阵中的元素取其相反数 B=D\(L+U); %D 矩阵的逆乘以(L+U )矩阵,形成迭代矩阵 f=D\b; %D 矩阵的逆乘以b 矩阵 y=B*x0+f; %y 表示下一次的迭代向量 n=1; %n 为迭代次数 while norm(y-x0)>=eps %当两个迭代向量之间的差的二范数大于等于精度时 x0=y; %将后一次的迭代向量赋值给x0 y=B*x0+f; %进行下一次迭代,求下一个迭代向量 n=n+1; %迭代次数加一 if n==Nmax %如果迭代次数达到最大迭代次数,输出'不收敛' '不收敛' return end end y %输出方程组的解y 向量的值 n %输出迭代次数n >> A1=[1 2 -2;1 1 1;2 2 1]; >> b=[1;2;3]; >> x0=zeros(3,1); >> Jacobimethod(A1,b,x0,50,0.001) y = -1 2 1 n = 4 Gauss-Seidel 迭代: function GaussSeidelmethod(A,b,x0,Nmax,eps) D=diag(diag(A)); %取原矩阵的对角矩阵 U=-triu(A,1); %抽取上三角矩阵,并将矩阵中的元素取其相反数 L=-tril(A,-1); %抽取下三角矩阵,并将矩阵中的元素取其相反数 G=(D-L)\U; %(D-L )矩阵的逆乘以U 矩阵,形成迭代矩阵 f=(D-L)\b; %(D-L)矩阵的逆乘以b 矩阵 y=G*x0+f; %y表示下一次的迭代向量 n=1; %n为迭代次数 while norm(y-x0)>=eps %当两个迭代向量之间的差的二范数大于等于精度时x0=y; %将后一次的迭代向量赋值给x0 y=G*x0+f; %进行下一次迭代,求下一个迭代向量 n=n+1; %迭代次数加一 if n==Nmax %如果迭代次数达到最大迭代次数,输出'不收敛' '不收敛' return end end y %输出方程组的解y向量的值 n %输出迭代次数n >> A1=[1 2 -2;1 1 1;2 2 1]; >> b=[1;2;3]; >> x0=zeros(3,1); >> GaussSeidelmethod(A1,b,x0,50,0.001) ans = 不收敛 2)求解以 2 A为系数矩阵线性方程组的Gauss-Seidel迭代收敛,而Jacobi迭代则是发散的。Gauss-Seidel迭代: >> A2=[2 -1 -1;2 2 2;-1 -1 2]; >> b=[4;5;6]; >> x0=zeros(3,1); >> GaussSeidelmethod(A2,b,x0,50,0.001) y = 2.1668 -2.5002 2.8333 n = 20 Jacobi迭代: >> A2=[2 -1 -1;2 2 2;-1 -1 2]; >> b=[4;5;6]; >> x0=zeros(3,1); >> Jacobimethod(A2,b,x0,50,0.001) ans = 不收敛 其中线性方程组右端向量b任意选取,迭代初始向量(0) X为零向量,迭代终止条件为 (1)() 20.001 k k X X +-≤。写出运行结果,得出上述收敛性的结论,并进行分析。 分析:由上述所得结果可知当系数矩阵为A1时,用Jacobi迭代求解方程组是收敛的,而用Gauss-Seidel 迭代是发散的;当系数矩阵为A2时,用Gauss-Seidel迭代求解方程组是收敛的,而用Jacobi迭代是发散的。