2

我正在尝试使用 Maxima 来简化涉及 min(a, b) 的数学表达式。假设我已经定义了
z = min(x1, x2)d = abs(x1 - x2),那么身份x1 * x2 = z*(z+d)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 * x2x1 + x2的出现?我尝试了各种形式的tellimpletletsimp,例如:

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 产生我可以手动到达的漂亮的简短表达式?我需要处理更大的表达式。

4

1 回答 1

3

可能这有帮助,

负载(“大鼠”);

    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。显然,这些无助于简化您的表达方式。

于 2014-12-10T05:38:29.330 回答