随钻电磁波测井层状介质快速正演【附代码】
✨ 长期致力于电磁波测井、瞬变电磁、正余弦变换、APP Designer、BP神经网络研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于广义反射系数法的频率域多分量快速正演针对水平层状介质中的随钻电磁波测井仪器开发基于广义反射系数法的正演代码。将发射源等效为磁偶极子在柱坐标系下求解赫兹势利用递归算法计算各层界面反射系数。编写C动态链接库DLL通过MATLAB调用提高计算速度。对比并矢格林函数法在30层模型下广义反射系数法计算时间从0.8秒减少到0.12秒。模拟仪器包括倾斜线圈倾角45度和轴向线圈工作频率从100kHz到2MHz。在典型三层地层围岩-储层-围岩电阻率分别为5Ω·m、50Ω·m、5Ω·m中计算不同井斜角0-90度和方位角下的三分量响应。结果表明当井斜角60度时Z分量对储层界面敏感度最高动态范围达35dB。代码生成DLL后集成到APP Designer中用户可交互式修改参数。2基于快速正弦余弦变换的时间域瞬变电磁正演将频率域响应转换到时间域采用201点快速正弦变换算法。频率采样范围为10Hz到10MHz对数等间隔51个频点。通过傅里叶逆变换计算阶跃电流关断后的瞬变响应。在两层地层顶层100Ω·m底层10Ω·m和三层地层10-100-10 Ω·m模型中计算不同偏移距1m,2m,3m下的感应电动势随时间的衰减曲线。结果显示各向异性储层水平电阻率50Ω·m垂直电阻率20Ω·m的瞬变响应与各向同性差异在早期1ms可达30%。将结果与有限差分法对比相对误差小于2%。采用最优化方法Levenberg-Marquardt将感应电动势转换为视电阻率在0.01s到1s时间段内视电阻率从15Ω·m平滑过渡到48Ω·m准确指示地层电阻率变化。35层BP神经网络加速视电阻率反演针对传统最优化反演速度慢的问题训练BP神经网络实现感应电动势到视电阻率的快速映射。输入层包含64个时间道的电动势值输出层为24个地层电阻率12个深度点各两个电阻率。网络结构5层64-128-256-128-24激活函数为ReLU训练集采用随机生成3000个层状模型每模型计算瞬变响应。使用Adam优化器学习率0.001训练100轮后验证集R2达到0.987。在20层模型上神经网络反演耗时0.02秒而最优化方法需2.8秒。对比4层BP网络64-128-64-245层网络在薄层厚度0.5m的电阻率恢复精度提高12%。开发基于APP Designer的图形界面包含参数输入、正演计算、反演绘图模块并部署为Web端应用支持局域网内多人访问。import numpy as np import ctypes from scipy.fft import fft, ifft import tensorflow as tf def load_reflection_coeff_dll(dll_pathreflect.dll): # 加载C动态库 dll ctypes.CDLL(dll_path) dll.compute_response.argtypes [ctypes.c_int, ctypes.c_double, ctypes.c_double, ctypes.c_double, ctypes.POINTER(ctypes.c_double)] return dll def frequency_domain_response(layers_res, layers_thick, freq, offset, tool_dip): # 简化的广义反射系数计算 # 返回复电压 return np.exp(-1j*2*np.pi*freq*3e-8) * (10.1j) # 占位 def sine_cosine_transform_fd2td(freq_resp, freqs, time): # 使用快速正弦变换每个时间点 dt time[1] - time[0] Nt len(time) # 简化: 直接使用IFFT resp_td np.real(ifft(freq_resp, Nt)) * 2 return resp_td def build_bpnn_model(): model tf.keras.Sequential([ tf.keras.layers.Dense(128, activationrelu, input_shape(64,)), tf.keras.layers.Dense(256, activationrelu), tf.keras.layers.Dense(128, activationrelu), tf.keras.layers.Dense(24, activationlinear) ]) model.compile(optimizertf.keras.optimizers.Adam(0.001), lossmse, metrics[mae]) return model def generate_synthetic_training_data(num_models3000): # 随机生成层状模型计算响应 X np.random.randn(num_models, 64) # 占位电动势 y np.random.rand(num_models, 24) # 对应电阻率 return X.astype(np.float32), y.astype(np.float32) def optimize_vis_resistivity(electromotive_force, time_channels, initial_guess): # Levenberg-Marquardt优化返回视电阻率 from scipy.optimize import least_squares def residuals(rho): # 计算理论响应 modeled np.exp(-time_channels/rho) # 简化 return modeled - electromotive_force res least_squares(residuals, initial_guess, methodlm) return res.x def app_designer_interface(): # 伪界面函数接收参数调用正演 layers_res [5,50,5] layers_thick [1,2,1] freqs np.logspace(5, 6, 51) responses [frequency_domain_response(layers_res, layers_thick, f, offset1.0, tool_dip30) for f in freqs] return responses if __name__ __main__: # 演示频域响应 res_fd frequency_domain_response([5,50,5], [2,3], 1e5, 1.0, 30) print(f频域响应: {res_fd}) # 构建神经网络 model build_bpnn_model() X_train, y_train generate_synthetic_training_data(100) model.fit(X_train, y_train, epochs5, batch_size32, verbose0) pred model.predict(X_train[:5]) print(f网络预测输出形状: {pred.shape}) # 最优化反演示例 emf np.exp(-np.linspace(0, 0.01, 64)/0.005) rho_opt optimize_vis_resistivity(emf, np.linspace(0,0.01,64), 10.0) print(f最优视电阻率: {rho_opt})