您的位置:首页 > 其它

牛顿迭代法

2010-04-12 23:52 309 查看
设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次近似值,上式称为牛顿迭代公式

相关习题:

《C程序设计》(第三版)6.12

《C程序设计教程》 5.12

Solution by Mutoo:

// 求 f(x)=2x^3-4x^2+3x-6 在1.5 附近的根

Code:

#include<stdio.h>

#include<math.h>

double F(double x) // 构造方程

{

return 2*pow(x,3)-4*pow(x,2)+3*x-6; // f(x)=2x^3-4x^2+3x-6

}

double f(double x) // 构造方程的导数(用于求斜率)

{

return 6*pow(x,2)-8*x+3; //f'(x)=6x^3-8x+3

}

/**********

切线:(y-y0)=k(x-x0)

移项:x = x0 - y0/k

其中:

k=f'(x)

y0=f(x)

**********/

void main()

{

double X0,Xn;

X0 = Xn = 1.5; // 初始值

do

{

X0 = Xn;

Xn = X0-F(X0)/f(X0);

}while(fabs(F(Xn))>10e-6); // 误差指导

printf("root=%lf/n",Xn);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: