如何在没有评估的情况下输出方程式,但将变量替换为它们的值?

How to output equation without evaluation, but with variables replaced to their values?

我需要进行大量简单的计算,并以预定义的方式在报告中呈现每个步骤: (例如,我得到 B=2,C=3):

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

我可以获得第一个区块并这样回答:

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

我需要什么而不是'???'获得所需的输出?

Maxima 区分计算结果的两个部分:评估和简化。评估 = 用一件事(值)代替另一件事(变量或函数)。简化 = 应用数学恒等式得到 "simpler" 等效结果。

在您的问题中,您似乎想推迟简化。你可以说 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 中的许多操作都是通过简化进行的(例如,将数字相加),因此通常,当 simpfalse 时,Maxima 的行为会明显不同。但在这种情况下,这就是您想要的。

编辑:OP 指出替换后的结果显示方式有些不同。这样做的原因与 Maxima 的一些晦涩的实现细节有关。尽管如此,可以通过使用 Lisp 替换函数 SUBST(在 Maxima 中引用为 ?subst)而不是 Maxima subst 来解决该行为。 SUBST 与 Maxima subst 略有不同;语法是 ?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_thingold_thingsome_expression 的某些选择,您可能会创建无效的表达式。我不会在这里尝试解决这个问题。