0

我正在尝试绘制一个特殊(例如贝塞尔)函数的集成,我的最小代码如下。

#!/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()

  

但是,这给了我几条错误消息,说明该函数很容易在Mathematicaquadpack.error: Supplied function does not return a valid float中绘制。Python的贝塞尔函数有限制吗?

我已使用此文档进行绘图。

4

1 回答 1

1

在了解您到底要做什么之前,很难提供解决问题的答案。但是,让我列出一些问题并提供一个示例,这些示例可能无法实现您想要做的事情,但至少它会提供一条前进的道路。

  1. 因为您的 lambda 函数乘以x一个数组U,所以它返回一个数组而不是一个数字。需要集成的函数应返回一个数字。例如,您可以通过替换为来解决此U问题u

    f = lambda x, u: jn(1,x)/(x*(1.0+np.exp(u*x*0.5)))
    
  2. 使ANDDelta的函数将附加参数传递给(在上一点中定义)并从返回的元组中仅提取积分的值 from (返回几个值的元组:积分、错误等):uquadufquadquad

     Delta = lambda u: -4+8*integrate.quad(f, 0.1, 1000, args=(u,))[0]
    
  3. 计算Delta每个u

     deltas = np.array(map(Delta, U))
    
  4. 绘制数据:

     plt.plot(U, deltas)
    
于 2017-07-09T16:36:43.120 回答