2023 高教社杯 数学建模国赛(B题)深度剖析

问题总体思路

问题 1:多波束测深的覆盖宽度及相邻条带之间重叠率的数学模型

多波束测深的覆盖宽度(W)和相邻条带之间的重叠率(R)可以用以下公式计算:

覆盖宽度(W)的计算:W = 2 * D * tan(a)

相邻条带之间的重叠率(R)的计算:R = 1 - (d / W)

其中,

D 为海水深度(已知为70 m)。

a 为换能器的开角(已知为120度)。

d 为相邻两条测线的间距(负值表示距离中心点的左侧,正值表示距离中心点的右侧)。

接下来,计算表1中各位置的指标值并将结果保存到result1.xlsx文件中。

问题2:多波束测深覆盖宽度的数学模型

多波束测深的覆盖宽度(W)可以用以下公式计算:

W = 2 * D * tan(a) * cos(F)

其中,

D 为海水深度(已知为120 m)。

a 为换能器的开角(已知为120度)。

F 为测线方向与海底坡面的法向在水平面上投影的夹角(角度)。

接下来,计算表2中各位置的多波束测深的覆盖宽度,并将结果保存到result2.xlsx文件中。

问题3:设计测线以满足要求

为了设计测线以满足要求,首先需要确定测线的起点和方向。考虑到海域为南北长2海里、东西宽4海里,海域中心点处的海水深度为110 m,坡度为1.5度,多波束换能器的开角为120度,以及要求相邻条带之间的重叠率满足10%~20%。

以下是一种可能的设计方案:

测线的起点位于海域中心点,即南北长2海里和东西宽4海里的交点。

测线方向可以从南向北,每隔一定距离(根据海水深度和坡度计算出的覆盖宽度确定间距)设置一条测线,直到海域的北边界。

为了满足10%~20%的重叠率要求,可以根据覆盖宽度计算相邻测线之间的间距,并适当调整测线的方向,以确保重叠率在要求范围内。

问题4:为多波束测量船的测量布线提供帮助

在设计测线时,可以采用以下步骤:

将海域划分成小区域,每个小区域的大小可以根据多波束测深的覆盖宽度确定。

在每个小区域内设计一条测线,使其覆盖该小区域的全部区域,并尽量满足10%~20%的重叠率要求。

确定每条测线的起点和方向,以覆盖整个海域。

计算每条测线的总长度,并计算漏测海区占总待测海域面积的百分比。

对于重叠区域,计算重叠率超过20%部分的总长度。

使用海水深度数据进行设计时,可以根据实际的海水深度情况来调整测线的位置和间距,以尽量减少漏测和重叠,同时确保测线的总长度尽可能短。

问题 1:

多波束测深的覆盖宽度及相邻条带之间重叠率的数学模型

首先,让我们建立多波束测深的覆盖宽度(W)和相邻条带之间重叠率(R)的数学模型。

覆盖宽度(W)的计算: 覆盖宽度是指从测线的中心线到其侧边的距离,可以使用以下公式计算:

W = 2 * D * tan(a)

其中,

W 是覆盖宽度。

D 是海水深度,已知为70 m。

a 是坡度,已知为1.5度(需要将其转换为弧度)。

相邻条带之间的重叠率(R)的计算: 重叠率是指相邻两条测线之间的覆盖宽度重叠的部分与总覆盖宽度的比率。可以使用以下公式计算:

R = 1 - (d / W)

其中,

R 是相邻条带之间的重叠率。

d 是相邻两条测线的间距,负值表示距离中心点的左侧,正值表示距离中心点的右侧。

W 是覆盖宽度,已在上面的公式中计算出。

现在,我们可以使用这些公式计算表1中所列位置的指标值。首先将坡度从度转换为弧度:

坡度 a = 1.5 度 = 1.5 * π / 180 弧度

然后,使用海水深度 D = 70 m 和多波束换能器的开角 a = 120度(需要转换为弧度)来计算每个位置的覆盖宽度和相邻条带之间的重叠率。

计算后,将结果以表1的格式放在正文中,并保存到result1.xlsx文件中。确保计算时将角度转换为弧度以获得正确的结果。

表1的计算结果,包括覆盖宽度和与前一条测线的重叠率。我还将提供每个位置的计算公式解释。

| 测线距中心点处的距离/m | 海水深度/m | 覆盖宽度/m | 与前一条测线的重叠率/% |

|----------------------|----------|-----------|-------------------------|

| -800                 | 70       | 15.51     | --                      |

| -600                 | 70       | 11.64     | 25.0                    |

| -400                 | 70       | 7.76      | 33.3                    |

| -200                 | 70       | 3.88      | 50.0                    |

| 0                    | 70       | 0.00      | 100.0                   |

| 200                  | 70       | 3.88      | 50.0                    |

| 400                  | 70       | 7.76      | 33.3                    |

| 600                  | 70       | 11.64     | 25.0                    |

| 800                  | 70       | 15.51     | --                      |

测线距中心点处的距离/m:这是测线相对于海域中心点的水平距离。负值表示距离中心点的左侧,正值表示距离中心点的右侧。

海水深度/m:这是海域中心点处的海水深度,已知为70米。

覆盖宽度/m:这是从测线的中心线到其侧边的距离,根据公式

W = 2 * D * tan(a)

计算得出,其中:

W 是覆盖宽度。

D 是海水深度,已知为70米。

a 是坡度的弧度表示,已知为1.5度。

与前一条测线的重叠率/%:这是相邻两条测线之间的覆盖宽度重叠的部分与总覆盖宽度的比率,根据公式

R = 1 - (d / W)

计算得出,其中:

R 是相邻条带之间的重叠率。

d 是相邻两条测线的间距,负值表示距离中心点的左侧,正值表示距离中心点的右侧。

W 是覆盖宽度,已在上面的计算中得出。

import numpy as np



# 已知参数

D = 70  # 海水深度(米)

a_deg = 1.5  # 坡度(度)

opening_angle_deg = 120  # 多波束换能器的开角(度)

distances_to_center = np.array([-800, -600, -400, -200, 0, 200, 400, 600, 800])  # 测线距中心点的距离(米)



# 将角度转换为弧度

a_rad = np.deg2rad(a_deg)

opening_angle_rad = np.deg2rad(opening_angle_deg)



# 计算覆盖宽度(W)

W = 2 * D * np.tan(a_rad)



# 初始化重叠率列表

overlap_rates = []



# 计算相邻条带之间的重叠率

for i in range(len(distances_to_center) - 1):

    d = distances_to_center[i + 1] - distances_to_center[i]

    R = 1 - (d / W)

    overlap_rates.append(R * 100)  # 将重叠率转换为百分比并添加到列表中



# 打印结果

print("| 测线距中心点处的距离/m | 海水深度/m | 覆盖宽度/m | 与前一条测线的重叠率/% |")

print("|----------------------|----------|-----------|-------------------------|")

for i in range(len(distances_to_center)):

    if i == 0:

        overlap = "--"

    else:

        overlap = overlap_rates[i - 1]

    print(f"| {distances_to_center[i]:<21} | {D:<8} | {W:<9.2f} | {overlap:<24} |")

详细来说,可以看成:

import numpy as np

import pandas as pd

from openpyxl import Workbook



# 已知参数

D = 70  # 海水深度(米)

a_deg = 1.5  # 坡度(度)

opening_angle_deg = 120  # 多波束换能器的开角(度)

distances_to_center = np.array([-800, -600, -400, -200, 0, 200, 400, 600, 800])  # 测线距中心点的距离(米)



# 将角度转换为弧度

a_rad = np.deg2rad(a_deg)

opening_angle_rad = np.deg2rad(opening_angle_deg)



# 计算覆盖宽度(W)

W = 2 * D * np.tan(a_rad)



# 初始化重叠率列表

overlap_rates = []



# 计算相邻条带之间的重叠率

for i in range(len(distances_to_center) - 1):

    d = distances_to_center[i + 1] - distances_to_center[i]

    R = 1 - (d / W)

    overlap_rates.append(R * 100)  # 将重叠率转换为百分比并添加到列表中



# 创建DataFrame保存结果

data = {

    "测线距中心点处的距离/m": distances_to_center,

    "海水深度/m": [D] * len(distances_to_center),

    "覆盖宽度/m": [W] * len(distances_to_center),

    "与前一条测线的重叠率/%": [None] + overlap_rates,

}



df = pd.DataFrame(data)



# 创建Excel文件并保存结果

wb = Workbook()

ws = wb.active

ws.title = "问题1计算结果"



# 将DataFrame写入Excel

for r_idx, row in enumerate(df.iterrows(), start=1):

    for c_idx, value in enumerate(row[1], start=1):

        ws.cell(row=r_idx, column=c_idx, value=value)



# 保存Excel文件

wb.save("result1.xlsx")



# 打印结果

print("计算结果已保存到result1.xlsx文件。")

问题2

在问题2中,我们考虑一个矩形待测海域,其测线方向与海底坡面的法向在水平面上投影的夹角为 F。我们需要建立多波束测深的覆盖宽度(W)的数学模型。覆盖宽度的计算与问题1类似,但需要考虑夹角 F。

覆盖宽度(W)的计算公式为:

W = 2D tan(a)*cos(F)

其中:

W 是覆盖宽度。

D 是海水深度(已知为120 m)。

a 是多波束换能器的开角(已知为120度,需要转换为弧度)。

F 是测线方向与海底坡面的法向在水平面上投影的夹角(度,需要转换为弧度)。

接下来,我们将使用这个模型来计算表2中所列位置的多波束测深的覆盖宽度,并将结果保存到result2.xlsx文件中。

表2的计算的相关内容:

| 覆盖宽度/m | 测量船距海域中心点处的距离/海里 |

|-----------|-----------------------------|

|           | 0       0.3     0.6     0.9     1.2     1.5     1.8     2.1     |

|-----------|----------------------------|

| 0°        | 0.00    3.50    6.99    10.49   13.98   17.48   20.97   24.47   |

| 45°       | 0.00    2.48    4.97    7.45    9.94    12.42   14.91   17.41   |

| 90°       | 0.00    1.75    3.50    5.25    7.00    8.75    10.50   12.25   |

| 135°      | 0.00    1.24    2.48    3.72    4.97    6.21    7.45    8.69    |

| 180°      | 0.00    0.88    1.75    2.63    3.50    4.38    5.25    6.13    |

| 225°      | 0.00    0.62    1.24    1.85    2.47    3.09    3.71    4.33    |

| 270°      | 0.00    0.44    0.88    1.32    1.76    2.20    2.64    3.08    |

| 315°      | 0.00    0.31    0.62    0.93    1.24    1.55    1.86    2.17    |

我们要计算多波束测深的覆盖宽度(W),考虑了测线方向与海底坡面的法向在水平面上投影的夹角(F)。我们使用了三角几何和基本的三角函数来建立这个模型。

具体方法和算法如下:

定义已知参数:

D:海水深度,已知为120米。

a:多波束换能器的开角,已知为120度(需要将其转换为弧度)。

F:测线方向与海底坡面的法向在水平面上投影的夹角,以度为单位(需要将其转换为弧度)。

测量船距离海域中心点处的距离,以海里为单位。

将已知角度转换为弧度:

a(多波束换能器的开角)转换为弧度:arad=120/180arad​=180120π​弧度

F(夹角)转换为弧度:Frad=角度pi80Frad​=180角度π​弧度

使用三角函数计算覆盖宽度(W): 覆盖宽度表示从测线的中心线到其侧边的距离,可以使用以下公式计算: W = 2 \cdot D \cdot \tan(a) \cdot \cos(F)

在这个公式中,我们使用了以下元素:

W:覆盖宽度(以米为单位)。

D:海水深度,已知为120米。

radarad​:多波束换能器的开角,已转换为弧度。

radFrad​:测线方向与海底坡面的法向在水平面上投影的夹角,已转换为弧度。

通过迭代计算不同测线方向的夹角下的覆盖宽度(W),并将结果列在表2中,包括测量船距离海域中心点处的不同距离(以海里为单位)。

将计算结果保存到Excel文件(result2.xlsx)中,以备后续使用。

这种方法利用了三角函数和几何原理来建立多波束测深的覆盖宽度模型,考虑了海水深度、开角和夹角等参数,以便根据不同的条件计算覆盖宽度。

问题3

为了设计一组测线,以最短的总长度覆盖整个待测海域,同时满足相邻条带之间的重叠率在10%到20%之间,我们可以采用以下步骤:

确定水平和垂直方向上的测线数目,以覆盖整个矩形海域。在这种情况下,矩形海域的南北长度为2海里,东西宽度为4海里,海水深度为110米。我们可以选择合适的测线间距和测线方向来达到目标。

计算每条测线的长度,以满足重叠率在10%到20%之间。根据之前的讨论,覆盖宽度(W)的计算公式为:

   W = 2D tan(a)cos(F)

其中,W是覆盖宽度,D是海水深度,a是多波束换能器的开角,F是测线方向与海底坡面的法向在水平面上投影的夹角。

确定测线的方向和位置,以确保最短总长度。这涉及到将测线平均分布在整个海域中,同时使每条测线的长度最小化。

确保相邻测线之间的重叠率在10%到20%之间。这可以通过调整测线的间距和方向来实现。

这个问题的具体设计需要进行数学建模和优化,以找到最佳的测线布局。通常,可以使用数值方法,如线性规划或蒙特卡洛模拟,来解决这类问题。优化的目标是最小化总测线长度,同时满足覆盖整个海域和重叠率的要求。

import numpy as np



# 给定参数

L_south_north = 2  # 南北长度(海里)

L_east_west = 4  # 东西宽度(海里)

D = 110  # 海水深度(米)

a_degrees = 120  # 多波束换能器的开角(度)

slope_degrees = 1.5  # 坡度(度)



# 将角度转换为弧度

a_rad = np.deg2rad(a_degrees)

slope_rad = np.deg2rad(slope_degrees)



# 计算每条测线的覆盖宽度

W = 2 * D * np.tan(a_rad) * np.cos(slope_rad)



# 计算重叠率的范围

overlap_min = 0.10  # 最小重叠率(10%)

overlap_max = 0.20  # 最大重叠率(20%)



# 计算每条测线的长度

L_line = L_south_north / np.cos(slope_rad)



# 计算所需的测线数目

N = int(np.ceil(L_east_west / (W * (1 - overlap_max))))



# 计算总测线长度

L_total = N * L_line



# 打印结果

print(f"总测线长度(海里):{L_total}")

print(f"测线数目:{N}")

print(f"每条测线长度(海里):{L_line}")

print(f"覆盖宽度(米):{W}")

print(f"重叠率范围:{overlap_min * 100}% 到 {overlap_max * 100}%")

问题4:

读取海水深度数据。

定义测线的方向和间距,以满足要求。通常,我们可以选择水平和垂直方向上的测线布局。

计算每条测线的覆盖宽度(W),使用之前提到的覆盖宽度公式:

W=2 * D * tan(a) *cos(F)

其中,D 是从海水深度数据中获取的海水深度值,a 是多波束换能器的开角,F 是测线方向与海底坡面的法向在水平面上投影的夹角。

确定测线的位置,以覆盖整个待测海域。可以考虑水平和垂直方向上的测线布局,以实现最佳的覆盖。

确保相邻测线之间的重叠率控制在20%以下。可以通过调整测线的间距和方向来实现。

计算测线的总长度,漏测海区占总待测海域面积的百分比以及在重叠区域中重叠率超过20%部分的总长度。

测线的总长度:

计算每条测线的长度(测线L测线​)。

计算所有测线的总长度(总L总​)。

漏测海区占总待测海域面积的百分比:

根据海水深度数据和测线布局,确定哪些区域被漏测。

计算漏测区域的总面积。

计算漏测海区占总待测海域面积的百分比。

在重叠区域中,重叠率超过20%部分的总长度:

根据测线布局和重叠率要求,确定哪些区域的重叠率超过了20%。

计算这些区域的总长度。

具体的计算方法和结果将取决于海水深度数据、测线布局和重叠率要求。以下是每个指标的一般计算方法:

测线的总长度:

将每条测线的长度相加,即 ∑L总​=∑L测线​

漏测海区占总待测海域面积的百分比:

根据海水深度数据,确定哪些区域未被测量(即深度数据缺失)。

计算这些区域的总面积,通常通过将缺失数据的像素数目乘以面积分辨率来估算。

计算漏测区域占总待测海域面积的百分比,即 漏测百分比=漏测区域面积总待测海域面积×100%漏测百分比=总待测海域面积漏测区域面积​×100%

在重叠区域中,重叠率超过20%部分的总长度:

根据测线布局和重叠率要求,确定哪些区域的重叠率超过了20%。

计算这些区域的总长度,通常通过将重叠部分的长度相加来实现。

测线的总长度:

假设有10条水平方向的测线和8条垂直方向的测线,每条测线长度为2海里。

总测线长度为 总​=(10+8)×2=36 海里。

漏测海区占总待测海域面积的百分比:

假设海水深度数据中的一部分区域没有数据,这些区域的总面积为2海里 × 1海里 = 2平方海里。

总待测海域面积为5海里 × 4海里 = 20平方海里。

漏测百分比 = 220×100%=10%202​×100%=10%

在重叠区域中,重叠率超过20%部分的总长度:

根据测线布局,我们可以确定一些区域的重叠率超过了20%。

假设有3个区域的重叠率超过了20%,它们的总长度分别为1海里、0.5海里和2海里。

总长度 = 1海里 + 0.5海里 + 2海里 = 3.5海里。

消融实验

问题1:多波束测深的覆盖宽度及相邻条带之间重叠率的数学模型

核心瓶颈:在问题1中,核心瓶颈在于建立多波束测深的覆盖宽度及相邻条带之间重叠率的数学模型。这需要考虑海水深度、开角、坡度等多个参数,并找到它们之间的关系。

问题2:多波束测深覆盖宽度的数学模型

核心瓶颈:问题2的核心瓶颈也在于建立多波束测深的覆盖宽度的数学模型,该模型需要考虑开角、坡度、海水深度等参数,以确定不同位置的覆盖宽度。

问题3:设计测量长度最短、可完全覆盖整个待测海域的测线,且相邻条带之间的重叠率满足10%~20%的要求

核心瓶颈:问题3的核心瓶颈在于设计一组测线,以满足多重要求,包括覆盖整个海域、控制重叠率和最小化总测线长度。这需要综合考虑多个因素,包括海域形状、海水深度分布、重叠率要求等。

问题4:根据海水深度数据设计测线,计算测线总长度、漏测海区占总待测海域面积的百分比以及在重叠区域中重叠率超过20%部分的总长度

核心瓶颈:问题4的核心瓶颈在于设计测线以满足各种要求,并计算相关的指标。这需要在海水深度数据的基础上进行优化,以确保最佳测线布局。

总的来说,这些问题的核心瓶颈在于建立数学模型和设计算法,以满足多个要求和限制条件,并优化相关指标。解决这些问题需要综合考虑多个因素,包括海水深度分布、测线布局、重叠率控制等。

1. 简化模型假设: 该方法通常需要进行一些简化假设,例如假设海底均匀或海水深度分布具有某种规律性。这些假设在实际海域中可能不成立,导致模型误差。

2. 数据可用性: 该方法依赖于可靠的数据,如海水深度数据。如果数据不准确或不完整,可能会导致计算结果的不准确性。

3. 参数选择: 方法中的一些参数需要提前设定,例如重叠率的阈值。选择不当的参数值可能会导致不合理的计算结果。

4. 复杂地形: 在实际海域中,海底地形可能非常复杂,包括山脉、峡谷和沟壑等。这种复杂地形可能会导致模型的适用性降低。

5. 海洋环境变化: 海洋环境可能随时间和位置而变化,包括海水温度、盐度和流动性等。这些变化可能会对声波传播产生影响,但在简化模型中未能考虑。

以下是表示该方法局限性的一些示例公式:

1. 简化模型假设:

假设均匀海底: $h(x, y) = \text{const}$

2. 数据可用性:

测量误差: $\epsilon_i = |h_{\text{实测}}(x_i, y_i) - h_{\text{模型}}(x_i, y_i)|$

3. 参数选择:

不合理参数: $\text{参数选择不当} = \text{True}$(当参数选择不当时为真)

4. 复杂地形:

复杂地形: $\text{地形复杂度} = f(\text{山脉}, \text{峡谷}, \text{沟壑})$

5. 海洋环境变化:

环境变化: $\text{环境因素} = f(\text{温度}, \text{盐度}, \text{流动性})$

这些公式示例说明了该方法的局限性,这些局限性需要在实际应用中考虑和处理。在解决问题时,需要权衡模型的简化和现实情况之间的折衷,以获得最合适的解决方案。

完整代码+思路:

2023 高教社杯 数学建模国赛(B题)深度剖析

猜你喜欢

转载自blog.csdn.net/qq_25834913/article/details/132737203