2011-02-03 20 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

あなたはX + YようにE1を設定した場合、そのフォームを取得し、保つことは困難。だからあなたが本当にそれを必要としない場合は、代わりに置換ルールで動作することができます。

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 Wolfram Researchの

2

あなたの答えが原因e1e2あなたの簡単なフォームに特異的であると思われます。一つの可能​​性はe1が何であるかを特定することなく、e1の面で機能としてe2を定義することです:

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の特定の定義を指定することができます。

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

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

私はこのアプローチは、サブ式の大きな数に拡張することができたとします。あなたはグローバルな定義を導入しないように、あなたはまた、Block内これを行うことができます。

HTH

関連する問題