擅长:python、mysql、java
<p>这里的主要问题是<code>lambdify</code>函数使用<code>modules</code>参数为所提供的函数定义可用的模块。似乎<code>acot</code>在<code>numpy</code>命名空间中不可用。在</p>
<p>让我们把这个简化为:</p>
<pre><code>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))
</code></pre>
<p>这会引发一个<code>NameError</code>,因为<code>acot</code>没有在<code>numpy</code>命名空间中定义。注意modules参数。如果我们将可用模块扩展到<code>sympy</code>,我们将不再得到<code>NameError</code>:</p>
^{pr2}$
<p>如果在处理奇数函数时遇到问题,还可以将单个函数添加到lambdify modules参数中,作为<code>func_name</code>:<code>function</code>对的字典:</p>
<pre><code>func_lambda = sy.lambdify(x, f, modules=['numpy', {'acot':acot}])
print(func_lambda(1))
# Prints pi/4
</code></pre>
<p>至于使用matplotlib进行绘图,将方程矢量化,然后再进行绘图对我来说很有效:</p>
<pre><code>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()
</code></pre>