牛顿迭代法
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
给定初始值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
相关文章推荐
- 牛顿迭代法(Newton's Method)
- leetcode:Sqrt(x) 牛顿迭代法求整数开方
- 3元一次方程(牛顿迭代法求方程的根)
- UVa 10428 The Roots,牛顿迭代法
- 非线性最优化(一)——牛顿迭代法
- 利用牛顿迭代法求平方根
- 牛顿迭代法在求解步进电机在不同脉冲对应的时刻的用处
- 牛顿迭代法快速寻找平方根
- 牛顿迭代法求高精度开方
- C语言之基本算法25—牛顿迭代法求方程近似根
- 二分法和牛顿迭代法求平方根(Python实现)
- c语言牛顿迭代法的问题
- c语言:用牛顿迭代法求方程在1.5附近的根:2x^3-4x^2+3x-6=0.
- 算法1.1 最大公约数(欧几里得)&判定素数&计算平方根(牛顿迭代法)
- 高斯牛顿迭代法
- 牛顿迭代法求解方程
- 牛顿迭代法 c语言实现
- 牛顿迭代法解非线性方程组
- oj-11-F-牛顿迭代法
- 牛顿迭代法