我试图绘制一个特殊(如贝塞尔)函数的积分,我的最小代码如下
#!/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的贝塞尔函数有限制吗
我用这个documentation进行绘图
在理解你到底想做什么之前,很难给出解决问题的答案。然而,让我列出一些问题,并提供一个可能无法实现您试图实现的目标的示例,但至少它将提供一条前进的道路
因为lambda函数将
x
乘以数组U
,所以它返回一个数组而不是一个数字。需要集成的函数应返回单个数字。例如,您可以通过将U
替换为u
来解决此问题:使
Delta
成为u
的函数,并使quad
将附加参数u
传递给f
(在上一点中定义),并从quad
返回的元组中仅提取整数的值(quad
返回包含多个值的元组:整数、错误等):为每个
u
计算Delta
:绘制数据:
相关问题 更多 >
编程相关推荐