实验报告八 上机综合练习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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迭代是发散的。

相关文档
最新文档