Я думаю, что нет ничего плохого;Maxima просто оценивает фи в соответствии с определением, которое вы дали, когда вы звоните gradef
.
Я могу придумать пару вещей, чтобы попробовать.(1) Позвоните gradef
, прежде чем определять фи.Тогда, возможно, вы получите фи на выходе, когда вы позвоните diff
.Не уверен, что это сработает.
(2) Определите gradef
с помощью выражения с существительным, то есть gradef(φ(x),-x*'φ(x))
.Обратите внимание на одинарную кавычку '
перед φ(x)
;это создает так называемое выражение существительное, в котором аргумент x
может быть оценен, но функция φ
не вызывается.Позже, чтобы оценить функцию, когда вы захотите, вы можете сказать ev(someexpression, nouns)
, чтобы оценить все выражения существительного в someexpression
.
РЕДАКТИРОВАТЬ: Вот еще одна идея.Это работает для меня.Предыдущие идеи не сработали, потому что φ оценивается слишком рано;эта новая идея расширяется, чтобы предотвратить оценку.Обратите внимание, что gradef определен для 'φ(x)
, поэтому вы должны написать diff('φ(x), x)
, чтобы применить gradef.
(%i12) gradef('φ(x), -x*'φ(x));
(%o12) φ(x)
(%i13) diff('φ(x), x);
(%o13) - x φ(x)
Graff выдает существительное выражение -x*'φ(x)
, поэтому для его уточнения выМожно сказать:
(%i14) ev(%, nouns);
2
x
- --
2
x %e
(%o14) - -----------------
sqrt(2) sqrt(%pi)
Похоже, что цепочка правил применяется, как и ожидалось:
(%i15) diff('φ(x/a), x);
x
x φ(-)
a
(%o15) - ------
2
a
(%i16) ev(%, nouns);
2
x
- ----
2
2 a
x %e
(%o16) - --------------------
2
sqrt(2) sqrt(%pi) a