千里马:递归地获取衍生物

时间:2015-09-24 23:45:21

标签: recursion maxima

我试图编写一些代码,通过获取函数的导数来递归地找到泰勒系数,然后在基本情况下一次评估x = 0处的导数。这是我到目前为止的代码:

test(f, n) := block([df],
        define(df(x), diff(f(x), x)),
        print(n, "|", df(x), "|", f(x)),
        if n = 0
        then f(0)
        else test(df, n-1)
        );

test_func(x) := x^2;

test(test_func, 2);

麻烦的是,这就是我得到的:

(%i4) test(test_func,2)
           2
2 | 2 x | x  
1 | 2 | 2 
0 | 0 | 0 
(%o4)                                  0

正如你所看到的,第一次通过一切看起来都很好,f(x)是x ^ 2,df(x)是2x。但是,第二次通过f(x)是2,即使df(x)是最后一次通过函数的2倍。我对Maxima有些新意,所以很可能我只是遗漏了一些明显的东西(即不要以为我没有犯一个愚蠢的错误)。

1 个答案:

答案 0 :(得分:1)

我的建议是使用表达式而不是命名函数。像这样:

test(e, n) := block([e1 : diff(e, x)],
  print(n, "|", e, "|", e1), 
  if n = 0
    then ev(e, x = 0)
    else test(e1, n - 1));