Как использовать Maxima diff в определении функции?

Я хочу использовать производную функции в другой функции. Как это сделать в Maxima?

например:

f(x) := 2*x^4;
g(x) := diff(f(x),x)-8;

Теперь g(x) дает 8x^3-8, как ожидалось, , но g(0) дает ошибку, так как diff(f(0),0) не имеет смысла. Но как правильно определить g?

Ответ 1

Майкл отвечает хорошо, но он дифференцирует каждый раз g(x). (Также, как правило, вы видите, что оно завернуто в оператор block, чтобы обеспечить правильную локализацию y).

Существует способ заставить RHS оценить во время определения и с общим x.
Синтаксис

(%i1) f(x) := 2*x^4;
                                            4
(%o1)                            f(x) := 2 x
(%i2) g(x) := ''(diff(f(x), x) - 8);
                                          3
(%o2)                          g(x) := 8 x  - 8
(%i3) g(0);
(%o3)                                 - 8

Сравните с конструкцией блока:

(%i4) h(x) := block([y], subst([y = x], diff(f(y), y) - 8));
(%o4)        h(x) := block([y], subst([y = x], diff(f(y), y) - 8))
(%i5) h(0);
(%o5)                                 - 8

Уведомление (% o4), которое показывает, что RHS не оценивается.

Ссылка: http://www.math.utexas.edu/pipermail/maxima/2007/004706.html

Ответ 2

Обратите внимание, что цитата-цитата понимается только при анализе кода. Это нормально, если вы работаете только в интерпретаторе, но если вы вкладываете материал в скрипты, возможно иметь непреднамеренные эффекты.

Другой способ сделать это. Он работает одинаково в интерпретаторе и в script.

define (g(x), diff (f(x), x) - 8);

См. "Определить".

Ответ 3

Не уверен, что это самый простой ответ, но, похоже, для меня все правильно.

(%i) g(x) := subst([y = x], diff(f(y), y) - 8);

(%i) g(x);
         8 x^3 - 8
(%i) g(0);
         -8
(%i) g(1);
         0