牛顿迭代法

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(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的方程为y = f(x0)+f'(x0)(x-x0),求出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的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。
方程:x^3-a=0....
令f(x)=x^3-a   f'(x)=3x^2
牛顿迭代格式:X.(k+1) = X.k - f(X.k)/f'(X.k)    //.k表示下标哈^_^
                      = X.k - (X.k^3-a)/(3X.k^2)
                      = 2/3X.k + a/(3X.k^2)
#include <stdio.h>

int main()
{
    int i;
    double x, y0, y;
    double eps=1.0e-3;

    scanf("%lf", &x);

    for(i=0; i*i*i<=x && (i+1)*(i+1)*(i+1)>x; i++);

    y = i+0.5;

    do
    {
        y0 = y;
        y = y0-(y0*y0*y0-x)/(3*y0*y0);
    } while((y0-y)>eps || (y-y0)>eps);

    printf("%lf %lf\n", y, y*y*y-x);
    return 0;
}

你可能感兴趣的:(迭代)