经典数值计算¶
数据插值¶
计算机处理离散化的数据,连续化之后便于人理解。
数学表述¶
\(f(x)\) 定义在 \([a, b]\) 上,\((x_0,y_0), (x_1,y_1), \cdots, (x_n,y_n)\) 是该区间上 \(n+1\) 个不同的点。找到一个性质稳定、便于计算的函数类 \(\Phi\) 中的简单函数 \(P(x)\),使得
则称 \(P(x)\) 是 \(f(x)\) 在 \([a, b]\) 上的插值函数。
先考虑多项式插值。
多项式插值¶
插值条件:
写成矩阵形式:
可以发现系数矩阵就是 Vandermonde 矩阵。
定理
对于 \(n+1\) 个互不相同的插值节点,满足插值条件的 \(n\) 次多项式存在且唯一。
理论上可以通过求解 Vandermonde 矩阵的逆来得到插值多项式的系数,但是 \(n\) 很大时计算量极大。由于唯一性,可以构造相对简单的形式。
线性插值¶
先考虑两个点 \((x_0, y_0), (x_1, y_1)\),插值条件为
可以得到
记 \(l_0(x) = \frac{x - x_1}{x_0 - x_1}, l_1(x) = \frac{x - x_0}{x_1 - x_0}\),则 \(P_1(x) = l_0(x) y_0 + l_1(x) y_1\)。我们称 \(l_0(x), l_1(x)\) 为线性插值的基函数。
可以发现 \(l_0(x), l_1(x)\) 是一阶多项式,且满足
拉格朗日插值¶
设法给出 \(n+1\) 个点情形下的插值基函数以及相应的误差限。
插值基函数¶
构造一系列基函数 \(l_k(x)\),满足
这样通过线性组合 \(P_n(x) = \sum_{k=0}^{n} l_k(x) \cdot y_k\) 就可以得到插值多项式。
\(l_k(x)\) 为 \(n\) 次多项式,同时在 \(n+1\) 个节点 \(x_0, x_1, \cdots, x_n\) 中有除 \(x_k\) 之外的 \(n\) 个根。为了满足这点,可以构造 \(\prod_{i \neq k}^{n} (x - x_i)\)。又考虑到归一化,再除以一个分母,这个分母就是分子代入 \(x = x_k\) 后的值 \(\prod_{i \neq k}^{n} (x_k - x_i)\)。展开来就是
于是我们得到了拉格朗日形式的多项式插值函数
误差限¶
定理
设 \(f(x)\) 一阶连续可导,且二阶导在开区间上存在,那么对 \(\forall x \in [a, b], \, \exists \xi \in [a, b]\),使得
Proof.
将 \(R(x)\) 表示为零点式: \(R(x) = f(x) - P_1(x) = k(x)(x - x_0)(x - x_1)\)
构造辅助函数 \(\phi(t) = f(t) - P_1(t) - k(x)(t - x_0)(t - x_1)\),则 \(\phi(t)\) 有三个零点 \(x_0, x_1, x\)。由 Rolle 定理,\(\exists \xi_1 \in (x_0, x), \xi_2 \in (x, x_1)\),使得 \(\phi'(\xi_1) = \phi'(\xi_2) = 0\)。再次应用 Rolle 定理,\(\exists \xi \in (\xi_1, \xi_2)\),使得 \(\phi''(\xi) = 0\)。
推广到 \(n\) 次插值多项式 \(P_n(x)\),记截断误差为
假设 \(f(x)\) 在区间 \([a, b]\) 上 \(n+1\) 次连续可导,那么对 \(\forall x \in [a, b], \, \exists \xi \in [a, b]\),使得
数据点的个数 \(n\) 越大,\((x - x_k)\) 越小,插值的精度越高。
然而,真实的 \(f(x)\) 未知,所以 \(f^{(n+1)}(\xi)\) 也难以估计。
牛顿插值¶
拉格朗日插值的问题在于每增加一个数据点,都需要重新计算所有的基函数。牛顿插值则没有这个问题。
一个 \(n\) 次多项式可以写成
可以认为此时 \(a_k\) 对应的基函数是 \(k\) 阶多项式 \(\prod_{i=0}^{k-1} (x - x_i)\)。增加数据点后,原先的基函数不变。
三次样条插值¶
三次样条插值函数
三次样条函数 \(S(x)\) 具有连续二阶导数,且满足 - \(S(x_k) = y_k, \quad k = 0, 1, \cdots, n\) - \(S(x)\) 在每个区间 \([x_k, x_{k+1}]\) 上次数不超过三次 - \(S(x), S'(x), S''(x)\) 在 \([a, b]\) 上连续
数据拟合¶
插值方法的局限性
- 当数据点数目较多时,插值函数的计算复杂度快速上升,同时插值效果也变差
- 实际的数据点集都是有误差/噪声的,真实函数 \(f(x)\) 不一定刚好通过这些点
- 有时单一函数不足以描述数据的特征
找到一个逼近函数 \(\phi(x)\),使得 \(\phi(x_i)\) 尽量靠近 \(y_i\)。“靠近”有多种定义方式
数值微分¶
数值积分¶
- 可以解析求解的问题:
\(\(\int_{a}^{b} f(x) dx = F(b) - F(a)\)\)
- 若:
- \(F\) 难以求解/无法用初等函数表示
- \(f\) 本身是离散的 则需要数值积分的方法