【问题标题】:Replace expressions with their names in Mathematica用 Mathematica 中的名称替换表达式
【发布时间】:2011-02-04 09:29:26
【问题描述】:

我在 Mathematica 中有一些表达式是根据其他表达式定义的。我想获取较大表达式的一些函数,然后根据子表达式获得结果。示例:

In[78]:= e1 = x + y;
e2 = 2^e1;

In[80]:= D[e2, x]

Out[80]= 2^(x + y) Log[2]

我希望输出改为2^e1 Log[2]。我目前使用ReplaceAll如下,但在我的实际应用中这很麻烦,大约有20个子表达式。

In[81]:= D[e2, x] /. e1 -> E1

Out[81]= 2^E1 Log[2]

【问题讨论】:

    标签: wolfram-mathematica


    【解决方案1】:

    如果将 e1 设置为 x+y,则很难获得并保持该形式。因此,如果您真的不需要它,可以使用替换规则。

    rul = {e1->x+y, e2->2^e1};
    revrul = {x+y->e1};
    
    InputForm[D[e2//.rul, x] /. revrul]
    
    Out[5]//InputForm= 2^e1*Log[2]
    

    丹尼尔·利希特布劳 Wolfram 研究

    【讨论】:

      【解决方案2】:

      由于e1e2 的简单形式,您的答案似乎很具体。一种可能性是将e2 定义为e1 的函数,而不指定e1 是什么:

      In[8]:= Clear[e1, e2];
      e2[x_] := 2^e1[x]
      

      然后

      In[10]:= D[e2[x], x]
      
      Out[10]= 2^e1[x] Log[2] Derivative[1][e1][x]
      

      这是一个普遍正确的答案。只要您希望它计算,您就可以为e1 提供特定的定义。你也可以在Block里面这样做,这样就不用引入全局定义了:

      In[11]:= 
      Block[{e1},
        e1[x_] := x + y;
        D[e2[x], x]]
      
      Out[11]= 2^(x + y) Log[2]
      

      我想这种方法可以扩展到更多的子表达式。

      HTH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多