同一函数在x0处求值的多次导数

  • 本文关键字:函数 x0 python sympy
  • 更新时间 :
  • 英文 :


我想计算一个函数的导数,并在一点处求值。例如,我有函数f(x)=x^5+2*x^3:

我已经试过了

def diff(f, x0, N):
x = symbols('x')
for i in range(1, N+1):
print(diff(f(x), x, i).subs(x, x0)

但是我想用前一个导数来计算下一个,所以计算时间更少。知道怎么做吗?我试过这样做:

def deri(fkt,x0,n):
x = symbols('x')
f = fkt
for i in range(1, n+1):
f = diff(f(x), x, 1)
print(f(x0))
return 

但是它给了我错误:'Add' object is not callable.

我使用下面的代码得到相同的错误:

def deri(f, x0, N):
w = symbols('w')
A = np.zeros(N+1)
A[0] = f(x0)
for i in range(1, N+1):
f = diff(f(w), w)
A[i] = f.subs(w, x0)
return(A)

有没有办法用一个函数的前一个导数来计算下一个?

附加问题:如果输入的函数定义为
def h(y):
return(y**5+2*(y**2)).

它是一个关于y的函数,我如何让我的程序能够对任意单变量函数求导不管这个变量是什么?

提前谢谢你。

您没有提供完整的独立示例。所以,不清楚你是如何定义你的函数变量,也不清楚你是如何调用deri的。另外,请注意,在调用函数def diff(....):时,您正在跟踪diff函数,从而导致意外的递归调用。

你也不应该在deri()里面创建一个新的符号变量x。函数f是在前面使用另一个x定义的。

通常,在sympy中,您将函数写成表达式,而不使用括号。例如f=x**5+2*x**3print(diff(f, x, i).subs(x, x0))。把f(x0)写成f.subs(x, x0)..

一个独立的例子可能像这样:

from sympy import diff, symbols
def deri(fkt, x0, n):
f = fkt
for i in range(1, n + 1):
f = diff(f, x, 1)
print(f'The {i}th derivative is "{f}" with value {f.subs(x, x0)} at x={x0}')
return
x = symbols('x')
f = x ** 5 + 2 * x ** 3
deri(f, 1, 5)
The 1th derivative is "5*x**4 + 6*x**2" with value 11 at x=1
The 2th derivative is "20*x**3 + 12*x" with value 32 at x=1
The 3th derivative is "60*x**2 + 12" with value 72 at x=1
The 4th derivative is "120*x" with value 120 at x=1
The 5th derivative is "120" with value 120 at x=1

最新更新