C语言 二分法求方程x^2-3x-5=0的近似解
#include<stdio.h>/*求x^2-3x-5=0在指定区间的解*/#include<math.h>voidmain(){doublex1=1,x2=1,f1=...
#include<stdio.h>/*求x^2-3x-5=0在指定区间的解*/
#include<math.h>
void main()
{
double x1=1,x2=1,f1=x1*x1-3*x1-5,f2=x2*x2-3*x2-5;
printf("请输入指定区间(x1,x2):");
scanf_s("%lf,%f",&x1,&x2);
aa:double x0=(x1+x2)/2,f0=x0*x0-3*x0-5;
while (f1*f0>0)
{
f1=f0,x1=x0;
x0=(x1+x2)/2;
f0=x0*x0-3*x0-5;
}
f2=f0,x2=x0;
while (f1*f0>0)
{
f1=f0,x1=x0;
x0=(x1+x2)/2;
f0=x0*x0-3*x0-5;
}
if (fabs(f0)<0.00001)
printf("%lf",x0);
else goto aa;
}
实在不行用了个aa,不然跳不出去啊……谁能帮我找找错,再优化一下什么的。。。。
额,打错了,x2为lf。。。。。 展开
#include<math.h>
void main()
{
double x1=1,x2=1,f1=x1*x1-3*x1-5,f2=x2*x2-3*x2-5;
printf("请输入指定区间(x1,x2):");
scanf_s("%lf,%f",&x1,&x2);
aa:double x0=(x1+x2)/2,f0=x0*x0-3*x0-5;
while (f1*f0>0)
{
f1=f0,x1=x0;
x0=(x1+x2)/2;
f0=x0*x0-3*x0-5;
}
f2=f0,x2=x0;
while (f1*f0>0)
{
f1=f0,x1=x0;
x0=(x1+x2)/2;
f0=x0*x0-3*x0-5;
}
if (fabs(f0)<0.00001)
printf("%lf",x0);
else goto aa;
}
实在不行用了个aa,不然跳不出去啊……谁能帮我找找错,再优化一下什么的。。。。
额,打错了,x2为lf。。。。。 展开
1个回答
展开全部
#include <cmath> double func(double x){
return x * (x - 3.0) - 5.0;
}
double binary_search(double x1, double x2, double (*f)(double)){
static const double epsilon = 1.0e-14;
double y1 = f(x1); double y2 = f(x2);
bool b1 = (y1 < 0.0 && y2 > 0.0);
bool b2 = (y1 > 0.0 && y2 < 0.0);
while (b1 || b2)
{
double x = (x1 + x2) / 2;
double y = f(x);
if (fabs(y) <= epsilon) { return x;}
((b1 == y < 0.0) ? x1 : x2) = x;
}
return 0.0;
}
int main(int, char*[]){
double f = binary_search(1.5, 10, func);
return 0;
}
return x * (x - 3.0) - 5.0;
}
double binary_search(double x1, double x2, double (*f)(double)){
static const double epsilon = 1.0e-14;
double y1 = f(x1); double y2 = f(x2);
bool b1 = (y1 < 0.0 && y2 > 0.0);
bool b2 = (y1 > 0.0 && y2 < 0.0);
while (b1 || b2)
{
double x = (x1 + x2) / 2;
double y = f(x);
if (fabs(y) <= epsilon) { return x;}
((b1 == y < 0.0) ? x1 : x2) = x;
}
return 0.0;
}
int main(int, char*[]){
double f = binary_search(1.5, 10, func);
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询