自学内容网 自学内容网

二分查找法求解一元三次方程组

本题使用二分查找求解

#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)!