二分法求解方程

2021-10-09 14:28:38 字數 1397 閱讀 3752

二分法是一種求解方程近似根的方法。對於乙個函式 f(x)f(x),使用二分法求 f(x)f(x) 近似解的時候,我們先設定乙個迭代區間(在這個題目上,我們之後給出了的兩個初值決定的區間 [-20,20][−20,20]),區間兩端自變數 xx 的值對應的 f(x)f(x) 值是異號的,之後我們會計算出兩端 xx的中點位置 x'x′ 所對應的 f(x')f(x′) ,然後更新我們的迭代區間,確保對應的迭代區間的兩端 xx的值對應的 f(x)f(x) 值還會是異號的。

重複這個過程直到我們某一次中點值 x'x′ 對應的 f(x') < \epsilonf(x′)epsilon)就可以將這個 x'x′ 作為近似解返回給main函式了。

例如:

上面所示的乙個迭代過程的第一次的迭代區間是 [a_1, b_1][a1​,b1​],取中點 b_2b2​,然後第二次的迭代區間是 [a_1, b_2][a1​,b2​],再取中點 a_2a2​,然後第三次的迭代區間是 [a_2, b_2][a2​,b2​],然後取 a_3a3​,然後第四次的迭代區間是 [a_3, b_2][a3​,b2​],再取紅色中點 cc,我們得到發現 f(c)f(c) 的值已經小於 \epsilonϵ,輸出 cc 作為近似解。

在這裡,我們將用它實現對形如 px + q = 0px+q=0的一元一次方程的求解。

在這裡,你完成的程式將被輸入兩個正整數 pp和 qq(你可以認為測評機給出的 0 < |p| \leq 10000

如果你覺得實在想不清楚這個過程,你可以參考一下這張流程圖。

測評機會反覆執行你的程式。每次程式執行時,輸入為一行,包括一組被空格分隔開的符合描述的正整數 pp 和 qq。你可以認為輸入資料構成的方程 px + q = 0px+q=0 都是有解且解在 [-20, 20][−20,20] 的區間內。

輸出為一行,包括乙個數字。為方程 px + q = 0px+q=0 的近似解。請使用四捨五入的方式保留小數點後 44 位小數。

#include #include #define epsilon 1e-7

double bisection(int p, int q, double (*func)(int, int, double));

double f(int p, int q, double x);

int main()

double bisection(int p, int q, double (*func)(int, int, double))

else

mid =(a+b)/2;

}return mid;

}double f(int p, int q, double x)

補充  異號判斷 整數和浮數

解方程 C 二分法

題目詳情 給出n個整數和x,請問這n個整數中是否存在三個數a,b,c使得ax2 bx c 0,數字可以重複使用。第一行兩個整數n,x 第二行n個整數a i 表示可以用的數 1 n 1000,1000 a i x 1000 yes表示可以 no表示不可以 2 1 1 2 yes要使用二分法解答此題,我...

解方程 二分法 HDU

problem description 給定方程 8x4 7x3 2x2 3x 6 y,請計算x在 0,100 範圍內的解。input 輸入資料首先是乙個正整數t 1 t 100 表示有t組測試資料。接下來t行,每行包含乙個實數y fabs y 1e10 output 請計算並輸出方程在範圍 0,1...

二分法求解方程的值 matlab

首先定義乙個二分求根的函式 function root bisect fun,a,b,eps n 1 round log b a log eps log 2 fa feval fun,a fb feval fun,b for i 1 n c b a 2 fc feval fun,c if fc fa...