8 曲线拟合
8.1 引言
已知函数在某个区间上某几个点的函数值时,要在该区间内给出近似于该函数的简单表达式。或者说原函数过于复杂,我们需要找到一个简单的函数来近似它。这种在某个区间\([a,b]\)上构造一个简单函数去近似已知函数的问题,就称为函数逼近问题。曲线拟合和函数插值同属于函数逼近问题,函数插值的特点是插值函数在插值节点处的函数值必须等于被插值函数,而曲线拟合则没有这个要求。
曲线拟合指的是找到一组线性无关的函数\(\{\phi_0(x),\cdots,\phi_n(x),\cdots\}\),然后用这些函数的线性组合\(S(x)=\sum_{i=0}^\infty a_i\phi_i(x)\)来近似另外一个函数\(f(x)\),并且使得误差\(||f(x)-S(x)||\)在某个度量下最小。
8.2 函数的正交
这里先给出权函数、带权内积和正交的概念。
定义8-1 若\(\rho(x)\)是\([a,b]\)上的非负函数,且满足
- 对于\(n\in\mathbb{N}\),积分\(\int_a^bx^n\rho(x)dx\)存在
- 对于非负连续函数\(g(x)\),若\(\int_a^b\rho(x)g(x)dx=0\),则\(g(x)\equiv0\)。
则称\(\rho(x)\)是\([a,b]\)上的权函数。
权函数顾名思义,就是权重的意思,对不同位置的函数值赋予不同的权重。
例如,常用的权函数有
- \(\rho(x)=1,-1\le x\le1\)
- \(\rho(x)=e^{-x},0\le x\lt+\infty\)
定义8-2 若\(f(x),g(x)\in C[a,b]\),且\(\rho(x)\)是\([a,b]\)上的权函数,则称
\[<f,g>=\int_a^b\rho(x)f(x)g(x)dx
\]
为\(f(x),g(x)\)在\([a,b]\)上的带权内积。
事实上,区间\([a,b]\)上所有的连续函数的集合,即\(C[a,b]\),是一个向量空间,所以上述定义8-2实际上是在向量空间\(C[a,b]\)中定义了内积运算。有了内积就可以接着定义角度,正交等概念。
可以根据内积的定义导出带权\(\rho(x)\)范数:
\[||f(x)||_2=<f,f>^{1/2}=\left[\int_a^b\rho(x)f^2(x)dx\right]^{1/2}
\]
定义8-3 若\(f(x),g(x)\in C[a,b]\),\(\rho(x)\)是\([a,b]\)上的权函数,且满足
\[<f,g>=\int_a^b\rho(x)f(x)g(x)dx=0
\]
则称\(f(x),g(x)\)在\([a,b]\)上带权\(\rho(x)\)正交。若函数序列\(\phi_0(x),\phi_1(x),\cdots,\phi_n(x),\cdots\)满足关系式
\[<\phi_i,\phi_k>=\int_a^b\rho(x)\phi_i(x)\phi_k(x)dx=
\left\{\begin{aligned}
&0,\;&j\ne k\\
A_k&>0,\;&j=k
\end{aligned}\right.
\]
则称\(\{\phi_n(x)\}_0^\infty\)是\([a,b]\)上的正交函数系;若\(A_k=1\),则称为标准正交函数系。
定义8-4 设\(\rho(x)\)是\([a,b]\)上的权函数,\(\varphi_n(x)\)是\([a,b]\)上首项系数\(a_n\ne0\)的n次多项式。若多项式序列\(\{\varphi_n(x)\}_0^\infty\)序列满足定义8-3,则称该多项式序列是\([a,b]\)上带权\(\rho(x)\)正交,称\(\varphi_n(x)\)为\([a,b]\)上的带权\(\rho(x)\)的n次正交多项式。
既然已经定义了函数间的内积和正交,我们就可以直接使用格拉姆-施密特(Gram-Schmidt)正交化方法,将一组线性无关的函数序列进行正交化。
多项式的正交化: 给定区间\([a,b]\)以及权函数\(\rho(x)\),按照施密特正交化的方法可以从线性无关的幂函数序列\(\{1,x,x^2,\cdots,x^n,\cdots\}\)构造出首一正交多项式系\(\{\phi_n(x)\}_0^\infty\)。构造方法如下:
\[\begin{aligned}
&\phi_0(x)=1\\
&\phi_1(x)=x-\frac{<x,\phi_0>}{<\phi_0,\phi_0>}\phi_0(x)\\
&\qquad\qquad\vdots\\
&\phi_n(x)=x^n-\sum_{i=0}^{n-1}\frac{<x^n,\phi_i>}{<\phi_i,\phi_i>}\phi_i(x)\\
&\qquad\qquad\vdots\\
\end{aligned}
\]
8.3 最佳平方逼近
定义8-5 对于\(f(x)\in C[a,b]\)以及一个线性无关函数组的集合\(\Phi=span\{\phi_0(x),\phi_1(x),\cdots,\phi_n(x)\}\subset C[a,b]\)。若存在
\[S^*(x)=\sum_{i=0}^na_i^*\phi_i(x)\in\Phi
\]
使得
\[\begin{aligned}
||f(x)-S^*(x)||_2^2&=\min_{S(x)\in\Phi}||f(x)-S(x)||_2^2\\
&=\min_{S(x)\in\Phi}\int_a^b\rho(x)[f(x)-S(x)]^2dx
\end{aligned}
\]
则称\(S^*(x)\)是\(f(x)\)在子集\(\Phi\subset C[a,b]\)中的最佳平方逼近函数。
为了求得\(S^*(x)\),令
\[L=\int_a^b\rho(x)[f(x)-S(x)]^2=\int_a^b\rho(x)[f(x)-\sum_{i=0}^na_i\phi_i(x)]^2
\]
显然\(L\)是关于\(a_k\)的二次函数,根据多元函数取极值的必要条件,可得
\[\frac{\partial L}{\partial a_k}=-2\int_a^b\rho(x)[f(x)-\sum_{i=0}^na_i\phi_i(x)]\phi_k(x)dx=0
\]
因此
\[\sum_{i=0}^na_i\int_a^b\rho(x)\phi_i(x)\phi_k(x)dx=\int_a^b\rho(x)f(x)\phi_k(x)dx,\;k=0,1,\cdots,n
\]
于是
\[\sum_{i=0}^na_i<\phi_i,\phi_k>=<f,\phi_k>,\;k=0,1,\cdots,n
\]
改写成矩阵的形式则有
\[\left[\begin{matrix}
<\phi_0,\phi_0>&<\phi_1,\phi_0>&\cdots&<\phi_n,\phi_0>\\
<\phi_0,\phi_1>&<\phi_1,\phi_1>&\cdots&<\phi_n,\phi_1>\\
\vdots&\vdots&\ddots&\vdots\\
<\phi_0,\phi_n>&<\phi_1,\phi_n>&\cdots&<\phi_n,\phi_n>
\end{matrix}\right]
\left[\begin{matrix}
a_0\\a_1\\\vdots\\a_{n-1}\\a_n
\end{matrix}\right]=
\left[\begin{matrix}
<f,\phi_0>\\<f,\phi_1>\\\vdots\\<f,\phi_{n-1}>\\<f,\phi_n>
\end{matrix}\right]\tag{8-3-1}
\]
这是关于\(a_0,a_1,\cdots,a_n\)的线性方程组,称为法方程(正规方程)。由于\(\phi_0,\phi_1,\cdots,\phi_n\)线性无关,所以其系数行列式不为0。因此,该方程组有唯一解,从而得到\(S^*(x)\)。
下面将验证所求的\(S^*(x)\)确实是使得\(||f(x)-S(x)||_2^2\)最小的解
\[\begin{aligned}
L&=\int_a^b\rho(x)[f(x)-S(x)]^2\\
&=\int_a^b\rho(x)[(f(x)-S^*(x))+(S^*(x)-S(x))]^2\\
&=||f(x)-S^*(x)||_2^2+||S^*(x)-S(x)||_2^2+2<S^*-S,f-S^*>
\end{aligned}
\]
根据内积的性质,可以得到
\[\begin{aligned}
<S^*-S,f-S^*>&=<\sum_{k=0}^n(a^*_k-a_k)\phi_k,f-\sum_{i=0}^na^*_i\phi_i>\\
&=\sum_{k=0}^n(a^*_k-a_k)<\phi_k,f-\sum_{i=0}^na^*_i\phi_i>\\
&=\sum_{k=0}^n(a^*_k-a_k)\left[<f,\phi_k>-\sum_{i=0}^na^*_i<\phi_i,\phi_k>\right]
\end{aligned}
\]
又因为\(a_i^*\)是方程\(\sum_{i=0}^na_i<\phi_i,\phi_k>=<f,\phi_k>\;(k=0,1,\cdots,n)\)的解,所以
\[<S^*-S,f-S^*>=0
\]
于是
\[L=||f(x)-S^*(x)||_2^2+||S^*(x)-S(x)||_2^2\ge||f(x)-S^*(x)||_2^2
\]
因此\(S^*(x)\)就是所要求的最佳平方逼近。
接着求\(f(x)\)和\(S^*(x)\)的平方误差,令\(\delta=f(x)-S^*(x)\),则
\[\begin{aligned}
||\delta||_2^2&=<f-S^*,f-S^*>\\
&=<f,f>-<f,S^*>-<S^*,f-S^*>
\end{aligned}
\]
因为
\[\begin{aligned}
<S^*,f-S^*>&=<\sum_{k=0}^na^*_k\phi_k,f-\sum_{i=0}^na^*_i\phi_i>\\
&=\sum_{k=0}^na_k^*\left[<f,\phi_k>-\sum_{i=0}^na_i^*<\phi_i,\phi_k>\right]\\
&=0
\end{aligned}
\]
所以
\[\begin{aligned}
||\delta||_2^2&=<f,f>-<f,S^*>\\
&=||f||_2^2-\sum_{k=0}^na_k^*<f,\phi_k>
\end{aligned}\tag{8-3-2}
\]
综上可知,求解最佳平方逼近函数相当于求解方程组(8-3-1),其平方误差为(8-3-2)。特殊地,如果我们所选择的线性无关函数组是两两正交的,那么就可以将式(8-3-1)简化为
\[\left[\begin{matrix}
<\phi_0,\phi_0>&0&\cdots&0\\
0&<\phi_1,\phi_1>&\cdots&0\\
\vdots&\vdots&\ddots&\vdots\\
0&0&\cdots&<\phi_n,\phi_n>
\end{matrix}\right]
\left[\begin{matrix}
a_0\\a_1\\\vdots\\a_{n-1}\\a_n
\end{matrix}\right]=
\left[\begin{matrix}
<f,\phi_0>\\<f,\phi_1>\\\vdots\\<f,\phi_{n-1}>\\<f,\phi_n>
\end{matrix}\right]\tag{8-3-3}
\]
于是立即可以得到
\[a_k=\frac{<f,\phi_k>}{<\phi_k,\phi_k>},\;k=0,1,2,\cdots,n
\]
8.4 最小二乘法
最小二乘法是最佳平方逼近的一种特殊形式,由于已知的数据点往往是离散的,我们只需将内积重新定义成离散的形式,而其他的相关的结论则可以完全照搬过来用。
定义8-6 已知\(f(x),g(x)\)在\(x_0,x_1,\cdots,x_n\)上的函数值,将这两个函数的带权内积定义为
\[<f,g>=\sum_{i=0}^n\omega(x_i)f(x_i)g(x_i)
\]
其中\(\omega(x)\)就是权函数。
同样的,可以由内积导出带权范数的定义
\[||f(x)||_2=<f,f>^{1/2}=\left[\sum_{i=0}^n\omega(x_i)f^2(x_i)\right]^{1/2}
\]
最小二乘法比较常用的线性无关函数组的集合是幂函数组成的集合,即\(\Phi=span\{1,x,\cdots,x^n\}\)。
例子: 如果已知\(f(x_i)=y_i(i=0,1,\cdots,m)\),我们想用找到一个最佳平方逼近\(S^*(x)=\sum_{k=0}^n\beta_kx^k\)。
首先,令
\[X=\left[\begin{matrix}
1&x_0&x_0^2&\cdots&x_0^n\\
1&x_1&x_1^2&\cdots&x_1^n\\
\vdots&\vdots&\vdots&\cdots&\vdots\\
1&x_m&x_m^2&\cdots&x_m^n
\end{matrix}\right]
\]
此时权函数\(\omega(x)=1\),那么法方程(8-3-1)实际上就等价于
\[X^TX\beta=X^Ty\tag{8-4-1}
\]
其中
\[\beta=\left[\begin{matrix}
a_0\\a_1\\\vdots\\a_{n-1}\\a_n
\end{matrix}\right],
y=\left[\begin{matrix}
y_1\\y_2\\\vdots\\y_{m-1}\\y_m
\end{matrix}\right]
\]
在线性代数中式(8-4-1)是很常见的写法。
可以发现\(X\)中的第\(k\)列实际上是幂函数\(x^k\)在点\(x_0,x_1,\cdots,x_m\)处的取值(相当于是在这些离散点上的采样),因此\(X^TX\)的作用实际上就是组合出了所有幂函数之间的内积。