第九届“数维杯”大学生数学建模挑战赛(C题)深度剖析|建模完整过程+详细思路+代码全解析

embedded/2024/10/18 19:51:04/

问题1

问题1的建模过程如下:

设勘探区域为 D D D,勘探井位数量为 n n n,每个勘探井位的坐标为 ( x i , y i ) , i = 1 , 2 , . . . , n (x_i,y_i),i=1,2,...,n (xi,yi),i=1,2,...,n。根据勘探数据,假设该区域内天然气水合物资源的分布范围为一个矩形区域,记为 R = [ x m i n , x m a x ] × [ y m i n , y m a x ] R=[x_{min},x_{max}]\times [y_{min},y_{max}] R=[xmin,xmax]×[ymin,ymax]

根据天然气水合物资源的分布特点,可以采用高斯核函数来估计资源的分布情况,即
f ( x , y ) = ∑ i = 1 n 1 2 π σ 2 e − ( x − x i ) 2 + ( y − y i ) 2 2 σ 2 , ( x , y ) ∈ D f(x,y)=\sum_{i=1}^n\frac{1}{2\pi\sigma^2}e^{-\frac{(x-x_i)^2+(y-y_i)^2}{2\sigma^2}},(x,y)\in D f(x,y)=i=1n2πσ21e2σ2(xxi)2+(yyi)2,(x,y)D
其中, f ( x , y ) f(x,y) f(x,y)表示资源分布的概率密度函数, σ \sigma σ为高斯核函数的标准差,可以根据具体情况来确定。

根据资源的分布概率密度函数,可以求得资源的累积分布函数为
F ( x , y ) = ∫ − ∞ x ∫ − ∞ y f ( u , v ) d u d v F(x,y)=\int_{-\infty}^x\int_{-\infty}^yf(u,v)dudv F(x,y)=xyf(u,v)dudv
根据题目给出的勘探数据,可以计算出每个勘探井位对应的天然气水合物资源的概率分布,即每个点 ( x i , y i ) (x_i,y_i) (xi,yi)对应的概率 f ( x i , y i ) f(x_i,y_i) f(xi,yi)。因此,可以根据累积分布函数的性质来确定天然气水合物资源的分布范围,即求解下面的不等式组
{ F ( x , y ) ≤ 0.95 F ( x , y ) ≥ 0.05 ( x , y ) ∈ R \begin{cases} F(x,y)\le 0.95\\ F(x,y)\ge 0.05\\ (x,y)\in R \end{cases} F(x,y)0.95F(x,y)0.05(x,y)R
其中, F ( x , y ) F(x,y) F(x,y)为累积分布函数。

解出上述不等式组即可得到天然气水合物资源的分布范围 R R R

根据所给勘探数据,我们可以确定天然气水合物资源的分布范围为勘探区域内的14口井。每口井都有相应的深度信息和测量的孔隙度和天然气水合物饱和度信息。因此,我们可以根据勘探数据中的深度信息和勘探区域的地质信息,确定每口井的坐标,并绘制出勘探区域的地图。

python示例代码实现:

import pandas as pd
import matplotlib.pyplot as plt
import geopandas as gpd# 读取勘探井位信息数据
well_data = pd.read_excel('well_data.xlsx')# 绘制勘探井位地图
fig, ax = plt.subplots(figsize=(8, 8))
ax.scatter(well_data['经度'], well_data['纬度'], color='red', s=5)
ax.set_xlabel('经度')
ax.set_ylabel('纬度')
ax.set_title('勘探井位地图')
plt.show()# 连接勘探井位线段
fig, ax = plt.subplots(figsize=(8, 8))
ax.plot(well_data['经度'], well_data['纬度'], color='red', linewidth=2)
ax.set_xlabel('经度')
ax.set_ylabel('纬度')
ax.set_title('勘探井位连线图')
plt.show()# 利用地理信息系统(GIS)绘制资源分布范围
gdf = gpd.GeoDataFrame(well_data, geometry=gpd.points_from_xy(well_data['经度'], well_data['纬度']))
fig, ax = plt.subplots(figsize=(10, 10))
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
ax.set_aspect('equal')
world.plot(ax=ax, color='lightgray', edgecolor='black')
gdf.plot(ax=ax, color='red', markersize=10)
plt.show()

问题2

问题2的建模过程如下:

假设研究区域内的有效厚度、地层孔隙度和饱和度分别为 T ( x , y ) T(x,y) T(x,y) P ( x , y ) P(x,y) P(x,y) S ( x , y ) S(x,y) S(x,y),其中 x x x y y y分别表示水平和垂直方向的空间坐标。则在勘探区域内,这些参数的概率分布可以表示为:

有效厚度的概率分布:

P ( T ) = N T N P(T) = \frac{N_T}{N} P(T)=NNT

其中, N T N_T NT表示研究区域内有效厚度大于零的点的数量, N N N表示研究区域内总的点的数量。

地层孔隙度的概率分布:

P ( P ) = N P N P(P) = \frac{N_P}{N} P(P)=NNP

其中, N P N_P NP表示研究区域内地层孔隙度大于零的点的数量, N N N表示研究区域内总的点的数量。

饱和度的概率分布:

P ( S ) = N S N P(S) = \frac{N_S}{N} P(S)=NNS

其中, N S N_S NS表示研究区域内饱和度大于零的点的数量, N N N表示研究区域内总的点的数量。

这些参数的变化规律可以通过统计分析得到,比如通过计算不同区域内的平均值、方差等。

3)给出天然气水合物的概率分布,以及估计天然气水合物资源量。

