数值分析上机作业(六)
时间:2025-07-09
时间:2025-07-09
非线性方程组数值解,包含Steffensen加速方法、Newton方法,及相应的MATLAB程序
数值分析上机作业(六)
非线性方程组求根
一、题目要求
请用以下方法求方程
x3+2x2+10x 20=0
在x0=1附近的根。(精确值为x*=1.368808107)要求精度要求达到10 8。(1)xk+1=
20
;
xk2+2xk+10
20 2xk2 xk3
(2)xk+1=;
10
(3)方法(1)的Steffensen加速方法;(4)方法(2)的Steffensen加速方法;(5)Newton方法二、方法设计
(1)不动点迭代法
对于方程f(x)=0,将它改写成
x= (x)
*
*
(1)
若要求x满足f(x*)=0则x*= (x*);反之亦然。称x为 (x)的一个不动点。求f(x)的零点的就等价于求 (x)的不动点,选择一个初始近似值,将它代入式(1)右端,即可求得
x1= (x0)
可以如此反复迭代计算
xk+1= (xk),k=0,1,2,
(x)称为迭代函数。如果对任何x0∈[a,b],由式(1)得到的序列{xk}有极限
limxk=x*
k→∞
则称迭代方程(1)收敛,且x= (x)为 (x)的不动点,故称(1)为不动点迭代法。
上述迭代法是一种逐次逼近法,其基本思想是将隐式方程f(x)=0归结为一组显式的计算公式(1),就是说,迭代过程实质上是一个逐步显式化的过程。
**
非线性方程组数值解,包含Steffensen加速方法、Newton方法,及相应的MATLAB程序
(2)Steffensen加速方法
Seteffensen加速方法过程如下:
yk= (xk),zk= (yk)
(yk xk)2
xk+1=xk z 2y+x
kkk
k=0,1,
(2)
它可以理解为:要求x= (x)的根x*,令ε(x)= (x) x,ε(x)= (x) x=0。已知
***
x*的近似值xk及yk,其误差分别为
ε(xk)= (xk) xkε(yk)= (yk) yk
把误差“外推到零”,即过(xk,ε(xk)),(yk,ε(yk))两点作线性插值函数,它与x轴的交点即(2)式中的xk+1。
实际上(2)式可以写成另一种不动点迭代形式
xk+1=ψ(xk)
其中
[ (x) x]2
ψ(x)=x
( (x)) 2 (x)+x
(3)Newton方法
Newton方法实质上是一种线性化方法。其基本思想是将非线性方程f(x)=0逐步归结为某种线性方法来求解。
设已知方程f(x)=0有近似根xk(假定f(xk)≠0),将函数f(x)在点xk展开,有
f(x)≈f(xk)+f'(xk)(x xk)
于是f(x)=0可以近似表示为
f(xk)+f'(xk)(x xk)=0
这是个线性方程。记其根为xk+1,则
xk+1=xk
这就是Newton方法。
f(xk)
,k=0,1,2, f'(xk)
非线性方程组数值解,包含Steffensen加速方法、Newton方法,及相应的MATLAB程序
三、方案实现(1)xk+1=
20
xk2+2xk+10
这里已给出迭代公式,可通过如下程序实现其迭代过程
x(1)=1;
X0=1.368808107;tol=1e-8;max1=1000;formatlongfori=1:max1
x(i+1)=20/(x(i)^2+2*x(i)+10);err=abs(X0-x(i+1));iferr<tol
breakendend
count=i+1X=x(count)x'
运行这段程序,将显示出迭代次数、最终计算结果、以及详细的迭代过程。将这段程序保存为interation_1.m。
20 2xk2 xk3
(2)xk+1=
10
这里已给出迭代公式,可通过如下程序实现其迭代过程
x(1)=1;
X0=1.368808107;tol=1e-8;max1=1000;formatlongfori=1:max1
x(i+1)=(20-2*x(i)^2-x(i)^3)/10;err=abs(X0-x(i+1));iferr<tol
breakendend
count=i+1X=x(count)x'
运行这段程序,将显示出迭代次数、最终计算结果、以及详细的迭代过程。将这段程序保存为interation_2.m。
非线性方程组数值解,包含Steffensen加速方法、Newton方法,及相应的MATLAB程序
(3)方法(1)的Steffensen加速方法
在前面已对Steffensen加速方法进行了详细的讨论,且已给出了迭代公式,这里可通过如下程序来实现其迭代过程:
x(1)=1;
X0=1.368808107;tol=1e-8;max1=1000;formatlongfori=1:max1
y(i)=20/(x(i)^2+2*x(i)+10);z(i)=20/(y(i)^2+2*y(i)+10);
x(i+1)=x(i)-(y(i)-x(i))^2/(z(i)-2*y(i)+x(i));err=abs(X0-x(i+1));iferr<tol
breakendend
count=i+1X=x(count)x'运行这段程序,将显示出迭代次数、最终计算结果、以及详细的迭代过程。将这段程序保存为interation_steffensen_1.m。
(4)方法(2)的Steffensen加速方法
在前面已对Steffensen加速方法进行了详细的讨论,且已给出了迭代公式,这里可通过如下程序来实现其迭代过程:
x(1)=1;
X0=1.368808107;tol=1e-8;max1=1000;formatlongfori=1:max1
y(i)=(20-2*x(i)^2-x(i)^3)/10;z(i)=(20-2*y(i)^2-y(i)^3)/10;
x(i+1)=x(i)-(y(i)-x(i))^2/(z(i)-2*y(i)+x(i));err=abs(X0-x(i+1));iferr<tol
breakendend
count=i+1X=x(count)x'运行这段程序,将显示出迭代次数、最终计算结果、以及详细的迭代过程。将这段程序保存
非线性方程组数值解,包含Steffensen加速方法、Newton方法,及相应的MATLAB程序
为interation_steffensen_2.m。
(5)Newton方法
前面已对Newton方法进行了详细的讨论。这里直接编程如下,以实现迭代计算:
x(1)=1;
X0=1.368808107;tol=1e-8;max1=1000;fori=1:max1
x(i+1)=x(i)-(x(i)^3+2*x(i)^2+10*x(i)-20)/(3*x(i)^2+4*x(i)+10);err=abs(x(i+1)-X0);iferr<tol
breakendend
count=i+1X=x(count)x'
在使用Newton方法时,需要用到f(x)的导数。f'(x)=3x+4x+10。
运行这段程序,将显示出迭代次数、最终计算结果、以及详细的迭代过程。将这段程序保存为newton.m。
四、实验结果、分析与讨论
(1)第一种迭代公式及其Steffensen加速
采用第一种方法,可知迭代23次后得到满足要求的结果。 …… 此处隐藏:2247字,全部文档内容请下载后查看。喜欢就下载吧 ……