【问题标题】:Maxima: Simplify expressions containing minimum最大值:简化包含最小值的表达式
【发布时间】:2014-12-09 09:24:15
【问题描述】:

我正在尝试使用 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 的出现?我尝试过各种形式的tellsimpletletsimp,例如:

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

【问题讨论】:

    标签: maxima computer-algebra-systems


    【解决方案1】:

    也许这有帮助,

    加载("lrats");

        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。显然这些对简化你的表达没有帮助。

    【讨论】:

    • lrats 好用,非常感谢!现在我的问题是它工作得太好了,我无法理解我更大的表达式的所有简化......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2017-11-02
    • 1970-01-01
    相关资源
    最近更新 更多