拉格朗日插值和逐次线性插值

合集下载

插值的概念和各种基本方法

插值的概念和各种基本方法

插值的概念和各种基本方法插值是一种基于已知数据点的函数关系来估计未知数据点的方法。

在实际应用中,由于各种原因,我们经常只能通过有限的数据点来描述一个函数关系,而无法得到函数的精确表达式。

因此,通过插值方法,我们可以根据已知数据点推断出未知数据点的值,从而进行进一步的分析和预测。

插值的基本方法可以分为两类:多项式插值和非多项式插值。

1.多项式插值方法多项式插值是通过已知数据点构造一个多项式函数,使得该函数经过这些数据点,并且在插值区间内的其他位置也能够比较好地拟合实际数据。

常用的多项式插值方法包括拉格朗日插值和牛顿插值。

- 拉格朗日插值:拉格朗日插值是利用拉格朗日多项式来进行插值的方法。

给定 n+1 个已知数据点(x0, y0), (x1, y1), ..., (xn, yn),拉格朗日插值函数可以表示为:L(x) = Σ(yi * li(x))其中,li(x) = Π(x - xj) / Π(xi - xj),i ≠ j,函数 L(x)即为插值函数。

-牛顿插值:牛顿插值是通过对已知数据点进行差商运算来构造插值多项式的方法。

牛顿插值多项式可以表示为:N(x) = f[x0] + Σ(f[x0, x1, ..., xi] * (x - x0) * (x - x1)* ... * (x - xi-1))其中,f[x0, x1, ..., xi]表示 x0, x1, ..., xi 对应的差商。

2.非多项式插值方法非多项式插值方法是通过其他函数形式进行插值的方法,常用的非多项式插值方法包括分段线性插值和样条插值。

-分段线性插值:分段线性插值是将插值区间划分为多个小区间,然后在每个小区间内用线性函数来逼近实际数据。

具体地,给定相邻的两个已知数据点(x0,y0)和(x1,y1),分段线性插值函数可以表示为:L(x)=(y1-y0)/(x1-x0)*(x-x0)+y0-样条插值:样条插值是利用分段多项式函数来进行插值的方法。

第二章插值与拟合

第二章插值与拟合

1 不为零。
xn
n xn xn
实 用 测 量 数 据 处 理 方 法
中 南 大 学
三、线性插值
假定已知区间[xk, xk+1] 的端点处的函数值 yk=f(xk), yk+1=f(xk+1),要求线性插值多项式 L1(x),使它满足 L1(xk)=yk
L1(xk+1)=yk+1
则L1(x)的表达式可按下式给出:
实 用 测 量 数 据 处 理 方 法
中 南 大 学
l k 1 ( x k 1 ) 1, l k 1 ( x j ) 0( j k , k 1) l k ( x k ) 1, l k ( x j ) 0( j k 1, k 1) (28) l k 1 ( x k 1 ) 1, l k 1 ( x j ) 0( j k 1, k ) 满足(28 )式的插值基函数很容 易求出的,例如求 l k 1 ( x),因为它有两个零点 k 和x k 1,故可表达为: x l k 1 ( x) A( x x k )(x x k 1 ) 其中A为待定系数可由 k 1 ( x k 1 ) 1定出: l 1 A ( x k 1 x k )(x k 1 x k 1 ) ( x x k )(x x k 1 ) 于是l k 1 ( x)= ,同理可得 ( x k 1 x k )(x k 1 x k 1 ) ( x x k-1 )(x x k 1 ) ( x x k 1 )(x x k ) l k ( x)= ,l k 1 ( x)= ( x k x k-1 )(x k x k 1 ) ( x k+1 x k 1 )(x k 1 x k )
解:2、抛物插值

数值分析插值知识点总结

数值分析插值知识点总结

数值分析插值知识点总结一、插值的基本概念插值是指在已知数据点的基础上,通过某种数学方法求得两个已知数据点之间的未知数值。

插值方法的基本思想是在已知数据点之间找出一个合适的函数形式,使得该函数穿过已知数据点,并预测未知点的数值。

插值问题通常出现在实际工程、科学计算中,比如天气预报、经济数据的预测、地震勘探等领域。

插值可以帮助人们预测未知点的数值,从而更好地了解数据之间的关系。

二、插值的分类根据插值的基本原理,插值方法可以分为多种类型,常见的插值方法包括:拉格朗日插值、牛顿插值、分段插值、立方插值、样条插值等。

1. 拉格朗日插值拉格朗日插值是一种通过拉格朗日多项式来实现数据插值的方法。

该方法通过已知的数据点(x1,y1), (x2,y2),...,(xn,yn)来确定一个n-1次的多项式P(x),使得P(xi)=yi。

2. 牛顿插值牛顿插值是利用牛顿插值多项式来实现数据插值的方法。

该方法通过已知的数据点(x1,y1), (x2,y2),...,(xn,yn)来确定一个n-1次的多项式P(x),使得P(xi)=yi。

3. 分段插值分段插值是将插值区间分割成多个小区间,然后在每个小区间内采用简单的插值方法进行插值。

常见的分段插值方法包括线性插值和抛物线插值。

4. 立方插值立方插值是一种通过构造三次多项式来实现数据插值的方法。

该方法通过已知的数据点(x1,y1), (x2,y2),...,(xn,yn)来确定一个三次多项式P(x),使得P(xi)=yi。

5. 样条插值样条插值是一种通过构造分段三次多项式来实现数据插值的方法。

该方法通过已知的数据点(x1,y1), (x2,y2),...,(xn,yn)来确定一个分段三次多项式P(x),使得P(xi)=yi。

三、插值的应用插值方法在实际工程中有着广泛的应用,常见的应用包括图像处理、声音处理、地图绘制、气象预测、经济预测等领域。

1. 图像处理在图像处理中,插值方法主要用于图像的放大、缩小以及图像的重构等操作。

拉格朗日(Lagrange)插值

拉格朗日(Lagrange)插值

p2(7) =
(1–4)(1–9)
*1 + (4–1)(4–9)
*2
(7–1)(7–4)
+ (9–1)(9–4) * 3
= 2.7
例5.4 已知函数y=f(x)在节点上满足
x x0 x1 x2
y y0 y1 y2
求二次多项式 p(x) = a0 + a1x + a2x2
使之满足 p(xi) = yi
li (x的) 插值
lk (x0 ) 0,,lk (xk1) 0,lk (xk ) 1,lk (xk1 ) 0,,lk (xn ) 0

lk
(xi )
ki
1 0
(i k) (i k)
由条件 lk (xi ) 0 ( i k)知, x0 , x1,, xk1, xk1,, xn
都是n次 lk (x) 的零点,故可设
l0 (x)
再由另一条件 l0 (x0
c(x
) 1
x1 )( x x2
确定系数
)
c
(x0
1 x1)( x0
x2
)
从而导出
l0 (x)
(x (x0
x1)( x x2 ) x1 )( x0 x2 )
类似地可以构造出满足条件: l1(x1) 1, l1(x0 ) 0,
的插值多项式
l1 ( x)
lk (x)
j0 jk
n
x xj
n
(xk x j )
j0 xk x j
jk
j0 jk
称 lk (x) 为关于基点 xi 的n次插值基函数(i=0,1,…,n)
以n+1个n次基本插值多项式 lk (x)(k 0,1,, n) 为基础,就能直接写出满足插值条件

拉格朗日插值和逐次线性插值

拉格朗日插值和逐次线性插值
作L1(x) ),使得
L1(x0 ) y0 , L1(x1) y1
y y = L1(x)
0 x0
x1 x
y L1(x)的几何意义就是通过两点(x0, y0 )与(x1, y1)的直线,
如图所示,L(1 x)的表达式可由几何意义直接给出:
(点斜式)
L1 ( x)
y0
y1 x1
y0 x0
(x
x0 )
y
(两点式)
y = L1(x)
L1 ( x)
x1 x x1 x0
y0
x x0 x1 x0
y1
0
x0
x1 x
---称为线性(一次)插值
L1(x)
y0
y1 y0 x1 x0
( x x0 )

L1 ( x)
y0
x x1 x0 x1
y1
x x0 x1 x0
l0 (x)
x x1 x0 x1
例2.2 由化学实验得到某种物质浓度yi与时间ti 的关系如表2-2.
ti 0. 0 0.5 1.0 1.5 2.0 yi 0. 0 0.19 0.26 0.29 0.31 求其它时间的物质浓度。
解法: 建立时间与物质浓度的简单数学模型, 或用插值法 。
问题1:基于未知函数或复杂函数的某些已知信息, 如何构造这些函数的近似表达式?
(x)
曲线 ( x)
近似 f ( x)
f(x)
研究问题:
(1)满足插值条件的 ( x) 是否存在唯一? (2)若满足插值条件的(x) 存在,如何构造(x)? (3)如何估计用 (x)近似替代 f ( x) 产生的误差?
x0
x1
x2
x3
x4

数据处理 拉格朗日插值简单介绍 -回复

数据处理 拉格朗日插值简单介绍 -回复

数据处理拉格朗日插值简单介绍-回复拉格朗日插值是一种常用的数据处理方法,用于通过已知数据点的坐标,推导出一个多项式函数来逼近这些数据点。

拉格朗日插值的优点是简洁直观,适用于一维数据的插值问题。

在本文中,我们将一步一步地介绍拉格朗日插值的原理、计算方法以及应用。

一、拉格朗日插值的原理拉格朗日插值的原理是基于拉格朗日多项式的概念。

拉格朗日多项式是一个满足特定条件的多项式,通过已知的数据点的坐标来推导出拉格朗日多项式,并利用该多项式逼近其他数据点。

设有n+1个已知数据点(x0, y0), (x1, y1), ... , (xn, yn),其中xi是自变量的取值,yi是对应的函数值。

我们希望通过这些数据点推导出一个n次多项式函数P(x),使得P(xi) = yi。

根据拉格朗日插值的原理,可以构造出一个满足上述条件的拉格朗日多项式:P(x) = L0(x)y0 + L1(x)y1 + ... + Ln(x)yn其中Li(x)是拉格朗日基函数,具体公式为:Li(x) = (x - x0)(x - x1)...(x - xi-1)(x - xi+1)...(x - xn) / (xi - x0)(xi -x1)...(xi - xi-1)(xi - xi+1)...(xi - xn)通过将已知数据点带入拉格朗日多项式,即可得到一个逼近这些数据点的多项式函数P(x)。