天然气水合物的概率分布可以表示为:

P ( H ) = P ( T ) × P ( P ) × P ( S ) P(H) = P(T) \times P(P) \times P(S) P(H)=P(T)×P(P)×P(S)

其中, H H H表示天然气水合物的存在概率, P ( T ) P(T) P(T) P ( P ) P(P) P(P) P ( S ) P(S) P(S)分别表示有效厚度、地层孔隙度和饱和度的概率分布。

天然气水合物的资源量可以通过计算总的天然气水合物储量得到,即:

Q = ∑ i = 1 N H i × V i × F Q = \sum_{i=1}^{N} H_i \times V_i \times F Q=i=1NHi×Vi×F

其中, N N N表示勘探区域内的点的数量, H i H_i Hi表示第 i i i个点的天然气水合物的存在概率, V i V_i Vi表示该点的储量, F F F表示产气量因子。

问题3

问题三的建模过程如下:

1)天然气水合物资源的概率分布:
天然气水合物资源的概率分布可以通过计算各个勘探点的水合物饱和度和有效厚度的乘积来得到。假设勘探点数为n,勘探点i的水合物饱和度为 S i S_i Si,有效厚度为h_i,则该点的天然气水合物资源量为 V i = S i ∗ h i V_i = S_i * h_i Vi=Sihi。根据中心极限定理,当样本量较大时,各个勘探点的天然气水合物资源量近似为正态分布,因此可以对各个勘探点的资源量进行求和,得到整个研究区域内天然气水合物资源量的概率分布,即:
P ( V ) = ∑ i = 1 n 1 2 π σ e − ( V − V i ) 2 2 σ 2 P(V) = \sum_{i=1}^{n} \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(V-V_i)^2}{2\sigma^2}} P(V)=i=1n2π σ1e2σ2(VVi)2
其中, σ \sigma σ为资源量的标准差,可以通过样本数据计算得到。

2)估计天然气水合物资源量:
天然气水合物资源量的估计可以通过计算平均资源量和总资源量来得到。平均资源量为各个勘探点的资源量的平均值,即:
V ˉ = 1 n ∑ i = 1 n V i \bar{V} = \frac{1}{n} \sum_{i=1}^{n} V_i Vˉ=n1i=1nVi
总资源量为各个勘探点的资源量的总和,即:
V t o t a l = ∑ i = 1 n V i V_{total} = \sum_{i=1}^{n} V_i Vtotal=i=1nVi

3)具体计算:
假设勘探点数n=14,根据给定的勘探数据,可以计算出各个勘探点的水合物饱和度和有效厚度。假设勘探点i的水合物饱和度为 S i S_i Si,有效厚度为 h i h_i hi,则该点的天然气水合物资源量为 V i = S i ∗ h i V_i = S_i * h_i Vi=Sihi
根据这些数据,可以计算出平均资源量和总资源量:
V ˉ = 1 14 ∑ i = 1 14 V i = 1 14 ( V 1 + V 2 + . . . + V 14 ) \bar{V} = \frac{1}{14} \sum_{i=1}^{14} V_i = \frac{1}{14} (V_1 + V_2 + ... + V_{14}) Vˉ=141i=114Vi=141(V1+V2+...+V14)
V t o t a l = ∑ i = 1 14 V i = V 1 + V 2 + . . . + V 14 V_{total} = \sum_{i=1}^{14} V_i = V_1 + V_2 + ... + V_{14} Vtotal=i=114Vi=V1+V2+...+V14

