Максима различает две части выяснения результата: оценка и упрощение.Оценка = замена одной вещи (значения) другой вещью (переменной или функцией).Упрощение = применение математических тождеств для получения «более простого» эквивалентного результата.
В вашей задаче, похоже, вы хотите отложить упрощение.Вы можете сказать simp: false
, чтобы сделать это.Вот один из возможных подходов.Я отключу упрощение, подставлю значения в выражение, напечатаю замещенное выражение, а затем снова включу упрощение, чтобы получить окончательный результат.
(%i2) expr: A=B+12-6/C^2;
6
(%o2) A = (- --) + B + 12
2
C
(%i3) simp: false $
(%i4) subst ([B = 2, C = 3], expr);
- 2
(%o4) A = 12 + 2 + (- 6) 3
(%i5) simp: true $
(%i6) %o4;
40
(%o6) A = --
3
Обратите внимание, что многие операции в Maxima выполняются с упрощением (например, добавлениечисла вместе), поэтому в целом Maxima будет действовать заметно иначе, когда simp
равно false
.Но в этом случае это то, что вы хотите.
РЕДАКТИРОВАТЬ: OP указывает, что результат после замены отображается несколько иначе, чем.Причина этого связана с некоторыми неясными деталями реализации Maxima.Как бы то ни было, можно обойти это поведение, используя функцию подстановки Lisp SUBST (в Maxima ссылается как ?subst
) вместо субстанции Maxima.SUBST немного отличается от субстрата Maxima;синтаксис ?subst(new_thing, old_thing, some_expression)
.После подстановки через SUBST необходимо явно упрощать;Один из способов сделать это - сказать expand(..., 0, 0)
(который ничего не расширяет, единственный эффект - это упрощение).
(%i2) expr: A=B+12-6/C^2;
6
(%o2) A = (- --) + B + 12
2
C
(%i3) simp: false $
(%i4) ?subst (3, C, ?subst (2, B, expr));
6
(%o4) A = (- --) + 2 + 12
2
3
(%i5) simp: true $
(%i6) expand (%o4, 0, 0);
40
(%o6) A = --
3
Поскольку SUBST по-разному влияет на внутреннее представление, оновозможно, вы можете создать недопустимое выражение для некоторых вариантов new_thing
, old_thing
и some_expression
.Я не буду пытаться разобраться в этом здесь.