数值分析算法总结
数值分析的算法总结,用 Python 简要描述各种方法。考前复(yu)习向。
本文给出的代码主要是针对闭卷考试背算法写的。我 jo 得记数学公式和写 LaTeX 一样,是件比写代码更可怕的事。所以,把一些主要的算法用程序写了出来,方便记忆。
(其中一部分是考试前复习时写的,经过考场的抽样检验,比较靠谱。但那时写的不太完整,后面又补充写了点,这时成绩都出了,学的也都忘了,所以可能不太对,总之别报太大期望啦~)
如果你需要的是更全的各种算法完整的代码实现与描述,请移步:
All right, talk is cheap, let me show you the code!
文章目录
非线性方程求根
二分法
x = (a + b) / 2
while True:
if f(x) * f(a) < 0:
b = x
else:
a = x
x = (a + b) / 2
不动点迭代
x = x_0
while True:
x = phi(x)
收敛:diff(phi, x)
存在且连续 && abs(diff(phi, x)(x_0)) < 1
。
or: 设 x ∗ x^* x∗ 为 f ( x ) = 0 f(x)=0 f(x)=0 的根,可以得到 x ∗ = . . . ( x ∗ ) x^*=...(x^*) x∗=...(x∗),所以 x ∗ x^* x∗ 为 x = phi(x)
的不动点,对 x ∗ x^* x∗ 领域的 x:abs(diff(phi, x)) < 1
牛顿迭代
x = x_0
while True:
x -= f(x) / df(x)
插值
Lagrange 插值
def lagrange_interpolate(points):
L = 0 # 插值多项式
for i, (xi, yi) in enumerate(points):
li = 1
for j, (xj, yj) in enumerate(points):
if j == i:
continue
li *= (x - xj) / (xi - xj)
L += yi * li
return L
这个程序不太好懂,还是看公式:
L ( x ) = ∑ j = 0 k y j ℓ j ( x ) L(x)=\sum _{j=0}^{k}y_{j}\ell _{j}(x) L(x)=j