Re: [問題] 快速傅立葉轉換_頻率轉波長的定義

看板Mathematica作者 (養花種魚數月亮賞星星)時間13年前 (2011/09/09 23:20), 編輯推噓2(201)
留言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
順帶補充三個底線是 any (may be empty) sequence
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
文章代碼(AID): #1EQYxF1f (Mathematica)
文章代碼(AID): #1EQYxF1f (Mathematica)