Максима: Упростите выражения, содержащие минимум
Я пытаюсь использовать Максима для упрощения математических выражений с участием 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. Очевидно, они не помогают упростить ваше выражение.