y:编写程序,用二分法求方程2x^3-4x^2+3x-6=0在[-10,10]之间的根

 我来答
匿名用户
2013-11-22
展开全部
#include<stdio.h>
#include<math.h>
void main()
{double f(double x); /*对关于x的函数进行声明*/<br/> void erfen(double a,double b,double h,double ep); /*对二分法的子程序进行声明*/<br/> erfen(-10,10.0,0.100,0.00001); /*对二分法的子程序进行调用*/<br/>}
double f(double x) /* 定义一个关于x的函数*/
{double y; <br/>y=2*x*x*x-4*x*x+3*x-6; /*将函数值赋给y*/<br/>return y;} /*返回函数值*/
void erfen(double a,double b,double h,double ep) /*定义二分法的子程序*/
{double x[10],a0,b0,c0,a1,b1; /*将得到的根存放在x[]中,定义区间的端点为浮点型变量*/<br/> int k,i,j; <br/> k=0; /*k为循环的控制变量*/<br/> a0=a; /*将a赋给第一个区间的起点*/<br/> while(a0<b) /*a0小于b时,始终执行循环*/<br/>{for(j=0;;j++) /*循环每执行一次,则向后移动一个区间,区间的长度为步长*/<br/> { b0=a0+h; /*b0为第一个区间的末端*/<br/> if(fabs(f(a0))<ep) /*a0的函数值小于给定的精度时,a0即为要求的一个根*/<br/> {x[k]=a0; /*将a0的值放入数组x中*/<br/> a0=b0; /*指向下一个区间*/<br/> k++; /*x的地址指向下一个*/<br/> break;} /* 跳出循环*/
if(fabs(f(b0))<ep)
{a0=b0;<br/> break;} /*如果b0的函数值小于给定精度,则跳出循环,指向下一个区间*/
if(f(a0)*f(b0)>0)
{a0=b0;<br/> break;} /*如果a0与b0的函数值乘积大于0,则跳出循环,指向下一个区间*/
if(f(a0)*f(b0)<0)/*如果a0与b0的函数值乘积小于0,则该区间存在实根*/
{
a1=a0;b1=b0; /*使a1始终b1为区间的端点*/
for(i=0;;i++)
{ c0=(a1+b1)/2; /*使区间缩为一半*/
if(fabs(f(c0))<ep) /*如果c0小于给定的精度,则就是要找的一个根*/
{x[k]=c0;<br/> a0=b0;<br/> k++;<br/> break;} /* 跳出循环,指向下一个区间*/
if(f(c0)*f(a1)>0)
a1=c0; /*c0不是根,使c0的值赋给左端点*/
else
b1=c0;} /*c0不是根,是c0的值赋给右端点*/
break;} /* 跳出循环,指向下一个区间*/
}}
if(k!=0) /* k不等于0时,输出实根的值*/
for(i=0;i<=k-1;i++)
printf("%f,%f\n",x[i],f(x[i]));
else
printf("no root"); /*k等于0时,输出无实根*/
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式