牛頓迭代法 二分法

2021-04-13 01:11:00 字數 918 閱讀 2668

牛頓迭代法

用牛頓迭代法求f(x)=0在x0附近的乙個實根的方法是:

(1) 選乙個接近於x的真實根的近似根x1;

(2) 通過x1求出f(x1)。在幾何上就是作x=x1,交f(x)於f(x1);

(3) 過f(x1)作f(x)的切線,交x軸於x2。可以用公式求出x2。由於f'(x1)=f(x1)/(x2-x1),故x2=x1-f(x1)/f'(x1)

(4) 通過x2求出f(x2);

(5) 再過f(x2)作f(x)的切線交x軸於x2;

(6) 再通過x3求出f(x3),…一直求下去,直到接近真正的根。當兩次求出的根之差|xn+1-xn|≤ε就認為 xn+1足夠接近於真實根。

牛頓迭代公式是:xn+1=xn-f(xn)/f'(xn)

牛頓迭代法的關鍵就是計算這個迭代公式,並在程式中進行迭代運算即可。

該問題程式相對簡單,就不列舉了,控制一下迭代精度,直到達到需要目標即可。

有乙個問題需要注意的是,該方法能夠有效的基本條件是:

迭代公式必須是收斂的( 也就是通過迭代運算,每一次的結果必須是更接近真實值的)。

二分法任取兩點x1和x2,判斷(x1,x2)區間內有無乙個實根。如果f(x1)和f(x2)符號相反,說明(x1,x2)之間有乙個實根。取(x1,x2)的中點x,檢查f(x)與f(x1)是否同符號,如果不同號,說明實根在(x,x1)區間,這樣就已經將尋找根的範圍減少了一半了。然後用同樣的辦法再進一步縮小範圍。再找x1與x2(x2=x)的中點「x」,並且再捨棄其一半區間。如果f(x)與f(x1)同號,則說明根在(x,x2)區間,再取x與x2的中點,並捨棄其一半區間。用這個辦法不斷縮小範圍,直到區間相當小為止。

float fun(float x)  // 計算f(x)

int main()

...

return 0;

}

二分法和牛頓迭代法

先說乙個面試題 問 1.2 0.2 1 答案是false!為什麼?其原因在於十進位制和二進位制的轉換上,計算機先要把十進位制的數轉化為二進位制,然後再計算。但是,在轉化中,浮點數轉化為二進位制,就出問題了,例如 十進位制的 0.1,轉化為二進位制是 0.00011001100110011001100...

sqrt函式實現 二分法 牛頓迭代法

在leetcode練習時,碰到一道經典的面試題,如何實現sqrt 開平方函式。當然,很簡單的是呼叫系統函式,但是難道不能自己實現這個函式的功能嗎?於是一番思索和查閱資料,看到下面的方法。二分法這個應該很熟悉,在二分查詢演算法中就有具體的體現。應用在此題上,也是合適不過的。首先分析一下這道題 實現sq...

牛頓迭代法和二分法求方程根

0x03直接給出公式x x0 f x0 f x0 設迭代到 x x0 1e 5例子 2x 3 4 x 3x 6 0 include include int main while fabs x x0 1e 5 return x 0x04簡單說一下 f就是式子,fd為f x 然後套用公式就好了最後判斷是...