千里马:简化包含最小值的表达式

时间:2014-12-09 09:24:16

标签: maxima computer-algebra-systems

我正在尝试使用Maxima来简化涉及min(a,b)的数学表达式。说我已经定义了    z = min(x1,x2) d = abs(x1 - x2),然后标识 x1 * x2 = z *(z + d)< / em>和 x1 + x2 = 2 * z + d 跟随。

例如,采用以下表达式:

(2*z^3+(−3*x2−3*x1)*z^2+6*x1*x2*z)/6

如果我手动应用上述身份,我可以将其简化为

z^3 / 3 + (z^2 * d) / 2

在千里马,天真地尝试

subst(min(x1, x2), v, ((6*v*x1−3*v^2)*x2−3*v^2*x1+2*v^3)/6), ratsimp

产生一个长表达式。

如何让Maxima找到埋藏在表达式深处的 x1 * x2 x1 + x2 的出现?我尝试了各种形式的 tellimp letsimp ,例如:

let(x1*x2, z * (z+d))

let(K * x1*x2, K * z * (z + d), K, integer)

matchdeclare(R, true)
let(R * x1*x2 * z, R * z * (z+d))

如何让Maxima产生我可以手动到达的漂亮的短表达式?我需要处理更大的表达。

1 个答案:

答案 0 :(得分:3)

可能这很有帮助,

负载(&#34; lrats&#34);

    lratsubst([x1*x2=z*(z+d),x1+x2=2*z+d],
    (2*z^3+(−3*x2−3*x1)*z^2+6*x1*x2*z)/6)

(2 * Z ^ 3 + 3 * d * Z ^ 2)/ 6

此外,如果你想测试你的身份,你可以做

z(x1,x2):=min(x1,x2)$
d(x1,x2):=abs(x1-x2)$

现在把数值表示为z(2,3)*(z(2,3)+ d(2,3))= 6。显然,这些不会有助于简化你的表达。