求高阶方程根

求高阶方程根

ID:20231494

大小:43.50 KB

页数:11页

时间:2018-10-10

求高阶方程根_第1页
求高阶方程根_第2页
求高阶方程根_第3页
求高阶方程根_第4页
求高阶方程根_第5页
资源描述:

《求高阶方程根》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、求一元高阶方程的根一元非线性方程求根(1)牛顿迭代法牛顿迭代法又称牛顿切线法:先任意设定一个与真实的根接近的值x0作为第一次近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),过(x1,f(x1))点做f(x)的切线,交x轴于x2,……如此继续下去,直到足够接近(比如

2、x1-x0

3、<1e-6时或

4、f(x1)

5、<1e-6)真正的根x*为止。而f'(x0)=f(x0)/(x1-x0)所以x1=x0-f(x0)/f'(x0)

6、例如,用牛顿迭代法求下列方程在1.5附近的根:2x3-4x2+3x-6=0。法一:

7、x1-x0

8、<1e-6#includemain(){floatx0,x1,fx,f1x;x0=1.5;fx=2*x0*x0*x0-4*x0*x0+3*x0-6;f1x=6*x0*x0-8*x0+3;x1=x0-fx/f1x;while(fabs(x1-x0)>=1e-6){x0=x1;fx=2*x0*x0*x0-4*x0*x0+3*x0-6;f1x=6*x0*x0-8*x0+3;x1=x0-fx/f

9、1x;}printf("%f",x1);}法二:

10、f(x1)

11、<1e-6#includemain(){floatx0,x1,fx,f1x;x0=1.5;fx=2*x0*x0*x0-4*x0*x0+3*x0-6;while(fabs(fx)>=1e-6){f1x=6*x0*x0-8*x0+3;x1=x0-fx/f1x;x0=x1;fx=2*x0*x0*x0-4*x0*x0+3*x0-6;}printf("%f",x1);}法三:#include"math.h"main(){f

12、loatx1,x0,f,f1;x1=1.5;do{x0=x1;f=2*x0*x0*x0-4*x0*x0+3*x0-6;f1=6*x0*x0-8*x0+3;x1=x0-f/f1;}while(fabs(x1-x0)>=1e-5);printf("%f",x1);}(2)二分法算法要领是:先指定一个区间[x1,x2],如果函数f(x)在此区间是单调变化的,则可以根据f(x1)和f(x2)是否同号来确定方程f(x)=0在区间[x1,x2]内是否有一个实根;如果f(x1)和f(x2)同号,则f(x)在

13、区间[x1,x2]内无实根,要重新改变x1和x2的值。当确定f(x)在区间[x1,x2]内有一个实根后,可采取二分法将[x1,x2]一分为二,再判断在哪一个小区间中有实根。如此不断进行下去,直到小区间足够小为止。具体算法如下:(1)输入x1和x2的值。(2)求f(x1)和f(x2)。(3)如果f(x1)和f(x2)同号说明在[x1,x2]内无实根,返回步骤(1),重新输入x1和x2的值;若f(x1)和f(x2)不同号,则在区间[x1,x2]内必有一个实根,执行步骤(4)。(4)求x1和x2的中点:

14、x0=(x1+x2)/2。(5)求f(x0)。(6)判断f(x0)与f(x1)是否同号。①如果同号,则应在[x0,x2]中寻找根,此时x1已不起作用,用x0代替x1,用f(x0)代替f(x1)。②如果不同号,则应在[x1,x0]中寻找根,此时x2已不起作用,用x0代替x2,用f(x0)代替f(x2)。(7)判断f(x0)的绝对值是否小于某一指定的值(例如10-5)。若不小于10-5,则返回步骤(4)重复执行步骤(4)、(5)、(6);否则执行步骤(8)。(8)输出x0的值,它就是所求出的近似根。例

15、如,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。#includemain(){floatx0,x1,x2,f0,f1,f2;do{scanf("%f",&x1);scanf("%f",&x2);f1=2*x1*x1*x1-4*x1*x1+3*x1-6;f2=2*x2*x2*x2-4*x2*x2+3*x2-6;}while(f1*f2>0);do{x0=(x1+x2)/2;f0=2*x0*x0*x0-4*x0*x0+3*x0-6;if(f0*f1>0){x1

16、=x0;f1=f0;}else{x2=x0;f2=f0;}}while(fabs(f0)>=1e-5);printf("%f",x0);}#include"math.h"main(){floatx1,x2,x0,fx1,fx2,fx0;do{printf("Enterx1&x2");scanf("%f%f",&x1,&x2);fx1=2*x1*x1*x1-4*x1*x1+3*x1-6;fx2=2*x2*x2*x2-4*x2*x2+3*x2-6;}while(fx1*fx2>0)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。