特殊功能与绘图的集成

2024-09-27 20:19:15 发布

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

我试图绘制一个特殊(如贝塞尔)函数的积分,我的最小代码如下

#!/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进行绘图


Tags: lambda函数代码importasnp绘制plt
1条回答
网友
1楼 · 发布于 2024-09-27 20:19:15

在理解你到底想做什么之前,很难给出解决问题的答案。然而,让我列出一些问题,并提供一个可能无法实现您试图实现的目标的示例,但至少它将提供一条前进的道路

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

    f = lambda x, u: jn(1,x)/(x*(1.0+np.exp(u*x*0.5)))
    
  2. 使Delta成为u的函数,并使quad将附加参数u传递给f(在上一点中定义),并从quad返回的元组中仅提取整数的值(quad返回包含多个值的元组:整数、错误等):

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

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

     plt.plot(U, deltas)
    

相关问题 更多 >

    热门问题