2015级研究生 《计算方法》作业
2015年11月
上机作业1
数值试验3
3-1试验目的:考察不动点迭代法的局部收敛性
试验内容: 2x?ex?3?0 至少采用3种迭代法,迭代100次,考察收敛性,改变初值符号,再做迭代。分析收敛与发散的原因。
(1)迭代原理:若实数p满足p?g?p?,p称为函数g?x?的一个不动点,迭代
pn?1?g?pn?,n?0,1,...称为不动点迭代,g?x?称为迭代函数。由不动点方程建立迭代法pn?1?g?pn?,n?0,1,...,其中p0称为初值,需要预先给定。 方程2x?ex?3?0分别对应下列不同形式的不动点方程:
xxx?g(x)??x?e?3 x?g(x)?(e?3)/221??
2x?ex?3x?g3(x)?x? ?2?ex取p0??0.5,Tol?10?5,N?100,按pn?1?gi?pn?,i?1,2,3迭代,并分析收敛性。 (2)不动点迭代法代码 编制函数文件
Iteratepro.m
function y=iteratepro(x) x1=g(x); n=1;
while (norm(x1-x) >=1.0e-5) &(n<=100) x=x1;
x1=g(x);n=n+1; end x1 n
编制函数文件 不动点方程(1) function y=g(x) y=(exp(x)-3)/2;
不动点方程(2) function y=g(x) y=exp(x)-x-3; 不动点方程(3)
function y=g(x)
y=x-(2*x-exp(x)+3)/(2-exp(x)); (3)迭代结果汇总表: 近似解x* 格式(1) 格式(2) 格式(3) (4)结果分析:
(1)三种迭代格式均收敛,近似解为x*??1.3734。 (2)当设定的初值接近真实解,所用的迭代次数较小。
(3)不同迭代格式,效果不一样,迭代格式(3)实质是newton迭代法,其迭代效果明显快于其他格式。
3-2试验目的:考察Newton法求根的收敛速度
试验内容:应用Newton法求解试验3-1中的方程,并与实验3-1中收敛的迭代法进行比较,考察收敛速度。精确到0.00001。 (1)Newton迭代法原理:
在求解非线性方程f(x)?0时,它的困难在于f(x)是非线性函数,为克服这一困难,考虑它的线性展开。设当前点为xk,在xk处的Taylor展开式为
初值x=-0.5 -1.1967 -1.3734 -1.3734 迭代次数n 7 42 4 初值x=0.5 -1.3734 -1.3734 -1.3734 迭代次数n 8 41 5 f(x)?f(xk)?f'(xk)(x?xk) 令f(x)?0,解其方程得到
xk?1?xk?f(xk),(k?0,1,?) 'f(xk)
(2)程序代码 编制函数文件
newton.m
function y=newton(x0) x1=x0-fc(x0)/df(x0); n=1;
while (abs(x1-x0)>=1.0e-5)&(n<=100) x0=x1;
x1=x0-fc(x0)/df(x0);n=n+1; end x1 n
对于试验3-1编制函数文件 fc.m
function y=fc(x) y=2*x-exp(x)+3; df.m
function y=df(x) y=2-exp(x); (3)运行结果 结果汇总表: 近似解x* 格式(1) 格式(2) Newton迭代
结果分析:
(1)三者结果均收敛,解x*??1.3734。
(2)Newton迭代法迭代次数最小,收敛速度明显优于格式(1),(2)。
初值x=-0.5 -1.1967 -1.3734 -1.3734 迭代次数n 7 42 4 初值x=0.5 -1.3734 -1.3734 -1.3734 迭代次数n 8 41 5 3-3 试验目的:掌握求重根的方法
试验内容:分别用Newton法和不动点迭代法求解方程x?sinx?0,考察收敛速度,再用求重根的两种方法求方程的根,精确到0.00001。 (1)实验原理同3-1,3-2; (2)程序代码 Newton迭代法程序 函数文件 fc.m
function y=fc(x) y=x-sin(x); df.m
function y=df(x) y=1-cos(x); 程序代码
newton.m
function y=newton(x0) x1=x0-fc(x0)/df(x0); n=1;
while abs(x1-x0)>=1.0e-5 x0=x1;
x1=x0-fc(x0)/df(x0);n=n+1; end
不动点迭代法 编制函数文件
Iteratepro.m
function y=iteratepro(x) x1=g(x); n=1;
while norm(x1-x)>=1.0e-6 x=x1;
x1=g(x);n=n+1; end 函数文件 g.m
function y=g(x) y=sin(x); 运行结果

