求方程的根的方法

2021-09-11 18:39:28 字數 1227 閱讀 8357

例題:求方程: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...