“近似”是非常常用的数学手段,其中包括利用多项式来作为其他函数的近似,并使得两个函数之间的某个误差最小,这类极小化问题应当如何求解?本文从一个几何例子开始,以数形结合的思想初步给出极小化问题与正交投影之间的关系;然后介绍多项式的内积定义,给出函数在多项式线性空间的正交投影计算方法;最后以正弦函数的多项式近似给出一个极小化问题的实例。
如下图所示,三维空间中存在某一向量 v,现需要在给定平面内找到一个向量 u 来尽可能逼近 v,这就要求两者的误差最小。向量的误差可以用模长(欧几里得范数)来定量表述,其定义为
∥u−v∥=(u−v)⋅(u−v)
由于点到平面内的距离最短,那么这个极小化问题的解就是向量 v 在给定平面内的正交投影,即 u=vp 。
空间向量的正交投影示意图
为了定量表述向量 v 的正交投影,需要选取基向量,如图中的 e1 和 e2。特别地,所选取的基向量为标准正交基,即满足:
ei⋅ej={10(i=j)(i=j)
在标准正交基下,正交投影可分解为
vp=(vp⋅e1)e1+(vp⋅e2)e2
由此可见,极小化问题可化为正交投影的求解问题,这涉及两点核心内容:1)构造合适的标准正交基;2)求原向量(也可能是函数)与各基的内积(对应向量的点乘)。
多项式的一般形式为
p=a0+a1x+a2x2+...+anxn
向量可用坐标 xi 与基向量 ei 的线性组合
v=x1e1+x2e2+...+xnen
对比上面两种表述,若将 ai,(i=0,1,2…n) 看作多项式的"坐标",那么 xi,(i=0,1,2…n) 就是多项式的基。容易看出这种表述确实满足线性可加原理,因而将 xi 作为多项式的基是合理的。
进一步,为了定义多项式的内积(用尖括号表示),同样由向量的内积类推可得
⟨u,v⟩=i=1∑nuivi→⟨p1(x),p2(x)⟩=∫p1(x)p2(x)dx
应当注意这里并没有给出多项式的内积定义的积分限,这通常由所关注的问题给出。
作为一个例子:求一个不超过5次的多项式 p5(x) ,使其在区间 [−π,,π] 内逼近 sin(x) ,要求 ∫−ππ(sin(x)−p5(x))2,dx 最小。
观察到所需的最小值正是 sin(x) 与 p5(x) 误差的内积,为了使其最小,p5(x) 就是 sin(x) 在多项式线性空间的正交投影。
首先构造标准正交基。由上面讨论可知 xi(i=0,1,2…n) 是多项式的基,但可以验证其不是正交的,因为
∫−ππxixjdx={10(i=j)(i=j)
为此,可采用格拉姆-施密特正交化方法,基 vi 经过正交化后的标准正交基 ei 为
⎩⎨⎧e1ei=∥v1∥v1=∥vi−⟨vi,e1⟩e1−⟨vi,e2⟩e2−...−⟨vi,ei−1⟩ei−1∥vi−⟨vi,e1⟩e1−⟨vi,e2⟩e2−...−⟨vi,ei−1⟩ei−1(i>1)
利用MATLAB符号计算可得本题的标准正交基可选为
⎩⎨⎧e0e1e2e3e4e5=2π2=2π3/26x=−4π5/2310(3π2−x2)=−4π7/2514(53xπ2−x3)=16π9/21052(x4−76π2x2+353π4)=16π11/26322(x5−910π2x3+215π4x)
计算 sin(x) 与各基的内积后,得所求的5次多项式为
p5(x)=(8π2105−8π416065+8π6155925)x+(−4π4315+4π639375−4π8363825)x3+(8π6693−8π872765+8π10654885)x5≈0.9878621356x−0.1552714106x3+0.005643117976x5
上式可以与 sin(x) 的泰勒展开对比
pt(x)=x−6x3+120x5
将三者绘制在同一张图上,如下图所示,可见正交投影的方式获取的多项式更加逼近原始正弦函数,在 ±π 处的误差远小于泰勒展开导致的误差。
正弦函数的多项式近似
本文所涉及的相关符号计算源码如下
% Symbolic calculation for projection of sin(x)
% Ref: (ISBN) 978-7-115-43178-3, 149-150
% XiaoCY 2020-08-02 (MATLAB R2020a)
clear;clc
close all
%% Symbolic Calculation
syms x
f(x) = sin(x);
degp = 5; % degree of polynomial
B = x.^(0:degp);
% Gram-Schmidt Orthogonalization
B(1) = B(1)/sqrt(int(B(1)^2,-pi,pi));
for k = 2:degp+1
V = B(k);
for m = 1:k-1
V = V-int(B(k)*B(m),-pi,pi)*B(m);
end
B(k) = V/sqrt(int(V^2,-pi,pi));
end
Y = int(f.*B,-pi,pi).*B;
y(x) = sum(Y);
p = sym2poly(y);
ft = taylor(f,x,0,'order',6);
%% Plot Results
x = linspace(-pi,pi,1e3);
figure
subplot(2,1,1)
plot(x,f(x),'DisplayName','Sine')
hold on
plot(x,ft(x),'DisplayName','Taylor')
plot(x,polyval(p,x),'DisplayName','Projection')
grid on
legend('Location','southeast')
ylabel('Value')
axis([-pi pi -1.2 1.2])
subplot(2,1,2)
plot(x,ft(x)-f(x),'DisplayName','Taylor')
hold on
plot(x,polyval(p,x)-f(x),'DisplayName','Projection')
grid on
legend('Location','southeast')
ylabel('Error')
xlim([-pi pi])
- Sheldon Axler. Linear Algebra Done Right (线性代数应该这样学). 2016.