2016-05-31 63 views
1

我想用Maxima解決一些基本的物理問題,但我遇到了問題。用Maxima象徵性地解決物理問題

我想要下面的代碼產生600(作爲T2的解決方案),但它只是給出一個空列表([])。

solve([ 
    (P1*V1)/T1 = (P2*V2)/T2, 
    V1 = V2, 
    P1 = 100000, 
    T1 = 300, 
    P2 = 200000 
    ], [T2]); 

我在想什麼? (我也嘗試了許多類似這個問題的其他問題,並且他們似乎都失敗了。)

我知道我可以用數字解決這個問題,但我希望答案是準確的,我也想成爲能夠解決的問題是這樣的:

solve([ 
    (P1*V1)/T1 = (P2*V2)/T2, 
    V1 = V2 
    ], [T2]); 

(凡解決方案應該是(T1*P2)/P1。)

回答

2

有幾種不同的方式去了解它。讓我們從以下開始:

(%i1) eqn : (P1*V1)/T1 = (P2*V2)/T2 $ 
(%i2) myvalues : [V1 = V2,P1 = 100000,T1 = 300,P2 = 200000] $ 

(1)將值替換到方程中,然後求解方程。

(%i3) subst (myvalues, eqn); 
           1000 V2 200000 V2 
(%o3)       ------- = --------- 
           3   T2 
(%i4) solve (%, T2); 
(%o4)        [T2 = 600] 

(2)一般求解方程,然後將值代入解中。

(%i5) solve (eqn, T2); 
             P2 T1 V2 
(%o5)       [T2 = --------] 
             P1 V1 
(%i6) subst (myvalues, %); 
(%o6)        [T2 = 600] 

(3)用暫時分配給變量的值求解方程。

(%i7) ev (solve (eqn, T2), myvalues); 
(%o7)        [T2 = 600] 

或等價(這個提法被認爲是很常見):

(%i8) solve (eqn, T2), V1 = V2,P1 = 100000,T1 = 300,P2 = 200000; 
(%o8)        [T2 = 600] 

(2)可能是去它的最普遍的方式。 (1)和(3)或多或少是等價的,因爲變量已經具有由時間solve分配的值的等式。這通常可以使等式更容易地解決它。

除了solve,看看to_poly_solve解方程。

+0

謝謝,我會更詳細地看看你建議的功能。似乎「解決」只是沒有被設計爲將值作爲方程式。 – kuruczgyurci

0

添加到羅伯特Dodier的回答,和醜陋,因爲它是包括足夠的 「虛擬」 變量求解()也適用:

(%i2) solve([(P1*V1)/T1 = (P2*V2)/T2, V1 = V2, P1 = 100000, T1 = 300, P2 = 200000], [T2, P1, T1, P2, V1]); 
(%o2) [[T2 = 600, P1 = 100000, T1 = 300, P2 = 200000, V1 = V2]] 

(%i4) solve([(P1*V1)/T1 = (P2*V2)/T2, V1 = V2], [T2, V1]); 
            P2 T1 
(%o4)      [[T2 = -----, V1 = V2]] 
            P1 

當然,羅伯特Dodier的更好,我不確定這是否有任何缺點。

+0

謝謝。這個真的很有趣。有沒有什麼理由爲什麼'solve'這樣表現? – kuruczgyurci

+0

@kuruczgyurci,我不知道。但是我注意到,手動輸入提到了3種形式來解決:解決(,),解決()和解決([,...,],[,..] 。,])'。如果只包含一個變量,則可以省略「」,第二種形式僅僅是第一種形式。也就是說,在所有情況下,它都具有與方程式一樣多的變量。該手冊沒有這樣的說法(我認爲),但標題暗示了這種需要。此外,我可以回想的任何例子也是這樣 - 你可能想看看非常好的[Maxima by Example](http://web.csulb.edu/~woollett/)頁面 –