Как использовать diff Maxima в определении функции? - PullRequest
13 голосов
/ 12 декабря 2011

Я хочу использовать производную функции в другой функции.Как это сделать в 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 ?

Ответы [ 3 ]

16 голосов
/ 31 мая 2012

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

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

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

См. «Define».

11 голосов
/ 19 декабря 2011

Ответ Майкла хорош, но он делает различие каждый раз, когда вызывается 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

4 голосов
/ 12 декабря 2011

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

(%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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...