斯特芬森迭代法(Python)
簡述
斯特芬森迭代法,本質上就使用了埃特金加速法的不動點迭代法。
GitHub:https://github.com/Sean16SYSU/Algorithms4N
Steffensen’s method
Aitken 加速方法
x1=φ(x0)x_1 = \varphi(x_0)x1?=φ(x0?)
再結合微分中值定理,有
x1?x?=φ(x0)?φ(x?)=φ′(ξ)(x0?x?)x_1 - x^* = \varphi(x_0) - \varphi(x^*) = \varphi'(\xi)(x_0 -x^*)x1??x?=φ(x0?)?φ(x?)=φ′(ξ)(x0??x?)
假設φ′(ξ)\varphi'(\xi)φ′(ξ)變化不大話,再代入有,
x2?x?=φ(x1)?φ(x?)=φ′(ξ)(x1?x?)x_2 - x^* = \varphi(x_1) - \varphi(x^*) = \varphi'(\xi)(x_1 -x^*)x2??x?=φ(x1?)?φ(x?)=φ′(ξ)(x1??x?)
則,消去φ′(ξ)\varphi'(\xi)φ′(ξ)后,得到,
x?=x0?(x1?x0)2x2?2x1+x0x^* = x_0 - \frac{(x_1 - x_0)^2}{x_2 - 2x_1+x_0}x?=x0??x2??2x1?+x0?(x1??x0?)2?
斯特芬森迭代法
使用了Aitken加速的不動點迭代法
{yk=φ(xk),zk=φ(yk)xk+1=xk?(yk?xk)2zk?2yk+xk\left\{ \begin{aligned} y_k = \varphi(x_k), z_k = \varphi(y_k) \\ x_{k+1} = x_k - \frac{(y_k - x_k)^2}{z_k - 2y_k+x_k} \end{aligned} \right. ??????yk?=φ(xk?),zk?=φ(yk?)xk+1?=xk??zk??2yk?+xk?(yk??xk?)2??
可以結合不動點迭代法來看,點擊訪問
代碼
關于求解根號3
x = 1 for i in range(5):y = x - 0.1 * (x ** 2 - 3)z = y - 0.1 * (y ** 2 - 3)x = x - (y-x)**2 / (z-2*y+x) print(x)輸出的結果過是:
1.7320508075688767畫圖和一般的作對比:
TIME = 5 x = 1 data = [] for i in range(TIME):data.append(x)y = x - 0.1 * (x ** 2 - 3)z = y - 0.1 * (y ** 2 - 3)x = x - (y-x)**2 / (z-2*y+x)data.append(x) plt.plot(data, label='stf')data = [] x = 1 for i in range(TIME * 5):data.append(x)x = x - 0.1 * (x ** 2 - 3) data.append(x) print(x)plt.plot(data, label='iter')plt.legend() plt.show() 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的斯特芬森迭代法(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生产者跟消费者问题(C++实现)
- 下一篇: 牛顿法求解方程(python和C++)