我试图编写一些代码,通过获取函数的导数来递归地找到泰勒系数,然后在基本情况下一次评估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有些新意,所以很可能我只是遗漏了一些明显的东西(即不要以为我没有犯一个愚蠢的错误)。
答案 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));