Numerical Methods Using MATLAB(4版)-05-Spline

前言

这一章主要讲曲线拟合的一些数值计算方法。在第四章中我们讨论到了多项式的构造,在对于我们有高精确度的点集合中我们可以构造理想的多项式。但是,在大部分实验中,我们没有那么精确的数据,也会在数据中存在误差。因此在本章我们主要讨论理想曲线与实际数据之间的误差,通过减小该误差来实现曲线拟合。

学习过程

<1>误差定义

最大误差Maximum error:E_{\infty}(f)=\max_{1 \leq k \leq N}\{|f(x_k)-y_k|\},
平均误差Average error:E_1(f)=\frac{1}{N}\sum_{k=1}^N|f(x_k)-y_k|,
均方根误差Root-mean-square:E_2(f)=(\frac{1}{N}\sum_{k=1}^N|f(x_k)-y_k|^2)^{1/2}.
考虑误差的统计性质时,会通常用到均方根误差。

<2>最小二乘直线 Least-Squares Line

假设这里有N个点的集合\{(x_k,y_k)\}_{k=1}^N,其中横坐标\{x_k\}是不同的。
我们通过E_2来得到拟合直线y=Ax+B
我们通过以下等式来计算系数的值:
(\sum_{k=1}^Nx_k^2)A+(\sum_{k=1}^Nx_k)B=\sum_{k=1}^Nx_ky_k,

(\sum_{k=1}^Nx_k)A+NB=\sum_{k=1}^Ny_k.

Proof.
E(A,B)=\sum_{k=1}^N(Ax_k+B-y_k)^2,

\frac{\partial E(A,B)}{\partial A}=\sum_{k=1}^N2(Ax_k+B-y_k)(x_k)=0,

\frac{\partial E(A,B)}{\partial B}=\sum_{k=1}^N2(Ax_k+B-y_k)=0.

P259的程序计算A的原理是怎么来的?A=(y-ymean)(x-xmean)/(x-xmean)(x-xmean)?

证明

<3>幂函数拟合 Power Fit

假设这里有N个点的集合\{(x_k,y_k)\}_{k=1}^N,其中横坐标\{x_k\}是不同的。
我们通过E_2来得到拟合幂函数y=Ax^M
我们通过以下等式来计算系数的值:
A=(\sum_{k=1}^Nx_k^My_k)/(\sum_{k=1}^Nx_k^{2M}).

<4>最小二乘抛物线 Least-Squares Parabola

假设这里有N个点的集合\{(x_k,y_k)\}_{k=1}^N,其中横坐标\{x_k\}是不同的。
我们通过E_2来得到拟合抛物线y=Ax^2+Bx+C
(\sum_{k=1}^Nx_k^4)A+(\sum_{k=1}^Nx_k^3)B+(\sum_{k=1}^Nx_k^2)C=\sum_{k=1}^Ny_kx_k^2,

(\sum_{k=1}^Nx_k^3)A+(\sum_{k=1}^Nx_k^2)B+(\sum_{k=1}^Nx_k)C=\sum_{k=1}^Ny_kx_k,

(\sum_{k=1}^Nx_k^2)A+(\sum_{k=1}^Nx_k)B+NC=\sum_{k=1}^Ny_k.
多项式拟合也是同理的。

<5>数据线性化

有时候遇到一些函数我们不好直接求出它的系数,比如y=Ce^{Ax},这时候我们可以把它转为线性函数来计算。但也可以用Matlab直接计算。

一些线性化的例子

<6>多项式震荡 Polynomial Wiggle

在对曲线做多项式的线性拟合时,如果多项式比较高阶,可能会发生多项式震荡。就是在一些已知点之间的未知区间内曲线会大幅上升下降或大幅下降上升,这个就叫做震荡。相当于机器学习中的过拟合。

<6>样条:分段多项式插值

1、线性样条
线性样条就是分段区间内是直线拟合。matlab是用线性样条显示的。但线性样条在大部分,比如点不够多的情况是不太适用的。
2、三次样条
为了让区间线段更光滑,我们采用了三次样条。这样的话这个函数S(x)的一阶导和二阶导在其区间都是连续的。这分别说明了S(x)不会有锋锐的边缘,并且能够定义曲率的半径。
定义
假设N+1个点\{(x_k,y_k)\}_{k=0}^N,a=x_0<x_1<...<x_N=b。存在S_k(x)多项式(即三次样条),分别有系数S_{k,0},S_{k,1},S_{k,2},S_{k,3}。并且会满足以下属性:
S_k(x)=S_{k,0}+S_{k,1}(x-x_k)+S_{k,2}(x-x_k)^2,S_{k,3}(x-x_k)^3,x∈[x_k,x_{k+1}],k=0,1,...,N-1.
S(x_k)=y_k,k=0,1,...,N.
S_k(x_{k+1})=S_{k+1}(x_{k+1}),k=0,1,...,N-2.
S'_k(x_{k+1})=S'_{k+1}(x_{k+1}),k=0,1,...,N-2.
S''_k(x_{k+1})=S''_{k+1}(x_{k+1}),k=0,1,...,N-2.
对于N+1个点,那么我们就需要4N个系数变量计算。通过上面属性的条件,那么我们可以得到N+1+3*(N-1)=4N-2个条件,还缺两个,我们称作端点约束,这两个条件我们在后续会介绍该怎么处理。
3、端点约束
1)夹紧样条:S'(a)=d_0,S'(b)=d_N 。这种样条指端点处和柔软弹性杆被迫经过该点的样子。
2)自然样条:S''(a)=0,S''(b)=0。这种样条指端点处平稳的延伸出去。
3)三次逃逸:S''(a)=2S''(2)-S''(3),S''(b)=2S''(N-1)-S''(N-2),这里点之间距离假设为等距。
4)抛物逃逸:S''(a)=S''(2),S''(b)=S''(N-1)
随机数不一定是真正的随机数,比如matlab的随机数就是伪随机数,是有模型的。样条内插值效果好,外推不行。
P297-319没看,后续有空来看。具体的样条计算也没实践过,套公式。

词汇学习

orbital 轨道的
residuals 残差
planetary 行星的
formulation 公式
curvature 曲率
clamped 夹紧的
extrapolated 外推的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。