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

作者: jurian0101 (Hysterisis)   2013-04-25 11:23:30
※ 引述《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 (見說明)
之後會變得簡潔一點。
作者: huarache (~çµ®~)   2013-04-25 13:24:00
謝謝你詳盡的解說,我大概了解了,謝謝你!

Links booklink

Contact Us: admin [ a t ] ucptt.com