Python:集成特殊功能和绘图

2024-09-27 20:21:04 发布

您现在位置: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的Bessel函数有限制吗?在

我用这个documentation来作图。在


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

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

  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传递额外的参数{}给{}(在上一点中定义),并仅从quadquad返回一个包含多个值的元组:整数、错误等)的元组:

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

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

    ^{4美元

相关问题 更多 >

    热门问题