我试图绘制一个特殊函数(如贝塞尔函数)的集成图,我的最小代码如下。在
#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
import scipy.special as sp
from scipy.special import jn
#x = np.arange(0.0, 10.0, 0.1)
U = np.linspace(0,10,1000)
#Delta = U**2
#Delta = U-4+8*integrate.quad(lambda x: sp.jv(1,x)/(x*(1.0+np.exp(U*x*0.5))), 0, 100)
Delta = U-4+8*integrate.quad(lambda x: jn(1,x)/(x*(1.0+np.exp(U*x*0.5))), 0.1, 1000)
plt.plot(U,Delta)
plt.xlabel('U')
plt.ylabel('$\Delta$')
plt.show()
但是,这给了我几个错误消息,说quadpack.error: Supplied function does not return a valid float
,而函数很容易在Mathematica中绘制。Python的Bessel函数有限制吗?在
我用这个documentation来作图。在
在理解你到底想做什么之前,很难给出一个解决问题的答案。但是,让我列出一些问题,并提供一个例子,它可能无法实现您正在尝试做的事情,但至少它将提供一条前进的道路。在
因为lambda函数将
x
乘以一个数组U
,所以它返回一个数组而不是一个数字。需要集成的函数应返回单个数字。例如,您可以通过将U
替换为u
来解决此问题:使}给{}(在上一点中定义),并仅从
Delta
成为u
的函数,并使quad
传递额外的参数{quad
(quad
返回一个包含多个值的元组:整数、错误等)的元组:每一次计算:
绘制数据:
^{4美元相关问题 更多 >
编程相关推荐