各位大侠,谁有用牛顿迭代法求一元n次方程的程序,n可能是10,30或50.
1个回答
展开全部
double func(double x) //函数
{ return x*x*x*x-3*x*x*x+1.5*x*x-4.0; }
double func1(double x) //导函数 { return 4*x*x*x-9*x*x+3*x; }
int Newton(double *x,double precision,int maxcyc) //迭代次数
{ double x1,x0; int k; x0=*x; for(k=0;k<maxcyc;k++)
{ if(func1(x0)==0.0)//若通过初值,函数返回值为0
{ printf("迭代过程中导数为0!\n"); return 0; }
x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算
if(fabs(x1-x0)<precision || fabs(func(x1))<precision) //达到结束条件
{ *x=x1; //返回结果 return 1; }
else //未达到结束条件 x0=x1; //准备下一次迭代 }
printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度 return 0; }
int main()
{ double x,precision; int maxcyc; printf("输入初始迭代值x0:");
scanf("%lf",&x); printf("输入最大迭代次数:"); scanf("%d",&maxcyc);
printf("迭代要求的精度:");
scanf("%lf",&precision);
if(Newton(&x,precision,maxcyc)==1) //若函数返回值为1
printf("该值附近的根为:%lf\n",x);
else //若函数返回值为0
printf("迭代失败!\n");
getch();
return 0; }
请评最佳!!
{ return x*x*x*x-3*x*x*x+1.5*x*x-4.0; }
double func1(double x) //导函数 { return 4*x*x*x-9*x*x+3*x; }
int Newton(double *x,double precision,int maxcyc) //迭代次数
{ double x1,x0; int k; x0=*x; for(k=0;k<maxcyc;k++)
{ if(func1(x0)==0.0)//若通过初值,函数返回值为0
{ printf("迭代过程中导数为0!\n"); return 0; }
x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算
if(fabs(x1-x0)<precision || fabs(func(x1))<precision) //达到结束条件
{ *x=x1; //返回结果 return 1; }
else //未达到结束条件 x0=x1; //准备下一次迭代 }
printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度 return 0; }
int main()
{ double x,precision; int maxcyc; printf("输入初始迭代值x0:");
scanf("%lf",&x); printf("输入最大迭代次数:"); scanf("%d",&maxcyc);
printf("迭代要求的精度:");
scanf("%lf",&precision);
if(Newton(&x,precision,maxcyc)==1) //若函数返回值为1
printf("该值附近的根为:%lf\n",x);
else //若函数返回值为0
printf("迭代失败!\n");
getch();
return 0; }
请评最佳!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
北京埃德思远电气技术咨询有限公司
2021-11-22 广告
2021-11-22 广告
假设条件在短路的实际计算中, 为了能在准确范围内迅速地计算短路电流, 通常采取以下简化假设。(1)不考虑发电机的摇摆现象。(2)不考虑磁路饱和,认为短路回路各元件的电抗为常数。(3)不考虑线路对地电容, 变压器的磁支路和高压电网中的电阻, ...
点击进入详情页
本回答由北京埃德思远电气技术咨询有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询