二、拉格朗日插值的计算方法下面我们介绍一种常见的计算拉格朗日插值的方法。

假设有n+1个已知数据点(x0, y0), (x1, y1), ... , (xn, yn),我们需要计算拉格朗日基函数Li(x)和拉格朗日多项式P(x)。

首先,计算每个拉格朗日基函数Li(x)的分母:di = (xi - x0)(xi - x1)...(xi - xi-1)(xi - xi+1)...(xi - xn)然后,计算每个拉格朗日基函数Li(x)的分子:ni = (x - x0)(x - x1)...(x - xi-1)(x - xi+1)...(x - xn)接下来,计算每个拉格朗日基函数Li(x):Li(x) = ni / di最后,将所有的拉格朗日基函数Li(x)与对应的函数值yi相乘并求和,得到拉格朗日多项式P(x):P(x) = L0(x)y0 + L1(x)y1 + ... + Ln(x)yn三、拉格朗日插值的应用拉格朗日插值在实际数据处理中有着广泛的应用。

常见插值算法--拉格朗日插值、三次卷积插值、三次样条插值、兰克索斯插值

常见插值算法--拉格朗日插值、三次卷积插值、三次样条插值、兰克索斯插值

常见插值算法--拉格朗⽇插值、三次卷积插值、三次样条插值、兰克索斯插值写在前⾯本⽂简单介绍了⼏种常见的插值算法并附带了相应的python代码,本⽂公式使⽤latex编写,如有错误欢迎评论指出,如果谁知道如何修改latex字号也欢迎留⾔关于⼀维、⼆维和多维插值三次卷积插值、拉格朗⽇两点插值(线性插值)、兰克索斯插值在⼆维插值时改变x和y⽅向的计算顺序不影响最终结果,这三个也是图像缩放插值时常⽤的插值算法,⽽其他插值在改变计算顺序时会产⽣明显差异,多维的情况笔者没有尝试,读者可以⾃⾏尝试或推导最近邻插值法(Nearest Neighbour Interpolation)在待求像素的四邻像素中,将距离待求像素最近的像素值赋给待求像素p_{11}p_{12}pp_{21}p_{22}python代码1def NN_interpolation(srcImg, dstH, dstW):2 scrH, scrW, _ = srcImg.shape3 dstImg = np.zeros((dstH, dstW, 3), dtype=np.uint8)4for i in range(dstH - 1):5for j in range(dstW - 1):6 scrX = round(i * (scrH / dstH))7 scrY = round(j * (scrW / dstW))8 dstImg[i, j] = srcImg[scrX, scrY]9return dstImg拉格朗⽇插值(Lagrange Interpolation)拉格朗⽇插值法需要找到k个p_i(x)函数,使得每个函数分别在在x_i处取值为1,其余点取值为0,则y_ip_i(x)可以保证在x_i处取值为y_i,在其余点取值为0,因此L_k(x)能恰好经过所有点,这样的多项式被称为拉格朗⽇插值多项式,记为L_k(x)=\sum_{i=1}^ky_ip_i(x)p_i(x)=\prod_{j \neq i}^{1 \leq j \leq k}\frac{x-x_j}{x_i-x_j}以四点即三次图像插值为例,因为横坐标间隔为1,则设四个点横坐标为-1、0、1和2,可得p_1(x)、p_2(x)、p_3(x)和p_4(x)假设y_1、y_2、y_3和y_4分别为1、2、-1、4,则可得拉格朗⽇函数如下图所⽰,待插值点横坐标范围为[0,1]在K=2时在k=2时,也被称为线性插值通⽤公式p_1=\frac{x-x_2}{x_1-x_2}p_2=\frac{x-x_1}{x_2-x_1}\begin{align} L_2x &= p_1y_1+p_2y_2 \nonumber \\ &= \frac{x-x_2}{x_1-x_2}y_1 + \frac{x-x_1}{x_2-x_1}y_2 \nonumber \end{align}图像插值像素分布如图所⽰p_{11}p_{12}pp_{21}p_{22}即当x_{i+1}=x_i+1时,设p与p_{11}的横纵坐标差分别为dx和dy\begin{align} L_2x &= \frac{x-x_2}{x_1-x_2}y_1 + \frac{x-x_1}{x_2-x_1}y_2 \nonumber \\ &= (x_2-x)y_1+(x-x_1)y_2 \nonumber \\ &= (1-dx)y_1+dxy_2 \nonumber \\ &= (y_2-y_1)dx+y_1 \nonumber \end{align}L_2'x=y_2-y_1在K=3时通⽤公式p_1=\frac{x-x_2}{x_1-x_2}\frac{x-x_3}{x_1-x_3}p_2=\frac{x-x_1}{x_2-x_1}\frac{x-x_3}{x_2-x_3}p_3=\frac{x-x_1}{x_3-x_1}\frac{x-x_2}{x_3-x_2}\begin{align} L_3x &= p_1y_1+p_2y_2+p_3y_3 \nonumber \\ &= \frac{x-x_2}{x_1-x_2}\frac{x-x_3}{x_1-x_3}y_1+\frac{x-x_1}{x_2-x_1}\frac{x-x_3}{x_2-x_3}y_2+\frac{x-x_1}{x_3-x_1}\frac{x-x_2}{x_3-x_2}y_3 \nonumber \end{align}图像插值像素分布如图所⽰p_{11}p_{12}p_{13}p_{21}p_{22}p_{23}pp_{31}p_{32}p_{33}即当x_{i+1}=x_i+1时,设p与p_{11}的横纵坐标差分别为dx和dy\begin{align} L_3x &= \frac{x-x_2}{x_1-x_2}\frac{x-x_3}{x_1-x_3}y_1 + \frac{x-x_1}{x_2-x_1}\frac{x-x_3}{x_2-x_3}y_2 + \frac{x-x_1}{x_3-x_1}\frac{x-x_2}{x_3-x_2}y_3 \nonumber \\ &= \frac{-dx(1-dx)}{(-1)\cdot(-2)}y_1 + \frac{-(1+dx)(1-dx)}{1\cdot(-1)}y_2 + \frac{(1+dx)dx}{2\cdot 1}y_3 \nonumber \\ &= (\frac{1}{2}d^2x-\frac{1}{2}dx)y_1 - (d^2x-1)y_2 + (\frac{1}{2}d^2x+\frac{1}{2}dx)y_3 \nonumber \\ &= d^2x(\frac{1}{2}y_1-y_2+\frac{1}{2}y_3)+dx(-\frac{1}{2}y_1+\frac{1}{2}y_3)+y_2 \nonumber \end{align}L_3'x=dx(y_1-2y_2+y_3)+(\frac{1}{2}y_3-\frac{1}{2}y_1)在K=4时通⽤公式p_1=\frac{x-x_2}{x_1-x_2}\frac{x-x_3}{x_1-x_3}\frac{x-x_4}{x_1-x_4}p_2=\frac{x-x_1}{x_2-x_1}\frac{x-x_3}{x_2-x_3}\frac{x-x_4}{x_2-x_4}p_3=\frac{x-x_1}{x_3-x_1}\frac{x-x_2}{x_3-x_2}\frac{x-x_4}{x_3-x_4}p_4=\frac{x-x_1}{x_4-x_1}\frac{x-x_2}{x_4-x_2}\frac{x-x_3}{x_4-x_3}\begin{align} L_4x &= p_1y_1+p_2y_2+p_3y_3+p_4y_4 \nonumber \\ &= \frac{x-x_2}{x_1-x_2}\frac{x-x_3}{x_1-x_3}\frac{x-x_4}{x_1-x_4}y_1 + \frac{x-x_1}{x_2-x_1}\frac{x-x_3} {x_2-x_3}\frac{x-x_4}{x_2-x_4}y_2 + \frac{x-x_1}{x_3-x_1}\frac{x-x_2}{x_3-x_2}\frac{x-x_4}{x_3-x_4}y_3 + \frac{x-x_1}{x_4-x_1}\frac{x-x_2}{x_4-x_2}\frac{x-x_3}{x_4-x_3}y_4\nonumber \end{align}图像插值p_{11}p_{12}p_{13}p_{14}p_{21}p_{22}p_{23}p_{24}pp_{31}p_{32}p_{33}p_{34}p_{41}p_{42}p_{43}p_{44}即当x_{i+1}=x_i+1时,设p与p_{11}的横纵坐标差分别为dx和dy\begin{align} L_4x &= \frac{x-x_2}{x_1-x_2}\frac{x-x_3}{x_1-x_3}\frac{x-x_4}{x_1-x_4}y_1 + \frac{x-x_1}{x_2-x_1}\frac{x-x_3}{x_2-x_3}\frac{x-x_4}{x_2-x_4}y_2 + \frac{x-x_1}{x_3-x_1}\frac{x-x_2}{x_3-x_2}\frac{x-x_4}{x_3-x_4}y_3 + \frac{x-x_1}{x_4-x_1}\frac{x-x_2}{x_4-x_2}\frac{x-x_3}{x_4-x_3}y_4 \nonumber \\ &= \frac{dx[-(1-dx)][-(2-dx)]}{(-1)\cdot(-2)\cdot(-3)}y_1 + \frac{(1+dx)[-(1-dx)][-(2-dx)]}{1\cdot(-1)\cdot(-2)}y_2 + \frac{(1+dx)dx[-(2-dx)]}{2\cdot 1\cdot(-1)}y_3 + \frac{(1+dx)dx[-(1-dx)]}{3\cdot 2\cdot 1}y_4 \nonumber \\ &= \frac{d^3x-3d^2x+2dx}{-6}y1 + \frac{d^3x-2d^2x-dx+2}{2}y_2 + \frac{d^3x-d^2x-2dx}{-2}y_3 + \frac{d^3x-dx}{6}y_4 \nonumber \\ &= d^3x(-\frac{1}{6}y_1+\frac{1}{2}y_2-\frac{1} {2}y_3+\frac{1}{6}y_4)+d^2x(\frac{1}{2}y_1-y_2+\frac{1}{2}y_3)+dx(-\frac{1}{3}y_1-\frac{1}{2}y_2+y_3-\frac{1}{6}y_4)+y_2 \nonumber \end{align}\begin{align} L_4'x &= d^2x(-\frac{1}{2}y_1+\frac{3}{2}y_2-\frac{3}{2}y_3+\frac{1}{2}y_4)+dx(y_1-2y_2+y_3)+(-\frac{1}{3}y_1-\frac{1}{2}y_2+y_3-\frac{1}{6}y_4) \nonumber \\ &= -[\frac{1}{2}d^2x(y_1-3y_2+3y_3-y_4)-dx(y_1-2y_2+y_3)+\frac{1}{6}(2y_1+3y_2-6y_3+y_4)] \nonumber \end{align}python代码插值核计算的时候乘法和加减法计算的顺序不同可能会导致结果存在细微的差异,读者可以⾃⾏研究⼀下1class BiLagrangeInterpolation:2 @staticmethod3def LagrangeInterpolation2(x, y1, y2):4 f1 = 1 - x5 f2 = x6 result = y1 * f1 + y2 * f27return result89 @staticmethod10def LagrangeInterpolation3(x, y1, y2, y3):11 f1 = (x ** 2 - x) / 2.012 f2 = 1 - x ** 213 f3 = (x ** 2 + x) / 2.014 result = y1 * f1 + y2 * f2 + y3 * f315return result1617 @staticmethod18def LagrangeInterpolation4(x, y1, y2, y3, y4):19 f1 = - (x ** 3 - 3 * x ** 2 + 2 * x) / 6.020 f2 = (x ** 3 - 2 * x ** 2 - x + 2) / 2.021 f3 = - (x ** 3 - x ** 2 - 2 * x) / 2.022 f4 = (x ** 3 - x) / 6.023 result = y1 * f1 + y2 * f2 + y3 * f3 + y4 * f424return result2526def biLag2_2(self, srcImg, dstH, dstW):27 dstH, dstW = int(dstH), int(dstW)28 srcH, srcW, _ = srcImg.shape29 srcImg = np.pad(srcImg, ((1, 1), (1, 1), (0, 0)), 'edge')30 dstImg = np.zeros((dstH, dstW, 3), dtype=np.uint8)31for dstY in range(dstH):32for dstX in range(dstW):33for channel in [0, 1, 2]:34# p11 p1235# p36# p21 p2237# 储存为 p(y, x)38 p = [dstY * srcH / dstH, dstX * srcW / dstW]39 p11 = [math.floor(p[0]), math.floor(p[1])]40 p12 = [p11[0], p11[1] + 1]4142 p21 = [p11[0] + 1, p11[1]]43 p22 = [p21[0], p12[1]]4445 diff_y, diff_x = p[0] - p11[0], p[1] - p11[1]46 r1 = grangeInterpolation2(diff_x, srcImg[p11[0], p11[1], channel], srcImg[p12[0], p12[1], channel])47 r2 = grangeInterpolation2(diff_x, srcImg[p21[0], p21[1], channel], srcImg[p22[0], p22[1], channel])4849 c = grangeInterpolation2(diff_y, r1, r2)5051 dstImg[dstY, dstX, channel] = np.clip(c, 0, 255)52return dstImg5354def biLag3_3(self, srcImg, dstH, dstW):55 dstH, dstW = int(dstH), int(dstW)56 srcH, srcW, _ = srcImg.shape57 srcImg = np.pad(srcImg, ((1, 1), (1, 1), (0, 0)), 'edge')58 dstImg = np.zeros((dstH, dstW, 3), dtype=np.uint8)59for dstY in range(dstH):60for dstX in range(dstW):61for channel in [0, 1, 2]:62# p11 p12 p1363#64# p21 p22 p2365# p66# p31 p32 p3367# 储存为 p(y, x)68 p = [dstY * srcH / dstH, dstX * srcW / dstW]69 p22 = [math.floor(p[0]), math.floor(p[1])]70 p21 = [p22[0], p22[1] - 1]71 p23 = [p22[0], p22[1] + 1]7273 p11 = [p21[0] - 1, p21[1]]74 p12 = [p11[0], p22[1]]75 p13 = [p11[0], p23[1]]7677 p31 = [p21[0] + 1, p21[1]]78 p32 = [p31[0], p22[1]]79 p33 = [p31[0], p23[1]]8081 diff_y, diff_x = p[0] - p22[0], p[1] - p22[1]82 r1 = grangeInterpolation3(diff_x, srcImg[p11[0], p11[1], channel], srcImg[p12[0], p12[1], channel], srcImg[p13[0], p13[1], channel])83 r2 = grangeInterpolation3(diff_x, srcImg[p21[0], p21[1], channel], srcImg[p22[0], p22[1], channel], srcImg[p23[0], p23[1], channel])84 r3 = grangeInterpolation3(diff_x, srcImg[p31[0], p31[1], channel], srcImg[p32[0], p32[1], channel], srcImg[p33[0], p33[1], channel]) 8586 c = grangeInterpolation3(diff_y, r1, r2, r3)8788 dstImg[dstY, dstX, channel] = np.clip(c, 0, 255)89return dstImg9091def biLag4_4(self, srcImg, dstH, dstW):92 dstH, dstW = int(dstH), int(dstW)93 srcH, srcW, _ = srcImg.shape94 srcImg = np.pad(srcImg, ((1, 2), (1, 2), (0, 0)), 'edge')95 dstImg = np.zeros((dstH, dstW, 3), dtype=np.uint8)96for dstY in range(dstH):97for dstX in range(dstW):98for channel in [0, 1, 2]:99# p11 p12 p13 p14100#101# p21 p22 p23 p24102# p103# p31 p32 p33 p34104#105# p41 p42 p43 p44106# 储存为 p(y, x)107 p = [dstY * srcH / dstH, dstX * srcW / dstW]108 p22 = [math.floor(p[0]), math.floor(p[1])]109 p21 = [p22[0], p22[1] - 1]110 p23 = [p22[0], p22[1] + 1]111 p24 = [p22[0], p22[1] + 2]112113 p11 = [p21[0] - 1, p21[1]]114 p12 = [p11[0], p22[1]]115 p13 = [p11[0], p23[1]]116 p14 = [p11[0], p24[1]]117118 p31 = [p21[0] + 1, p21[1]]119 p32 = [p31[0], p22[1]]120 p33 = [p31[0], p23[1]]121 p34 = [p31[0], p24[1]]122123 p41 = [p21[0] + 2, p21[1]]124 p42 = [p41[0], p22[1]]125 p43 = [p41[0], p23[1]]126 p44 = [p41[0], p24[1]]127128 diff_y, diff_x = p[0] - p22[0], p[1] - p22[1]129 r1 = grangeInterpolation4(diff_x, srcImg[p11[0], p11[1], channel], srcImg[p12[0], p12[1], channel], srcImg[p13[0], p13[1], channel], srcImg[p14[0], p14[1], channel]) 130 r2 = grangeInterpolation4(diff_x, srcImg[p21[0], p21[1], channel], srcImg[p22[0], p22[1], channel], srcImg[p23[0], p23[1], channel], srcImg[p24[0], p24[1], channel]) 131 r3 = grangeInterpolation4(diff_x, srcImg[p31[0], p31[1], channel], srcImg[p32[0], p32[1], channel], srcImg[p33[0], p33[1], channel], srcImg[p34[0], p34[1], channel]) 132 r4 = grangeInterpolation4(diff_x, srcImg[p41[0], p41[1], channel], srcImg[p42[0], p42[1], channel], srcImg[p43[0], p43[1], channel], srcImg[p44[0], p44[1], channel]) 133134 c = grangeInterpolation4(diff_y, r1, r2, r3, r4)135136 dstImg[dstY, dstX, channel] = np.clip(c, 0, 255)137return dstImg三次卷积插值法(Cubic Convolution Interpolation)使⽤上图中的卷积核进⾏加权平均计算,卷积核为u(s),四个等距(距离为1)的采样点记为x_0、x_1、x_2和x_3,采样数值记为y_0、y_1、y_2和y_3,且保证四个点均在[-2,2]区间上,计算得到g(x),假设y_1、y_2、y_3和y_4分别为1、2、-1、4,则可得三次卷积插值函数如下图所⽰,待插值点横坐标范围为[0,1]公式推导设u(s)=\begin{cases} A_1|s|^3+B_1|s|^2+C_1|s|+D_1, &0<|s|<1 \\ A_2|s|^3+B_2|s|^2+C_2|s|+D_2, &1<|s|<2 \\ 1, &s=0 \\ 0, &otherwise \end{cases}\because函数在s=0,1,2处连续\therefore\begin{cases} 1=u(0^+)=D_1 \\ 0=u(1^-)=A_1+B_1+C_1+D_1 \\ 0=u(1^+)=A_2+B_2+C_2+D_2 \\ 0=u(2^-)=8A_2+4B_2+2C_2+D_2 \end{cases} (1)\because函数在s=0,1,2处导函数连续\therefore\begin{cases} u'(0^-)=u'(0+) \\ u'(1^-)=u'(1+) \\ u'(2^-)=u'(2+)\end{cases} \Rightarrow \begin{cases} -C_1=C_1 \\ 3A_1+2B_1+C_1=3A_2+2B_2+C_2\\ 12A_2+4B_2+C+2=0 \end{cases} ~~~~ (2)联⽴⽅程组(1)(2),设A_2=a,解得\begin{cases} A_1=a+2 \\ B_1=-(a+3) \\ C_1=0 \\ D_1=1 \\ A_2=a \\ B_2=-5a \\ C_2=8a \\ D_2=-4a \end{cases}\Rightarrow u(s)=\begin{cases} (a+2)|s|^3-(a+3)|s|^2+1, &0<|s|<1 \\ A_2|s|^3+B_2|s|^2+C_2|s|+D_2, &1<|s|<2\\ 1, &s=0 \\ 0, &otherwise \end{cases}\because g(x)=\sum_kC_ku(s+j-k), ~~~~k=j-1,j, j+1,j+2且0<s<1⼜\because \begin{cases}\begin{align} u(s+1)&=as^3-2as^2+as \nonumber \\ u(s)&=(a+2)s^3-(a+3)s^2+1 \nonumber \\ u(s-1)&=-(a+2)s^3+(2a+3)s^2-as \nonumber \\ u(s-2)&=-as^3+as^2 \nonumber \end{align}\end{cases}\begin{align} \therefore g(x) &= C_{j-1}u(s+1)+C_{j}u(s)+C_{j+1}u(s-1)+C_{j+2}u(s-2) \nonumber \\ &= C_{j-1}(as^3-2as^2+as)+C_j[(a+2)s^3-(a+3)s^2+1]+C_{j+1}[-(a+2)s^3+ (2a+3)s^2-as]+C_{j+2}[-a^3+as^2] \nonumber \\ &= s^3[aC_{j-1}+(a+2)C_j-(a+2)C_{j+1}-aC_{j+2}]+s^2[-2aC_{j-1}-(a+3)C_j+(2a+3)C_{j+1}+aC_{j+2}]+s[aC_{j-1}-aC_{j+1}]+C_j \nonumber \end{align} ~~(3)f在x_j处泰勒展开得到f(x)=f(x_j)+f'(x_j)(x-x_j)+\frac{1}{2}f''(x_j)(x-x_j)^2+\cdots\therefore \begin{cases} f(x_{j+1})=f(x_j)+f'(x_j)(x_{j+1}-x_j)+\frac{1}{2}f''(x_j)(x_{j+1}-x_j)^2+\cdots \\ f(x_{j+2})=f(x_j)+f'(x_j)(x_{j+2}-x_j)+\frac{1}{2}f''(x_j)(x_{j+2}-x_j)^2+\cdots \\ f(x_{j-1})=f(x_j)+f'(x_j)(x_{j-1}-x_j)+\frac{1}{2}f''(x_j)(x_{j-1}-x_j)^2+\cdots \end{cases}令x_{j+1}-x_j=h\because x_{i+1}=x_i+1\therefore x_{j+2}-x_j=2h,x_{j-1}-x_j=-h\therefore \begin{cases} f(x_{j+2})=f(x_j)+2f'(x_j)h+2f''(x_j)h^2+\cdots \\ f(x_{j+1})=f(x_j)+f'(x_j)h+\frac{1}{2}f''(x_j)h^2+\cdots \\ f(x_{j-1})=f(x_j)-f'(x_j)h+\frac{1}{2}f''(x_j)h^2+\cdots \end{cases}\therefore \begin{cases} c_{j-1}=f(x_j)-f'(x_j)h+\frac{1}{2}f''(x_j)h^2+o(h^3) \\ c_j=f(x_j) \\ c_{j+1}=f(x_j)+f'(x_j)h+\frac{1}{2}f''(x_j)h^2+o(h^3)\\ c_{j+2}=f(x_j)+2f'(x_j)h+2f''(x_j)h^2+o(h^3) \end{cases} ~~ (4)将(4)代⼊(3),得g(x)=-(2a+1)[2hf'(x_j)+h^2f''(x_j)]s^3+[(6a+3)hf'(x_j)+\frac{4a+3}{2}h^2f''(x_j)]s^2-2ahf'(x_j)s+f(x_j)+o(h^3)\because h=1,s=x-x_J\therefore sh=x-x_j\begin{align}\therefore f(x)&= f(x_j)+f'(x_j)(x-x_j)+\frac{1}{2}f''(x_j)(x-x_j)^2+o(h^3) \nonumber \\ &= f(x_j)+f'(x_j)sh+\frac{1}{2}f''(x_j)s^2h^2+o(h^3) \nonumber \end{align}\therefore f(x)-g(x)=(2a+1)[2hf'(x_j)+h^2f''(x_j)]s^3-(2a+1)[3hf'(x_j)+h^2f''(x_j)]s^2+[(2a+1)hf'(x_j)]s+o(h^3)\because 期望f(x)-g(x)趋于0\therefore 2a+1=0 \Rightarrow a=-\frac{1}{2}\therefore u(s)=\begin{cases} \frac{3}{2}|s|^3-\frac{5}{2}|s|^2+1, &0<|s|<1 \\ -\frac{1}{2}|s|^3+\frac{5}{2}|s|^2-4|s|+2, &1<|s|<2 \\ 1, &s=0 \\ 0, &otherwise \end{cases}\therefore g(s)=s^3[-\frac{1}{2}c_{j-1}+\frac{3}{2}c_j-\frac{3}{2}c_{j+1}+\frac{1}{2}c_{j+2}]+s^2[c_{j-1}-\frac{5}{2}c_j+2c_{j+1}-\frac{1}{2}c_{j+2}]+s[-\frac{1}{2}c_{j-1}+\frac{1} {2}c_{j+1}]+c_j图像插值p_{11}p_{12}p_{13}p_{14}p_{21}p_{22}p_{23}p_{24}pp_{31}p_{32}p_{33}p_{34}p_{41}p_{42}p_{43}p_{44}python代码1class BiCubicConvInterpolation:2 @staticmethod3def CubicConvInterpolation1(p0, p1, p2, p3, s):4# ⽤g(s)公式计算,已经将四个u(s)计算完毕并整理5# as^3 + bs^2 + cs + d6 a = 0.5 * (-p0 + 3.0 * p1 - 3.0 * p2 + p3)7 b = 0.5 * (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3)8 c = 0.5 * (-p0 + p2)9 d = p110return d + s * (c + s * (b + s * a))1112 @staticmethod13def CubicConvInterpolation2(s):14# ⽤u(s)公式计算15 s = abs(s)16if s <= 1:17return 1.5 * s ** 3 - 2.5 * s ** 2 + 118elif s <= 2:19return -0.5 * s ** 3 + 2.5 * s ** 2 - 4 * s + 220else:21return 02223def biCubic1(self, srcImg, dstH, dstW):24# p11 p12 p13 p1425#26# p21 p22 p23 p2427# p28# p31 p32 p33 p3429#30# p41 p42 p43 p4431 dstH, dstW = int(dstH), int(dstW)32 scrH, scrW, _ = srcImg.shape33 srcImg = np.pad(srcImg, ((1, 1), (1, 1), (0, 0)), 'edge')34 dstImg = np.zeros((dstH, dstW, 1), dtype=np.uint8)35for dstY in range(dstH):36for dstX in range(dstW):37for channel in [0]:38 y = dstY * scrH / dstH39 x = dstX * scrW / dstW40 y1 = math.floor(y)41 x1 = math.floor(x)4243 array = []44for i in [-1, 0, 1, 2]:45 temp = self.CubicConvInterpolation1(srcImg[y1 + i, x1 - 1, channel],46 srcImg[y1 + i, x1, channel],47 srcImg[y1 + i, x1 + 1, channel],48 srcImg[y1 + i, x1 + 2, channel],49 x - x1)50 array.append(temp)5152 temp = self.CubicConvInterpolation1(array[0], array[1], array[2], array[3], y - y1)53 dstImg[dstY, dstX, channel] = np.clip(temp, 0, 255)5455return dstImg5657def biCubic2(self, srcImg, dstH, dstW):58# p11 p12 p13 p1459#60# p21 p22 p23 p2461# p62# p31 p32 p33 p3463#64# p41 p42 p43 p4465 dstH, dstW = int(dstH), int(dstW)66 scrH, scrW, _ = srcImg.shape67 srcImg = np.pad(srcImg, ((1, 1), (1, 1), (0, 0)), 'edge')68 dstImg = np.zeros((dstH, dstW, 3), dtype=np.uint8)69for dstY in range(dstH):70for dstX in range(dstW):71for channel in [0, 1, 2]:72 y = dstY * scrH / dstH73 x = dstX * scrW / dstW74 y1 = math.floor(y)75 x1 = math.floor(x)7677 array = []78for i in [-1, 0, 1, 2]:79 temp = 080for j in [-1, 0, 1, 2]:81 temp += srcImg[y1 + i, x1 + j, channel] * self.CubicConvInterpolation2(x - (x1 + j))82 array.append(temp)8384 temp = 085for i in [-1, 0, 1, 2]:86 temp += array[i + 1] * self.CubicConvInterpolation2(y - (y1 + i))87 dstImg[dstY, dstX, channel] = np.clip(temp, 0, 255)8889return dstImg三次样条插值在n-1个区间上寻找n-1个三次曲线,使其满⾜相邻曲线在端点处值相等、⼀阶导数相等,⼆阶导数相等,在加以边界条件后可得每个曲线的⽅程,然后沿x轴依次偏移对应的距离即可得到插值结果,如仅需要特定范围内的结果,则可以⼤幅减少计算量公式推导设S_i(x)=a_i+b_i(x-x_i)+c_i(x-x_i)^2+d_i(x-x_i)^3, ~~~~i=0,1,...,n-1则 \begin{cases} S_i'(x)=b_i+2c_i(x-x_i)+3d_i(x-x_i)^2\\ S_i''(x)=2c_i+6d_i(x-x_i)\\ S_i'''(x)=6d_i\\ \end{cases} ~~~~i=0,1,...,n-1设h_i(x)=x_{i+1}-x_i,可得\begin{cases} S_i(x)=a_i+b_ih_i+c_ih_i^2+d_ih_i^3\\ S_i'(x)=b_i+2c_ih_i+3d_ih_i^2\\ S_i''(x)=2c_i+6d_ih_i\\ S_i'''(x)=6d_i\\ \end{cases} ~~~~i=0,1,...,n-1\because S_i(x)过点(x_i,y_i)\therefore S_i(x)=a_i=y+i, ~~~~i=0,1,...,n-1 ~~~~~~(1)\because S_i(x)与S_{i+1}(x)在X_{i+1}处相等\therefore S_i(x_{i+1})=S_{i+1}(x_{i+1})\Rightarrow a_i+b_ih_i+c_ih_i^2+d_ih_i^3=y_{i+1}, ~~~~i=0,1,...,n-2~~~~~~(2)\because S_i'(x)与S_{i+1}'(x)在X_{i+1}处相等\therefore S_i'(x)-S_{i+1}'(x)=0\Rightarrow b_i+2c_ih_i+3d_ih_i^2-b_{i+1}=0~~~~~~(3)\because S_i''(x)与S_{i+1}''(x)在X_{i+1}处相等\therefore S_i''(x)-S_{i+1}''(x)=0\Rightarrow 2c_i+6d_ih_i-2c_{i+1}=0, ~~~~i=0,1,...,n-2~~~~~~(4)设m_i=S_i(x_i)=2c_i,即c_i=\frac{1}{2}m_i, ~~~~i=0,1,...,n-1~~~~~~(5)将(5)代⼊(4),得2c_i+6d_ih_i-2c_{i+1}=0\Rightarrow m_i+6h_id_i-m_{i+1}=0\Rightarrow d_i=\frac{m_{i+1}-m_i}{6h_i}, ~~~~i=0,1,...,n-2~~~~~~(6)将(1)(5)(6)代⼊(2),得\begin{align} &a_i+b_ih_i+c_ih_i^2+d_ih_i^3=y_{i+1} \nonumber \\ \Rightarrow&y_i+b_ih_i+\frac{1}{2}m_ih_i^2+\frac{m_{i+1}-m_i}{6h_i}h_i^3=y_{i+1} \nonumber \\\Rightarrow&b_i=\frac{y_{i+1}-y_i}{h_i}-\frac{1}{2}m_ih_i-\frac{1}{6}(m_{i+1}-m_i)h_i \nonumber \\ \Rightarrow&b_i=\frac{y_{i+1}-y_i}{h_i}-\frac{1}{3}m_ih_i-\frac{1}{6}m_{i+1}h_i, ~~~~i=0,1,...,n-2~~~~~~(7) \nonumber \end{align}将(5)(6)(7)代⼊(3),得\begin{align} &\frac{y_{i+1}-y{i}}{h_i}-\frac{1}{3}m_ih_i-\frac{1}{6}m_{i+1}h_i+2\cdot\frac{1}{2}m_ih_i+3\frac{m_{i+1}-m_i}{6h_i}h_i^2-(\frac{y_{i+2}-y_{i+1}}{h_{i+1}}-\frac{1}{3}m_{i+1}h_{i+1}-\frac{1}{6}m_{i+2}h_{i+1})=0 \nonumber \\ \Rightarrow&\frac{y_{i+1}-y{i}}{h_i}-\frac{1}{3}m_ih_i-\frac{1}{6}m_{i+1}h_i+m_ih_i+\frac{1}{2}(m_{i+1}-m_i)h_i-\frac{y_{i+2}-y_{i+1}}{h_{i+1}}+\frac{1}{3}m_{i+1}h_{i+1}+\frac{1}{6}m_{i+2}h_{i+1}=0 \nonumber \\ \Rightarrow&m_ih_i(-\frac{1}{3}+1-\frac{1}{2})+m_{i+1}h_i(-\frac{1}{6}+\frac{1} {2})+\frac{1}{3}m_{i+1}h_{i+1}+\frac{1}{6}m_{i+2}h_{i+1}=\frac{y_{i+2}-y_{i+1}}{h_{i+1}}-\frac{y_{i+1}-y_{i}}{h_{i}} \nonumber \\ \Rightarrow&\frac{1}{6}(m_ih_i+2m_{i+1}h_i+2m_{i+1}h_{i+1}+m_{i+2}h_{i+1})=\frac{y_{i+2}-y_{i+1}}{h_{i+1}}-\frac{y_{i+1}-y_{i}}{h_{i}} \nonumber \\ \Rightarrow&m_ih_i+2m_{i+1}(h_i+h_{i+1})+m_{i+2}h_{i+1}=6(\frac{y_{i+2}-y_{i+1}}{h_{i+1}}-\frac{y_{i+1}-y_{i}}{h_{i}}), ~~~~i=0,1,...,n-2~~~~~~(8) \nonumber \end{align}由(8)可知i=0,1,...,n-2,则有m_0,m_1,...,m_n,需要两个额外条件⽅程组才有解⾃然边界(Natural)m_0=0,m_n=0\begin{bmatrix} \tiny 1 & 0 & 0 & 0 & 0 & \cdots & 0\\ h_0 & 2(h_0+h_1) & h_1 & 0 & 0 & \cdots & 0\\ 0 & h_1 & 2(h_1+h_2) & h_2 & 0 & \cdots & 0\\ 0 & 0 & h_2 & 2(h_2+h_3) & h_3 & \cdots & 0\\ \vdots& & & \ddots & \ddots & \ddots & \vdots\\ 0 & \cdots & & & h_{n-2} & 2(h_{n-2}+h_{n-1}) & h_{n-1}\\ 0 & \cdots & & & 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3\\\vdots\\m_{n-1}\\m_n \end{bmatrix}=6\begin{bmatrix} 0\\ \frac{y_2-y_1}{h_1}-\frac{y_1-y_0}{h_0}\\ \frac{y_3-y_2}{h_2}-\frac{y_2-y_1}{h_1}\\ \frac{y_4-y_3}{h_3}-\frac{y_3-y_2}{h_2}\\ \vdots\\ \frac{y_n-y_{n-1}}{h_{n-1}}-\frac{y_{n-1}-y_{n-2}}{h_{n-2}}\\ 0 \end{bmatrix}固定边界(Clamped)\begin{align} &\begin{cases} S_0'(x_0)=A\\ S_{n-1}'(x_n)=B \end{cases} \nonumber \\ \Rightarrow&\begin{cases} b_0=A\\ b_{n-1}+2c_{n-1}h_{n-1}+3d_{n-1}h_{n-1}^2=B\end{cases} \nonumber \\ \Rightarrow&\begin{cases} A=\frac{y_1-y_0}{h_0}-\frac{h_0}{2}m_0-\frac{h_0}{6}(m_1-m_0)\\ B=\frac{y_n-y_{n-1}}{h_{n-1}}-\frac{1}{3}m_{n-1}h_{n-1}+m_{n-1}h_{n-1}+\frac{1}{2}m_nh_{n-1}-\frac{1}{2}m_{n-1}h_{n-1} \end{cases} \nonumber \\ \Rightarrow&\begin{cases} 2h_0m_0+h_0m_1=6(\frac{y_1-y_0}{h_0}-A)\\ h_{n-1}m_{n-1}+2h_{n-1}m_{n}=6(B-\frac{y_n-y_{n-1}}{h_{n-1}}) \end{cases} \nonumber \\ \end{align}\begin{bmatrix} 2 & 1 & 0 & 0 & 0 & \cdots & 0\\ h_0 & 2(h_0+h_1) & h_1 & 0 & 0 & \cdots & 0\\ 0 & h_1 & 2(h_1+h_2) & h_2 & 0 & \cdots & 0\\ 0 & 0 & h_2 & 2(h_2+h_3) & h_3 & \cdots & 0\\ \vdots& & & \ddots & \ddots & \ddots & \vdots\\ 0 & \cdots & & & h_{n-2} & 2(h_{n-2}+h_{n-1}) & h_{n-1}\\ 0 & \cdots & & & 0 & 1 & 2 \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3\\\vdots\\m_{n-1}\\m_n \end{bmatrix}=6\begin{bmatrix} \frac{y_1-y_0}{h_0}-A\\ \frac{y_2-y_1}{h_1}-\frac{y_1-y_0}{h_0}\\ \frac{y_3-y_2}{h_2}-\frac{y_2-y_1}{h_1}\\ \frac{y_4-y_3}{h_3}-\frac{y_3-y_2}{h_2}\\ \vdots\\\frac{y_n-y_{n-1}}{h_{n-1}}-\frac{y_{n-1}-y_{n-2}}{h_{n-2}}\\ B-\frac{y_n-y_{n-1}}{h_{n-1}} \end{bmatrix}⾮节点边界(Not-A-Knot)\begin{align} &\begin{cases} S_0'''(x_1)=S_1'''(x_1)\\ S_{n-2}'''(x_{n-1})=S_{n-1}'''(x_{n-1}) \end{cases} \nonumber \\ \Rightarrow&\begin{cases} 6\cdot\frac{m_1-m_0}{6h_0}=6\cdot\frac{m_2-m_1}{6h_1}\\ 6\cdot\frac{m_{n-1}-m_{n-2}}{6h_{n-2}}=6\cdot\frac{m_n-m_{n-1}}{6h_{n-1}} \end{cases} \nonumber \\ \Rightarrow&\begin{cases} h_1(m_1-m_0)=h_0(m_2-m_1)\\ h_{n-1}(m_{n-1}-m_{n-2})=h_{n-2}(m_n-m_{n-1}) \end{cases} \nonumber \\ \Rightarrow&\begin{cases} -h_1m_0+(h_1+h_0)m_1-h_0m_2=0\\ -h_{n-1}m_{n-2}+(h_{n-1}+h_{n-2})m_{n-1}-h_{n-2}m_n=0 \end{cases} \nonumber \\ \end{align}\begin{bmatrix} -h_1 & h_0+h_1 & -h_0 & 0 & 0 & \cdots & 0\\ h_0 & 2(h_0+h_1) & h_1 & 0 & 0 & \cdots & 0\\ 0 & h_1 & 2(h_1+h_2) & h_2 & 0 & \cdots & 0\\ 0 & 0 & h_2 &2(h_2+h_3) & h_3 & \cdots & 0\\ \vdots& & & \ddots & \ddots & \ddots & \vdots\\ 0 & \cdots & & & h_{n-2} & 2(h_{n-2}+h_{n-1}) & h_{n-1}\\ 0 & \cdots & & & -h_{n-1} & h_{n-1}+h_{n-2} & -h_{n-2} \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3\\\vdots\\m_{n-1}\\m_n \end{bmatrix}=6\begin{bmatrix} 0\\ \frac{y_2-y_1}{h_1}-\frac{y_1-y_0}{h_0}\\ \frac{y_3-y_2}{h_2}-\frac{y_2-y_1}{h_1}\\ \frac{y_4-y_3}{h_3}-\frac{y_3-y_2}{h_2}\\ \vdots\\ \frac{y_n-y_{n-1}}{h_{n-1}}-\frac{y_{n-1}-y_{n-2}}{h_{n-2}}\\ 0 \end{bmatrix}在n=4时通⽤公式⾃然边界\begin{bmatrix} 1 & 0 & 0 & 0 \\ h_0 & 2(h_0+h_1) & h_1 & 0 \\ 0 & h_1 & 2(h_1+h_2) & h_2 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3 \end{bmatrix}=6\begin{bmatrix} 0\\ \frac{y_2-y_1}{h_1}-\frac{y_1-y_0}{h_0}\\ \frac{y_3-y_2}{h_2}-\frac{y_2-y_1}{h_1}\\ 0 \end{bmatrix}固定边界\begin{bmatrix} 2 & 1 & 0 & 0 \\ h_0 & 2(h_0+h_1) & h_1 & 0 \\ 0 & h_1 & 2(h_1+h_2) & h_2 \\ 0 & 0 & 1 & 2 \\ \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3 \end{bmatrix}=6\begin{bmatrix} \frac{y_1-y_0}{h_0}-A\\ \frac{y_2-y_1}{h_1}-\frac{y_1-y_0}{h_0}\\ \frac{y_3-y_2}{h_2}-\frac{y_2-y_1}{h_1}\\ B-\frac{y_3-y_2}{h_2} \end{bmatrix}⾮节点边界\begin{bmatrix} -h_1 & h_0+h_1 & -h_0 & 0 \\ h_0 & 2(h_0+h_1) & h_1 & 0 \\ 0 & h_1 & 2(h_1+h_2) & h_2 \\ 0 & -h_2 & h_1+h_2 & -h_1 \\ \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3 \end{bmatrix}=6\begin{bmatrix} 0\\ \frac{y_2-y_1}{h_1}-\frac{y_1-y_0}{h_0}\\ \frac{y_3-y_2}{h_2}-\frac{y_2-y_1}{h_1}\\ 0 \end{bmatrix}图像插值x_{i+1}-x_i=1 \Rightarrow h_i(x)=1在n=4时,即四个点时如下所⽰p_{11}p_{12}p_{13}p_{14}p_{21}p_{22}p_{23}p_{24}pp_{31}p_{32}p_{33}p_{34}p_{41}p_{42}p_{43}p_{44}⾃然边界(可⽤TDMA或化简计算)\begin{bmatrix} 1 & 0 & 0 & 0 \\ 1 & 4 & 1 & 0 \\ 0 & 1 & 4 & 1 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3 \end{bmatrix}=6\begin{bmatrix} 0\\ y_0+y_2-2y_1\\ y_1+y_3-2y_2\\ 0 \end{bmatrix}固定边界(只能⽤TDMA计算)\begin{bmatrix} 2 & 1 & 0 & 0 \\ 1 & 4 & 1 & 0 \\ 0 & 1 & 4 & 1 \\ 0 & 0 & 1 & 2 \\ \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3 \end{bmatrix}=6\begin{bmatrix} y_1-y_0-A\\ y_0+y_2-2y_1\\ y_1+y_3-2y_2\\ y_2-y_3+B \end{bmatrix}⾮节点边界(只能化简计算)\begin{bmatrix} -1 & 2 & -1 & 0 \\ 1 & 4 & 1 & 0 \\ 0 & 1 & 4 & 1 \\ 0 & -1 & 2 & -1 \\ \end{bmatrix}\begin{bmatrix} m_0\\m_1\\m_2\\m_3 \end{bmatrix}=6\begin{bmatrix} 0\\ y_0+y_2-2y_1\\ y_1+y_3-2y_2\\ 0 \end{bmatrix}python代码1class BiSplineInterpolation:2 @staticmethod3 def TDMA(a, b, c, d):4 n = len(d)56 c[0] = c[0] / b[0]7 d[0] = d[0] / b[0]89for i in range(1, n):10 coef = 1.0 / (b[i] - a[i] * c[i - 1])11 c[i] = coef * c[i]12 d[i] = coef * (d[i] - a[i] * d[i - 1])1314for i in range(n - 2, -1, -1):15 d[i] = d[i] - c[i] * d[i + 1]1617return d1819 @staticmethod20 def Simplified_Natural4(y1, y2, y3, y4):21 # 四点⾃然边界化简公式22 d1 = y1 + y3 - 2 * y223 d2 = y2 + y4 - 2 * y32425 k0 = 026 k1 = (4 * d1 - d2) * 0.427 k2 = (4 * d2 - d1) * 0.428 k3 = 02930return [k0, k1, k2, k3]3132 @staticmethod33 def Simplified_Not_A_Knot4(y1, y2, y3, y4):34 # 四点⾮节点边界化简公式35 d1 = y1 + y3 - 2 * y236 d2 = y2 + y4 - 2 * y33738 k0 = 2 * d1 - d239 k1 = d140 k2 = d241 k3 = 2 * d2 - d14243return [k0, k1, k2, k3]4445 # TDMA矩阵说明46 # a0 和 c3 没有实际意义,占位⽤47 # a0 [b0 c0 00 ] [x0] [d0]48 # [a1 b1 c1 0 ] [x1] = [d1]49 # [0 a2 b2 c2] [x2] [d2]50 # [00 a3 b3] c3 [x3] [d3]5152 def SplineInterpolationNatural4(self, x, y1, y2, y3, y4):53 # ⽤TDMA计算54 # matrix_a = [0, 1, 1, 0]55 # matrix_b = [1, 4, 4, 1]56 # matrix_c = [0, 1, 1, 0]57 # matrix_d = [0, 6 * (y1 + y3 - 2 * y2), 6 * (y2 + y4 - 2 * y3), 0]58 # matrix_x = self.TDMA(matrix_a, matrix_b, matrix_c, matrix_d)5960 # 化简计算61 matrix_x = self.Simplified_Natural4(y1, y2, y3, y4)6263 a = y264 b = y3 - y2 - matrix_x[1] / 3.0 - matrix_x[2] / 6.065 c = matrix_x[1] / 2.066 d = (matrix_x[2] - matrix_x[1]) / 6.06768 s = a + b * x + c * x * x + d * x * x * x69return s7071 def SplineInterpolationClamped4(self, x, y1, y2, y3, y4):72 # 仅有TDMA计算,⽆法化简73 A, B = 1, 17475 matrix_a = [0, 1, 1, 1]76 matrix_b = [2, 4, 4, 2]77 matrix_c = [1, 1, 1, 0]78 matrix_d = [6 * (y2 - y1 - A), 6 * (y1 + y3 - 2 * y2), 6 * (y2 + y4 - 2 * y3), 6 * (B - y4 + y3)]79 matrix_x = self.TDMA(matrix_a, matrix_b, matrix_c, matrix_d)8081 a = y282 b = y3 - y2 - matrix_x[1] / 3.0 - matrix_x[2] / 6.083 c = matrix_x[1] / 2.084 d = (matrix_x[2] - matrix_x[1]) / 6.08586 s = a + b * x + c * x * x + d * x * x * x87return s8889 def SplineInterpolationNotAKnot4(self, x, y1, y2, y3, y4):90 # ⽆法使⽤TDMA计算91 matrix_x = self.Simplified_Not_A_Knot4(y1, y2, y3, y4)9293 a = y294 b = y3 - y2 - matrix_x[1] / 3.0 - matrix_x[2] / 6.095 c = matrix_x[1] / 2.096 d = (matrix_x[2] - matrix_x[1]) / 6.09798 s = a + b * x + c * x * x + d * x * x * x99return s100101 def biSpline4(self, srcImg, dstH, dstW):102 dstH, dstW = int(dstH), int(dstW)103 srcH, srcW, _ = srcImg.shape104 srcImg = np.pad(srcImg, ((1, 2), (1, 2), (0, 0)), 'edge')105 dstImg = np.zeros((dstH, dstW, 3), dtype=np.uint8)106for dstY in range(dstH):107for dstX in range(dstW):108for channel in [0, 1, 2]:109 # p11 p12 p13 p14110 #111 # p21 p22 p23 p24112 # p113 # p31 p32 p33 p34114 #115 # p41 p42 p43 p44116 # 储存为 p(y, x)117 p = [dstY * srcH / dstH, dstX * srcW / dstW]118 p22 = [math.floor(p[0]), math.floor(p[1])]119 p21 = [p22[0], p22[1] - 1]120 p23 = [p22[0], p22[1] + 1]121 p24 = [p22[0], p22[1] + 2]122123 p11 = [p21[0] - 1, p21[1]]124 p12 = [p11[0], p22[1]]125 p13 = [p11[0], p23[1]]126 p14 = [p11[0], p24[1]]127128 p31 = [p21[0] + 1, p21[1]]129 p32 = [p31[0], p22[1]]130 p33 = [p31[0], p23[1]]131 p34 = [p31[0], p24[1]]132133 p41 = [p21[0] + 2, p21[1]]134 p42 = [p41[0], p22[1]]135 p43 = [p41[0], p23[1]]136 p44 = [p41[0], p24[1]]137138 diff_y, diff_x = p[0] - p22[0], p[1] - p22[1]139 r1 = self.SplineInterpolationNatural4(diff_x, srcImg[p11[0], p11[1], channel], srcImg[p12[0], p12[1], channel], srcImg[p13[0], p13[1], channel], srcImg[p14[0], p14[1], channel]) 140 r2 = self.SplineInterpolationNatural4(diff_x, srcImg[p21[0], p21[1], channel], srcImg[p22[0], p22[1], channel], srcImg[p23[0], p23[1], channel], srcImg[p24[0], p24[1], channel]) 141 r3 = self.SplineInterpolationNatural4(diff_x, srcImg[p31[0], p31[1], channel], srcImg[p32[0], p32[1], channel], srcImg[p33[0], p33[1], channel], srcImg[p34[0], p34[1], channel]) 142 r4 = self.SplineInterpolationNatural4(diff_x, srcImg[p41[0], p41[1], channel], srcImg[p42[0], p42[1], channel], srcImg[p43[0], p43[1], channel], srcImg[p44[0], p44[1], channel]) 143144 c = self.SplineInterpolationNatural4(diff_y, r1, r2, r3, r4)145146 dstImg[dstY, dstX, channel] = np.clip(c, 0, 255)。

数学考研数值分析基础知识点

数学考研数值分析基础知识点

数学考研数值分析基础知识点数值分析是数学的一个分支,主要研究利用计算机进行数值计算的方法和算法。

在数学考研中,数值分析是一个重要的考点,本文将介绍数值分析的基础知识点,帮助考生能够更好地应对数值分析的考试。

一、插值与逼近1. 拉格朗日插值拉格朗日插值是一种常用的插值方法,用于根据已知数据点推测出未知点的值。

其基本思想是构造一个满足已知数据点的条件的拉格朗日多项式,并通过该多项式求解未知点的值。

2. 牛顿插值牛顿插值是另一种常用的插值方法,与拉格朗日插值相比具有更高的精度。

牛顿插值利用差商的概念,通过已知数据点的差商构造插值多项式,并利用该多项式求解未知点的值。

3. 最小二乘逼近最小二乘逼近是一种通过最小化残差平方和的方法,用于找到一个函数来近似已知数据点。

该方法常用于求解数据拟合问题,通过最小二乘逼近可以得到最优的拟合曲线。

二、数值积分1. 梯形公式梯形公式是一种常用的数值积分方法,通过将待积函数在积分区间上用一系列梯形逼近,从而求解积分的近似值。

梯形公式简单易懂,但精度比较低。

2. 辛普森公式辛普森公式是一种更高精度的数值积分方法,通过将待积函数在积分区间上用一系列二次曲线逼近,从而求解积分的近似值。

辛普森公式相比于梯形公式,在相同节点数的情况下有更高的精度。

三、常微分方程数值解法1. 欧拉法欧拉法是一种常用的常微分方程数值解法,通过将常微分方程转化为差分方程,从而近似求解方程的解。

欧拉法简单易懂,但对于某些情况下可能存在的数值不稳定性需要注意。

2. 修正的欧拉法和改进的欧拉法修正的欧拉法和改进的欧拉法是欧拉法的改进版,通过引入更高阶的项来提高精度和数值稳定性。

3. 4阶龙格-库塔法4阶龙格-库塔法是一种更高精度的常微分方程数值解法,通过迭代求解不同的插值点,并利用加权平均的方式来提高解的精度。

四、线性代数方程组的数值解法1. 直接法直接法是解线性代数方程组的一种常用方法,包括高斯消元法和LU分解法。

实验一拉格朗日插值、分段线性插值...

实验一拉格朗日插值、分段线性插值...

实验一拉格朗日插值、分段线性插值、三次样条插值的比较一、问题提出选择函数y=exp(-x2) (-2≤x≤2),在n个节点上(n不要太大,如5~11)用拉格朗日、分段线性、三次样条三种插值方法,计算m个插值点的函数值(m要适中,如50~100)。

二、要求通过数值和图形输出,将三种插值结果与精确值进行比较。

适当增加n,在作比较,由此作初步分析。

三、问题的解答为统一起见,认为题目中的节点指的是中间节点,插值时还要考虑两端点的函数值,故原题目中有 n+2 个插值节点。

以下给出题目所需的 MATLAB 函数,其中参数 count_knot 表示题目中的n ,count_dot 表示题目中的m 。

function result=campare3inter(count_knot,count_dot)%count_knot 中间节点的个数%count_dot 拟合的函数值的个数clfknot=linspace(-2,2,count_knot+2);x=-2:0.01:2;y=exp(-x.^2);y0=exp(-knot.^2);plot(x,y,knot,y0,'ro');%,hold on;x_new=linspace(-2,2,count_dot);y_real=exp(-x_new.^2);%Lagrange 插值y_lagrange=lagrange(knot,y0,x_new);plot(x_new,y_lagrange,'k');hold on;%分段线性插值y_line=zeros(1,length(x_new))count_1=1;for j=1:count_dotfor i=1:count_knot+1if((x_new(j)>=knot(i))&((x_new(j)<=knot(i+1))))%直线的点斜式方程y_line(count_1)=((y0(i)-y0(i+1))/(knot(i)-knot(i+1)))*(x_new(j)-knot(i))+y0(i);count_1=count_1+1;break;end endendplot(x_new,y_line,'b');hold on;%三次样条插值 y_temp=[0 y0 0];pp=csape(knot,y_temp,'second');[breaks,coefs,npolys,ncoefs,dim]=unmkpp(pp);count=1;for j=1:count_dotfor i=1:count_knot+1if((x_new(j)>=knot(i))&((x_new(j)<=knot(i+1))))y_spline(count)=polyval(coefs(i,:),x_new(j)-knot(i));count=count+1;break;end endendplot(x_new,y_spline,'g');%输出原函数值和三种插值函数值的比较结果result=[y_real' y_lagrange' y_line' y_spline']图形输出(n=5,m=50)10.90.80.70.60.50.40.30.20.1-2 -1.5 -1 -0.5 0 0.5 1 1.5 2绿色:节点和exp(-x2)。

三种插值方法比较

三种插值方法比较

17世界后牛顿,拉格朗日分别讨论了等距和非等距的一般插值公式.在近代,插值法仍然是数据处理和编制函数表的常用工具,又是数值积分、数值微分、非线性方程求根和微分方程数值解法的重要基础,许多求解计算公式都是以插值为基础导出的。

三种插值方法的比较:拉格朗日插值、分段线性插值与三次样条插值三种插值法在处理问题时的比较。

插值问题的提法是:已知f(x)(可能未知或非常复杂函数)在彼此不同的n+1个实点 0x ,1x ,…n x 处的函数值是f(0x ),f(1x ),…,f(n x ),这时我们简单的说f(x)有n+1个离散数据对{(i x ,i y )}i n =0.要估算f(x)在其它点x处的函数值,最常见的一种办法就是插值,即寻找一个相对简单的函数y(x),使其满足下列插值条件:y (i x )=f (i x ),i=0,1,…,n .并以y (x)作为f (x)的近似值.其中y (x)称为插值函数,f (x)称为被插函数.[1,2,3] 选用不同类型的插值函数,逼近的效果不同,下面给出拉格朗日多项式插值、 分段线性插值及三次样条插值在处理问题时的应用比较分析.多项式插值是最常见的一种函数插值.在一般插值问题中,由插值条件可以唯一确定一个次数不超过n的插值多项式满足上述条件.从几何上看可以理解为:已知平面上n+1个不同点,要寻找一条次数不超过n的多项式曲线通过这些点.插值多项式一般有两种常见的表达形式,一个是拉格朗日(Lagrange)插值多项式,另一个是牛顿(Newton)插值多项式.且 Lagrange插值公式恒等于Newton插值公式.分段线性插值与三次样条插值可以避免高次插值可能出现的大幅度波动现象(龙格现象),在实际应用中通常采用分段低次插值来提高近似程度,比如可用分线性插值或分段三次埃尔米特插值来逼近已知函数,但它们的总体光滑性较差.为了克服这一缺点,一种全局化的分段插值方法———三次样条插值成为比较理想的工具。

插值计算的原理及应用方法

插值计算的原理及应用方法

插值计算的原理及应用方法概述插值计算是基于已知一些数据点,通过建立一个合理的数学函数来估计未知位置的值的一种方法。

它广泛应用于数据分析、数值计算、图像处理等领域。

本文将介绍插值计算的原理以及常见的应用方法。

原理插值计算的原理是基于一个假设:在已知的数据点之间的未知位置上的值可以由数据点之间的函数关系来表示。

通过建立一个合适的插值函数,我们可以预测未知位置上的值。

插值方法可以分为两种类型:多项式插值和非多项式插值。

多项式插值使用多项式函数来逼近数据点之间的关系;非多项式插值使用其他函数形式,如三角函数、指数函数等。

以下是常见的插值方法:1.线性插值–原理:通过连接两个相邻数据点之间的直线来估计未知点的值。

–公式:假设已知数据点为(x0,y0)和(x1,y1),则未知位置(x,y)的值可以通过公式$y = y_0 + \\frac{(x - x_0)(y_1 - y_0)}{(x_1 - x_0)}$来计算。

–适用场景:适用于数据点之间的变化趋势比较平滑的情况。

2.拉格朗日插值–原理:通过一个多项式函数的线性组合来逼近数据点之间的关系。

–公式:假设已知数据点为(x i,y i),则未知位置(x,y)的值可以通过公式$y = \\sum_{i=0}^n y_i \\cdot L_i(x)$来计算,其中L i(x)为拉格朗日基函数。

–适用场景:适用于不等间隔的数据点。

3.牛顿插值–原理:通过一个n次多项式来逼近数据点之间的关系。

–公式:假设已知数据点为(x i,y i),则未知位置(x,y)的值可以通过公式$y = f[x_0] + f[x_0, x_1](x-x_0) + f[x_0, x_1, x_2](x-x_0)(x-x_1) +\\ldots$来计算,其中$f[x_0], f[x_0, x_1], f[x_0, x_1, x_2], \\ldots$为差商。

–适用场景:适用于等间隔的数据点。

应用方法插值计算在许多领域中都有广泛应用。

拉格朗日插值_逐次线性插值法 (2)

拉格朗日插值_逐次线性插值法 (2)
例 已知 f ( x) sh ( x) 表如下 xk 0.40 0.55 0.65 0.80 0.90 f ( xk ) 0.41075 0.57815 0.69675 0.88811 1.02652 用 Newton 插值公式求 f (0.596) 的近似值。
第二章 插值与拟合
例2.1 已知 100 10 , 121 11 , 利用线性插值求 y 115
解: 这里x0=100,y0=10,x1=121,y1=11, 利用线 性插值
x 121 x 100 L1 ( x) 10 11 100 121 121 100
第二章 插值与拟合
例1:已知x0=100, x1=121, x2=144, 求 f ( x)
x
在x=115时的近似值。
x 121 x 100 L1 ( x ) 10 11 100 121 121 100
x 144 x 121 ~ L1 ( x ) 11 12 121 144 144 121
为克服这一缺点,通常可用逐次线性插值方法求得高次插 值。例如在例2.1-2.1*中:
115 121 115 100 11 10.714 100 121 121 100 115 144 115 121 ~ 115 L1 (115) 11 12 10.739 121 144 144 121 115 L1 (115) 10
x x0 x x1 x x2 x x3 x x4
第二章 插值与拟合
例:已知 sin 1 , sin 1 , sin 3 6 2 4 2 3 2 分别利用 sin x 的1次、2次 Lagrange 插值和牛顿插 值计算 sin 50。

插值法和拉格朗日插值法

插值法和拉格朗日插值法

算法:插值法和拉格朗日插值法 拉格朗日生平约瑟夫·拉格朗日(Joseph-Louis Lagrange,1736~1813)全名为约瑟夫·路易斯·拉格朗日,法国著名数学家、物理学家。

1736年1月25日生于意大利都灵,1813年4月10日卒于巴黎。

他在数学、力学和天文学三个学科领域中都有历史性的贡献,其中尤以数学方面的成就最为突出。

拉格朗日父亲是法国陆军骑兵里的一名军官,后由于经商破产,家道中落。

据拉格朗日本人回忆,如果幼年时家境富裕,他也就不会作数学研究了,因为父亲一心想把他培养成为一名律师。

拉格朗日个人却对法律毫无兴趣。

拉格朗日科学研究所涉及的领域极其广泛。

他在数学上最突出的贡献是使数学分析与几何与力学脱离开来,使数学的独立性更为清楚,从此数学不再仅仅是其他学科的工具。

拉格朗日总结了18世纪的数学成果,同时又为19世纪的数学研究开辟了道路,堪称法国最杰出的数学大师。

同时,他的关于月球运动(三体问题)、行星运动、轨道计算、两个不动中心问题、流体力学等方面的成果,在使天文学力学化、力学分析化上,也起到了历史性的作用,促进了力学和天体力学的进一步发展,成为这些领域的开创性或奠基性研究。

在柏林工作的前十年,拉格朗日把大量时间花在代数方程和超越方程的解法上,作出了有价值的贡献,推动一代数学的发展。

他提交给柏林科学院两篇著名的论文:《关于解数值方程》和《关于方程的代数解法的研究》。

把前人解三、四次代数方程的各种解法,总结为一套标准方法,即把方程化为低一次的方程(称辅助方程或预解式)以求解。

拉格朗日也是分析力学的创立者。

拉格朗日在其名著《分析力学》中,在总结历史上各种力学基本原理的基础上,发展达朗贝尔、欧拉等人研究成果,引入了势和等势面的概念,进一步把数学分析应用于质点和刚体力学,提出了运用于静力学和动力学的普遍方程,引进广义坐标的概念,建立了拉格朗日方程,把力学体系的运动方程从以力为基本概念的牛顿形式,改变为以能量为基本概念的分析力学形式,奠定了分析力学的基础,为把力学理论推广应用到物理学其他领域开辟了道路。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

定义2.1 设函数 f (x) 在[a , b]上有定义,且已知在 a ≤ x0 < x1<
x2< ⋯ < xn ≤ b 点上的值 y0, y1, ⋯ , yn . 若存在一简单 近似计算 f (x) 的值、零点、极 函数 (x), 使得
(xi) = yi
成立,则称
值点、导数、积分,
i = 0, 1, 2, ⋯, n
待定系数
l0 ( x1 ) l0 ( x2 ) 0 l0 ( x0 ) 1,
知l0(x)中含有两个因子(x-x1 )( x-x2),且是二次的
则可令l0 ( x) A ( x x1 ) ( x x2), 再由l0(x)满足的条件
1 可得A ( x0 x1) ( x0 x2 )
(2.1)
( x ) 为 f (x) 的插值函数。
(2.1)式称为插值条件, f ( x ) 称为被插值函数, [a , b] 称为插值区间, x0 , x1 , , xn 称为插值节点 , 求 ( x ) 的方法就是插值法。 插值点在插值区间内的称为内插, 否则称外插.
(x)
f(x) 研究问题:
(1)满足插值条件的 ( x) 是否存在唯一? (2)若满足插值条件的 ( x) 存在,如何构造( x)? (3)如何估计用 ( x)近似替代 f ( x) 产生的误差?
曲线 ( x) 近似 f ( x)
x0
x1
x2
x3
x4
2.2 Lagrange插值多项式
问题1-插值多项式的存在唯一性
曲线 ( x) 近似 f ( x)
(x)
f(x)
x0
x1
x2
x
x3
x4
从代数上看,看 (x)满足以下代数条件
(xi) = yi
i = 0, 1, 2, ⋯, n
这就是所谓的插值.
然后计算 (x)在[a,b] 上其它点x 处的函数值作为 原来函数 f (x)在此点函数值的近似值。
代数多项式、三角多项式、有理函数或样条函数
n.
, k = 0, 1 ,⋯, n .
(类似于前面讨论n =1, 2 时的情形)
L1( x) y0 l0 ( x) y1 l1( x)
(2.5)
L2(x) = y0 l0(x) + y1 l1(x) + y2 l2(x)
(Ln(x)是n+1个插值基函数的线性组合) 再构造插值多项式
Ln ( x) f ( xk ) l k ( x)

L1 ( x ) y0
x x0 x x1 y1 x0 x1 x1 x0
l0 ( x) x x1 , x0 x1
L1(x)是两个线性函数 的线性组合
l1( x) x x0 x1 x0
(2.3)
称为节点x0,x1上线性插值基函数
L1( x) y0 l0 ( x) y1 l1( x)
y
y=L2(x) y0 O x0 y1 x1 y1 x2 y=f(x) x
先求 插值基函数 l 0(x), l1 (x), l 2(x) ,
它们满足
(1) 都是二次函数;(2) Nhomakorabea节点满足
x0 l0(x) l1(x) l2(x) 1 0 0 x1 0 1 0 x2 0 0 1
先求 l0(x):
由l0(x)满足的两个条件
l0(x)
x0 y x1 x
1
l1(x)
0
x0
x1 x
例2.3 已知 100 10 , 121 11 , 利用线性插值求 y 115
解: 这里x0=100,y0=10,x1=121,y1=11, 利用线 性插值
x 121 x 100 L1 ( x) 10 11 100 121 121 100
2.2 Lagrange插值多项式 2.2.1 多项式插值问题
用代数多项式作为插值函数的插值法称为多项式插值法。
可设
( x ) = a0 + a1 x + a2x 2+ ⋯ + ai x i + ⋯,
问题:插值多项式 ( x )是几次多项式?系数ai=? 插值多项式 ( x )唯一吗?
方法1:待定系数法
问题1-插值多项式的存在唯一性
i = 0, 1, 2, ⋯, n
(xi) = yi
Hn表示次数不超过n 的所有多项 设 n( x )是 f (x) 的插值多项式, 且 n( x ) ∈Hn .称插值多项式存在且唯一,就是指在 式的集合。 Hn 中有且仅有一个 n( x ) 满足插值条件(2.1)式。
n+1个节点互异
2.2.2Lagrange插值 当n=1时,要构造通过两点 (x0 , y0 )和 (x1, y1 )的不超过1次的多项式 1(x)(后面记 作L1(x) ),使得
L1 ( x0 ) y0 , L1 ( x1 ) y1
y y = L1(x) 0 x0 x1 x
y L1 ( x)的几何意义就是通过两点(x0 , y0 )与(x1 , y1 )的直线, 如图所示,L ( )的表达式可由几何意义直接给出: 1 x
2.2.1 多项式插值问题
定理2.1 例2.3 定理2.2
线性(一次)插值
2.2.2 Lagrange插值
n=2
例2.2*
n次Lagrange 插值多项式
Lagrange插值多项式的另一种形式 定理2.3
2.2.3
Lagrange插值余项
n=1 n=2
练习1-3
例2.4
Lagrange插值算法实现 算例1-2 2.3 逐次线性插值法
例2.2 由化学实验得到某种物质浓度yi与时间ti 的关系如表2-2.
ti yi
0. 0 0.5
0. 0 0.19
1.0
0.26
1.5
0.29
2.0
0.31
求其它时间的物质浓度。 解法: 建立时间与物质浓度的简单数学模型, 或用插值法 。
问题1:基于未知函数或复杂函数的某些已知信息, 如何构造这些函数的近似表达式? 求y = f (x) 在[ a , b ]上的近似曲线?
第二章
2.1 引言与问题特例
插值法
2. 2 Lagrange插值多项式
2. 3 逐次线性插值法 2. 4 Newton插值多项式
2. 5 Hermite插值多项式
2. 6 分段低次插值
2. 7 三次样条插值
例2.1
2.1 引言与问题特例
例2.2
问题1 插值---定义2.1
2. 2 Lagrange插值多项式
------ 线性Lagrange插值多项式形式
L1( x) y0 l0 ( x) y1 l1( x)
节点上的线性 插值基函数: 满足
y
1 0
x x 1 l0 ( x) , x0 x1
x0 l0(x) l1(x) 1 0
x x 0 l1( x) x1 x0
x1 0 1
类似地,可得
y
1
0
即得
l0 ( x) =
(x - x0 )( x - x2 ) (x0 - x1)( x0 - x2 ) (x - x0 )( x - x1) (x2 - x0 )( x2 - x1)
l1 ( x) =
y
1
( x - x0 ) ( x - x2 ) ( x1 - x0 ) ( x1 - x2 )
n a0 a1 x0 an x0 y0 n a0 a1 x1 an x1 y1 (2.2) n a a x a x n n yn 0 1 n
V n ( x 0 , x1 , , x n )
2 1 1i 0 j i n
① 确定多项式 ( x )的次数
结论:n+1个插值节点产生的插值多项式的次数不 超过n次.
② 可设
( x ) = a0 + a1 x + ⋯ + an x n
要求插值多项式 (x),可以通过求n+1个方程的解:
a0 a1 an
得到。但这样做不但计算复杂,
而且难于得到 n(x)的简单表达式。
y1 y0 L1 ( x) y0 ( x x0 ) x1 x0 (两点式)
(点斜式)
y y = L1(x) x0 x1 x
x x0 0 x1 x L1 ( x) y0 y1 x1 x0 x1 x0
---称为线性(一次)插值
L1 ( x) y0
y1 y0 ( ) x1 x0 x x0
1, k i, i, k = 0, 1 ,⋯, n (2.4) l k ( xi ) ki 0 , k i, 则称这n +1个n 次多项式为这n +1个节点上的n 次插 值基函数。
先求 插值基函数
令 l k ( x) A( x x0 )( x xk 1 ) ( x xk 1 )( x xn ),
1 由 l k ( xk ) 1, 得 A ( x k x0 )( xk xk 1 ) ( xk xk 1 )( xk xn )
k = 0, 1 ,⋯,
l k ( x) ( x x0 )( x xk 1 ) ( x xk 1 )( x xn ) ( x k x0 )( xk xk 1 ) ( xk xk 1 )( xk xn )
( x 121)( x 144) ( x 100)( x 144) L2 (115) 10 11 (100 121)(100 144) (121 100)(121 144) ( x 100)( x 121) 12 10.72275 (144 100)(144 121) x 115
相关文档
最新文档