2016-05-31 25 views
1

Ich versuche, einige grundlegende Physikprobleme mit Maxima zu lösen, aber ich stoße auf Probleme.Lösen von physikalischen Problemen symbolisch mit Maxima

Ich möchte den folgenden Code 600 (als die Lösung zu T2), aber es gibt nur eine leere Liste ([]).

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

Was fehlt mir? (Ich habe auch viele andere ähnliche Probleme versucht, und sie scheinen alle zu versagen.)

Ich weiß, dass ich dieses eine numerisch lösen könnte, aber ich will die Antworten, um genau zu sein, und ich will auch sein der Lage, Probleme zu lösen wie folgt aus:

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

(Wo die Lösung (T1*P2)/P1 sein sollte.)

Antwort

2

es gibt ein paar verschiedene Möglichkeiten, darüber zu gehen. Beginnen wir mit:

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

(1) Ersetzen Sie Werte in die Gleichung und lösen Sie dann die Gleichung.

(2) Lösen Sie die Gleichung im Allgemeinen und ersetzen Sie dann Werte in die Lösung.

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

(3) Lösen Sie die Gleichung mit Werten, die Variablen temporär zugewiesen sind.

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

oder äquivalent (diese Formulierung ziemlich oft zu sehen ist):

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

(2) ist vielleicht die allgemeinste Art und Weise, darüber zu gehen. (1) und (3) sind mehr oder weniger äquivalent in dem Sinne, dass die Variablen bereits Werte haben, die bis zum Zeitpunkt solve der Gleichung zugeordnet sind. Das kann die Gleichung oft erleichtern solve, um es zu lösen.

Zusätzlich zu solve, werfen Sie einen Blick auf to_poly_solve, um Gleichungen zu lösen.

+0

Danke, ich werde mir die Funktionen genauer ansehen, die Sie vorgeschlagen haben. Es scheint, als wäre "lösen" einfach nicht dazu gedacht, Werte als Gleichungen zu nehmen. – kuruczgyurci

0

Hinzufügen zu Robert Dodier Antwort, und hässlich, wie es ist, auch genug "Dummy" Variable in() lösen auch funktioniert:

(%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]] 

und

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

Sicherlich Robert Dodier die besser sind, Ich bin mir nicht sicher, ob es da einen Nachteil gibt.

+0

Danke. Dieser ist wirklich interessant. Gibt es einen Grund, warum sich 'solve' so verhält? – kuruczgyurci

+0

@kuruczgyurci, ich weiß es nicht. Aber ich stelle fest, dass der manuelle Eintrag 3 Formen zum 'lösen' erwähnt:' lösen (, ) ',' lösen () ', und' lösen ([, ..., ], [, .. ., ]) '.Die zweite Form ist einfach die erste, wenn " kann weggelassen werden, wenn nur eine Variable enthält". Das heißt, es hat in allen Fällen so viele Variablen wie Gleichungen. Das Handbuch macht keine solche Aussage (denke ich), aber der Header impliziert, dass Notwendigkeit. Auch jedes Beispiel, an das ich mich erinnern kann, tut das auch - vielleicht möchten Sie sich die sehr schöne Seite [Maxima by Example] (http://web.csulb.edu/~woollett/) ansehen –

Verwandte Themen