算法之 _ 欧拉公式

#数学

##1. 引子

看傅立叶变换的时候,一直奇怪,幂指数是怎么映射成三角函数的?学习了一下欧拉公式,果然很神奇,用到了自然常数 e,圆周率π,虚数 i,三角函数 sin/cos,指数,还有泰勒展开.不是算法有多难,只是涉及基础太多,经常被卡住,总结如下.

##2. 泰勒展开

泰勒展开是用多项式逼近原函数,这么做是因为像 sin(x) 这样的函数,如果代入 x=4 很难算出结果,但是将 x 的值代入形如 f(x)=a0+a1x+a2x2+a3x3…的多项式就很容易计算。具体是用原函数的导数实现的,把函数展开成多项式,公式如下:

图片.png

其中 Rn(x) 是余项

##3. 自然常数 e

e 是自然常数 (欧拉数),它是一个约等于 2.718 的无理数,定义是

图片.png

它的含义可以通过复利来理解,假设你有 1 块钱,年利息是 1 块钱(100%),一年后可拿到两块钱 (1+1/1)^1=2;按利滚利计算,如果半年付一次利息 (1+1/2)2=2.25;一个月付一次息,(1+1/12)12=2.61;每天付一次息,(1+1/365)^365=2.715,当 x 驱于无穷时 e 约为 2.718.

##4. 自然指数 e^x 的泰勒级数展开

把 e^x 在 x=0 处展开,由于 e^0=1 且 e^x 的导数还是 e^x,展开后得到

图片.png
图片.png

上图是 e^x,以及展开式前 5 项和前 10 项拟合的图像

##5. 复数

复数是形如 a+b*i 的数,其中 a,b 是实数,i^2=-1.(对应直角坐标系)

在复变函数 (复数作为自变量和因变量的函数) 中,变量 z 可以写成 z=r (cosθ+ isinθ).r 是 z 的模,即 r = |z|; θ是 z 的辐角,复数记作点 Z(a,b) 或向量 OZ(对应极坐标系)

图片.png

把乘一次 i 看成相对 0 点逆时针转 90 度,乘两次,转 180 度,转成实轴的 -1,转三次是 -i,转四次又回到单位 1。因此可以把其虚部看成定义如何旋转。

##6. 把虚数 i 代入 e^x 的展开式

虚数 i 是 -1 开方,因此有 i^1=i, i2=-1,i3=-i,i^4=1

图片.png

此时可以看到其结果分为实部和虚部两部分

##7. 把 sin(x) 做泰勒级数展开

在 x=0 处展开,由于 sin(0)=0,cos(0)=1,sin’(x)=cos(x),cos’(x)=-sin(x)

图片.png

##8. 把 cos(x) 做泰勒级数展开

在 x=0 处展开

图片.png

##9. 欧拉公式

由以上几步,可以看到 e^ix 的实部和虚部正好对应 sin(x) 和 cos(x) 的展开,据此,得到欧拉公式:

图片.png

欧拉公式将指数函数的定义域扩大到了复数域,建立了三角函数和指数函数的关系,被誉为“数学中的天桥”。

下图中,将上式右侧表示为二维坐标中的点,xy 轴分别表示其实部虚部,θ为转角 (即上式中的 x),转动半径为单位 1(模不变).它的几何意义就是随着虚部 x 的增加不断转圈.

图片.png

可以把 e^(ix) 看作通过单位圆的圆周运动来描述单位圆上的点,e^(ix) 表示在单位圆上转动了 x 弧度 (即某个角度时) 得到的向量,以此类推,e^(πi) 在单位圆上转了半圈。显然得到的是实轴上的 -1,然后与 1 合并可抵消得到 0,由此得到:

图片.png

##10. 扩展成时间的函数

图片.png

上图中又加入了 t,把 e^(ix) 想成 e^(iwt),t 是时间,w 是系数。把平面上的转圈扩展成了空间中的转圈,纵轴表示时间 t,两个横轴分别为实部 (cos(t)) 和虚部 (sin(t)),蓝线经过的点是 e^ix,即,把时域上的 e^ix 分别投射到了实轴 cos(t) 和虚轴 sin(t),它们都是时间 t 的函数.图中可看到正余和余弦的投射(红/绿),如果用 python 做 3D 图,拖动旋转角度效果更直观.这就傅立叶变换原理:将时域值拆分映射到频域,通过三角函数的叠加表示。