Re: [問題] 方程式微分問題

看板Mathematica作者 (Hysterisis)時間11年前 (2013/04/25 11:23), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《huarache (~絮~)》之銘言: : http://ppt.cc/CSIt : 小弟 mathematica 新手,只會簡單的把公式微分 : 不知道 mathematica 可否像書上的公式運算呢? : 小弟想利用書上的公式畫成圖 : 還煩請版上的高手替小弟解惑 : 謝謝! 引用說明文件 tutorial/TotalDerivatives 裡的寫法 主要用到全微分函數Dt[],見說明文件 底下代碼是順序式的,每當我寫一個 "=>" 就代表把之前那一部分代碼貼到MMA並執行看輸出 (*code*) eqn1= (r2 Cos[s2] + r3 Cos[s3] - r4 Cos[s4] - r1 == 0) eqn2= (r2 Sin[s2] + r3 Sin[s3] - r4 Sin[s4] == 0) => (*設r1,r2,r3,r4對t為常數*) r1/:Dt[r1,t]=0 r2/:Dt[r2,t]=0 r3/:Dt[r3,t]=0 r4/:Dt[r4,t]=0 (*微分*) eqns= {Dt[eqn1, t], Dt[eqn2, t]} => (*消掉Dt[s4, t], Eliminate一般會減少方程式數量,eqns是兩條聯立,相消後 只輸只出一條*) eqn3= Eliminate[eqns, Dt[s4, t]] => (*解Dt[s3,t]*) Solve[eqn3, Dt[s3, t]] => (*但出來的結果需要一番調理才會好看,因此改成*) (Solve[eqn3, Dt[s3, t]][[1, 1]] // FullSimplify) /. Rule -> Equal => (*同理,快轉把上面步驟黏一起,改成消Dt[s3,t],解Dt[s4,t]*) (Solve[Eliminate[eqns, Dt[s3, t]], Dt[s4, t]][[1, 1]] // FullSimplify) /. Rule -> Equal 感謝FullSimplify的自動和角,不過表達成Csc(s3-s4)很奇怪,可以手動改 另一種寫法是用偏微分D[ ,t] 代替 全微分Dt[ ,t],差別只在於 偏微分你得把方程式寫成 eqn1 = (r2 Cos[s2[t]] + r3 Cos[s3[t]] - r4 Cos[s4[t]] - r1 == 0); eqn2 = (r2 Sin[s2[t]] + r3 Sin[s3[t]] - r4 Sin[s4[t]] == 0); 然後 eqns = {D[eqn1, t], D[eqn2, t]}; 重點在需要明確把是t的函數者通通以s2[t]這樣寫出來,其餘未明確表示與t有關的東西 在D[,t]裡面會一律視為常數微掉。 在Dt[,t]剛好相反,它假定所有東西都是t的函數,因此你才需要定義 r1/:Dt[r1,t]=0 等四行,標明說r1~r4對t是常函數,請MMA微掉他(看到就令為0)。 兩個寫法各有優劣,我覺得變數一多用 D[] 寫起來會多一層括號很難讀, 但其實Dt[]也沒多好因為它會讓算式比較長,偶爾轉換成TraditionalForm (見說明) 之後會變得簡潔一點。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.213.88 ※ 編輯: jurian0101 來自: 140.112.213.88 (04/25 11:40)

04/25 13:24, , 1F
謝謝你詳盡的解說,我大概了解了,謝謝你!
04/25 13:24, 1F
文章代碼(AID): #1HUA6rf7 (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1HUA6rf7 (Mathematica)