一道关于数值计算牛顿迭代法的c语言编程题
题目
用牛顿跌代法编c语言程序算法如下:
二、牛顿迭代法
算法描述:
给定初值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)
程序如下:
x0取1.5
#include <stdio.h>
#include <math.h>
#define N 200
#define eps 1e-6
#define eta 1e-8
double df1(double x)
{return 2*x-exp(x);}
double df2(double x)
{return (exp(x)+x*exp(x));}
double df3(double x)
{return 1.0/(x*log(10));}
double f1(double x)
{return x*x-exp(x);}
double f2(double x)
{return x*exp(x)-1;}
double f3(double x)
{return log10(x)+x-2.0;}
double newton(double(*f)(double),double(*df)(double),double x0)
{
double x1;
int k=0;
while(1)
{
if((*df)(x0)==0||k++>N)
{printf("error\n"); return 0;}
x1=x0-(*f)(x0)/(*df)(x0);
if(fabs(x1-x0)<eps||fabs((*f)(x1))<eta)
return x1;
else x0=x1;
}
}
main()
{
double x0,y0[3];
int i;
double temp;
clrscr();
printf("plese input initial x0:\n");
scanf("%lf",&x0);
printf("x0=%f\n",x0);
temp=x0;
y0[0]=newton(f1,df1,x0);
x0=temp;
y0[1]=newton(f2,df2,x0);
x0=temp;
y0[2]=newton(f3,df3,x0);
for(i=0;i<3;i++)
printf("y0[%d]=%lf\n",i,y0[i]);
}
但是结果总是有问题,请大家帮帮忙