一维插值
线性插值就是将相邻两点用直线连接起来
用线性插值进行近似计算,当插值区间小时,近似程度较高。
用多项式$p(x) = a_0 + a_1 * x + a_2 * x^2 + ... + a_n * x^n $拟合
拉格朗日插值是用多条特殊的多项式函数,确定相应的系数,加权得到多项式函数
已知下面这几个点,我想找到一根穿过它们的曲线:
使用多项式是可以的, 但是大神的脑回路总是令人捉摸不透,拉格朗日是这么想的,第一,这肯定是多项式曲线,第二,他认为可以用多条曲线叠加得到,具体是这样的。
第一根曲线 \(f_1(x)\) ,在\(x_1\)点处,取值为1,其余两点取值为0:
同理在 \((x_2,f_2(x))\) ,\((x_3,f_3(x))\)处也这样做。
那么:
\[f(x) = y_1*f_1(x) + y_2*f_2x) + y_3*f_3(x)
\]
\[l_k(x) = \frac{(x-x_0)...(x-x_k-1)(x-x_k+1)...(x-x_n)}{(x_k-x_0)...(x_k-x_k-1)(x_k-x_k+1)...(x_k-x_n)} = \prod_{j = 0, j \neq k}^{n} \frac{x - x_j}{x_k - x_j}
基函数性质
(1)
\(
l_k(x_i) =
\begin{Bmatrix}
1, i=k \\
0, i \neq k
\end{Bmatrix}
(k = 0, 1 ... n)
\)
(2)\(l_k(x_i)\)是惟一确定的n次多项式
(3)拉格朗日插值所包含基函数个数与插值节点个数相同。
\[L_n(x) = \sum_{k=0}^{n}y_k l_k(x) = \sum_{k=0}^{n}y_k \prod_{j = 0, j \neq k}^{n} \frac{x - x_j}{x_k - x_j}
牛顿Newton插值基本思想是将待求的n次插值多项式\(P_n(x)\)改写为具有承袭性的形式,然后利用插值条件⑴确定\(P_n(x)\)的待定系数,以求出所要的插值函数。
用牛顿向前插值多项式计算
一阶均差:
二阶均差是一阶均差的均差:
三阶均差就是二阶均差的均差,以此类推,我们得到牛顿插值法为:
联系泰勒公式理解吧,大名鼎鼎的泰勒公式就是这么来的。
我们用二次函数:\(aX^2+bx+c\)来描述曲线,下图中一共有4个点,可以分成3个区间。每一个区间都需要一个二次函数来描述,一共需要9个未知数。下面的任务就是找出9个方程。
如下图所示:一共有\(x_0,x_1,x_2,x_3\)四个点,三个区间,每个区间上都有一个方程。
1.曲线方程在节点处的值必须相等,即函数在\(x_1,x_2\)两个点处的值必须符合两个方程,这里一共是4个方程:
\[a_1*x_1^2+b_1*x_1+c_1=f(x_1) \\
a_2*x_1^2+b_2*x_1+c_2=f(x_1) \\
a_2*x_2^2+b_2*x_2+c_2=f(x_2) \\
a_3*x_2^2+b_3*x_2+c_3=f(x_2) \\
2.第一个端点和最后一个端点必须过第一个和最后一个方程:这里一共是2个方程
3.节点处的一阶导数的值必须相等。这里为两个方程。
\[2*a_1*x_1+b_1 = 2*a_2*x_1+b_2 \\
2*a_2*x_1+b_2 = 2*a_3*x_2+b_3 \\
4.在这里假设第一个方程的二阶导数为0:这里为一个方程:
\[a_1=0
三次样条的原理和二次样条的原理相同,我们用函数\(aX^3+bX^2+cX+d\)这个函数来进行操作,这里一共是4个点,分为3个区间,每个区间一个三次样条函数的话,一共是12个方程,只要我们找出这12个方程,这个问题就算解决了。
1.内部节点处的函数值应该相等,这里一共是4个方程。
2.函数的第一个端点和最后一个端点,应该分别在第一个方程和最后一个方程中。这里是2个方程。
3.两个函数在节点处的一阶导数应该相等。这里是两个方程。
4.两个函数在节点处的二阶导数应该相等,这里是两个方程。
5.端点处的二阶导数为零,这里是两个方程。
\[a_1=0 \\
b_1=0 \\
二维插值
方法与一维数据插值类似
参考
1.Lagrange、Newton、分段插值法及Python实现
2.如何直观地理解拉格朗日插值法?
3.牛顿插值的几何解释是怎么样的?
4.三次样条插值法
5.(数值分析)各种插值法的python实现