鏈接:點擊打開鏈接
題意:
二分法求函數根的原理為:如果連續函數f(x)在區間[a, b]的兩個端點取值異號,即f(a)f(b)<0,則它在這個區間內至少存在1個根r,即f(r)=0。
二分法的步驟為:
本題目要求編寫程序,計算給定3階多項式f(x)=a3x3+a2x2+a1x+a0在給定區間[a, b]內的根。
輸入格式:
輸入在第1行中順序給出多項式的4個系數a3、a2、a1、a0,在第2行中順序給出區間端點a和b。題目保證多項式在給定區間內存在唯一單根。
輸出格式:
在一行中輸出該多項式在該區間內的根,精確到小數點後2位。
輸入樣例:3 -1 -3 1 -0.5 0.5輸出樣例:
0.33
代碼:
#include#include #include #include #include #include using namespace std; const int maxn=100002; const int inf=0x3f3f3f3f; const double eps=1e-8; double a3,a2,a1,a0; double _left,_right; double fun(double x) { return a3*pow(x,3)+a2*pow(x,2)+a1*x+a0; } int main() { cin>>a3>>a2>>a1>>a0; cin>>_left>>_right; double mid; while(_right-_left>eps) { mid=(_left+_right)/2; //一定要注意定義在while循環裡面,否則會超時! if(fun(mid)==0) { printf("%.2lf\n",mid); break; } else if (fun(mid)*fun(_left)>0) _left=mid; else _right=mid; } if(fun(mid)!=0) printf("%.2lf\n",mid); return 0; }