您的位置:首页 > 其它

牛顿迭代法

2008-10-17 15:34 706 查看
算法描述如下:

给定初始值x0,ε为根的容许误差,η为 | f(x) | 的容许误差,N为迭代次数的容许值。

1.如果 f'(x0)=0 或迭代次数大于N,则算法失败,结束;否则执行2。

2.计算x1=x0-f(x0)/f'(x0)。

3.若| x1-x0 |<ε 或| f(x1) |<η ,则输出x1,程序结束;否则执行4。

4.令x0=x1,转向1



程序实例(c语言实现)

求方程xe(x) - 1 = 0 的根

/*牛顿迭代法*/

#include <stdio.h>

#include <math.h>

#define N 100

#define eps 1e-6

#define eta 1e-8

float Newton(float(*f)(float),float(*fl)(float),float x0)

{

float x1,d;

int k=0;

do

{

x1=x0-(*f)(x0)/(*fl)(x0);

if(k++>N || fabs((*fl)(x1))<eps)

{

printf("/n Newton 迭代发散");

break;

}

d=fabs(x1)<1?(x1-x0):(x1-x0)/x1; //计算误差值

x0=x1;

printf("x(%d)=%f/t",k,x0);

}

while(fabs(d)>eps && fabs((*f)(x1))>eta);

return x1;

}

float f(float x)

{

return x*exp(x)-1;

}

float fl(float x)

{

return exp(x)+x*exp(x);

}

void main()

{

float x0,y0;

printf("请输入迭代初值 x0/n");

scanf("%f",&x0);

printf("x0=%f/n",x0);

y0=Newton(f,fl,x0);

printf("方程的根为: %f/n",y0);

}

输出:

请输入迭代初值 x0
1.0
x0=1.000000
x(1)=0.683940 x(2)=0.577454 x(3)=0.567230 x(4)=0.567143 x(5)=0.567143
方程的根为: 0.567143
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: