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

问题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) + c

popt_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

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023 年第八届数维杯大学生数学建模挑战赛b要求我们通过建立数学模型来解决问。在解答这道之前,我们首先需要理解目的要求和条件。 经过分析目内容,我们可以得知该要求我们确定三幅相互切线连接的圆的半径和切点位置。首先,我们可以通过计算出三个切点的坐标来确定切点位置。可以利用已知条件,使用平行四边形法则,得到切点的坐标。然后,我们可以根据切点坐标计算出三个圆之间的距离,从而求出圆的半径。 为了建立数学模型解决问,我们可以做如下步骤: 第一步,确定切点坐标:根据已知条件,计算出三个切点的坐标。假设三个切点坐标分别为A(x1, y1),B(x2, y2),C(x3, y3)。 第二步,计算圆心坐标:利用平行四边形法则,根据已知的切点坐标可以求得三个圆心的坐标。令圆心坐标分别为O1(xo1, yo1),O2(xo2, yo2),O3(xo3, yo3)。 第三步,计算半径:利用已知的切点和圆心坐标,可以计算出三幅圆之间的距离。令圆的半径分别为r1,r2,r3。 最后,我们可以将以上三步整合在一起,建立数学模型来解决问。运用相关的几何原理和计算方法,可以计算出目要求的圆的半径和切点位置。 总的来说,通过建立数学模型,可以解决2023 年第八届数维杯大学生数学建模挑战赛b。我们可以分步骤确定切点坐标和圆心坐标,进而计算出圆的半径。这样,我们就能够满足目的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值