用Maxima象征性地解决物理问题

时间:2016-05-31 13:49:38

标签: math physics 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 个答案:

答案 0 :(得分: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来解决方程式。

答案 1 :(得分:0)

添加到罗伯特·多迪尔的答案,并且丑陋,包括在solve()中包含足够的“虚拟”变量也有效:

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

当然罗伯特·多迪尔更好,我不确定这是否有任何不利因素。