Как вывести уравнение без оценки, но с заменой переменных на их значения? - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужно сделать тонны простых вычислений и представить каждый шаг в моем отчете с заранее определенным способом: (например, я получил B = 2, C = 3):

A=B+12-6/C^2; A=2+12-6/3^2=13.333;

Я могу получить 1-й блоки ответь так:

B:2$ C:3$
A:'(B+12-6/C^2)$
print("A=",A,"; ","A= ??? =",ev(A, numer) );

и получи:

      6
A= (- --) + B + 12 ;  A= ??? = 13.33333333333333 
       2
      C

Что мне нужно вместо '???'получить желаемый результат?

1 Ответ

0 голосов
/ 28 февраля 2019

Максима различает две части выяснения результата: оценка и упрощение.Оценка = замена одной вещи (значения) другой вещью (переменной или функцией).Упрощение = применение математических тождеств для получения «более простого» эквивалентного результата.

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

...