//
// main.cpp
// 牛顿迭代法
//
// Created by 丁小未 on 13-7-16.
// Copyright (c) 2013年 dingxiaowei. All rights reserved.
//
//牛顿迭代法求方程跟
//利用函数完成用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数a、b、c、d的值依次为1,2,3,4,有主函数输入。求x在1附近的一个实根。求出根后由主函数输出。
#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|小于指定的精度,则继续循环迭代求根。
牛顿迭代法缺陷就是必须要求出方程的导数。