本博客已經遷往http://www.kemaswill.com/, 博客園這邊也會繼續更新, 歡迎關注~
牛頓方法是一種求解等式的非常有效的數值分析方法.
1. 牛頓方法
假設\(x_0\)是等式的根\(r\)的一個比較好的近似, 且\(r=x_0+h\), 所以\(h\)衡量了近似值\(x_0\)和真實的根\(r\)之間的誤差. 假定\(h\)很小, 根據泰勒展開式:
$$0=f(r)=f(x_0+h)\approx f(x_0)+hf'(x_0)$$
所以, 當\(f'(x_0)\)不接近\(0\)時, 有
$$h\approx -\frac{f(x_0)}{f'(x_0)}$$
所以新的近似值\(x_1\)應該取值:
$$x_1=x_0-\frac{f(x_0)}{f'(x_0)}$$
推廣得
$$x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$$
2. 牛頓方法的幾何解釋
牛頓方法的幾何解釋很直觀: 在當前點\(x_n=a\)處, 做函數\(f(x)\)的切線, 該切線的\(x\)軸截距就是\(x_{n+1}=b\), 然后再在該點處做切線...以此類推:
3. 牛頓方法的收斂性:
牛頓方法是二次收斂的: 令\(\epsilon_{n}=r-x_n\), 則\(\epsilon_{n+1}=\frac{-f"(\xi_n)}{2f'(x_n)}\epsilon_n^2\), 亦即在根\(r\)附近時, 牛頓方法的每次迭代基本上都可以使得近似解的有效數字增倍. 證明如下:
令等式的根為\(r\), \(f(x)\)二階可導, 則根據泰勒展開式:
$$f(r)=f(x_n)+f'(x_n)(r-x_n)+R_1$$
其中\(R_1=\frac{1}{2!}f''(\xi_n)(r-x_n)^2\), 其中\(\xi_n\)位於\(x_n\)和\(r\)之間.
因為\(r\)是跟, 則:
$$0=f(r)=f(x_n)+f'(x_n)(r-x_n)+\frac{1}{2}f''(\xi_n)(r-x_n)^2$$
上式除以\(f'(x_n)\)可得
$$\frac{f(x_n)}{f'(x_n)}+(r-x_n)=\frac{-f''(\xi_n)}{2f'(x_n)}(r-x_n)^2$$
因為\(x_{n+1}\)的可以定義為:
$$x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$$
所以
$$r-x_{n+1}=\frac{-f"(\xi_n)}{2f'(x_n)}(r-x_n)^2$$
$$\epsilon_{n+1}=\frac{-f"(\xi_n)}{2f'(x_n)}\epsilon_n^2$$
但是, 當初始值\(x_0\)不在\(r\)附近時, 牛頓方法可能會陷入局部極值或者死循環:
4. 割線方法(Secant Method)
割線方法是牛頓方法的變種, 可以避免計算函數的導數.
初始時設置兩個根的近似值\(x_0,x_1\), 對於\(n\leq1\):
$$x_{n+1}=x_n-\frac{f(x_n)}{Q(x_{n-1},x_n)}$$
其中
$$Q(x_{n-1},x_n)=\frac{f(x_{n-1})-f(x_n)}{x_{n-1}-x_n}$$
割線方法通過使用割線來替代牛頓方法中的切線, 來避免可能非常復雜的函數求導. 但是為了達到相同的精度, 割線方法可能多需要45%的迭代次數.
參考文獻:
[1]. The Newton-Raphson Method
[2]. William H.Press, Saul A. Teukolsky, William T. Vetterling, Brain P.Flannery. Numerical Recipes: The Art of Scientific Computing. Section 9.4, Newton-Raphson Method Using Derivative.