如何在函数定义中使用Maxima的diff?

时间:2011-12-12 04:56:35

标签: math differential-equations maxima

我想在其他函数中使用函数的导数。如何在Maxima中完成?

E.g:

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 个答案:

答案 0 :(得分:16)

请注意,只有在解析代码时才能理解quote-quote。如果您只在解释器中工作,那就没关系,但如果您将东西放入脚本中,则可能会产生意想不到的影响。

另一种方法。它在解释器和脚本中的工作方式相同。

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

参见'define'。

答案 1 :(得分:11)

迈克尔的回答很好,但每次调用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 :(得分:4)

不确定这是否是最简单的答案,但它似乎对我做了正确的事

(%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