使用SymPy

时间:2018-11-10 00:12:10

标签: python sympy

此代码是泰勒展开式的派生代码,其长度为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

1 个答案:

答案 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)