天天看點

算法之_歐拉公式

1.  引子

看傅立葉變換的時候,一直奇怪,幂指數是怎麼映射成三角函數的?學習了一下歐拉公式,果然很神奇,用到了自然常數e,圓周率π,虛數i,三角函數sin/cos,指數,還有泰勒展開.倒不是算法有多難,隻是涉及基礎太多,經常被卡住,總結如下.

2.  泰勒展開

泰勒展開是用多項式逼近原函數,這麼做是因為像sin(x)這樣的函數,如果代入x=4很難算出結果,但是将x的值代入形如f(x)=a0+a1x+a2x^2+a3x^3…的多項式就很容易計算。具體是用原函數的導數實作的,把函數展開成多項式,公式如下:

算法之_歐拉公式

其中Rn(x)是餘項

3.  自然常數e

e是自然常數(歐拉數),它是一個約等于2.718的無理數,定義是

算法之_歐拉公式

它的含義可以通過複利來了解,假設你有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,展開後得到

算法之_歐拉公式
算法之_歐拉公式

上圖是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(對應極坐标系)

算法之_歐拉公式

把乘一次i看成相對0點逆時針轉90度,乘兩次,轉180度,轉成實軸的-1,轉三次是-i,轉四次又回到機關1。是以可以把其虛部看成定義如何旋轉。

6.  把虛數i代入e^x的展開式

虛數i是-1開方,是以有i^1=i, i^2=-1,i^3=-i,i^4=1

算法之_歐拉公式

此時可以看到其結果分為實部和虛部兩部分

7.  把sin(x)做泰勒級數展開

在x=0處展開,由于sin(0)=0,cos(0)=1,sin’(x)=cos(x),cos’(x)=-sin(x)

算法之_歐拉公式

8.  把cos(x)做泰勒級數展開

在x=0處展開

算法之_歐拉公式

9.  歐拉公式

由以上幾步,可以看到e^ix的實部和虛部正好對應sin(x)和cos(x)的展開,據此,得到歐拉公式:

算法之_歐拉公式

歐拉公式将指數函數的定義域擴大到了複數域,建立了三角函數和指數函數的關系,被譽為“數學中的天橋”。

下圖中,将上式右側表示為二維坐标中的點,xy軸分别表示其實部虛部,θ為轉角(即上式中的x),轉動半徑為機關1(模不變).它的幾何意義就是随着虛部x的增加不斷轉圈.

算法之_歐拉公式

可以把 e^(i*x) 看作通過機關圓的圓周運動來描述機關圓上的點,e^(i*x)表示在機關圓上轉動了x弧度(即某個角度時)得到的向量,以此類推,e^(πi)在機關圓上轉了半圈。顯然得到的是實軸上的-1,然後與1合并可抵消得到0 ,由此得到 :

算法之_歐拉公式

10.           擴充成時間的函數

算法之_歐拉公式

上圖中又加入了t,把e^(ix)想成e^(iwt),t是時間,w是系數。

把平面上的轉圈擴充成了空間中的轉圈,縱軸表示時間t,兩個橫軸分别為實部(cos(t))和虛部(sin(t)),藍線經過的點是e^ix,即,把時域上的e^ix分别投射到了實軸cos(t)和虛軸sin(t),它們都是時間t的函數.圖中可看到正餘和餘弦的投射(紅/綠),如果用python做3D圖,拖動旋轉角度效果更直覺.這就傅立葉變換原理:将時域值拆分映射到頻域,通過三角函數的疊加表示。

繼續閱讀