用牛顿迭代法(c语言)求函数f(x)= a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d 的实根
运行这个程序出现“1error(s),0warning(s)”,应该怎么修改呢?求高手指教:#include<stdio.h>/*用牛顿迭代法求函数f(x)=a*pow(...
运行这个程序出现“1 error(s), 0 warning(s)”,应该怎么修改呢?求高手指教:
#include<stdio.h> /*用牛顿迭代法求函数f(x)= a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d 的实根,
其中(a,i b,j c,k d)分别对应(1,5 -2,2 0,0 4),即f(x)=pow(x,5)-2*x*x+4=0 .
且要满足精度|x1-x|<=p=1e-6=0.000001。*/
#include<math.h>
main()
{
double a,i,b,j,c,k,d;
double p,x,x1;
int n;
double f(x)
{
return a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d;
}
double f1(x)
{
a=a*i;b=b*j;c=c*k;i--;j--;k--;d=0;
if(i<0) a=0;if(j<0) b=0;if(k<0) c=0;
return a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d;
}
printf("\n函数格式为f=a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d,请输入函数参数(a,i b,j c,k d): \n");
scanf("%lf%*c%lf%*c%lf%*c%lf%*c%lf%*c%lf%*c%lf%",&a,&i,&b,&j,&c,&k,&d);
printf("\n输入一个初始近似值:");scanf("%lf",&x);
printf("\t迭代要求的精度:");scanf("%lf",&p);printf("\n计算结果如下(迭代次数,近似解):\n");
for(n=1;fabs(x1-x)>=p;n++)
{
x1=x-f(x)/f1(x); x=x1;f(x)=f1(x); f1(x)=f1(x1);
printf(" (%d,%lf)",n,x1);
}
printf("\n解得方程的根为 %lf \n",x1);
}
我看了其他网友的同类程序,发现问题挺多哈,看来我需要重新构造了 展开
#include<stdio.h> /*用牛顿迭代法求函数f(x)= a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d 的实根,
其中(a,i b,j c,k d)分别对应(1,5 -2,2 0,0 4),即f(x)=pow(x,5)-2*x*x+4=0 .
且要满足精度|x1-x|<=p=1e-6=0.000001。*/
#include<math.h>
main()
{
double a,i,b,j,c,k,d;
double p,x,x1;
int n;
double f(x)
{
return a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d;
}
double f1(x)
{
a=a*i;b=b*j;c=c*k;i--;j--;k--;d=0;
if(i<0) a=0;if(j<0) b=0;if(k<0) c=0;
return a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d;
}
printf("\n函数格式为f=a*pow(x,i)+b*pow(x,j)+c*pow(x,k)+d,请输入函数参数(a,i b,j c,k d): \n");
scanf("%lf%*c%lf%*c%lf%*c%lf%*c%lf%*c%lf%*c%lf%",&a,&i,&b,&j,&c,&k,&d);
printf("\n输入一个初始近似值:");scanf("%lf",&x);
printf("\t迭代要求的精度:");scanf("%lf",&p);printf("\n计算结果如下(迭代次数,近似解):\n");
for(n=1;fabs(x1-x)>=p;n++)
{
x1=x-f(x)/f1(x); x=x1;f(x)=f1(x); f1(x)=f1(x1);
printf(" (%d,%lf)",n,x1);
}
printf("\n解得方程的根为 %lf \n",x1);
}
我看了其他网友的同类程序,发现问题挺多哈,看来我需要重新构造了 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询