Замените выражения их именами в Mathematica - PullRequest
4 голосов
/ 04 февраля 2011

У меня есть некоторые выражения в 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]

Ответы [ 2 ]

6 голосов
/ 04 февраля 2011

Трудно получить и сохранить эту форму, если вы установите 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]

Daniel Lichtblau Wolfram Research

2 голосов
/ 04 февраля 2011

Ваш ответ представляется конкретным из-за простой формы ваших e1 и e2. Одна возможность состоит в том, чтобы определить 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]

Полагаю, этот подход может масштабироваться до большего числа подвыражений.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...