在 Python 上计算导数时出错(使用 .subs、.evalf 和 .lambdify)

Error evaluating a derivative on Python (with .subs, .evalf and .lambdify)

我正在尝试单独计算泰勒展开式的元素,但没有获得预期的结果。要近似的函数是 x**321,围绕 x=1 的泰勒展开的前三个元素应该是: 1 + 321(x-1) + 51360(x-1)**2 出于某种原因,与第二项相关的代码不起作用。 请参阅下面的代码。

import sympy as sy
import numpy as np
import math
import matplotlib.pyplot as plt

x = sy.Symbol('x')
f = x**321
x0 = 1
func0 = f.diff(x,0).subs(x,x0)*((x-x0)**0/factorial(0))
print(func0)
func1 = f.diff(x,1).subs(x,x0)*((x-x0)**1/factorial(1))
print(func1)
func2 = f.diff(x,2).subs(x,x0)*((x-x0)**2/factorial(2))
print(func2)

我得到的指纹运行这段代码是

1
321x - 321
51360*(x - 1)**2

我也使用了 .evalf 和 .lambdify,但结果是一样的。我不明白错误是从哪里来的。

f = x**321
x = sy.Symbol('x')

def fprime(x):
    return sy.diff(f,x)

DerivativeOfF = sy.lambdify((x),fprime(x),"numpy")
print(DerivativeOfF(1)*((x-x0)**1/factorial(1)))
321*x - 321

很明显,我才刚刚开始学习这门语言,所以感谢您的帮助。

我在 python 中找到了如何对 Taylor 进行展开的初学者指南。看看吧,也许你所有的问题都在这里得到了解答:

http://firsttimeprogrammer.blogspot.com/2015/03/taylor-series-with-python-and-sympy.html

我测试了你的代码,它工作正常。就像 Bazingaa 在评论中指出的那样,python 如何在内部保存函数只是一个问题。有人可能会争辩说,对于计算机来说,保存 321*x - 321 而不是 321*(x - 1)**1 需要更少的 RAM。 在您的第一行输出中,它还会为您提供 1 而不是 (x - 1)**0