2023 高教社杯 数学建模国赛(B题)深度超全剖析|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2021年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。

更新!!!

让我们来看看B题!

问题 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                   |

……

测线距中心点处的距离/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:#见完整版

问题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    |

……

我们要计算多波束测深的覆盖宽度(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%之间。这可以通过调整测线的间距和方向来实现。

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

计算海域的总面积(A海域​):A_{\text{haiyu}} = L_{\text{nanbei}} \times L_{\text{dongxi}}

计算多波束换能器的开角(a):a = \frac{120\pi}{180}

计算测线的间距(d)以满足重叠率要求:重叠率= \frac{W - d}{W} \times 100\%

计算每条测线的长度(L测线​)L_{\text{cexian}} = \frac{L_{\text{nanbei}}}{\cos(F)}

计算所需的测线数目(N):N = \frac{L_{\text{dongxi}}}{d}

计算总测线长度(L总​):L_{\text{zong}} = N \cdot L_{\text{cexian}}

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)a_rad = np.deg2rad(a_deg)opening_angle_rad = np.deg2rad(opening_angle_deg)# 计算覆盖宽度(W)#见完整版

问题4:

读取海水深度数据。

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

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

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

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

假设海域尺寸为南北长5海里、东西宽4海里,海水深度数据已经预处理并表示为一个矩阵 depth_data。

% 定义问题4的参数
width_nautical_miles = 4;  % 海域宽度(海里)
length_nautical_miles = 5;  % 海域长度(海里)
depth_meters = 110;  % 海水深度(米)
overlap_threshold = 0.2;  % 重叠率阈值

% 将海里转换为米
width_meters = width_nautical_miles * 1852;
length_meters = length_nautical_miles * 1852;

% 创建一个表示海域的矩阵
sea_region = zeros(length_meters, width_meters);

% 测线总长度
total_length = 0;

% 遍历海域,设计测线
for x = 1:width_meters
    for y = 1:length_meters
        % 如果当前位置未被覆盖且未达到重叠率阈值
        if sea_region(y, x) == 0 && total_length <= overlap_threshold * width_meters
            % 添加测线
            total_length = total_length + 1;
            % 标记已覆盖区域
            sea_region(y:y+depth_meters, x) = 1;
        end
    end
end

% 计算漏测海区占总待测海域面积的百分比
uncovered_area_percentage = sum(sea_region(:) == 0) / numel(sea_region) * 100;

% 计算重叠区域中,重叠率超过20%部分的总长度
overlap_region = sea_region == 2;  % 假设重叠区域被标记为2
excessive_overlap_length = sum(overlap_region(:) == 1);

% 输出结果
fprintf('测线总长度: %.2f\n', total_length);
fprintf('漏测海区占总待测海域面积的百分比: %.2f%%\n', uncovered_area_percentage);
fprintf('在重叠区域中,重叠率超过20%%部分的总长度: %d\n', excessive_overlap_length);

消融实验

问题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{shice}}(x_i, y_i) - h_{\text{moxing}}(x_i, y_i)$

3. 参数选择:

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

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

完整的代码和文章看我的回答~

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

版权声明:本文为博主作者:CS_数模原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/2301_79650538/article/details/132767774

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2024年4月16日
下一篇 2024年4月16日

相关推荐