Re: [問題] 如何求解方程式"符號運算"與"簡化"

作者: jurian0101 (Hysterisis)   2012-12-22 02:42:05
直接貼到Mathematica讀
(*成功的重點1,符號必須完全一致。 有[t]的變數全部要有[t]。尤其是D[f[t],t] 處,
若f不明確指定[t]會 直接Evaluate得出0喔
*)
line1=L*D[i[L][t],t]==V[g][t]-r[L]*i[i][t]-v[0][t];
line2=i[i][t]==(L*D[i[L][t],t])/R[S]+i[L][t];
line3=v[0][t]==c*r[c]*D[v[c][t],t]+v[c];
ANS1=Eliminate[{line1,line2,line3},{i[i][t],v[0][t]}]
ANS2=Solve[ANS1,{D[i[L][t],t]}]
(*用Eliminate消掉 (2)(3)式的變數,我覺得這邊調整成D[i[L][t],t]在前太麻煩也不必
要,索性 用Solve的方式*)
line4=L*D[i[L][t],t]==-(((r[c]*R[S])*(c*D[v[c][t],t]))/(r[L]+R[S]))+
(R[S]*V[g][t])/(r[L]+R[S])-(v[c]*R[S])/(r[L]+R[S])+
(i[L][t]*((-r[L])*R[S]))/(r[L]+R[S]);
ANS3=Solve[line4,D[i[L][t],t]]
SameQ[Simplify@ANS2,Simplify@ANS3]
(*這邊是要證明直接輸入的 (4)式與消去法得到的等價,Simplify不可少*)
line5=c D[v[c][t],t]==R[L]/(r[c]+R[L])(1/R[S]*L*D[i[L][t],t]+i[L][t])
-v[c]/(r[c]+R[L])
(*(5)式兼DeBug單元,前面提過變數的輸入要完全一致,問題除了用眼睛很累的金金看
有沒有辦法很快核對?有,就是利用Variables函數將你打的1~5式中的變數名 一覽比較,
一定要完全重合啊
*)
Sort@Flatten[Variables/@{line1,line2,line3,line4,line5}[[All,2]]]
(*這邊偷懶不由 (4)式做,而是 (1)(2)(3)(5)一次做消去,結果相同*)
ANS4=Eliminate[{line1,line2,line3,line5},{i[i][t],v[0][t],D[v[c][t],t]}]
(*不同的是這次硬是要把它轉成和你寫的一致*)
ANS5=L D[i[L][t],t]==L (D[i[L][t],t]/.Solve[ANS4,D[i[L][t],t]][[1]])
(*利用Collect可以把混亂的表達式按照需求拆開*)
ANS6=Collect[ANS5,{D[i[L][t],t],i[L][t],v[c],V[g][t]}]
(*最後利用Coefficient可以取出係數,ANS6[[2]]的[[2]]不可少*)
ANS7=Coefficient[ANS6[[2]],#]&/@{i[L][t],v[c],V[g][t]}
※ 編輯: jurian0101 來自: 140.112.213.88 (12/22 03:29)
作者: s0310388 (沒人要兄弟)   2012-02-22 14:58:00
謝謝jurian0101大大,我先試試看,光是看到這些程式碼我快要哭出來了,感謝,有疑問再請教!!
作者: jurian0101 (Hysterisis)   2012-02-22 15:25:00
我都不敢用上下標,貼BBS再貼回ntoebook會崩壞掉
作者: s0310388 (沒人要兄弟)   2012-02-22 20:59:00
嗯,因為太多Ctrl+-的關係吧,再看一次,我又感動一次

Links booklink

Contact Us: admin [ a t ] ucptt.com