2023 数学建模高教社杯 国赛(B题)|多波束测线问题|建模秘籍&文章代码思路大全

铛铛!小秘籍来咯!

小秘籍希望大家都能轻松建模呀,国赛也会持续给大家放松思路滴~

抓紧小秘籍,我们出发吧~

 让我们来看看国赛的B题!

2023 数学建模高教社杯 国赛(B题)|多波束测线问题|建模秘籍&文章代码思路大全_第1张图片

题目1

问题1要建立多波束测深的覆盖宽度及相邻条带之间的重叠率的数学模型,下面详细描述具体的建模思路和计算步骤。

首先,我们已经知道多波束测深的覆盖宽度可以表示为:

W = 2D \cdot \tan\left(\frac{\theta}{2}\right)

其中,
- :覆盖宽度,单位为米。
- :海水深度,单位为米。
- :多波束换能器的开角,单位为度。

接下来,我们需要计算相邻条带之间的重叠率,它可以表示为:

\eta = 1 - \frac{d}{W}

其中,
- :重叠率,以百分比表示。
- :相邻两条测线的间距,单位为米。

要计算问题1中表1中所列位置的指标值,我们需要知道海水深度、多波束换能器的开角、以及相邻两条测线的间距。这些参数需要根据问题中给定的条件来确定。

具体计算步骤如下:

1. 根据问题中给定的海水深度(70米)、多波束换能器的开角(120度)和相邻测线的间距(从表1中读取),使用上述公式计算覆盖宽度和相邻条带之间的重叠率。

2. 将计算得到的覆盖宽度和重叠率填入表1中相应的位置。

3. 重复步骤1和步骤2,直到计算完所有表1中列出的位置。

4. 将结果整理成表格格式,将其放在正文中,并保存到result1.xlsx文件中。

import pandas as pd
import math
from openpyxl import Workbook

# 定义计算覆盖宽度的函数
def calculate_coverage_width(D, theta):
    return 2 * D * math.tan(math.radians(theta / 2))

# 读取表1中的数据,这里使用一个示例数据,你可以根据实际情况替换成你的数据
data = {
    '测线距中心点处的距离/m': [-800, -600, -400, -200, 0, 200, 400, 600, 800],
    '海水深度/m': [70, 70, 70, 70, 70, 70, 70, 70, 70]
}

df = pd.DataFrame(data)

# 多波束换能器的开角
theta = 120

# 计算覆盖宽度并添加到DataFrame中#见完整版

题目二

问题2要建立多波束测深的覆盖宽度的数学模型,考虑一个矩形待测海域,其中测线方向与海底坡面的法向在水平面上投影的夹角为(单位:度),多波束换能器的开角为(单位:度),坡度为(单位:度),海域中心点处的海水深度为(单位:米),测量船距海域中心点处的距离为(单位:海里)。

覆盖宽度可以表示为:

W=2D⋅tan(2θ​)⋅cos(α)⋅sec(β)

其中,

  • :覆盖宽度,单位为米。
  • :海水深度,单位为米。
  • :多波束换能器的开角,单位为度。
  • :坡度,单位为度。
  • :测线方向夹角,单位为度。

这个公式考虑了多个因素,包括海水深度、多波束换能器的开角、坡度以及测线方向夹角。覆盖宽度W表示了每条测线在海底上所覆盖的宽度。

解题思路:

  1. 根据问题描述,首先要确定问题中给定的参数,包括海水深度、多波束换能器的开角、坡度、测线方向夹角以及测量船距离海域中心点的距离。

  2. 使用上述给出的公式计算覆盖宽度W。将这个公式应用于问题2中所列的不同位置,计算每个位置的覆盖宽度。

  3. 将计算得到的覆盖宽度整理成表格的形式,包括测量船距离海域中心点的距离和测线方向夹角。

  4. 将结果保存到Excel文件或其他合适的格式中,以便进一步分析或报告。

这个数学模型考虑了海水深度、多波束换能器的参数以及测线方向夹角,可以用于计算问题2中不同位置的多波束测深的覆盖宽度。

题目三

要设计一组测量长度最短、可完全覆盖整个待测海域的测线,且相邻条带之间的重叠率满足10%~20%的要求,可以采用以下步骤:

