多项式插值定理
🔎 [16:46]
定理:若xi两两不同,则对任意给定的yi,存在唯一的次数至多是n次的多项式pn,使得pn(x)=yi,i=0,⋯,xn。
✅ 唯一的多项式p的意思是唯一的一组系数a0,⋯,an
证明:在幂基(1,x,⋯,xn)下待定多项式p的形式为:
p(x)=a0+a1x+a2x2+⋯+anxn
定理不限于幂基,下面证时过程只是以幂基为例
由插值条件p(xi)=yi,i=0,⋯,n得到如下方程组:
👆 如果基函数选取不一样,方程组的系数矩阵不同
系数矩阵为Vandermonde矩阵,其行列式非零,因此方程组有唯一解。
✅ 如果不使用幂基而是别的基函数,也能得到上述方程组并解出唯一解,只是矩阵的内容不同。
要求解的系数是a1,a2,⋯,an,此处系数a是未知数,而不是通常理解的x, x 代表输入,因此是已知量。
技巧1:构造插值问题的通用解
🔎 [17:44] ✅ 上一页方法中的问题:每次x或y变化都要构造一个公式来解。本页的目的是,只变y而x不变时不需要构造矩阵和解方程。
给定 n+1个点 {(x0,y0),⋯,(xn,yn)}, 寻找一组次数为n的多项式基函数li使得
li(xj)={1, if i=j0, if i≠j
那么,插值问题的解为:
P(x)=y0l0(x)+y1l1(x)+⋯+ynln(x)=n∑i=0yili(x)
✅ 这样做的好处是,即使y变化,也不用重新解方程组。li(x)可以通过上述方程组提前解出来,以y为系数对li(x)做线性组合,就可以得到P(x)
多项式li(x)被称为拉格朗日多项式,即拉格朗日插值问题的通用解。
该方法称为拉格朗日插值。
给定n+1个点,通过上面的方法解方程组,可以解出li(x)系数,从而得到拟合函数。
但 n+1 个点有任何一点改变,都要重新"构造方程组→解系数→得拟合函数"。
该技巧对以上过程做简化。在 n+1 个定点的x不变而只有y的变化的情况下,无须解方程而快速得到拟合函数。
具体步骤为:
2.先求拟合函数 li(x). 用上一页的方法。
构造用于拟合li(x)的数据点。其中xi为原给定的n+1个时,xi,yi为公式(1)中的li(xj),这样给每个li(x)构造了n+1个用于拟合点。例如:
n+1个点{(x0,1),(x1,0)…,(xn,0)}导拟合函数l0(x)
这样就得到了n+1个函数li(x)
在拟合li(x)的过程中只用到了原给定数据点的x而没有用 y。因此,只要x不变,li(x)函数就一直适用。
要拟合的函数P(x)就成了li(x)的线性组合,yi是系数。
💡 我的思考:
根据 Aa=y 解出a,得到拟合函数f(x)=A(x)⋅a
现在,先算出 Aa′=E,根据Ey=y可知:Aa′y=Aa.
因此得到拟合函数f(x)=A(x)a=A(x)a′y.
结论:把计算的过程或目标分解,分析每一部分计算的依赖项。根据依赖项决定是否能提前算好。
怎么计算多项式li(x)?
n阶多项式,且有以下n个根
x0,x1,x2,⋯,xi−1,xi+1,⋯,xn
故可表示为
li(x)=Ci(x−x0)(x−x1)…(x−xi−1)(x−xi+1)…(x−xn)=Ci∏j≠i(x−xj)
由li(xi)=1可得
1=ci∏j≠i(xi−xj)⇒ci=1∏j≠i(xi−xj)
最终多项式基函数为
li(x)=∏j≠i(x−xj)∏j≠i(xi−xj)
多项式li(x)被称为拉格朗日多项式
技巧2:更方便的求解表达
Newton插值:具有相同“导数”(差商)的多项式构造(n阶Taylor展开)
定义:
一阶差商:
f[x0,x1]=f(x1)−f(x0)x1−x0
k阶差商:
设{x0,x1,⋯,xk}互不相同,f(x)关于{x0,x1,⋯,xk}的k阶差商为:
f[x0,x1,⋯,xk]=f[x1,⋯,xk]−f[x0,x1,⋯,xk−1]xk−x0
所以Newton插值多项式表示为: Nn(x)=f(x0)+f[x0,x1](x−x0)+⋯+f[x0,x1,⋯,xn](x−x0)⋯(x−xn−1)
🔎 [19:23]
❓ 这里也没听懂?意思是预算出的有阶的差商?
多项式插值存在的问题
系统矩阵稠密
例如Vandermonde矩阵,处处非零元素
✅ 稀疏矩阵的优势:有好的迭代方法,计算很快.
eigen库:非常有名的数学库
病态问题
依赖于基函数选取,矩阵可能病态,导致难于求解(求逆)
病态矩阵示例
考虑二元方程组,解为(1,1)
x1+0.5x2=1.5
0.667x1+0.333x2=1
对第二个方程右边项扰动0.001,解为 (0,3) x1+0.5x2=1.5
0.667x1+0.333x2=0.999
对矩阵系数进行扰动,解为(2,-1)
x1+0.5x2=1.5
0.667x1+0.334x2=1
✅ 对系数矩阵或y向量做微小的扰动,其解的变化会非常大。
输入数据的细微变化导致输出(解)的剧烈变化
将线性方程看成直线(超平面),当系统病态时,直线变为近似平行,求解(即直线求交)变得困难、不精确
矩阵条件数
κ2(A)=maxx≠0|Ax||x|minx≠0|Ax||x|
矩阵条件数等于矩阵最大特征值和最小特征值之间比例,条件数大意味着基元之间有太多相关性,造成不稳定。
范德蒙矩阵的条件数
多项式插值问题是病态的,因为对于等距分布的数据点xi,范德蒙矩阵的条件数随着数据点数n呈指数级增长(多项式的最高次数为n−1)
✅ 多项式插值如果使用了高阶的基函数,就容易出现病态问题
因为幂(单项式)函数基的特点是,幂函数之间差别随着次数增加而减小,不同幂函数之间唯一差别为增长速度(xi比 xi−1增长快)
🔎 [26:31]
✅ 幂函数基,高阶后函数变化非常快,那么结果就会被幂底严重挠动
解决方法
好的基函数一般需要系数交替,且互相抵消问题,例如:
基之间互相抵消,函数就不会一直增长。
[?] 秦九韶算法
可使用正交多项式基。可通过Gram‐Schmidt正交化获得正交多项式基。
振荡(Runge)现象
结论
多项式插值存在以下问题:
- 多项式插值不稳定,控制点的微小变化可导致完全不同的结果
- 振荡(Runge)现象,多项式随着插值点数(可以是细微)增加而摆动
因此需要更好的基函数来做插值,例如Bernstein基函数、分片多项式
本文出自CaterpillarStudyGroup,转载请注明出处。 https://caterpillarstudygroup.github.io/GAMES102_mdbook/