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

shi*_*jin 13 math maxima differential-equations

我想在另一个函数中使用函数的导数.如何在Maxima中完成?

例如:

f(x) := 2*x^4;
g(x) := diff(f(x),x)-8;
Run Code Online (Sandbox Code Playgroud)

现在按预期g(x)收益8x^3-8,但是 g(0)给出错误,因为diff(f(0),0)没有意义.但那我该如何正确定义g呢?

Rob*_*ier 17

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

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

define (g(x), diff (f(x), x) - 8);
Run Code Online (Sandbox Code Playgroud)

请参阅'define'.


Sim*_*mon 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
Run Code Online (Sandbox Code Playgroud)

与块结构比较:

(%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
Run Code Online (Sandbox Code Playgroud)

注意(%o4)表明RHS未被评估.

参考:http://www.math.utexas.edu/pipermail/maxima/2007/004706.html

  • @shinjin:为了让`:=`运算符来评估RHS,整个右侧必须用`''包裹.我不认为它会解析RHS,直到它被调用为止.还要注意,代替`g(x):=''(...)`你可以使用等价的`define(g(x),...)`. (2认同)