Re: [問題] 快速傅立葉轉換_頻率轉波長的定義
看板Mathematica作者chungyuandye (養花種魚數月亮賞星星)時間13年前 (2011/09/09 23:20)推噓2(2推 0噓 1→)留言3則, 2人參與討論串2/2 (看更多)
※ 引述《raebmun (reversal)》之銘言:
: 最近從網路上看到利用mathematica作FFT的教學(內容與雷射脈衝有關)
: 照著上面作是可以得到預期結果
: 可是有個部分code看不懂 所以想請高手解惑
: 其中定義時間與頻率的部分:
: time = Table[(j - (num/2))*\[Delta]t, {j, 1, num}];
: freq = Table[(j - (num/2))*\[Delta]\[Omega], {j, 1, num}];
: absfreq = Table[freq[[j]] + \[Omega]0, {j, 1, num}];
: 接著我希望雷射強度跟波長有關 必須作頻率與波長的轉換
: 他是這樣寫的
: zp = Position[absfreq, _?(-0.001 < # < 0.001 &)][[1, 1]] + 1;
: wave = Reverse[
: Table[(2*Pi*c)/absfreq[[i]], {i, zp, Length[freq]}]];
: 在這裡zp的定義看不懂
我想不清楚的地方應該是pattern, _? , 的部分
_ 這個意思是說 "哪些東西"的意思,在Mathematica裡面表示any expression。
__ 就是any sequence
? 有點類似條件,在Mathematica中表示pattern test
所以 _? 符合我後面指定的條件的所有運算式
整行的白話文大概就是傳回那些在正負0.01的東西在absfreq這個序列中的位置
不過下面這個語法就非常平易近人了
SortBy[Transpose@{Range[num], Abs@absfreq}, Last][[1,1]]
pattern matching在Mathematica中算是相當多,有興趣的話可以查一下
Help guide/Patterns
舉個例子來
f[x_?NumberQ] := x^2
{f[2],f[a]}
你會發現f[2]會計算,但f[a]因為a不是數字,所以函數f並不會計算
傳回{1,2,3,.....,19,20}中任取兩個數和為15的所有組合
ReplaceList[Range[20], {__, a_, __, b_, __} :> {a, b} /; a + b == 15]
--
養花種魚數月亮賞星星
http://chungyuandye.twbbs.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.230.45
※ 編輯: chungyuandye 來自: 118.232.230.45 (09/09 23:21)
推
09/10 00:46, , 1F
09/10 00:46, 1F
→
09/10 00:47, , 2F
09/10 00:47, 2F
推
09/13 14:09, , 3F
09/13 14:09, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章