You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

负表皮因子下mpmath.invertlaplace()反演拉普拉斯变换计算压力恢复曲线出现异常值的问题咨询

负表皮因子下mpmath.invertlaplace()反演拉普拉斯变换计算压力恢复曲线出现异常值的问题咨询

我目前正在开发一个压力恢复试井的分析模型,参考了Lake《石油工程手册第一卷》中的公式(用于描述拉普拉斯域的压力变化),之后用mpmath库的invertlaplace()函数结合Stehfest算法做拉普拉斯反演,以此得到我需要的时域结果。

以下是我的代码:

import numpy as np
import matplotlib.pyplot as plt
from mpmath import *
q=46 #m3/day
rw=1.08 #m
h=8.61 #m
fi=0.164
Ct=1.67E-04 #1/(kgs/cm2)
mu=3.90
Bo=1.12 #m3/m3
Cs=0.15
k=0.199
Sm=-2
nu = k / (fi * mu * Ct)

def run_invertlaplace(tt, fp):
    y = []
    for i in np.arange(0, len(tt)):
        y.append(invertlaplace(fp, tt[i], method='stehfest'))

        print(i,y[i])
    return y

deltaTT=np.linspace(0.001,76,100)
fp = lambda s: q*Bo*mu/(2*np.pi*k*h*s)*((besselk(0,np.sqrt(s/nu)*(rw+0.001))+Sm*np.sqrt(s/nu)*rw*besselk(1,np.sqrt(s/nu)*rw))/(np.sqrt(s/nu)*rw*besselk(1,np.sqrt(s/nu)*rw)+24*Cs*mu/(2*np.pi*k*h)*s*(besselk(0,np.sqrt(s/nu)*(rw+0.001))+Sm*np.sqrt(s/nu)*rw*besselk(1,np.sqrt(s/nu)*rw))))
y=run_invertlaplace(deltaTT,fp)
print(y)
plt.plot(deltaTT,y,color="black")
plt.xscale('log')
plt.yscale('log')

plt.grid()
plt.show()

现在遇到的问题是:当表皮因子Sm取负值时,生成的黑色曲线会出现一些实验数据里不存在的异常值。
我想请教一下,这是修正贝塞尔函数besselk()的问题吗?有没有什么办法可以解决这个问题?

P.S. 抱歉我的英语不太好。

备注:内容来源于stack exchange,提问作者Georgie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:58:00