Максима: Упростите выражения, содержащие минимум

Я пытаюсь использовать Максима для упрощения математических выражений с участием 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 * x2 и x1 + x2 глубоко внутри выражения? Я пробовал различные формы tellimp, let и letimp, например:

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 ответ

Решение

Может быть, это полезно,

нагрузка ("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 * г ^3+3* д * г ^2)/6

Также, если вы хотите проверить свою личность, вы можете сделать

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

Теперь положите числовые значения, скажем, z(2,3)*(z(2,3)+d(2,3))=6. Очевидно, они не помогают упростить ваше выражение.

Другие вопросы по тегам