1. 确定海域的尺寸和参数:
   - 海域南北长:2海里
   - 海域东西宽:4海里
   - 海水深度:110米
   - 坡度:1.5°
   - 多波束换能器的开角:120°

2. 计算单条测线的覆盖宽度W:
   使用之前给出的覆盖宽度公式:
   [W = 2D \cdot \tan\left(\frac{\theta}{2}\right) \cdot \cos(\alpha) \cdot \sec(\beta)]

  其中,D为海水深度,θ为多波束换能器的开角,α为坡度,β为测线方向夹角。

3. 计算需要的测线数量:
   由于海域的东西宽度为4海里,而单条测线的覆盖宽度为W,所以需要的测线数量可表示为:
   N = \frac{4 \text{haili}}{W}

4. 确定测线间距d:
   - 为满足10%~20%的重叠率要求,测线间距d可以计算为:
d = \frac{W}{10\%}/ \d=\frac{W}{20\%}
   - 计算出d后,将测线平均分布在海域的东西宽度上,确保完全覆盖整个待测海域。

5. 计算总测线长度L:
   总测线长度L等于单条测线的长度乘以测线的数量N。

下面是问题3的具体计算过程:

- 海域南北长:2海里 = 3704米
- 海域东西宽:4海里 = 7408米
- 海水深度:110米
- 坡度:1.5°
- 多波束换能器的开角:120°

计算单条测线的覆盖宽度W:
[W = 2 \cdot 110 \cdot \tan\left(\frac{120}{2}\right) \cdot \cos(1.5°) \cdot \sec(\beta)]

计算需要的测线数量N:
[N = \frac{7408}{W}]

确定测线间距d,确保10%~20%的重叠率:
d = \frac{W}{10\%} / \frac{W}{20\%}

计算总测线长度L:
L = N \cdot d

import math

# 定义计算覆盖宽度的函数
def calculate_coverage_width(D, theta, alpha, beta):
    return 2 * D * math.tan(math.radians(theta / 2)) * math.cos(math.radians(alpha)) / math.cos(math.radians(beta))

# 海域尺寸和参数
sea_width = 4 * 1852  # 4海里转换成米
sea_length = 2 * 1852  # 2海里转换成米
sea_depth = 110  # 米
slope = 1.5  # 坡度,度
beam_angle = 120  # 多波束换能器开角,度

# 初始化参数
beta = 0  # 测线方向夹角,初始为0度
min_overlap = 10 / 100  # 10%的最小重叠率
max_overlap = 20 / 100  # 20%的最大重叠率

# 初始化结果
best_N = None
best_d = None
best_L = float('inf')  # 初始的总测线长度设置为无穷大

# 循环尝试不同的测线数量N和测线间距d的组合#见完整版代码

代码思路:

  1. 我们首先导入了必要的数学库(math)。

  2. 定义了一个计算覆盖宽度的函数calculate_coverage_width,该函数接受海水深度(D)、多波束换能器的开角(theta)、坡度(alpha)和测线方向夹角(beta)作为输入,然后使用之前讨论的覆盖宽度公式计算覆盖宽度W。

  3. 指定了海域的尺寸和参数,包括海域的宽度、长度、海水深度、坡度和多波束换能器的开角。

  4. 初始化了一些参数,包括测线方向夹角beta、最小重叠率min_overlap和最大重叠率max_overlap

  5. 初始化了结果变量,包括最优测线数量best_N、最优测线间距best_d以及初始的总测线长度best_L,将best_L设置为无穷大,以确保它在后续的比较中能够被替代。

  6. 使用一个循环来尝试不同的测线数量N,从1到100。这是一个假设的范围,你可以根据实际情况调整。

  7. 在循环中,首先计算单条测线的覆盖宽度W。

  8. 然后计算测线间距d,将海域宽度分成N段。

  9. 计算总测线长度L,即N乘以测线间距d。

  10. 检查是否满足重叠率要求,计算重叠率并检查是否在最小和最大重叠率范围内。

  11. 如果满足要求且总测线长度更短,则更新最优结果。

  12. 最后,输出最优的测线数量N、最优的测线间距d以及总测线长度L。

完整代码看看小秘籍的回答哦

如何评价2023年数学建模国赛B题? - 知乎

你可能感兴趣的:(数学建模)