IIS 10.0 無法安裝 URL rewrite重寫模組 2.0解決辦法
阿新 • • 發佈:2022-04-15
牛頓迭代法
求近似解
概念
牛頓法又稱為牛頓-拉弗森方法,它是一種在實數域和複數域上近似求解方程的方法。方法使用函式\(f(x)\)的泰勒級數的前面幾項來尋找方程\(f(x)=0\)的根。
注意:牛頓法只能逼近解,不能計算精確解。
原理
利用泰勒公式,在\(x_0\)處展開,展開到一階,即:
\[f(x)=f(x_0)-f^{'}(x_0)(x-x_0) \tag{1} \]令\(f(x)=0\),就是我們要找的方程的解,即:
\[x_1=x_0-\frac{f(x_0)}{f^{'}(x_0)} \tag{2} \]同理,在\(x_1\)處展開,則:
\[x_2=x_1-\frac{f(x_1)}{f^{'}(x_1)} \tag{3} \]依次計算,最終的根將無線逼近方程的解:
開二次方
要求常數\(a\)的近似解,我們可以建構函式,\(f(x)=x^2-a\),\(f^{'}(x)=2x\),則原來的牛頓迭代式為:
\[\Rightarrow x_{n+1}=x_n-\frac{x^2_n-a}{2x_n}=\frac{1}{2}(x_n+a/x_n) \tag{5} \]給方程一個迭代初始值,\(x_0=a\),然後依次迭代求得方程近似解。
注意:初始化為負數可能會出現負數。
程式碼
public static double static sqrt(double a){ if(a<0) return Double.NAN; double e=1e-7; double t=a; while(Math.abs(t*t-a)>e) { t=(a/t+t)/2.0; } return t; }
拓展
牛頓法開\(k\)次方,建構函式\(f(x)=x^k-a\),\(f^{'}(x)=kx^{k-1}\),則牛頓迭代式為:
\[x_{n+1}=x_n-\frac{x^k_n-a}{kx^{k-1}_n}=\frac{k-1}{k}x_n+\frac{a}{kx^{k-1}_n} \tag{6} \]優化演算法
除了經常被提起的梯度下降法,牛頓法也是機器學習中用的比較多的一種優化演算法,牛頓法的速度很快,而且能高度逼近最優值。
求解優化函式\(f(x)\),轉化為求\(f^{'}(x)=0\)的解。
對\(x_k\)點進行泰勒展開,具體展開到二階:
\[f(x)=f(x_k)+f^{'}(x_k)(x-x_k)+ \frac{1}{2}f^{''}(x_k)(x-x_k)^2 \tag{7} \]函式兩邊同時對\(x\)
公式(9)
就是牛頓迭代更新公式。