给出python示例代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit# 定义产气量因子
gas_factor = 1# 读取勘探数据
depth_data = np.genfromtxt('depth.csv', delimiter=',')
porosity_data = np.genfromtxt('porosity.csv', delimiter=',')
saturation_data = np.genfromtxt('saturation.csv', delimiter=',')# 计算有效厚度
thickness = []
for i in range(len(depth_data)):for j in range(len(depth_data[i])):if saturation_data[i][j] != 0:if i == 0 or saturation_data[i-1][j] == 0:thickness.append(depth_data[i][j])else:thickness.append(depth_data[i][j] - depth_data[i-1][j])# 计算孔隙度和饱和度的概率分布
porosity_hist = np.histogram(porosity_data, bins=10)
saturation_hist = np.histogram(saturation_data, bins=10)# 拟合概率分布曲线
def func(x, a, b, c):return a * np.exp(-b * x) + cpopt_porosity, pcov_porosity = curve_fit(func, porosity_hist[1][:-1], porosity_hist[0])
popt_saturation, pcov_saturation = curve_fit(func, saturation_hist[1][:-1], saturation_hist[0])# 计算天然气水合物资源量
gas_resource = []
for i in range(len(thickness)):gas_resource.append(thickness[i] * porosity_data[i] * saturation_data[i] * gas_factor)# 绘制结果
fig = plt.figure(figsize=(10, 10))# 绘制孔隙度和饱和度的概率分布曲线
ax1 = fig.add_subplot(2, 2, 1)
ax1.plot(porosity_hist[1][:-1], porosity_hist[0], 'b-', label='porosity')
ax1.plot(porosity_hist[1][:-1], func(porosity_hist[1][:-1], *popt_porosity), 'r--', label='fit curve')
ax1.set_xlabel('porosity')
ax1.set_ylabel('probability')
ax1.set_title('Porosity Distribution')
ax1.legend()ax2 = fig.add_subplot(2, 2, 2)
ax2.plot(saturation_hist[1][:-1], saturation_hist[0], 'b-', label='saturation')
ax2.plot(saturation_hist[1][:-1], func(saturation_hist[1][:-1], *popt_saturation), 'r--', label='fit curve')
ax2.set_xlabel('saturation')
ax2.set_ylabel('probability')
ax2.set_title('Saturation Distribution')
ax2.legend()# 绘制天然气水合物资源量的柱状图
ax3 = fig.add_subplot(2, 1, 2)
ax3.bar(range(len(gas_resource)), gas_resource)
ax3.set_xlabel('depth')
ax3.set_ylabel('gas resource quantity')
ax3.set_title('Gas Resource Quantity Distribution')plt.tight_layout()
plt.show()# 输出天然气水合物资源量的估计值
print("The estimated gas resource quantity is:", sum(gas_resource))

查看完整思路详见:
【腾讯文档】第九届“数维杯”大学生数学建模挑战赛全题目深度剖析建模完整过程+详细思路+代码全解析(持续更新中!)
https://docs.qq.com/doc/DSHd6UHpNZkZoWmxw


http://www.ppmy.cn/embedded/39756.html

相关文章

BUU-[GXYCTF2019]Ping Ping Ping

考察点 命令执行 题目 解题 简单测试 ?ip应该是一个提示,那么就测试一下?ip127.0.0.1 http://0c02a46a-5ac2-45f5-99da-3d1b0b951307.node4.buuoj.cn:81/?ip127.0.0.1发现正常回显 列出文件 那么猜测一下可能会有命令执行漏洞,测试?ip127.0.…

iOS plist文件增删改查

一. plist简介 plist文件,即属性列表文件,全名是Property List,这种文件的扩展名为.plist,因此,通常被叫做plist文件。它是一种用来存储串行化后的对象的文件,在iOS开发中通常用来存储用户设置&#xff0c…

2024年电工杯数学建模B题思路 中国电机工程学会杯建模思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

详细介绍ARM-ORACLE Database 19c数据库下载

目录 1. 前言 2. 获取方式 2.1 ORACLE专栏 2.2 ORACLE下载站点 1. 前言 现有网络上已有非常多关于ORACLE数据库机下载的介绍,但对于ARM平台的介绍不多,借此机会我将该版的下载步骤做如下说明,希望能够一些不明之人提供帮助和参考 2. 获…

力扣每日一题-统计已测试设备-2024.5.10

力扣题目:统计已测试设备 题目链接: 2960.统计已测试设备 题目描述 代码思路 根据题目内容,第一感是根据题目模拟整个过程,在每一步中修改所有设备的电量百分比。但稍加思索,发现可以利用已测试设备的数量作为需要减少的设备电…

docker学习-docker常用其他命令整理

随便写写,后面有空再更新 镜像命令,容器命令已在之前略有更新,这次不写, 一、后台启动命令 # 命令 docker run -d 容器名 # 例子 docker run -d centos # 启动centos,使用后台方式启动 # 问题: 使用doc…

机器人系统ros2-开发实践07-将机器人的状态广播到 tf2(Python)

上个教程将静态坐标系广播到 tf2,基于这个基础原理这个教程将演示机器人的点位状态发布到tf2 1. 写入广播节点 我们首先创建源文件。转到learning_tf2_py我们在上一教程中创建的包。在src/learning_tf2_py/learning_tf2_py目录中输入以下命令来下载示例广播示例代码…

Android ViewFlipper

Android ViewFlipper 在很多APP都有如下的头条/热榜效果(上下自动翻滚) 这种效果可以使用很多方式实现,有一个简便的方式可以使用ViewFlipper控件实现,ViewFlipper控件继承结果如下: 可以看出ViewFlipper 继承自ViewA…