我正在尝试使用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产生我可以手动到达的漂亮的短表达式?我需要处理更大的表达。
答案 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。显然,这些不会有助于简化你的表达。