2011-02-03 2 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 볼프람 연구

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

관련 문제