對分法的理論依據是:設f是區間[a,b]上得連續函式,滿足f(a)f(b)<0,那麼f在a和b之間有乙個根r,使得f(r) = 0
演算法分析:
1.首先確定r在(a,b)區間內
2.令c0 = (a0 + b0)/2
if f(c0)f(a0) < 0
b1 = c0; a1 = a0
else
a1 = c0; b1 = b0
3.以此類推
matlab**實現:
%**執行前先要建立乙個內聯函式,比如f=inline('x^3 + x - 1')
function xc =bisect(f,a,b,tol)
if sign(f(a))*sign(f(b)) >=0
error(
'f(a)f(b)<0 not satisfied!')
endfa =f(a);
fb =f(b);
k =0;
while (b - a)/2 > tol %這裡的tol是指求根時要求的精度
c = (a + b)/2;
fc =f(c);
if fc ==0
break
end
if sign(fc)*sign(fa) <0
b =c;
fb =fc;
else
a =c;
fa =fc;
endendxc = (a + b)/2
演算法的精度:
設[a0,b0]為初始區間,
第一次對分後變為[a1,b1],長度變為(b0 - a0)/2
第一次對分後變為[a2,b2],長度變為(b0 - a0)/2^2
第n次對分後變為[an,bn],長度變為(b0 - a0)/2^n
我們取xc = (an + bn)/2 為根的近似,
則誤差為:|xc - r| < (b0 - a0)/2^(n+1)
我們定義:如果誤差小於0.5x10^(-p),那麼解精確到p位小數
這樣一來,我們就可以根據所要求的解的精確度來確定需要對分的次數n了。
例子:在區間[0,1]上求f(x)=cosx - x的根,精確到6位小數
根據誤差公式:(1-0)/2^(n+1) < 0.5*10^(-6)
可以求得 n >= 19.9
也就是說至少要對分20次才能達到所要求的精度。
解方程 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要使用二分法解答此題,我...
二分法求解方程
二分法是一種求解方程近似根的方法。對於乙個函式 f x f x 使用二分法求 f x f x 近似解的時候,我們先設定乙個迭代區間 在這個題目上,我們之後給出了的兩個初值決定的區間 20,20 20,20 區間兩端自變數 xx 的值對應的 f x f x 值是異號的,之後我們會計算出兩端 xx的中點...
解方程 二分法 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...