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

问题描述 投票:2回答:1

我需要进行大量简单的计算,并以预定义的方式呈现我的报告中的每一步:(例如,我得到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
1个回答
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的某些选项创建无效表达式。我不会试着在这里解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.