#範例12-1:求週期為∞的指數函數f(x)=exp(-x**2)的傅立葉轉換Fourier Transform #觀念:現實的物理世界,很多波不是週期波,而是獨立波 #FT: 非週期性的連續波之傅立葉轉換語法: fourier_transform(f, x, k).doit() #Inverse FT: 非週期性的連續波之傅立葉轉換語法: InverseFourierTransform(ft, k, x).doit() from sympy import * #from sympy.plotting import plot, PlotGrid x = symbols('x') k = symbols('k') f = Function('f')(x) f = exp(-x**2) #(1).FT:傅立葉轉換 #fourier_transform(f, x, k):表達式 #fourier_transform(f, x, k).doit():把表達式simplify成簡約式,才能夠後續應用(例如畫圖,計算) ft = fourier_transform(f, x, k).doit() #print(ft) #(2).inverse FT:反向傅立葉轉換成原始函數 #InverseFourierTransform(ft, k, x):反向FT的表達式 #fourier_transform(f, x, k).doit():把反向表達式simplify成簡約式,才能夠後續應用(例如畫圖,計算) ftinverse = InverseFourierTransform(ft, k, x).doit() #注意:若是沒有doit(),最後無法畫出圖,會出現錯誤 #(3).畫出三個子圖,比較:時域 → 頻域 → 反向時域 #sympy 畫出三個子圖的方法:使用plotting.PlotGrid(上下數目, 左右數目 , p1, p2, p3) #sympy 顯示圖例legend的方法:若用label='FT=frequency spectrum',legend=True無法顯示 #必須另外寫p1[0].label = '$f(x)=exp(-x**2)$',才能顯示出legend #畫出時域:原始f(x)圖 p1 = plot(f, label='$f(x)=exp(-x**2)$', legend=True) p1[0].label = '$f(x)=exp(-x**2)$' #畫出頻域:FT頻譜圖 p2 = plot(ft,line_color='red', label='$FT=frequency spectrum$',legend=True) p2[0].label = '$FT=frequency spectrum$' #畫出反向時域 p3 = plot(ftinverse, line_color='green', label='$Inverse FT$',legend=True) p3[0].label = '$Inverse FT$' #在畫圖網格上分為上下三個圖 plotting.PlotGrid(3, 1 , p1, p2, p3)