Re: [問題] 關於微分的計算

看板Mathematica作者 (-858993460)時間13年前 (2011/07/09 03:37), 編輯推噓3(300)
留言3則, 2人參與, 最新討論串4/5 (看更多)
試了好半天總算看懂你的問題了.... 你這個問題麻煩的點在於你的次方是非交換性的 所以不能直接套有交換性的結果來用 不過要拐些彎的話可以這麼做: (※注意:下面這個做法真的拐了好多彎 也就是其實是我東拼西湊湊出來的做法 如果版友們有更好的做法也可提供) (1a) 先建立級數 這可以用 Series 做到: (以 U 為例) Normal[Series[Exp[I Sqrt[2] \[CurlyPhi]/F], {\[CurlyPhi], 0, 10}]] 這裡我貼在這裡是 \[CurlyPhi] 的東西其實會顯示成 φ 你可以從 BasicMathInput 點出來或用 [Esc]cphi[Esc] 輸入 加 Normal 是為了下一步的代換 (1b) 上面這個的級數它的次方我們要換成非交換性的乘方 所以加上這一串: /. Power[\[CurlyPhi], n_] :> NonCommutativeMultiply @@ Table[\[CurlyPhi], {n}] 把所有長得像 φ^n 的換成 n 個 φ 用非交換性乘給乘起來 (1c) 然後就可以取微分了: Dt[ ... , Constants->F] 其中 ... 就換進 (1a) (1b) 這一大串 所以全部就長這樣: U = Dt[ Normal[Series[Exp[I Sqrt[2] \[CurlyPhi]/F], {\[CurlyPhi], 0, 10}]] /. Power[\[CurlyPhi], n_] :> NonCommutativeMultiply @@ Table[\[CurlyPhi], {n}], Constants -> F]; 這樣就把 U 的級數給建立起來了 加上 Constants->F 讓 Dt 知道你的 F 是常數 記得加個 ; 不然那一長串你不會想看的... (1d) 依樣畫葫蔖建立 U+: UP = Dt[ Normal[Series[Exp[-I Sqrt[2] \[CurlyPhi]/F], {\[CurlyPhi], 0, 10}]] /. Power[\[CurlyPhi], n_] :> NonCommutativeMultiply @@ Table[\[CurlyPhi], {n}], Constants -> F]; (2) 於是我們就能做 U * U+ 不過這裡有個問題是 NonCommutativeMultiply 沒有內建分配律 所以我們得要自己生一個 好在 Help 的範例裡已經有了我們要的東西: (摘自 ref/NonCommutativeMultiply 當中 Application 的第二個範例) Build a function to expand non-commutative products. Distributivity with respect to Plus: ExpandNCM[(h : NonCommutativeMultiply)[a___, b_Plus, c___]] := Distribute[h[a, b, c], Plus, h, Plus, ExpandNCM[h[##]] &] Handling the commutative product inside the non-commutative one: ExpandNCM[(h : NonCommutativeMultiply)[a___, b_Times, c___]] := Most[b] ExpandNCM[h[a, Last[b], c]] Fall-back operation applied to everything else: ExpandNCM[a_] := ExpandAll[a] 有了這個之後我們就可以展開了: UUP = Expand[ExpandNCM[U**UP]]; 同樣記得加上 ; 因為也是很長一串... (3) 接下來我們要取出其中的項了 我在上一項中先加了 Expand 的用意是讓它拆成獨立一項一項的 因為你想要的是同樣次方數合起來做為一項 (像是 δφ*φ 和 φ*δφ 要合起來看 φ*δφ*δφ 和 δφ*δφ*φ 和 ... 等等要合起來看) 所以我們得要一次找出所有一樣個數的項 當已經用 Expand 全部乘開之後就可以這麼做: (以第二項的三次方項為例) Select[UUP, MatchQ[#, _*NonCommutativeMultiply[a__] /; Length[{a}] == 3] &] 去找什麼東西乘上恰有三個東西非交換乘起來這樣的玩意 在這題的情形中會找出這樣的東西: I√2 φ**Dt[φ,Constants->{F}]**Dt[φ,Constants->{F}] ----------------------------------------------------- - F^3 I√2 Dt[φ,Constants->{F}]**Dt[φ,Constants->{F}]**φ ----------------------------------------------------- F^3 這代表三次方項是長成這個樣子的: (i√2/F^3)(φ*δφ*δφ)-(i√2/F^3)(δφ*δφ*φ) (4) 所以接下來就知道該怎麼做了: (* 把φ代入矩陣 把**換成矩陣乘法 然後求 Trace 後乘上前面的項 *) Tr[ %/.\[CurlyPhi]->{{πo/Sqrt[2], πp}, {πm , -πo/Sqrt[2]}} /.NonCommutativeMultiply->Dot ] * (F^2/4) // Expand 這裡我用 πo πp πm 分別代替 π^o π^+ π^- 因為直接寫 π^+ π^- 產生的 SuperPlus 和 SuperMinus 好像和 Dt 互動不良 當然你也可以把 (3) 代進這裡的 % 這個地方 就可以省一個計算結果 這樣求出來的就是你所想要的項了 如果覺得分母很討厭也可以 Together 一下讓它"提"出去 我這裡計算出來的結果 二次項可以求出你手算的結果 它會寫成 (略去 Constants->{F}) 1 --- Dt[πo]^2 + Dt[πm] Dt[πp] 2 o 2 - + 這就表示這一項的結果是 (1/2)(δπ ) +(δπ )(δπ ) 和你的手算結果相符 然後三次項是 0 四次項是(用你的記法) + 2 - 2 + - + - - 2 + 2 (1/6F^2)[(π ) (δπ ) - 2(π )(π )(δπ )(δπ ) + (π ) (δπ ) ] 要注意的是 你最前面的 Series 切的地方關係到你後面正確答案可以算到第幾項 如果像這個例子給的 10 的話 因為 U 和 UP 最多是 10 次項 所以 UUP 到 11 次項都是對的 也就是可以求出到第 10 項 (11 次項) 的展開結果 (相信知道手算過程的你一定知道這是為什麼) 要更多項就前面 Series 的地方切多一點就好 -- いああオレたちには見えてるモノがあるbきっと誰にも奪われないモノがあるはずさ開口一番一虚一実跳梁跋扈形影相弔yL羊頭狗肉東奔西走国士無双南柯之夢 歪も ぶ  意味がないと思えるコトがあるPきっとでも意図はそこに必ずある んの く 依依恋恋空前絶後疾風怒濤有無相生H急転直下物情騷然愚者一得相思相愛 だが ろ 無意味じゃない6あの意図 恋た で 有為転変死生有命蒼天已死黄天當立 !!6五里霧中解散宣言千錯万綜則天去私 のり -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.230.62

07/09 05:45, , 1F
推!感謝神手
07/09 05:45, 1F

07/09 05:53, , 2F
再推 我回去研究一下CODE和語法
07/09 05:53, 2F

07/09 10:57, , 3F
這篇應該要M起來
07/09 10:57, 3F
文章代碼(AID): #1E5rn_Fl (Mathematica)
文章代碼(AID): #1E5rn_Fl (Mathematica)