例題:求方程:8x^4 + 7x^3 + 2x^2 + 3x + 6 == y在[0,100]之間的解
input
輸入的第一行包含乙個整數t(1 <= t <=100),表示測試用例的數目。接下來t個數字,每一行都有乙個實數y(abs(y)<=1e6);
output
對於每個測試用例,如果有解,你應該輸出乙個實數(精確到小數點後4位,四捨五入),如果在0到100之間無解,就輸出「no solution!」。
本題其實就是讓求出該方程的近似解,而求方程的近似解有很多方法,其中包括二分法和迭代法:
1、二分法:
二分法的思想就是在區間[a,b]上,取其中點,通過判斷f((a+b)/2)的大小來判斷根的範圍,從而減小一般的區間,這種方法的時間複雜度為:o(logn)。
**如下:
#include#include#includeusing namespace std;
const double ee = 1e-4;
int er_fen(double n,double y)
int main()
printf("%.4lf\n", s);
}return 0;
}
2、迭代法(牛頓切線法):
迭代法就是利用函式的切線來做題,開始時在函式值與二次導數所對應的函式正負一樣的一端做切線,比如在x0處做切線,則切線方程為:y-f(x0)=f』(x0)(x-x0),令y=0得:x1=x0-f(x0)/f』(x0),這裡的x1就是這條切線與x軸的交點的橫座標,它比x0更接近方程的根,再在點(x1,f(x1))處做切線,可得近似值x2,如此繼續,就得到了乙個迭代關係式:xn+1=xn-f(xn)/f』(xn),這樣就可以找到根的近似值。
**如下:
#include#include#includeusing namespace std;
const double ee = 1e-4;``
double die_dai(double x1,double y)
int main()
else
x1 = 100;
x2 = die_dai(x1, y);
while (abs(x2 - x1) > ee)
printf("%.4lf\n", x1);
}return 0;
}
割線法求方程根
維基百科,自由的百科全書 跳轉至 導航 搜尋在數值分析中,割線法是乙個求根演算法,該方法用一系列割線的根來近似代替函式 f的根。割線法的最初兩個迭代。紅色曲線表示函式 f,藍色曲線表示割線。割線法由以下的遞推關係定義 從上式中可以看出,割線法需要兩個初始值x 0和x1,它們離函式的根越近越好。給定x...
二分 求方程的根
3 求方程的根 源程式名 equation.pas,c,cpp 可執行檔名 equation.exe 輸入檔名 equation.in 輸出檔名 equation.out 問題描述 輸入m,n,p,a,b,求方程f x mx nx px 0在 a,b 內的根。m,n,p,a,b均為整數,且a 樣例 ...
1 6 牛頓迭代法求方程的根
問題描述 編寫用牛頓迭代法求方程根的函式。方程為 a x 3 b x 2 c x d 0,係數a,b,c,d由主函式輸入。求x在1附近的乙個實根。求出根後,由主函式輸出。如下 include float slove int modulus 0pow,int modulus 1pow,int modu...