如何在不求值但变量已替换为值的情况下输出方程式?

时间:2019-02-28 15:27:57

标签: maxima

我需要进行大量简单的计算,并以预定义的方式在报告中呈现每个步骤: (例如,我的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

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

1 个答案:

答案 0 :(得分:1)

Maxima区分确定结果的两个部分:评估和简化。评估=将一个事物(值)替换为另一事物(变量或函数)。简化=应用数学身份获得“更简单”的等效结果。

在您的问题中,您似乎想推迟简化。您可以说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的某些选择,您可能会创建无效的表达式。我不会在这里尝试解决问题。