聊聊函数空间 | HyperPlane

聊聊函数空间

在向量空间中,每个向量用它们在向量空间中的坐标表示;同样的,在函数空间中,每个函数也可以用它们在函数空间中的坐标表示。

向量空间

由于类比的方式比较容易让人接受,所以在聊函数空间之前我们先回顾一下向量空间。

首先考虑这样一个问题,如何描述一个向量空间?答案是使用一组线性无关的向量基(e1,e2,…,en)(\mathbf{e}_1, \mathbf{e}_2, \dots, \mathbf{e}_n)。在这组向量基张成的空间S\mathcal{S}中任意一个元素都可以通过这组基线性表示,即

x=x1e1+x2e2+⋯+xnen\mathbf{x} = x_1 \mathbf{e}_1 + x_2 \mathbf{e}_2 + \cdots + x_n \mathbf{e}_n

其中(x1,x2,…,xn)(x_1, x_2, \dots, x_n)就是向量x\mathbf{x}在这个向量空间中的坐标。如果这组基是还是正交的,那么我们可以得到

x=⟨x,e1⟩e1+⟨x,e2⟩e2+⋯+⟨x,en⟩en\mathbf{x} = \langle \mathbf{x}, \mathbf{e}_1 \rangle \mathbf{e}_1 + \langle \mathbf{x}, \mathbf{e}_2 \rangle \mathbf{e}_2 + \cdots + \langle \mathbf{x}, \mathbf{e}_n \rangle \mathbf{e}_n

注意到这里我们已经开始引入内积了。实际中我们最常见的向量表示也是写成向量在某个向量空间中的坐标,只不过是一个特定的向量空间,它的基为

e1=(1,0,…,0)e2=(0,1,…,0)⋯en=(0,0,…,1)\begin{aligned} \mathbf{e}_1 &= (1, 0, \dots, 0) \\ \mathbf{e}_2 &= (0, 1, \dots, 0) \\ &\cdots \\ \mathbf{e}_n &= (0, 0, \dots, 1) \end{aligned}

这里再提一下特征向量,对于非零向量x\mathbf{x},如果有

Ax=λxA\mathbf{x} = \lambda \mathbf{x}

那么x\mathbf{x}为矩阵AA的特征向量。
总结一下刚刚说的,空间由基张成,空间中的元素由基的加权和表示。

傅立叶变换

大家都比较清楚的概念,傅立叶变换是将函数从空间/时域变到频域(虽然有些人会怀疑为什么就会变到频域,后面会简单说明一下)。先给出傅立叶变换和逆变换的公式

F(ω)=∫−∞∞f(x)e−2πiωxdxf(x)=∫−∞∞F(ω)e2πiωxdω\begin{aligned} F(\omega) &= \intop_{-\infty}^{\infty} f(x) e^{-2 \pi i \omega x} \text{d} x \\ f(x) &= \intop_{-\infty}^{\infty} F(\omega) e^{2 \pi i \omega x} \text{d} \omega \end{aligned}

这玩意相信大家都很熟悉,甚至倒背如流。不过现在的关注点不是它怎么计算,我们要换个形式来描述它。

函数内积

这个时候就应该引入函数的内积了,函数ff和gg的内积为

⟨f,g⟩=∫−∞∞f(x)g(x)‾dx\langle f, g \rangle = \intop_{-\infty}^{\infty} f(x) \overline{g(x)} \text{d} x

其中a+ib‾=a−ib\overline{a + ib} = a - ib,表示复共轭。为什么是这么积分请大家联系向量内积理解。

本来是不想说共轭的,因为还要解释挺麻烦的。但是涉及到复数域就不得不提这个东西了,举个简单的例子解释一下吧

(a+ib)(a−ib)=a2+b2(a+ib)(a+ib)=a2−b2+2iab\begin{aligned} (a + ib)(a - ib) &= a^2 + b^2 \\ (a + ib)(a + ib) &= a^2 - b^2 + 2iab \end{aligned}

我想你应该从来没有听说过某个元素的模是个复数的。

函数空间正交基

那么现在回到傅立叶变换,根据欧拉公式

eω=e2πiωx=cos⁡(2πωx)+isin⁡(2πωx)=e−2πiωx‾e_{\omega} = e^{2 \pi i \omega x} = \cos(2 \pi \omega x) + i \sin(2 \pi \omega x) = \overline{e^{-2 \pi i \omega x}}

连同函数内积带入傅立叶变换中,我们可以得到

F(ω)=⟨f,eω⟩F(\omega) = \langle f, e_{\omega} \rangle

继续带入傅立叶逆变换中

f(x)=∫−∞∞⟨f,eω⟩eωdωf(x) = \intop_{-\infty}^{\infty} \langle f, e_{\omega} \rangle e_{\omega} \text{d} \omega

这里我们停顿一下,翻回去看看向量在正交基描述的向量空间中是如何表示的。

