2011-02-03 16 views
4

我在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]= 2^E1 Log[2] 

回答

6

很難獲得和保持這種形式,如果你設置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] 

丹尼爾Lichtblau 沃爾夫勒姆研究

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

相關問題