牛顿迭代法又称牛顿-拉夫逊方法(Newton-Raphson method),是牛顿在17世纪提出的一种在实数域和复数域上近似求方程的方法。该方法的基础是利用泰勒展开式。

方法使用函数f(x)的泰勒级数的前几项寻找方程f(x) = 0 的根。最大优点是在方程f(x)=0的单根附近具有平方收敛,该方法可以用来求方程的重根、复根。

计算公式如下:

设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0)),做曲线y=f(x)的切线L,L与x轴的交点的横坐标x1=x0-f(x0)/f'(x0),

称x1是r的一次近似值,过点(x1,f(x1))做曲线y=f(x)的切线,求该切线与x轴的交点的横坐标为x2=x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,知道r的近似值误足够小。

解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。

已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。

C语言代码实现:

#include<stdio.h>
#include<math.h>double func(double x) //要求解的函数方程{return x*x*x*x - 3 * x*x*x + 1.5*x*x - 4.0;}double func1(double x) //导函数{return 4 * x*x*x - 9 * x*x + 3 * x;}int Newton(double *x, double precision, int maxcyc)//maxcyc 最大迭代次数{double x1, x0;int k;x0 = *x;for (k = 0; k < maxcyc; k++){if (func1(x0) == 0.0){printf("迭代过程中导数为0\n");return 0;}x1 = x0 - func(x0) / func1(x0);if (fabs(x1 - x0) < precision || fabs(func(x1)) < precision)//达到设定的精度{*x = x1;return 1;}elsex0 = x1; //准备下次迭代}printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度return 0;}int main(){double x, precision;int maxcyc;printf("输入初始迭代值x0");scanf("%lf", &x);printf("输入最大迭代次数:");scanf("%d", &maxcyc);printf("请输入迭代要求的精度:");scanf("%lf", &precision);if (Newton(&x, precision, maxcyc) == 1)printf("该值附近的根为:%lf\n", x);elseprintf("迭代失败!\n");while(1);return 0;}

C++实现:

//此函数是用来求3元一次方程ax^3+bx^2+cx+d=0的解//比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解#include<iostream>#include<cmath>using namespace std;int main(){double diedai(double a,double b,double c,double d,double x);double a,b,c,d;double x=10000.0;cout<<"请依次输入方程四个系数:";cin>>a>>b>>c>>d;x=diedai(a,b,c,d,x);cout<<x<<endl;return 0;}double diedai(double a,double b,double c,double d,double x){while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001){x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);}return x;}

Matlab实现:

%定义函数
function y=f(x)
y=f(x) ;%函数f(x)的表达式
function z=f(x)
z=h(x) ;%函数f(x)的导函数表达式%主程序
x=X;%迭代初始值
i=0;
while i<I%迭代次数
x0 = X - f(X)/h(X);%牛顿迭代格式
if abs(x0-X)>;esp;%收敛判断
X=x0;
else break;
end
i =i+1;
end
fprintf('\n%s%.4f\t%s%d','X=',X,'i=',i);%输出结果

