此代码是泰勒展开式的派生代码,其长度为5个派生。因此,ds(i)
应该用新的x
值(派生值)替换其零值变量。我不断收到错误消息“无法分配要调用的功能”
def derivatives(f, x, a, n):
f = f(x)
x = var
a = 1.0
n = 5
ds = np.zeros(n)
exp = f(x)
for i in range(n):
exp = sp.diff(exp,x)
ds(i) = exp.replace(x, a)
return ds
答案 0 :(得分:0)
您的意思可能是ds[i]
,而不是ds(i)
。用于索引的方括号与用于函数调用的圆括号。也就是说,代码还有其他问题,从未定义的var
到使用NumPy数组(?)存储SymPy对象。通常,请记住,SymPy主要用于表达式,而不用于功能。表达式不“接受参数”,它们不像Python中的可调用函数。
所有这些都是不必要的,因为SymPy自己计算第n个导数。例如,exp(2 * x)在0处的五阶导数:
x = sp.symbols('x')
f = sp.exp(2*x) # an expression, not a function
n = 5
a = 0
print(f.diff(x, n).subs(x, a)) # take derivative n times, then plug a for x
打印32。或者,如果您想将Taylor扩展到x**n
并包括在内,
print(f.series(x, a, n + 1))
打印1 + 2*x + 2*x**2 + 4*x**3/3 + 2*x**4/3 + 4*x**5/15 + O(x**6)
。