牛顿迭代算法

//

//  main.cpp

//  牛顿迭代法

//

//  Created by 丁小未 on 13-7-16.

//  Copyright (c) 2013 dingxiaowei. All rights reserved.

//

 

//牛顿迭代法求方程跟

//利用函数完成用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数abcd的值依次为1234,有主函数输入。求x1附近的一个实根。求出根后由主函数输出。

 

#include<iostream>

#include<cmath>

usingnamespacestd;

 

double value(double a ,double b,double c,double d)

{

    double x=1,x0,f,f1;

    do{

        x0=x;

        f=((a*x0+b)*x0+c)*x0+d;  

        f1=(3*a*x0+2*b)*x0+c; 

        x=x0-f/f1;

    } 

    while(fabs(x-x0)>=1e-5);

    return x;

}

 

int main()

{

    double a,b,c,d;

    double value(double ,double ,double ,double);

    cout<<"input a,b,c,d:";

    cin>>a>>b>>c>>d;

    cout<<"x="<<value(a,b,c,d)<<endl;

    return 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的一次近似值,如果|f(x1)-0|小于指定的精度,则继续循环迭代求根。

牛顿迭代法缺陷就是必须要求出方程的导数。

 

posted @ 2013-07-18 10:07  蓬莱仙羽  阅读(336)  评论(0编辑  收藏  举报