Steffense迭代法和代数Newton法实验报告
- 格式:doc
- 大小:421.03 KB
- 文档页数:7
实
验
报
告
实验班级:xxx
学生姓名:xxx 学生学号:xxx 指导老师:xxx 实验时间: xxx
实验题目 用Steffense 迭代法和代数Newton 法求1)(5--=x x x f 的近似解 1、实验目的:
(1)通过MATLAB 编程实现Steffense 迭代法和代数Newton 法,掌握他们的非线性方程迭代算法,培养编程与上机调试能力; (2)应用所编程序求解1)(5--=x x x f 的近似解;
(3)比较两种方法所得的结果,并与计算器所求结果进行比较,分析误差。
2、基本原理:
Steffense 迭代法: 把Aitken 迭代算法加速技巧与不动点迭代结合,则可得到如下的Steffense 加速收敛迭代格式思想:
k
k k k k k k k k k k x y z x y x x y z x y +---
===+2)(),
(),(21ϕϕ (k=0,1,2,........)
这称为Steffensen 迭代法。它是二阶收敛或平方收敛的,可以让不收敛函数的收敛,即使是收敛的用Steffensen 后可达到二阶收敛.
代数Newton 法: 设*x 是方程0)(=x f 的一个实根,又设0x 为*x 的一个近似值,且)(x f 二次可微,将)(x f 在点0x 处作
Taylor 展开得:
()()()()()ξ''200'002
1
)(f x x x f x x x f x f -+
-+=,其中x x <<ξ0。令*x x =,有()()()()()
()η''20*0'0*0*2
1
0f x x x f x x x f x f -+-+==,其中*0x x <<η。略去上式的
()
0*
x x
-的二次项,可得*x 的一个近似解为()()
0001*'x f x f x x x -
=≈,以1x 代替0x ,重复上述过程可得*x 新的近似解2x ,如此下去,得*x 的近似解序列
()()() ,3,2,1'1=-
=+n x f x f x x n n n n 。在序列{}∞0
n x 收敛时,即*
lim x x n n =∞
→,则获得方程()0=x f 的解。
3、实验步骤:
(1)判断函数1)(5--=x x x f 是否为定义域内的连续函数,它显然在R 内都是连续函数,并且()()0292,011>=<-=f f ,故()()内有解在2,1x f ;
(2)按照如下的思路编写Steffense 迭代法和代数Newton 法的MATLAB 程序代码:
Steffense 迭代法:1)输入max ,,0d x ; 2) while |x(k+1)-x(k)|>d 做 ①()()y z x y ϕϕ==;0;
②if |x(k+1)-x(k)| 0012/x y z x y x x +---=; ④10x x =; endwhile; 3)输出1x . 代数Newton 法:1)输入:ε,,0x a ; 2)计算()():,0'0x f x f ①;,0100f f a f == ②;1,,2,10101;000x f f f x f a f n k k +=+=-=做对 ③;000x f a f n += 3);/1001f f x x -= 4)if ε<-01x x ,then 输出1x ,停止计算; else 10x x =,返回第(2)步。 (3)在MATLAB 命令窗口中输入:()2,005.0,5.1,'5^'x x x Steffensen s --=敲回车,输出结果;()2,5.1,'15^'--=x x en DaishuNewt x 敲回车,输出结果。 4、原代码 (1)function s=steffensen(f,x0,d,max) f=inline(f); x(1)=x0; disp('k x y z'); for k=1:max y(k)=feval(f,x(k)); z(k)=feval(f,y(k)); x(k+1)=x(k)-(y(k)-x(k))^2/(z(k)-2*y(k)+x(k)); if abs(x(k+1)-x(k)) break end disp(sprintf('%d %f %f %f',k,x(k),y(k),z(k))); end s=x(k+1); (2)function x=DaishuNewton(a,x0,max) n=length(a); while 1 f0=a(1); f1=f0; for k=2:n f0=a(k)+f0*x0; f1=f0+f1*x0; end x1=x0-f0/f1; if abs(x1-x0) break; else x0=x1; end end x=x1; 5、数值实现 6、实验结果 7、实验分析 (1)误差分析:由于方程1 x f=0的解为x=1.17,从计算结果来 x - ) (5- =x 看,Newton迭代法比Steffensen迭代法的结果要精确。但实际Steffensen迭代法的收敛速度是最快的,Newton是其次的。造成这一结果的原因可能是范围没选好,在那个范围可能不是收敛的。 (2)算法的优劣分析:收敛的函数用Steffensen后可达到二阶收敛,而用Newton迭代法的收敛效果就不会这么好。 8、实验小结体会: (1)若取得迭代公式不收敛,导致计算结果出现很大的偏差。因此,在选择函数时,必须是收敛的; (2)在选择x的取值范围时,函数在那个范围必须收敛。