牛顿迭代式(Newton's Method)解多次方程
2017-05-01 19:45
183 查看
设r是
的根,选取
作为r的初始近似值,过点
作曲线
的切线L,L的方程为
,求出L与x轴交点的横坐标
,称x1为r的一次近似值。过点
作曲线
的切线,并求该切线与x轴交点的横坐标
,称
为r的二次近似值。重复以上过程,得r的近似值序列,其中,
称为r的
次近似值,上式为牛顿迭代公式。
以上copy于百度百科,也就是说,对于一个函数f(x),先选择一个点,然后在这个点上作切线,这时在一个很小的范围内,可以近似的将这条切线视为f(x)。然后求出这条切线与x轴的交点,如果足够相近的话,就可以说这个点就是f(x)的解了。而如何让这个解更为精确,方法就是再求出这个横坐标在f(x)上的点,然后继续作切线。这样一直画下去,这个交点也会越来越接近真正的解。
以下代码为解出一个三次方程的代码,输入这个三次方程的系数,然后用迭代法再一步一步精确。从哪一个点开始跑就看要求的范围,这里范围是直接从INT_MAX开始跑的,如果要求的范围更小可以根据范围再进行修改。如果要求的是一个正数这样处理就可以,如果要求得到一个负数,则可以将x0初始化为-INT_MAX再进行迭代。然后跑while循环进行迭代,直到得到的数值满足要求的范围为止。迭代的公式就是上面给的公式,求导的要自己算出来代入。然后输入输出就没什么多说的了。
下面代码:
的根,选取
作为r的初始近似值,过点
作曲线
的切线L,L的方程为
,求出L与x轴交点的横坐标
,称x1为r的一次近似值。过点
作曲线
的切线,并求该切线与x轴交点的横坐标
,称
为r的二次近似值。重复以上过程,得r的近似值序列,其中,
称为r的
次近似值,上式为牛顿迭代公式。
以上copy于百度百科,也就是说,对于一个函数f(x),先选择一个点,然后在这个点上作切线,这时在一个很小的范围内,可以近似的将这条切线视为f(x)。然后求出这条切线与x轴的交点,如果足够相近的话,就可以说这个点就是f(x)的解了。而如何让这个解更为精确,方法就是再求出这个横坐标在f(x)上的点,然后继续作切线。这样一直画下去,这个交点也会越来越接近真正的解。
以下代码为解出一个三次方程的代码,输入这个三次方程的系数,然后用迭代法再一步一步精确。从哪一个点开始跑就看要求的范围,这里范围是直接从INT_MAX开始跑的,如果要求的范围更小可以根据范围再进行修改。如果要求的是一个正数这样处理就可以,如果要求得到一个负数,则可以将x0初始化为-INT_MAX再进行迭代。然后跑while循环进行迭代,直到得到的数值满足要求的范围为止。迭代的公式就是上面给的公式,求导的要自己算出来代入。然后输入输出就没什么多说的了。
下面代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<climits> using namespace std; double NewtonMethod(double a,double b,double c,double d) { double x=INT_MAX;//初始化x0 while(abs(a*x*x*x+b*x*x+c*x+d)>0.00001)//使误差小于0.00001 { x-=(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);//迭代法 } return x; } int main() { double a1,b1,c1,d1; double ans; while(scanf("%lf%lf%lf%lf",&a1,&b1,&c1,&d1)!=EOF) { ans=NewtonMethod(a1,b1,c1,d1); printf("%.5f\n",ans);//输出五位小数 } return 0; }
相关文章推荐
- 使用牛顿迭代方法(Newton’s method)来估计方程的解
- 1.6算法入门之牛顿迭代式求方程根
- 牛顿迭代例子Newton-Raphson Method
- 牛顿法求平分根(newton's method)
- 求解一元多次方程的两种方法:牛顿迭代法和二分法
- 求解一元多次方程(迭代法)
- 求解一元多次方程 牛顿迭代法
- 牛顿法(Newton's Method)
- 牛顿迭代法(Newton's Method)
- 求方程解,牛顿迭代和二分
- 牛顿法(newton's method)求解函数极值
- 牛顿迭代法(Newton's Method)
- 一元多次方程的解
- 牛顿法(Newton's method)
- 牛顿迭代法(Newton's Method)
- 用牛顿方法解一元非线性方程的根(Matlab实现)
- 高斯牛顿(Gauss Newton)、列文伯格-马夸尔特(Levenberg-Marquardt)最优化算法与VSLAM
- 牛顿(Newton)方法
- 数据结构_一元多次方程的表示和相加
- 牛顿-拉夫逊方法(Newton-Raphson method)