(某些函数)未使用SymPy Lambdify定义

2024-10-01 17:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在写一个评估泰勒级数的脚本。但是,我希望它对所有类型的函数进行求值。例如,我尝试使用函数acot(x)。在

x = sy.Symbol('x')
f = acot(x)
...
func = taylor(f,0,3)
taylor_lambda = sy.lambdify(x, func, 'numpy')

上面的运行没有异常(例如,如果我使用acsch,并且它不运行,则除外)。在

但当它到达这条线时:

^{pr2}$

我得到:

NameError: name 'acot' is not defined

我试图在lambdify调用中将numpy替换为sympy,但这似乎是象征性的计算。这种情况发生在一些(更罕见的函数)上,但其他函数却没有。谢谢您!在

我的进口如下:

import sympy as sy
import numpy as np
from sympy.functions import *
from sympy import pi, E,acot
import matplotlib.pyplot as plt
import math

Tags: 函数fromimportnumpy脚本类型assymbol
2条回答

我以前也遇到过类似的问题,并且已经设法解决了他们。你的线路

plt.plot(x1,taylor_lambda(x1),label='taylor approximation')

看起来不错。我给了一个我的旧代码,可以比较一下。在

^{pr2}$

这里的主要问题是lambdify函数使用modules参数为所提供的函数定义可用的模块。似乎acotnumpy命名空间中不可用。在

让我们把这个简化为:

import sympy as sy
import numpy as np
from sympy.functions import *

x = sy.Symbol('x')
f = acot(x)
func_lambda = sy.lambdify(x, f, modules='numpy')
print(func_lambda(1))

这会引发一个NameError,因为acot没有在numpy命名空间中定义。注意modules参数。如果我们将可用模块扩展到sympy,我们将不再得到NameError

^{pr2}$

如果在处理奇数函数时遇到问题,还可以将单个函数添加到lambdify modules参数中,作为func_name:function对的字典:

func_lambda = sy.lambdify(x, f, modules=['numpy', {'acot':acot}])
print(func_lambda(1))
# Prints pi/4

至于使用matplotlib进行绘图,将方程矢量化,然后再进行绘图对我来说很有效:

import matplotlib.pyplot as plt
vfunc = np.vectorize(func_lambda)
x1 = np.linspace(-10, 10 , 1000)
plt.plot(x1, vfunc(x1),label='acot')
plt.show()

相关问题 更多 >

    热门问题