二分查找法求解一元三次方程组
本题使用二分查找求解
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
double a,b,c,d;
// 求出方程的值
double f(double x)
{
return a*pow(x,3)+b*pow(x,2)+c*x+d;
}
void find(double l,double r)
{
// 若精度在可控范围内,则直接输出
if(fabs(r-l)<0.001)
{
printf("%.2f ",r);
return;
}
double mid = (l+r)/2;
if(f(mid)==0)
{
printf("%.2f ",mid);
return;
}
// 零点一定在l,mid 之间
if(f(l)*f(mid)<0) find(l,mid);
else find(mid,r);
}
int main(void)
{
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
int cnt= 0;
for(double i=-100;i<=100,cnt<3;i++)
{
if(f(i)==0)
{
printf("%.2f ",i);
cnt++;
continue;
}
// 根的数量不会超过3个
if(f(i)*f(i+1)<0)
{
find(i,i+1);
cnt++;
}
}
return 0;
}
原文地址:https://blog.csdn.net/2301_79363050/article/details/142502131
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!