3傅利葉轉換取點
4快速傅利葉轉換
5程式eiπ-1=0;
i=(-1)1/2,就是虛數。
寫個方程
y=eix;
求導 y』=ieix;
如果把y看做向量,那麼y』則垂直於y,也就是垂直於實軸;
通常,導數可以看做y增長的速度;
那麼二次導數可以看做加速度;
求二次導 y』』=-1eix;
可以看出加速度垂直於速度,那麼這個y點,將做圓周運動;
由於導數的絕對值是1,所以當x=x1時,y點將走過一段長為x1的圓弧,當x=π時,剛好轉了半圈,所以才有
eiπ-1=0;
然後所以得出
eix=cos(x)+isin(x),x=[0,2π];
可以把復平面中的乘法理解為旋轉;
eia*eib=ei(a+b);
也就是複數相乘,等於模相乘,弧度相加,但在這裡,模都是1,所以只有弧度相加。
f(x)=a0+a1x+a2x2+……+anxn;
這是係數表示法
如果這樣的兩個多項式相乘,就會很麻煩,要算n2次,所以要把多項式轉化成一些點,然後將點相乘,就可以簡單點,只需算n次;
我們可以用幾個點來確定這個多項式,最簡單的情況就是告訴你兩個點,你可以確定一條直線,f(x)=a0+a1x,這條直線有a0,a1,兩個未知數,你可以用兩個點確定。
那麼對於f(x)=a0+a1x+a2x2+……+anxn;
你可以用n+1個點確定(從0到n)。
舉個例子
a(x)=a0+a1x;
由(x1,ya1),(x2,ya2)確定;
b(x)=b0+b1x
;由(x1,yb1),(x2,yb2)確定;
a(x) * b(x)=c(x)=c0+c1x+c2x2;
你把兩條直線相乘可以得到一條二次函式線(拋物線),你把a,b兩條直線的兩個點對應的y值相乘,可以得到位於c曲線上的兩個點
(x1,yc1),(x2,yc2),yc1=ya1 *yb2 , yc2=ya2 *yb2;
那麼很顯然,c有三個未知數(c0,c1,c2),需要三個點才能確定。
所以儘管你可以用兩個點確定這條直線,但為了用點值相乘後的點確定這條拋物線,你還是需要在這條直線上選取3個點才行。
所以a(x)=a0+a1x+…+anxn;
b(x)=b0+b1x+…+bmxm;
a(x)*b(x)=c(x)=c0+c1x+…cn+mxn+m;
c由m+n+1個點確定(從0到m+n);
所以a和b要取各m+n+1個點
(x1,ya1),(x2,ya2)…(xm+n+1,yam+n+1)
(x1,yb1),(x2,yb2)…(xm+n+1,ybm+n+1)
你按正常方法算這些點的y值也是很麻煩的
ya1=a0+a1x1+…+anx1
n;算乙個點就需要加n次
況且你需要算n+m+1個點;
所以我們選用傅利葉轉換的方法取點,
因為待會可以將其公升級為快速傅利葉轉換(fft);
傅利葉轉換取點是在復平面上取點,尤拉公式是在復平面上的乙個圓,
eix=cos(x)+isin(x),x=[0,2π];
我們要取m+n+1個點,也就是說需要m+n+1個x;
那我們就把這個圓用m+n+1個點平分,每乙個點代表乙個x的值;
設乙個t=(2π/(m+n+1)),那麼每一段弧度為eit,
設w=eit,我們可以將其稱為單位弧度;
這次的x我們從0來編號(因為在圓中,2π=0);
x0=w0,
ya0=a0+a1(w0)+a2(w0)2+…+an(w0)n;
yb0=b0+b1(w0)+b2(w0)2+…+bm(w0)m
下面以此類推,將w0換成w1,w2等
x1=w1;
x2=w2..
.xn+m=wm+n;
為什麼要這麼取點呢,因為除了可以fft外,還可以由點確定系數值時方便一些,你肯定不希望通過聯立方程組來求未知數吧。
傅利葉逆轉換就是由點確定係數
先不進行相乘,先只是傅利葉轉換然後逆轉換;
那麼只取n+1個點就行了
這裡t=2π/(n+1),w=eit;
y0=a0+a1(w0)+a2(w0)2+…+an(w0)n=σi=0
n(ai(w0)i);
y1=σi=0
n(ai(w1)i);
y2=σi=0
n(ai(w2)i);..
yn=σi=0
n(ai(wn)i);
然後再設乙個多項式
p(x)=y0+y1x+y2x2+…+ynxn;
然後先說乙個結論,
p(w-i)=ai/(n+1);
形象理解一下,p(x)一共有n+1項,每一項都含有ai(其餘的a會相互抵消),所以要除(n+1),然後它為什麼會等於ai呢,
舉個例子『
p(w-2)=a2/(n+1);
p(w-2)=σi=0
n(ai(w0)i)+σi=0
n(ai(w1)i)(w-2)1+σi=0
n(ai(w2)i)(w-2)2+…+σi=0
n(ai(wn)i)*(w-2)n;
會發現,當每一項的i=2時,其對應的a2的係數都會為一,可以說每一項的a2都「恰好被轉回來了」,而其他的a的係數會相互抵消,假設n=4,然後以a3的係數被抵消為例,
第1項的a3的係數為1;
第2項的a3的係數為(w1)3 *(w-2)1=w1;
第3項的a3的係數為(w2)3 *(w-2)2=w2;
第4項的a3的係數為(w3)3 *(w-2)3=w3;
第5項的a3的係數為(w4)3 *(w-2)4=w4;
w=ei(2π/5);
這五個數在復平面上的點剛好是正五邊形的五個頂點,畫個圖試試,把這五個數代表的復平面向量加起來,剛好為零。
所以這個傅利葉逆轉換可以理解為,所求的係數剛好都被剛好「逆轉」到了實數軸,其他的係數散落在負平面上的圓上,其點組成的圖形的重心在圓心,所以互相抵消為零。
主要快在取點上,從這裡開始,多項式一共有n項,且n為2的整數次冪;
舉個例子,假設n=8;
a(x)=a0+a1x1+a2x2+…+a7x7;
y0=a0+a2+a4+a6 + a1+a3+a5+a7;
y4的,我就直接把w4(w=ei(2π/8))帶進去算出來
y4=a0+a2+a4+a6 - a1-a3-a5-a7;
y2=a0+a4-a2-a6 +w2(a1+a5-a3-a7);
y6=a0+a4-a2-a6 -w2(a1+a5-a3-a7);
把每個y分為兩部分,a下標為偶數一部分,奇數一部分。
y=(a0+a2x2+a4x4+a6x6)+x(a1+a3x2+a5x4+a7x6);
而wi=-wi+n/2;
yi=x+y;
yi+n/2=x-y;i<=n/2;
所以我們只求出一半的y就可以直接得出另一半,既然可以這樣那我們得寸進尺只求出一半的一半就可以了,再少一點…
仔細觀察y0與y2
y0=a0+a2+a4+a6 + a1+a3+a5+a7;
y2=a0+a4-a2-a6 +x(a1+a5-a3-a7);
所以,一半的一半
y=(a0+a4x4+x2(a2+a6x4))+x(a1+a5x4+x2(a3+a7x4));
然後一直二分,複雜度只有nlogn;
所以我們先求最小的一部分然後兩兩合併…
快速逆轉換也和這個一樣,只是係數變了;
快速傅利葉(FFT)
快速傅利葉 更加形象的理解傅利葉變換 大概了解之後 從傅利葉級數到傅利葉變換 太大,只能裁剪為兩張 刨根問底的同學 雷德演算法 輸出序列是按自然順序排列的,而輸入序列的順序則是 位元反轉 方式排列的。也就是說,將序號用二進位制表示,然後將二進位制數以相反方向排列,再以這個數作為序號。如011變成11...
FFT快速傅利葉
description 給出兩個n位10進製整數x和y,你需要計算xy。input 第一行乙個正整數n。第二行描述乙個位數為n的正整數x。第三行描述乙個位數為n的正整數y output 輸出一行,即xy的結果。資料範圍 n 60000 乙個整數x a nan 1.a 0x a na a 0 x an...
FFT 快速傅利葉演算法 for java
package com.test.test2 public class fft bitreverse i reve double theta,dt 2 3.14159265358979323846 fft n for i 0 i fft n 1 i 用於頻譜顯示的快速傅利葉變換 param real...