繁体   English   中英

高度振荡的1-D被积函数(包含贝塞尔函数)在python中的数值积分

[英]Numerical integration of highly oscillating 1-D integrand (containing Bessel functions) in python

我试图在数值上评估由几个贝塞尔函数(第一类和第二类)组成的实值被积函数。 被积函数是振荡和衰减的,需要在0和+∞之间进行评估。 到目前为止,我使用scipy.integrate子包(quad和fixed_quad)的尝试都没有成功。 当实际上它应该是平滑的时,评估值会跳跃。 对于某些参数值集,我还会收到警告: “IntegrationWarning:积分可能是发散的,或者是缓慢收敛的。” (已知它是收敛的)或“IntegrationWarning:已实现最大细分数(50)。”

等式来自: http//dx.doi.org/10.1029/WR003i001p00241

它也可以在这里找到: http//www.aqtesolv.com/papadopu.htm

感谢您在python中对繁琐函数进行数值积分的任何帮助...

代码示例

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import special as sps
import scipy.integrate as integrate

# define constants and variables (SI mks units):
r_w = 0.15
r_c = 0.16
b = 10
S_s = 1E-6
Q = 0.001
S = S_s*b
K=1E-8
T=K*b
alpha = (r_w**2)*S/r_c**2
def r_D(r):
    return r/r_w
def u(r,t):
    return r**2*S/(4*T*t)
def B(beta):
    return beta*sps.jv(0,beta) - 2*alpha*sps.jv(1,beta)
def A(beta):
    return beta*sps.yn(0,beta) - 2*alpha*sps.yn(1,beta)
def intd_f(beta,r,t): 
    TOP = (1-np.exp(-beta**2*r_D(r)**2)/(4*u(r,t)))*( sps.jv(0,beta*r_D(r))*A(beta) - sps.yn(0,beta*r_D(r))*B(beta) )
    BOT = (A(beta)**2 + B(beta)**2)*beta**2
    return TOP/BOT
def s(r,t):
    banana = (2*alpha*Q)/(np.pi**2*K*b)
    apple = integrate.quad(intd_f, 0, np.inf, args=(r,t))[0]
    #apple = integrate.fixed_quad(intd_f, 0, 1E100, args=(r,t))[0] # another option I have tried
    return banana*apple

#%% simple example usage...
r=np.arange(1,10,.1)
t=60*60*24*pd.Series([1/24,1,365,3650])
plt.figure()
for tt in t:
    print('time=',tt)
    snow=[]
    for rr in r:
        print('r=',rr)
        snow.append(s(rr,tt))
    plt.subplot(2,1,1)
    plt.plot(r,snow,label='t='+str(tt/(60*60*24))+'d')
    plt.subplot(2,1,2)
    plt.semilogy(r,np.abs(snow))    
plt.subplot(2,1,1)
plt.legend()

我有一个坏消息:振荡积分必须通过特殊方法来处理,例如Filon的方法。 通过scipy docs阅读,我认为没办法做到这一点。 但是,似乎MPMath正是您正在寻找的内容,甚至还提供了使用贝塞尔函数的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM