matlab实现Newton法割线法抛物线法.docx

上传人:b****5 文档编号:8280039 上传时间:2023-01-30 格式:DOCX 页数:12 大小:80.94KB
下载 相关 举报
matlab实现Newton法割线法抛物线法.docx_第1页
第1页 / 共12页
matlab实现Newton法割线法抛物线法.docx_第2页
第2页 / 共12页
matlab实现Newton法割线法抛物线法.docx_第3页
第3页 / 共12页
matlab实现Newton法割线法抛物线法.docx_第4页
第4页 / 共12页
matlab实现Newton法割线法抛物线法.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

matlab实现Newton法割线法抛物线法.docx

《matlab实现Newton法割线法抛物线法.docx》由会员分享,可在线阅读,更多相关《matlab实现Newton法割线法抛物线法.docx(12页珍藏版)》请在冰豆网上搜索。

matlab实现Newton法割线法抛物线法.docx

matlab实现Newton法割线法抛物线法

matlab实现Newton法-割线法-抛物线法

 

(一)实验目的:

熟悉和掌握Newton法,割线法,抛物线法的方法思路,并能够在matlab上编程实现

(二)问题描述:

问题一.方程求根

(1).给定一个三次方程,分别用Newton法,割线法,抛物线法求解.

方程的构造方法:

(a)根:

方程的根为学号的后三位乘以倒数第二位加1再除以1000.

假设你的学号为B06060141,则根为141*(4+1)/1000=0.564

(b)方程:

以你的学号的后三位数分别作为方程的三次项,二次项,一次项的系数,根据所给的根以及三个系数确定常数项.

例如:

你的学号是B06060141,则你的方程是x3+4x2+x+a0=0的形式.

方程的根为0.564,因此有

0.5643+4*0.5642+0.564+a0=0,于是a0=-2.015790144

你的方程为x3+4x2+x-2.015790144=0.

(2)假设方程是sinx+4x2+x+a0=0的形式(三个系数分别是学号中的数字),重新解决类似的问题

(3)构造一个五次方程完成上面的工作.

四次方程的构造:

将三次多项式再乘以(x-p*)2得到对应的五次多项式(p*为已经确定的方程的根,显然,得到的五次方程有重根).

(4)将

(2)中的方程同样乘以(x-p*)得到一个新的方程来求解

(三)算法介绍

在本文题中,我们用到了newton法,割线法,抛物线法。

1.Newton法迭代格式为:

当初值

与真解足够靠近,newton迭代法收敛,对于单根,newton收敛速度很快,对于重根,收敛较慢。

2.割线法:

为了回避导数值

的计算,使用

上的差商代替

,得到割线法迭代公式:

割线法的收敛阶虽然低于newton法,但迭代以此只需计算一次

函数值,不需计算其导数,所以效率高,实际问题中经常应用。

3.抛物线法:

可以通过三点做一条抛物线,产生迭代序列的方法称为抛物线法。

其迭代公式为:

其中

收敛速度比割线法更接近于newton法。

对于本问题的解决就以上述理论为依据。

终止准则为:

抛物线法求解算法

建立paowuxian.m源程序,源程序代码为:

functionx=pawuxian(f,x0,x1,x2,e)

ifnargin<4,e=1e-4;end

x=x2;y=x1;z=x0;

whileabs(x-y)>e

h1=y-z;

h2=x-y;

c1=(feval(f,y)-feval(f,z))/h1;

c2=(feval(f,x)-feval(f,y))/h2;

d=(c1-c2)/(h2+h1);

w=c2+h2*d;

xi=x-(2*feval(f,x))/(w+(w/abs(w))*sqrt(w^2-4*feval(f,x)*d));

z=y;

y=x;

x=xi;

end

在matlab软件中执行下列语句

>>fun=inline('x^3+2*x-0.205061208');

>>paowuxian(fun,0,0.5,1,1e-6),formatshort

并得到最终结果

n=

7

ans=

0.1020

第一题

(2)

根据要求,待求解的方程应为:

仍然利用

(1)中方法求解这一问题,并利用图解法找到初值,通过观察图像,将newton法初值设为:

0.2,割线法初值设为:

0,0.2。

抛物线法初值设为:

0,0.1,0.2。

图像见下图:

Newton法求解:

在matlab软件中执行下列语句

>>clear

>>fun=inline('sin(x)+2*x-0.205061208');

>>dfun=inline('cos(x)+2');formatlong;

>>newton1(fun,dfun,0.2,1e-6),formatshort

并得到最终结果

n=

3

ans=

0.06837148815510

割线法求解:

在matlab软件中执行下列语句

>>clear

>>fun=inline('sin(x)+2*x-0.205061208');

>>gexianfa(fun,0,0.2,1e-6),formatshort

并得到最终结果截图

n=

3

ans=

0.0684

抛物线法求解

在matlab软件中执行下列语句并得到最终结果截图

>>clear

>>fun=inline('sin(x)+2*x-0.205061208');

>>paowuxian(fun,0,0.1,0.2,1e-6),formatshort

并得到最终结果

n=

3

ans=

0.0684

问题一(3)

按照题目要求对五次方程进行构造为:

仍然利用

(1)中方法求解这一问题,并利用图解法找到初值,通过观察图像,将newton法初值设为:

在此处我们选取了两组初值为0以及0.5,割线法初值设为:

-1,1。

抛物线法初值设为:

两组初值为-1,0,1以及0,0.5,1。

Newton法:

在matlab软件中执行下列语句

>>clear

>>fun=inline('(x^3+2*x-0.205061208)*(x-0.102)^2');

>>dfun=diff('(x^3+2*x-0.205061208)*(x-0.102)^2')

dfun=

(3*x^2+2)*(x-.102)^2+2*(x^3+2*x-.205061208)*(x-.102)

>>dfun=inline('(3*x^2+2)*(x-.102)^2+2*(x^3+2*x-.205061208)*(x-.102)');formatlong;

>>newton1(fun,dfun,0,1e-6),formatshort

并得到最终结果:

n=

27

ans=

0.10199821300764

>>newton1(fun,dfun,0.5,1e-6),formatshort

n=

31

ans=

0.1020

割线法:

在matlab软件中执行下列语句

>>clear

>>fun=inline('(x^3+2*x-0.205061208)*(x-0.102)^2');

>>gexianfa(fun,-1,1,1e-6),formatshort

并得到最终结果:

n=

41

ans=

0.1020

抛物线法:

在matlab软件中执行下列语句

>>clear

>>fun=inline('(x^3+2*x-0.205061208)*(x-0.102)^2');

>>paowuxian(fun,0,0.5,1,1e-6),formatshort

并得到最终结果截图:

n=

57

ans=

0.1020

问题一(4)

按照题目要求对方程进行构造

仍然利用

(1)中方法求解这一问题,并利用图解法找到初值,通过观察图像,可知存在重根,故将newton法初值设为:

两组初值为0以及0.5,割线法初值设为:

两组初值为0,0.1以及-0.1,0.1。

抛物线法初值设为:

两组初值为-1,0,1以及0,0.5,1。

绘图语句为:

>>fun=inline('(sin(x)+2*x-0.205061208)*(x-0.102)');fplot(fun,[-1,1])

Newton法:

在matlab软件中执行下列语句

>>clear

>>fun=inline('(sin(x)+2*x-0.205061208)*(x-0.102)');fplot(fun,[-1,1]);

>>dfun=diff('(sin(x)+2*x-0.205061208)*(x-0.102)')

dfun=

(cos(x)+2)*(x-.102)+sin(x)+2*x-.205061208

>>dfun=inline('(cos(x)+2)*(x-.102)+sin(x)+2*x-.205061208');formatlong;

>>newton1(fun,dfun,0,1e-6),formatshort

并得到最终截图:

n=

6

ans=

0.06837148815484

>>newton1(fun,dfun,0.5,1e-6),formatshort

并得到最终结果:

n=

8

ans=

0.1020

割线法:

在matlab软件中执行下列语句

>>clear

>>fun=inline('(sin(x)+2*x-0.205061208)*(x-0.102)');

>>gexianfa(fun,0,1,1e-6),formatshort

并得到最终结果:

n=

10

ans=

0.0684

>>gexianfa(fun,0,0.1,1e-6),formatshort

并得到最终结果:

n=

5

ans=

0.1020

抛物线法:

在matlab软件中执行下列语句

>>clear

>>fun=inline('(sin(x)+2*x-0.205061208)*(x-0.102)');

>>paowuxian(fun,-0.1,0,0.05,1e-6),formatshort

并得到最终结果:

n=

8

ans=

0.0684

>>paowuxian(fun,0,0.5,1,1e-6),formatshort

并得到最终结果:

n=

15

ans=

0.1020

(五)计算结果

Newton法

割线法

抛物线法

问题一

(1)

0.102

0.102

0.102

问题一

(2)

0.068371488155510

0.0684

0.0684

问题一(3)

0.102

0.102

0.102

问题一(4)

0.102和

0.068148815484

0.102和

0.0684

0.102和

0.0684

(1)迭代步数

(2)迭代步数

(3)迭代步数

(4)迭代步数

Newton法

4

3

31

6,8

割线法

5

3

41

10,5

抛物线法

7

3

57

8,15

(六)结果分析

将Newton法,割线法,抛物线法进行比较可以看到在本文题中,三种方法计算得到的最终结果基本相同,但是迭代步数有较大差别,综合看来Newton法迭代步数最少,割线法次之,抛物线法最次。

这与算法设计中所说Newton法收敛最快,割线法次之,抛物线法最次很好的贴合。

对每个算法单独来看,显然选择初值不同对于迭代步数影响较大,对于找到根也会有影响。

因此应该先通过画图确定根的大致位置,给出在其附近的初值。

(七)心得体会

在实现这三个算法的过程中,本身编程较易实现,最重要的是对算法本身的理解,只有真正理解算法的含义才能更快更好的实现程序。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1