重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这些方法是迭代法,都有一定的适用范围(函数的连续性和光滑性,有无非水平切线等)。没有万能的。
专业从事网站设计、成都网站制作,高端网站制作设计,小程序制作,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用H5网站设计+CSS3前端渲染技术,成都响应式网站建设公司,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。
二分法 或 黄金分割法 只是为加快收敛,也要考虑区间,判断解在左在右。
可以用 2 价导数等于0 求出极值点和反弯点,用一阶导数判断函数的升降。 用此方法可以获得自变量区间,然后按区间求根。
如何求所有的根呢?解析函数可以用解析法求根,不用迭代法。
迭代法,你从负无穷到正无穷找出所有区间,对区间循环。
另外,理论上,也可以判断函数到底有几个解。
1. 楼主的x()和y()写的一样啊。
2.在x()和y()中的定义 int x1,x2;应该改为 double x1,x2;
3. 楼主对b*b-4*a*c0如何处理?
4.scanf("%lf,%lf,%lf",a,b,c);最好改为scanf("%lf%lf%lf",a,b,c);
建议改为下列,对于b*b-4*a*c0的情况输出提示
#includestdio.h
#includemath.h
float d;
int main()
{ void x(double x,double y,double z);
void y(double x,double y,double z);
double a,b,c;
scanf("%lf%lf%lf",a,b,c);
d=b*b-4*a*c;
if(d1e-6)
x(a,b,c);
else if(d0)
printf("没有实根\n");
else
y(a,b,c);
}
void x(double x,double y,double z)
{
double x1,x2;
x1=(-y+sqrt(d))/(2*x);
x2=(-y-sqrt(d))/(2*x);
printf("%8.4f,%8.4f",x1,x2);
}
void y(double x,double y,double z)
{
double x1,x2;
x1=x2=-y/(2*x);
printf("%8.4f,%8.4f",x1,x2);
}
你的if语句那的括号有问题
#includestdio.h
#includemath.h
int main(){
double a,b,c,d,x1,x2;
scanf("%f%f%f",a,b,c);
if(a==0){
if(b==0){
if(c==0)
printf("该式为恒等式\n");
else
printf("该式不成立,请重新输入a,b,c\n");
}else{
x1=c/b;
printf("x1=x2=%f\n",x1);
}else
d=b*b-4*a*c;
if(d0){
d=-d;
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f,虚根\n",x1,x2);
}else{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
return 0;
}