牛頓迭代法:
牛頓迭代法又稱為牛頓-拉夫遜方法,它是牛頓在17世紀提出的一種在實數域和複數域上*似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的*似根就顯得特別重要。方法使用函式f(x)的泰勒級數的前面幾項來尋找方程f(x) = 0的根。牛頓迭代法是求方程根的重要方法之一,其最大優點是在方程f(x) =
0的單根附*具有*方收斂,而且該法還可以用來求方程的重根、復根,此時線性收斂,但是可通過一些方法變成超線性收斂。另外該方法廣泛用於計算機程式設計中。
牛頓迭代公式:
設r是f(x) = 0的根,選取x0作為r初始*似值,過點(x0,f(x0))做曲線y = f(x)的切線l,l的方程為y = f(x0)+f'(x0)(x-x0),求出l與x軸交點的橫座標 x1 = x0-f(x0)/f'(x0),稱x1為r的一次*似值。過點(x1,f(x1))做曲線y = f(x)的切線,並求該切線與x軸交點的橫座標 x2 = x1-f(x1)/f'(x1),稱x2為r的二次*似值。重複以上過程,得r的*似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),稱為r的n+1次*似值,上式稱為牛頓迭代公式。
牛頓迭代法求*方根:
求*方根在牛頓迭代公式中,f(x)=x^2-a,則f'(x)=2x。以上的牛頓迭代公式變為:x(n+1)=x(n)-(x(n)^2-a)/2x,即(x(n)+a/x(n))/2。
我們隨便猜乙個數r,假設r是f(x)=0的根,經過幾次牛頓迭代公式後(以上的公式)所得到的x值即是f(x)=0的根或者其非常精確的*似值。
例如:我想求根號2等於多少。假如我猜測的結果為4,雖然錯的離譜,但你可以看到使用牛頓迭代法後這個值很快就趨*於根號2了:
( 4 + 2/4 ) / 2 = 2.25
( 2.25 + 2/2.25 ) / 2 = 1.56944..
( 1.56944..+ 2/1.56944..) / 2 = 1.42189..
( 1.42189..+ 2/1.42189..) / 2 = 1.41423..
盜圖一張以作說明,來自
..程式實現:
#include
#include
using namespace std;
double sqrtnt(double a,double b)
while(x*x!=a&&(abs(last-x)>0.0000001))
return x;
}int main()
求乙個非負數的平方根 sqrt實現
學過c或任何一種包含標準庫語言的我們,求解乙個非負數的平方根自然來的容易,隨便呼叫下類似sqrt的函式就一切ok了!比較喜歡 的同學也會好奇不用sqrt怎麼實現求乙個數的平方根,或者說sqrt是如何實現的,這種題目也時常會出現在一些公司的面試中。本人雖然以前也好奇過,但從未嘗試去查詢資料 一番,今有...
js 實現2的n次方計算函式 雜湊函式
一 概念 將任意長度的輸入變換為固定長度的輸出的不可逆的單向密碼體制。hash函式h將可變長度的資料塊m作為輸入,產生固定長度的hash值 h h m 其中h是定長的雜湊值,h是雜湊函式,m是乙個變長訊息。稱m是h的原像。因為h是多對一的對映,所以對於任意給定的hash值h,對應有多個原像。如果滿足...
填空題 無計算器巧算2的平方根
double n 2 double a 0 double b n while fabs a b 1e 15 printf f n a 注意點 如果沒有計算器,我們如何求2的平方根?可以先猜測乙個數,比如1.5,然後用2除以這個數字。如果我們猜對了,則除法的結果必然與我們猜測的數字相同。我們猜測的越準...