没错,我想说的就是eωe_\omega构成了函数空间的一组正交向量基。也就是说⟨f,eω⟩\langle f, e_\omega \rangle是函数ff在这个函数空间中的坐标。所以此时提问,为什么傅立叶变换是将函数从空间/时域变换到频域呢?

同时,很多情况下我们希望经过某些处理后的函数变得平滑。平滑的意思就是去除高频部分留下低频部分,也就是我们说的低通滤波

f^(x)=∫−ωmax⁡ωmax⁡⟨f,eω⟩eωdω\hat{f}(x) = \intop_{-\omega_{\max}}^{\omega_{\max}} \langle f, e_{\omega} \rangle e_{\omega} \text{d} \omega

同时这里有一个很奇妙的东西,将拉普拉斯算子作用在eωe_\omega上之后,可以得到

Δeω=−(2πω)2eω\Delta e_\omega = - (2 \pi \omega)^2 e_\omega

所以eωe_\omega为拉普拉斯算子的特征函数。

微积分

相信大家从《高等数学》/《微积分》里面都学了不少微积分计算技巧,但是这不是这篇内容的重点。同样的,相信大家对各种常微分方程的解算方法也已烂熟于心,比如什么分离变量等等。这里我问一个问题,不知道大家有没有想过微分方程解出来之后是个什么东西?一般来讲,我们是从初中开始学习方程的。我们解过各种方程,一元的二元的一次的二次的,甚至未知量太多了被我们排列成向量去求解。那么问题来了,微分方程解出来是什么东西?相信优秀的同学们应该都知道,微分方程的解是个函数。结合这个结论与我们刚刚推导的傅立叶变换,这里再问一个问题,为什么在常微分方程中使用拉普拉斯变换进行求解那么万能?

偏微分方程

自然界是连续的,并且很多时候是平滑的,所以偏微分方程是目前人类描述自然界最可靠的方法。我们知道偏微分方程多数时候是没有解析方法求解的。但是大家不要小看了人类的智慧,此时就该函数空间上场了。给定描述函数空间的一组基函数(f1,f2,⋯,fn)(f_1, f_2, \cdots, f_n),对于任意函数有

f≈x1f1+x2f2+⋯+xnfnf \approx x_1 f_1 + x_2 f_2 + \cdots + x_n f_n

为什么这里不是等于,因为一般的函数通常不能由有限个基函数完全描述。我们也无法通过有限的输入条件求得连续空间的所有值。但是我们有一个假设,那就是平滑,所以可以通过有限个基函数去近似。

所以这玩意怎么用呢?举个例子,对于一般的泊松方程而言

Δf=b\Delta f = b

将ff由基函数替换得到

Δf^=(Δf1Δf2⋯Δfn)(x1x2⋮xn)≈b\Delta \hat{f} = \begin{pmatrix} \Delta f_1 & \Delta f_2 & \cdots & \Delta f_n \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{pmatrix} \approx b

它居然就变成了一个线性方程了!不过前面我们说到,由于一般的函数不能由有限个基函数完全描述,所以ff和bb这两个函数还存在不能由(f1,f2,…,fn)(f_1, f_2, \dots, f_n)描述的分量。因此通常考虑Δf\Delta f和bb到该函数空间的投影相等,即

⟨Δf,fi⟩=⟨b,fi⟩\langle \Delta f, f_i \rangle = \langle b, f_i \rangle

最后我们求解的问题就变成了

(⟨Δf1,f1⟩⟨Δf2,f1⟩⋯⟨Δfn,f1⟩⟨Δf1,f2⟩⟨Δf2,f2⟩⋯⟨Δfn,f2⟩⋮⋮⋱⋮⟨Δf1,fn⟩⟨Δf2,fn⟩⋯⟨Δfn,fn⟩)(x1x2⋮xn)=(⟨b,f1⟩⟨b,f2⟩⋮⟨b,fn⟩)\begin{pmatrix} \langle \Delta f_1, f_1 \rangle & \langle \Delta f_2, f_1 \rangle & \cdots & \langle \Delta f_n, f_1 \rangle \\ \langle \Delta f_1, f_2 \rangle & \langle \Delta f_2, f_2 \rangle & \cdots & \langle \Delta f_n, f_2 \rangle \\ \vdots & \vdots & \ddots & \vdots \\ \langle \Delta f_1, f_n \rangle & \langle \Delta f_2, f_n \rangle & \cdots & \langle \Delta f_n, f_n \rangle \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{pmatrix} = \begin{pmatrix} \langle b, f_1 \rangle \\ \langle b, f_2 \rangle \\ \vdots \\ \langle b, f_n \rangle \end{pmatrix}

基函数举例

什么B样条,RBF。算了我不想写了,总而言之很多看起来是用来内插的东西,实际上都可以换个角度想想。

参考文献

  • M. Botsch, Ed., Polygon mesh processing. Natick, Mass: A K Peters, 2010.