
C语言 牛顿迭代法
用C语言和牛顿迭代法解方程,代码如下。发现总是到if(abs(F-x0)<epsilon1){printf("%lf",x0);gotoend;}的时候程序终止,请问为什...
用C语言和牛顿迭代法解方程,代码如下。发现总是到if(abs(F-x0)<epsilon1)
{
printf("%lf",x0);
goto end;
}的时候程序终止,请问为什么?怎么解决?
#include<stdio.h>
#include<math.h>
double f(double x)
{
double fx;
fx=cos(x)-x;
return fx;
}
double Df(double x)
{
double fx;
fx=-sin(x)-1;
return fx;
}
main()
{
double epsilon1,epsilon2,alpha;
int N,n;
double root;
double x0,x1,F,DF,tol;
printf("请输入初值alpha:");
scanf("%lf",&alpha);
printf("请输入精度epsilon1:");
scanf("%lf",&epsilon1);
printf("请输入精度epsilon2:");
scanf("%lf",&epsilon2);
printf("请输入最大迭代次数N:");
scanf("%d",&N);
x0=alpha;
for(n=1;n<=N;n++)
{
F=f(x0);
DF=Df(x0);
if(abs(F-x0)<epsilon1)
{
printf("%lf",x0);
goto end;
}
else if(abs(DF)<psilon2)
{
printf("失败!");
goto end;
}
else
{
x1=x0-F/DF;
tol=abs(x1-x0);
if(tol<epsilon1)
{
printf("%lf",x1);
goto end;
}
}
x0=x1;
}
end:
printf("结束!");
} 展开
{
printf("%lf",x0);
goto end;
}的时候程序终止,请问为什么?怎么解决?
#include<stdio.h>
#include<math.h>
double f(double x)
{
double fx;
fx=cos(x)-x;
return fx;
}
double Df(double x)
{
double fx;
fx=-sin(x)-1;
return fx;
}
main()
{
double epsilon1,epsilon2,alpha;
int N,n;
double root;
double x0,x1,F,DF,tol;
printf("请输入初值alpha:");
scanf("%lf",&alpha);
printf("请输入精度epsilon1:");
scanf("%lf",&epsilon1);
printf("请输入精度epsilon2:");
scanf("%lf",&epsilon2);
printf("请输入最大迭代次数N:");
scanf("%d",&N);
x0=alpha;
for(n=1;n<=N;n++)
{
F=f(x0);
DF=Df(x0);
if(abs(F-x0)<epsilon1)
{
printf("%lf",x0);
goto end;
}
else if(abs(DF)<psilon2)
{
printf("失败!");
goto end;
}
else
{
x1=x0-F/DF;
tol=abs(x1-x0);
if(tol<epsilon1)
{
printf("%lf",x1);
goto end;
}
}
x0=x1;
}
end:
printf("结束!");
} 展开
1个回答
展开全部
把所有的abs()改成fabs()
还有,源码中的psilon2改为epsilon2
还有,源码中的psilon2改为epsilon2
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询