Wolfram mathematica 在Mathematica中将表达式替换为其名称

Wolfram mathematica 在Mathematica中将表达式替换为其名称,wolfram-mathematica,Wolfram Mathematica,我在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]

我在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]

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

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

这是一个普遍正确的答案。只要需要计算,就可以为
e1
提供特定的定义。您也可以在
块中执行此操作,这样就不会引入全局定义:

In[11]:= 
Block[{e1},
  e1[x_] := x + y;
  D[e2[x], x]]

Out[11]= 2^(x + y) Log[2]
我认为这种方法可以扩展到更多的子表达式

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

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

HTH

如果将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]
丹尼尔·利奇布劳 钨研究