这一章的核心是:
当数据点很多、函数形式不确定,或者原函数太复杂时,不再要求函数严格经过每一个点,而是在某种误差标准下,找一个“最接近”的简单函数。
前面插值问题的要求是:
P(xi)=yi也就是插值函数必须严格通过所有给定点。
函数逼近的思路更宽松:
P(xi)≈yi只要求整体误差尽可能小。
这一章主要讲两类问题:
- 曲线拟合:给定离散数据点,找一个函数拟合这些数据。
- 函数逼近:给定一个已知函数,用一个较简单的函数去近似它。
这两类问题背后的数学结构很接近:
- 先定义“误差有多大”;
- 再把“误差最小”写成一个优化问题;
- 最后把它转化为线性方程组求解。
为什么需要函数逼近#
实际问题中经常会遇到两种情况:
- 手里只有一些观测数据点,比如实验数据、工程测量数据;
- 原函数已知,但太复杂,不方便直接计算。
这时就希望用一个简单函数代替原数据或原函数。
例如:
- 用直线拟合一组近似线性增长的数据;
- 用二次多项式拟合一段看起来像抛物线的数据;
- 在 [0,1] 上用二次多项式近似 ex;
- 用多项式替代复杂函数,方便后续积分、微分、数值计算。
插值强调“点点通过”,拟合强调“整体接近”。
TIP如果数据来自实验测量,点本身可能含有误差。此时强行让函数通过所有点,反而会把噪声也拟合进去。拟合方法更关注整体趋势。
误差向量与范数#
设拟合函数为 φ(x),给定数据点为
(xi,yi),i=1,2,⋯,n每个点上的误差为
δi=yi−φ(xi)于是全部误差可以组成误差向量:
δ=(δ1,δ2,⋯,δn)T问题变成:怎样衡量这个误差向量的大小?
常见有三种范数。
1 范数#
∥δ∥1=i=1∑n∣δi∣它关心所有误差绝对值之和。
例如:
(1,0,0,0),(0.1,0.1,0.1,0.1)二者的 1 范数分别为:
1,0.4所以从 1 范数看,第二个误差向量更小。
2 范数#
∥δ∥2=i=1∑nδi2这是最常用的误差度量。
原因是它和欧氏距离一致。比如二维中两点距离为:
(x1−x2)2+(y1−y2)2这本质上就是 2 范数。
在最小二乘法中,常用的是 2 范数的平方:
∥δ∥22=i=1∑nδi2加平方的好处:
- 不改变最小值点;
- 去掉根号,计算更方便;
- 函数光滑,方便求导。
∞ 范数#
∥δ∥∞=1≤i≤nmax∣δi∣它只看最大误差。
如果采用 ∞ 范数,就意味着:
其他点拟合得再好,只要有一个点误差很大,整体误差就很大。
所以不同范数对应不同要求:
- 1 范数:看误差总量;
- 2 范数:看平方意义下的整体误差;
- ∞ 范数:看最坏点误差。
本章主要使用 2 范数。
NOTE课堂上强调:2 范数会把误差“平均”到整体里,允许个别点稍微偏离;∞ 范数要求每一个分量都不能太离谱。实际采用哪一种范数,取决于问题需求。
曲线拟合与最小二乘法#
插值与拟合的区别#
设有数据点
(xi,yi),i=1,2,⋯,n插值要求:
φ(xi)=yi即函数必须严格通过所有点。
拟合要求:
φ(xi)≈yi即函数只需要整体上接近这些点。
所以:
- 插值适合数据点准确、希望严格通过点的情况;
- 拟合适合数据点较多、带误差、只想找整体趋势的情况。
最小二乘法的基本思想#
最小二乘法选择拟合函数 φ(x),使误差平方和最小:
i=1∑n[yi−φ(xi)]2=min其中
δi=yi−φ(xi)所以它等价于要求
∥δ∥22=min这就是“最小二乘”的来源:
多项式最小二乘拟合#
一次拟合例子#
课堂例子中给出数据:
| xi | 2 | 4 | 6 | 8 |
|---|
| yi | 1.1 | 2.8 | 4.9 | 7.2 |
希望用一次函数拟合:
y=a1x+a0目标函数为:
F(a0,a1)=i=1∑4(yi−a1xi−a0)2为了让 F 最小,对 a0,a1 分别求偏导,并令其为零:
∂a1∂F=0,∂a0∂F=0整理得到:
⎩⎨⎧a1i=1∑4xi2+a0i=1∑4xi=i=1∑4xiyia1i=1∑4xi+4a0=i=1∑4yi代入数据:
∑xi=20,∑xi2=120∑yi=16,∑xiyi=100.4于是:
{120a1+20a0=100.420a1+4a0=16解得:
a1=1.02,a0=−1.1所以最小二乘拟合直线为:
y=1.02x−1.1TIP如果只取两个点,就能直接得到一条插值直线。现在有 4 个点,却只拟合 2 个参数 a0,a1,对应的是一个超定问题。最小二乘法做的事,就是在不能同时满足全部方程时,找一个整体误差最小的解。
【图片占位:插入 lesson11/lesson12 PPT 中“一次最小二乘拟合数据点及拟合直线”的图,建议放在这里。】
一般多项式拟合#
给定数据点
(xi,yi),i=1,2,⋯,n希望用 m 次多项式拟合:
Pm(x)=a0+a1x+a2x2+⋯+amxm其中 m<n。
目标函数为:
F(a0,a1,⋯,am)=i=1∑n[yi−Pm(xi)]2令
∂aj∂F=0,j=0,1,⋯,m可得法方程:
k=0∑maki=1∑nxij+k=i=1∑nyixij,j=0,1,⋯,m写成矩阵形式:
n∑xi∑xi2⋮∑xim∑xi∑xi2∑xi3⋮∑xim+1∑xi2∑xi3∑xi4⋮∑xim+2⋯⋯⋯⋯∑xim∑xim+1∑xim+2⋮∑xi2ma0a1a2⋮am=∑yi∑yixi∑yixi2⋮∑yixim这个矩阵是对称矩阵。
只要数据点足够、基函数线性无关,通常可以得到唯一解。
二次拟合例子#
课本例子给出数据:
| xi | -1 | -0.75 | -0.5 | -0.25 | 0 | 0.25 | 0.5 | 0.75 | 1 |
|---|
| yi | -0.2209 | 0.3295 | 0.8826 | 1.4392 | 2.0003 | 2.5645 | 3.1334 | 3.7601 | 4.2836 |
用二次多项式
P2(x)=a0+a1x+a2x2拟合。
根据多项式最小二乘法,代入数据得到法方程:
⎩⎨⎧9a0+3.75a2=18.17233.75a0+3.75a2+0a1=8.48423.75a0+2.7656a2=7.6173整理求解后得到:
a0=2.0034,a1=2.2625,a2=0.0378所以拟合多项式为:
P2(x)=2.0034+2.2625x+0.0378x2【图片占位:插入课本图 6-1 或 PPT 中“数据点分布与二次拟合曲线”的图。】
线性最小二乘的一般形式#
基函数形式#
多项式拟合只是线性最小二乘的一种特殊情况。
更一般地,设拟合函数属于某个由基函数张成的函数空间:
φ(x)=a1φ1(x)+a2φ2(x)+⋯+amφm(x)其中
φ1(x),φ2(x),⋯,φm(x)是已知基函数,未知量是系数
a1,a2,⋯,am目标为:
i=1∑n[yi−j=1∑majφj(xi)]2=min这叫线性最小二乘。
这里的“线性”指的是:
拟合函数对未知参数 aj 是线性的。
基函数本身可以很复杂,比如 sinx、ex、lnx 等,只要它们前面的待定参数是线性组合形式即可。
法方程#
令目标函数对每个 aj 求偏导,并令其为零:
∂aj∂i=1∑n[yi−k=1∑makφk(xi)]2=0整理得到:
k=1∑maki=1∑nφk(xi)φj(xi)=i=1∑nyiφj(xi),j=1,2,⋯,m写成矩阵形式:
Ga=b其中
Gjk=i=1∑nφk(xi)φj(xi)bj=i=1∑nyiφj(xi)G 称为 Gram 矩阵。
与超定方程组的关系#
把所有数据点代入拟合函数,可得到:
⎩⎨⎧φ1(x1)a1+φ2(x1)a2+⋯+φm(x1)am≈y1φ1(x2)a1+φ2(x2)a2+⋯+φm(x2)am≈y2⋮φ1(xn)a1+φ2(xn)a2+⋯+φm(xn)am≈yn写成矩阵形式:
Aa≈y其中
A=φ1(x1)φ1(x2)⋮φ1(xn)φ2(x1)φ2(x2)⋮φ2(xn)⋯⋯⋯φm(x1)φm(x2)⋮φm(xn)当 n>m 时,方程个数多于未知数个数,一般不能精确求解。
线性代数中处理这类超定方程组的标准方法是法方程:
ATAa=ATy如果 ATA 非奇异,则:
a=(ATA)−1ATy这和前面通过求偏导得到的最小二乘法方程是同一件事。
TIP课堂上用一次拟合例子说明:
A=24681111则
ATA=[12020204]这正好就是前面由偏导得到的系数矩阵。
非线性拟合与变量变换#
指数拟合#
若经验公式为:
y=beax未知参数是 a,b。
这个式子对 a,b 不是线性组合,因此不能直接使用线性最小二乘公式。
一种办法是直接最小化:
F(a,b)=i=1∑n(yi−beaxi)2然后求
∂a∂F=0,∂b∂F=0但这样会得到非线性方程,计算通常更麻烦。
另一种办法是变量变换。
对
y=beax两边取对数:
lny=lnb+ax令
Y=lny,A0=lnb则变成一次线性模型:
Y=A0+ax先对 (xi,lnyi) 做线性最小二乘拟合,得到 A0,a,再由
b=eA0还原出 b。
WARNING这种变换改变了误差意义。原来最小化的是 yi−beaxi 的平方和;取对数后,最小化的是 lnyi−(lnb+axi) 的平方和。它们一般不是同一个优化问题。
课本指数拟合例子中,设
I=I0e−αt给定数据:
| ti | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 |
|---|
| Ii | 3.16 | 2.38 | 1.75 | 1.34 | 1.00 | 0.74 | 0.56 |
取对数后:
lnI=lnI0−αt用一次最小二乘拟合得到:
lnI0=1.73,−α=−2.89所以:
I0=e1.73≈5.64,α=2.89最终经验公式为:
I=5.64e−2.89t
双曲线型拟合#
若经验公式为:
y=ax+b1可取倒数:
y1=ax+b令
Y=y1则转化为一次线性拟合:
Y=ax+b如果经验公式为:
y=a+bxx则可变形为:
y1=b+ax1令
X=x1,Y=y1得到:
Y=aX+b再做一次线性最小二乘拟合。
正交函数与正交多项式#
为什么要引入正交基#
在线性最小二乘中,若基函数为
φ0(x),φ1(x),⋯,φm(x)需要解法方程:
k=0∑mak(φk,φj)=(f,φj)如果基函数两两正交,即
(φi,φj)=0,i=j那么方程组会大大简化。
此时每个系数都可以单独求:
aj=(φj,φj)(f,φj)这就是正交基的价值。
TIP普通基函数 1,x,x2,⋯ 通常不正交,所以法方程是满矩阵。换成正交多项式后,Gram 矩阵变成对角矩阵,求系数会简单很多。
常见正交多项式#
课本中列出了几类常用正交多项式。
Legendre 多项式#
在区间 [−1,1] 上,权函数 ρ(x)=1。
前几个 Legendre 多项式为:
P0(x)=1P1(x)=xP2(x)=21(3x2−1)P3(x)=21(5x3−3x)它们满足正交关系:
∫−11Pn(x)Pm(x)dx=0,n=mChebyshev 多项式#
第一类 Chebyshev 多项式定义为:
Tn(x)=cos(narccosx)前几个为:
T0(x)=1T1(x)=xT2(x)=2x2−1T3(x)=4x3−3x它们在 [−1,1] 上关于权函数
ρ(x)=1−x21正交。
Laguerre 多项式#
Laguerre 多项式通常用于 [0,+∞) 上,权函数为
ρ(x)=e−x前几个为:
L0(x)=1L1(x)=1−xL2(x)=x2−4x+2NOTE课堂上没有把正交多项式作为一个独立技术章节完整展开,而是在讲函数最佳平方逼近时用到了“正交投影”的思想。因此这里保留正交多项式的核心用途:它是简化最小二乘法方程的工具。
函数的最佳平方逼近#
函数空间中的内积与范数#
前面处理的是离散数据点。
现在考虑连续函数:在区间 [a,b] 上,用一个简单函数 φ(x) 逼近已知函数 f(x)。
为了衡量两个函数的接近程度,引入函数内积:
(f,g)=∫abf(x)g(x)dx更一般地,可以带权函数 ρ(x):
(f,g)=∫abρ(x)f(x)g(x)dx由内积定义函数范数:
∥f∥2=(f,f)=∫abρ(x)f2(x)dx于是 f 与 φ 的距离为:
∥f−φ∥2=∫abρ(x)[f(x)−φ(x)]2dx最佳平方逼近就是求
∫abρ(x)[f(x)−φ(x)]2dx=min
正交投影观点#
假设要在函数空间
Φ=span{φ0,φ1,⋯,φm}中找一个函数
φ∗(x)=k=0∑makφk(x)使它最接近 f(x)。
几何上,这就是把 f 投影到子空间 Φ 上。
最优条件是:误差函数
r(x)=f(x)−φ∗(x)与子空间 Φ 中所有函数正交。
只要它与一组基函数都正交即可:
(f−φ∗,φj)=0,j=0,1,⋯,m这就是最佳平方逼近的核心条件。
TIP课堂上用 ex 在 [0,1] 上用二次多项式逼近来说明:
ex≈ax2+bx+c直接求导当然可以,但更好的理解是:在 span{1,x,x2} 这个函数空间里,找 ex 的正交投影。
【图片占位:插入 PPT 中“函数空间投影/误差与基函数正交”的示意图。】
一般法方程#
把
φ∗(x)=k=0∑makφk(x)代入正交条件:
(f−k=0∑makφk,φj)=0得到:
k=0∑mak(φk,φj)=(f,φj),j=0,1,⋯,m写成矩阵形式:
(φ0,φ0)(φ0,φ1)⋮(φ0,φm)(φ1,φ0)(φ1,φ1)⋮(φ1,φm)⋯⋯⋯(φm,φ0)(φm,φ1)⋮(φm,φm)a0a1⋮am=(f,φ0)(f,φ1)⋮(f,φm)这和离散最小二乘法方程完全对应。
区别只在于:
- 离散情形中,内积是求和;
- 连续情形中,内积是积分。
正交基下的简化#
如果
(φi,φj)=0,i=j则法方程变为对角形式:
aj(φj,φj)=(f,φj)所以
aj=(φj,φj)(f,φj)最终最佳平方逼近函数为:
φ∗(x)=j=0∑m(φj,φj)(f,φj)φj(x)
例题:用一次函数逼近 sinπx#
在 [0,1] 上,用一次多项式逼近
f(x)=sinπx取基函数:
φ0(x)=1,φ1(x)=x设逼近函数为:
φ(x)=a0+a1x内积取普通积分:
(f,g)=∫01f(x)g(x)dx法方程为:
{(φ0,φ0)a0+(φ1,φ0)a1=(f,φ0)(φ0,φ1)a0+(φ1,φ1)a1=(f,φ1)分别计算:
(φ0,φ0)=∫011dx=1(φ0,φ1)=∫01xdx=21(φ1,φ1)=∫01x2dx=31(f,φ0)=∫01sinπxdx=π2(f,φ1)=∫01xsinπxdx=π1所以:
{a0+21a1=π221a0+31a1=π1解得:
a0=π2,a1=0因此最佳一次平方逼近为:
φ(x)=π2这个结果看起来有点特别:一次项系数为 0。
原因是 sinπx 在 x=21 附近对称,用一次函数在整体平方误差意义下逼近时,斜率项被抵消了。
本章小结#
这一章的主线可以概括为:
用简单函数近似复杂对象,本质上是一个“误差最小化”问题。
核心知识点:
-
误差向量需要范数衡量
- 1 范数看误差总量;
- 2 范数看平方意义下的整体误差;
- ∞ 范数看最大误差。
-
最小二乘法最常用 2 范数
- 目标函数为误差平方和;
- 平方形式光滑,方便求导;
- 最后可转化为线性方程组。
-
多项式拟合是线性最小二乘的特殊情况
- 拟合函数为 a0+a1x+⋯+amxm;
- 令偏导为零得到法方程。
-
线性最小二乘等价于超定方程组的法方程
- 若 Aa≈y,则解
ATAa=ATy
- 这和微积分求偏导得到的结果一致。
-
非线性拟合有两条路
- 直接求非线性最小二乘;
- 通过变量变换转化为线性拟合。
-
函数最佳平方逼近是连续版最小二乘
- 离散数据中用求和;
- 连续函数中用积分;
- 最优条件是误差与逼近空间正交。
-
正交基能简化计算
- 一般基函数要解完整法方程;
- 正交基下系数可直接写为
aj=(φj,φj)(f,φj)
这一章和后续数值计算、数据拟合、机器学习都有联系。课堂上提到的神经网络训练,本质上也可以看作在一个很大的参数空间里,使某种误差函数最小。