牛顿迭代法求解多项式方程的近似解相关推荐

  1. 非线性方程组牛顿迭代法matlab,matlab实现牛顿迭代法求解非线性方程组

    <matlab实现牛顿迭代法求解非线性方程组>由会员分享,可在线阅读,更多相关<matlab实现牛顿迭代法求解非线性方程组(5页珍藏版)>请在人人文库网上搜索. 1.matla ...

  2. python牛顿法解非线性方程组_matlab实现牛顿迭代法求解非线性方程组.pdf

    matlab实现牛顿迭代法求解非线性方程组.pdf matlab 实现牛顿迭代法求解非线性方程组实现牛顿迭代法求解非线性方程组 已知非线性方程组如下 3*x1-cosx2*x3-1/20 x12-81 ...

  3. mysql 立方根函数_Java实现牛顿迭代法求解平方根、立方根

    一.简介 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. ...

  4. 3.牛顿迭代法求解方程的根

    牛顿迭代法求解方程的根 引题:用牛顿迭代法求下列方程在值等于x附近的根: 2 x 3 − 4 x 2 + 3 x − 6 = 0 2x^3-4x^2+3x-6=0 2x3−4x2+3x−6=0 输入: ...

  5. matlab牛顿法解非线性方程组,matlab实现牛顿迭代法求解非线性方程组.pdf

    资源描述 matlab 实现牛顿迭代法求解非线性方程组实现牛顿迭代法求解非线性方程组 已知非线性方程组如下 3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+0.1)^2+sin(x ...

  6. 分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根

    编写程序,分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根,要求计算精确到小数点后七位数字为止,并将求出的近似结果与理论值2cos20 相比较,二分法的初始迭代区间 ...

  7. 二分法和简单迭代法的优缺点_二分法和牛顿迭代法求解方程的比较.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp高等教育&nbsp>&nbsp理学 二分法和牛顿迭代法求解方程的比较.doc5页 本文档一共 ...

  8. c语言牛顿迭代法求解非线性方程组,利用牛顿迭代法求解非线性方程组

    最近一个哥们,是用牛顿迭代法求解一个四变量方程组的最优解问题,从网上找了代码去改进,但是总会有点不如意的地方,迭代的次数过多,但是却没有提高精度,真是 最近一个哥们,是用牛顿迭代法求解一个四变量方程组 ...

  9. 常用算法 之二 牛顿迭代法求解PT100温度(高阶方程求解)

    问题   在最近的工作中用到了PT100铂电阻,它适用于医疗.电机.工业.温度计算.卫星.气象.阻值计算等高精温度设备,应用范围非常之广泛.类似的还有PT1000.   PT后的100即表示它在0℃时 ...

最新文章

  1. 最常用的20个Git命令与示例,你都会了么?
  2. 点击表格弹窗获取另外一套数据之后,原表格相关数据的调用
  3. 说你又不听,听你又不懂,懂你又不做,做你又做错,错你又不认,认你又不改,改又不服,不服也不说
  4. AT89C51/AT89S51/STC89C51单片机烧录程序的区别
  5. Python Cartopy地图投影【2】
  6. 通过网易云api实现一个简单的音乐播放器
  7. 锐捷网关交换机开启dhcp服务
  8. php微信公众号采集器,WordPress微信公众号采集插件
  9. sge中的windows选项
  10. 【跨境电商平台】Magento VS Shopify,选谁进行独立站建站?
  11. Not registered via @EnableConfigurationProperties, marked as Spring component, or scanned via @Confi
  12. 安装计算机的显卡出现问题,电脑显卡驱动安装失败如何解决
  13. fgetc函数踩过的坑
  14. JavaScript---BOM基础
  15. YOLOv5读取摄像头实时检测目标并将裁剪后的部分保存
  16. c语言五子棋如何添加计时,五子棋教程:计时
  17. Plants vs. Zombies 解题报告
  18. Mobvista通过聆讯:上半年净利千万美元 同比降49%
  19. JAVA并发编程——多线程
  20. 解决ks8.0抓包问题

热门文章

  1. 鸿蒙之至始于衣冠,学坊之声/Class Story | 孝老爱亲,我们这样做——双语303班蚂蚁学坊亲子活动...
  2. 斩获数亿元B轮融资,这家Tier 1抢跑「L2/L2+」主战场
  3. C#使用iTextSharp合并pdf,添加页码
  4. Adobe acrobat修改批注名字
  5. 使用IDEA 远程调试功能,服务器代码远程调试
  6. Android插件化:从入门到放弃
  7. 实验二——————路由器口令配置
  8. IOS HTTPS 服务器信任评估
  9. 关于2020年测绘资质新旧变化一览表
  10. 体重计c语言程序,利用MSP430F149和HX711模块制作体重秤?