2016-05-31 6 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, чтобы решить эту проблему.

В дополнение к solve, взгляните на to_poly_solve, чтобы решить уравнения.

+0

Спасибо, я рассмотрю функции, которые вы предложили более подробно. Кажется, что 'solve' просто не был предназначен для принятия значений как уравнений. – 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

Спасибо. Это действительно интересно. Есть ли причина, почему 'решайте' ведет себя таким образом? – kuruczgyurci

+0

@kuruczgyurci, я не знаю. Но я отмечаю, что в ручном вводе упоминаются 3 формы для 'solve':' solve() ',' solve () 'и' solve ([, ..., ], [, .. ., ]) '.Вторая форма является просто первой, когда « может быть опущен, если содержит только одну переменную». То есть во всех случаях он имеет столько переменных, сколько имеет уравнения. Руководство не делает такого заявления (я думаю), но заголовок подразумевает необходимость. Также можно привести и любой пример, который я могу вспомнить, - вы можете взглянуть на очень приятную страницу [Maxima by Example] (http://web.csulb.edu/~woollett/) –