写在前面
这一系列笔记是笔者在准备 CAGD 期末考试期间所做的记录. 笔记主要内容来自陈仁杰教授于 2022 年秋季在中国科学技术大学开设的《计算机辅助几何设计》课程的课件, 笔者补全了部分推导过程, 并按照自己的理解调整了顺序, 增加了一些内容.
写这份笔记的主要目的是加深笔者自己的理解. 如果这份笔记对您有所帮助, 那再好不过; 如果您发现其中有错误或是逻辑不通畅的地方, 希望您能给我指出.
插值和拟合
插值和拟合都是根据一组数据构造一个近似函数, 但二者近似的要求. 插值是指函数在多个离散点上的函数值或导数信息, 要求近似函数经过所已知的所有数据点. 拟合是指函数在多个离散点上的函数值或导数信息, 不要求近似函数经过所有数据点, 而是要求它能较好地反映数据变化规律, 通常使用最小二乘法或其他优化方法来求解.
插值
本文中只介绍要求插值函数经过数据点的情形, 即 Lagrange 插值. 若要求插值函数在某一点处的导数满足某种条件, 请搜索 Hermite 插值, 这是 Newton 多项式插值的推广.
问题背景
空间中存在一组数据点, 我们希望求一条光滑的曲线, 使得它恰好经过这些点.
问题设定
对于一组插值点 (xi,yi),1≤i≤n,xi∈R,yi∈Rd, 求一个函数 f:R→Rd 使得 f(xi)=yi.
构造一组光滑的基函数 {bj:R→R,bj∈C(R),1≤j≤m} , 例如多项式基函数 bj(x)=xj−1 和径向基函数 bj(x)=∣x−xi∣p+d1. 设 f 在这一组基函数所张成的线性空间中, 即 f 是它们的的线性组合: f(x)=∑j=1mcjbj(x),cj∈Rd, 则有
yi=f(xi)=j=1∑mcjbj(x)=(c1,⋯,cm)b1(xi)⋮bm(xi),1≤i≤n
问题求解
方法1 求解线性方程组
式 (1) 可以改写为
(y1,⋯,yn)=(c1,⋯,cm)b1(x1)⋮bm(x1)⋯⋱⋯b1(xn)⋮bm(xn)=:(c1,⋯,cm)B
则问题为求解 (c1,⋯,cm) 的值.
要使式 (2) 总有解, 只需 rankB=n, 不妨令 m=n, 再选取适当的基函数即可. 当 m>n 时这一问题能给出多个解.
这一方法的问题在于, 矩阵 B 往往是稠密矩阵, 会占用很大的内存空间. 此外, 当基函数个数较多时, 矩阵 B 的条件数会很大, 此时难以进行求解. 综合以上两点, 这一方法不具备实用性.
方法2 用 Lagrange 插值法构造基函数
若对某一组基函数 bj,1≤j≤n, 有
bj(xi)={1,0,i=ji=j
则 f(x)=∑j=1nyjbj(x) 就是满足条件的插值函数.
对于多项式函数空间, 可以采用 Lagrange 插值法构造这样的基函数
lj(x)=∏i=1,i=jn(xj−xi)∏i=1,i=jn(x−xi),j=1,…,n
容易证明, Lagrange 插值法和求解线性方程组构造的插值函数是相同的.
Runge 现象
均匀节点上的多项式插值函数会在区间边缘出现震荡, 并且在插值点增多时误差会趋于无穷大. 这一问题被称为 Runge 现象. 这一现象的详细数学解释可参见 https://numanal.com/runge-mathematical-proof/.
值得注意的是, 使用 Chebyshev 节点进行多项式插值可以保证插值函数一致收敛到被插值函数, 但这不是
拟合
问题背景
在某些情况下, 数据点包含噪声, 因此精确地插值每个数据点会造成过拟合. 同时为了快速计算, 避免 Runge 现象, 我们希望采用更少的基函数来拟合数据点.
问题设定
本文中只介绍最小二乘拟合, 这是要求拟合函数和原始数据的均方误差最小.
对于一组数据点 (xi,yi),1≤i≤n,xi∈R,yi∈Rd, 求一个函数 f:R→Rd 使得 ∑i=1n∥f(xi)−yi∥2 最小.
拟合函数 f 的定义与上一节中相同, 但基函数的个数会更少, 即我们有 m<n.
问题求解
不妨设维度 d=1. 注意到若 B 行满秩, 则 BB⊤ 可逆, 因而有
i=1∑n(f(xi)−yi)2=i=1∑n(j=1∑mcjbj(xi)−yi)2=∥cB−y∥2=cBB⊤c⊤−2cBy⊤+yy⊤=∥cB−yB⊤(BB⊤)−1B∥2−yB⊤(BB⊤)−1BB⊤((BB⊤)−1)⊤By⊤+yy⊤=∥(c−yB⊤(BB⊤)−1)B∥2−yB⊤((BB⊤)−1)⊤By⊤+yy⊤
即
cargmini=1∑n(f(xi)−yi)2=yB⊤(BB⊤)−1
注意到, 若 m=n 即基函数个数等于数据点个数, 我们有 yB⊤(BB⊤)−1=yB⊤(B⊤)−1B−1=yB−1, 这就是式 (2) 的解, 也就是说这时拟合问题就退化为插值问题.