不动点迭代法求方程的根(Python实现)

不动点迭代法

将原先的
f(x)=0 f(x) = 0
转化成
x=h(x) x = h(x)
的方式进行求解。

不动点的存在性定理

定理1

如果 f(x)f(x) 为区间[a,b][a, b]上的连续函数,且满足下面两个条件:

  1. 压缩性:对于 x[a,b]x \in [a, b], af(x)ba \leq f(x) \leq b

  2. 大L性质:存在正常数L<1, 使得,对于任意的x,y[a,b]x, y \in [a, b] 都有,
    f(x)f(y)Lxy |f(x) - f(y)| \leq L|x-y|

则存在有唯一的不动点。

构造h(x)=f(x)xh(x) = f(x) - x,再用连续函数的介值定理就可以证明存在性,唯一性代入就可证明。

局部收敛定理:

若有这样的不动点 xx^* ,如果存在有在不动点附近的某个领域,满足有h(x)<1h'(x) < 1,则迭代法:
xt+1=h(xt) x_{t+1} = h(x_t)
局部收敛。

  • h(x)h'(x^*)数值越接近0,收敛速度越快。
  • 如果对于小于n次的导数在不动点出都为0,且h(n)(x)h^{(n)}(x) 不一定为0,则称为n阶收敛

举列子

  • 求根号数的迭代(不妨取根号3)

迭代方式有很多种比如:
x23=0x=xλ(x23)λ[0,1]xk+1=xkλ(xk23) \begin{aligned} x^2 - 3 =& 0 \\ x =& x - \lambda (x^2 - 3) & \lambda \in [0, 1] \\ x_{k+1} =& x_{k} - \lambda (x_{k}^2 - 3)\\ \end{aligned}

代码:

x = 1
for i in range(100):
    x = x - 0.1 * (x ** 2 - 3)
print(x)

输出:

1.7320508075688772

x23=0nx2=(n1)x2+3nNx=(n1)xn+3nxxk+1=(n1)xkn+3nxk \begin{aligned} x^2 - 3 =& 0 \\ nx^2 =& (n-1)x^2 + 3 & n \in N \\ x =& \frac{(n-1)x}{n} + \frac{3}{nx} \\ x_{k+1} =& \frac{(n-1)x_k}{n} + \frac{3}{nx_k}\\ \end{aligned}

代码:

x, n = 2, 2
for i in range(100):
    x = (n - 1) / n * x + 3 / (n * x)
print(x)

输出:

1.7320508075688772
  • 实际上的3\sqrt{3}
import math
math.sqrt(3)
  • 输出:1.7320508075688772

尾记

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章