Steffense迭代法和代数Newton法实验报告

  • 格式:doc
  • 大小:421.03 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验班级: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的取值范围时,函数在那个范围必须收敛。