2023数学建模国赛思路全解析(B题)|多波束测线问题|独家思路代码分享|洞悉数学建模问题的关键

很高兴,在南大以数学建模社团教练的身份连续3年助攻了国赛,我的数模相关回答累计帮助了一百余支队伍,其中有很多同学在国赛中获得了国一、美赛中获得of奖的同学,因此在这里继续分享我数学建模的心得和经验。

让我们一起来看看国赛的B题呀~

2023数学建模国赛思路全解析(B题)|多波束测线问题|独家思路代码分享|洞悉数学建模问题的关键_第1张图片

问题一

建模思路:

  1. 声波传播模型: 首先,建立声波在海水中传播的物理模型。声波在均匀介质中的传播速度通常由声速公式给出:$c = \sqrt{\frac{K}{\rho}}$其中,c 是声速,K 是体积模量,ρ 是密度。这个公式可以用来估算声波在不同海水深度下的传播速度。

  2. 声波传播时间: 接下来,考虑从发射器到接收器的声波传播时间。这可以表示为:$T = \frac{2D}{c}$​ 其中,T 是传播时间,D 是海水深度,c 是声速。

  3. 覆盖宽度模型: 覆盖宽度是指声波束的宽度,它取决于多波束换能器的开角和声束的传播。覆盖宽度可以用三角函数模型表示,例如正弦函数:$W(x, y) = 2 \cdot D \cdot \tan\left(\frac{\theta}{2}\right)$其中,W(x,y) 是覆盖宽度,θ 是声束的开角。

  4. 重叠率模型: 相邻条带之间的重叠率可以表示为两个覆盖宽度之间的重叠部分与一个覆盖宽度的比率。例如,重叠率可以表示为:$O(x, y, x', y') = \frac{W(x, y) - |x - x'|}{W(x, y)}$                 其中,O(x,y,x′,y′) 是重叠率,(x,y) 和(x′,y′) 是两个相邻条带的中心坐标。

  5. 优化模型: 最后,可以使用优化方法,如线性规划或整数规划,来确定最佳的多波束测深系统配置,以最大化覆盖宽度、满足重叠率要求,并考虑其他约束条件(例如,成本或仪器性能)。

import math

# 声速公式
def sound_speed(K, rho):
    return math.sqrt(K / rho)

# 声波传播时间
def propagation_time(D, c):
    return 2 * D / c

# 覆盖宽度模型
def coverage_width(D, theta):
    return 2 * D * math.tan(math.radians(theta / 2))

# 重叠率模型
def overlap_rate(W, x, x_prime):
    return (W - abs(x - x_prime)) / W#见完整版

题目二

建模思路:

  1. 声波传播模型:我们仍然使用声速公式来估计声速 c,但由于存在坡度,我们需要考虑坡度对声速的影响。声速可以表示为:$c = \sqrt{\frac{K}{\rho}}\left(1 + \alpha \tan(\beta)\right)$ 其中,K 是水的体积模量,ρ 是水的密度,α 是与坡度相关的参数。

  2. 声波传播时间:声波传播时间 T 仍然可以使用之前的公式计算:$T = \frac{2D}{c}$其中,D 是海水深度。

  3. 声波束角度:考虑坡度对声波束角度的影响,声波束角度 F 可以表示为:$F = \arctan\left(\frac{\tan(120^\circ/2)}{1 + \alpha \tan(\beta)}\right)$

  4. 覆盖宽度模型:使用之前的覆盖宽度模型计算覆盖宽度 W:$W(x, y) = 2 \cdot D \cdot \tan\left(\frac{F}{2}\right)$

  5. 计算覆盖宽度:针对不同位置,计算声波束的覆盖宽度。

  6. 输出结果:将计算得到的覆盖宽度以表格的形式呈现,包括不同位置的覆盖宽度和坡度角度 β。

import math
import pandas as pd

# 声速公式(包含坡度影响)
def sound_speed(K, rho, alpha, beta):
    return math.sqrt(K / rho) * (1 + alpha * math.tan(math.radians(beta)))

# 声波传播时间
def propagation_time(D, c):
    return 2 * D / c

# 声波束角度计算
def beam_angle(alpha, beta):
    return math.degrees(math.atan(math.tan(math.radians(120/2)) / (1 + alpha * math.tan(math.radians(beta)))))#代码见完整版

题目三

  1. 确定海域参数:

    • 南北长: 22 海里
    • 东西宽: 44 海里
    • 海域中心点处的海水深度: 110
    • 坡度: 1.5∘
    • 多波束换能器开角: 120∘
  2. 计算覆盖宽度:

    • 使用问题2中提出的声速公式,计算声速 c。
    • 使用声波束角度公式计算声波束角度 F。
    • 使用覆盖宽度模型,计算覆盖宽度 W。
  3. 设计测线布局:

    • 从海域中心点出发,按照南北方向和东西方向布置测线。
    • 南北方向布线:以海域中心点为起点,以声波束的宽度 W 为间隔,向南北两个方向布置测线,直到完全覆盖海域。
    • 东西方向布线:以海域中心点为起点,以声波束的宽度 W 为间隔,向东西两个方向布置测线,直到完全覆盖海域。
  4. 计算测线长度:

    • 计算每条南北方向和东西方向的测线长度。
    • 计算总测线长度,包括南北方向和东西方向的测线长度之和。
  5. 评估设计结果:

    • 检查设计的测线布局是否满足覆盖整个海域的要求。
  6. 调整布局(如果需要):

    • 如果设计的测线布局不满足要求,可以微调布线间隔,重新计算测线长度,并进行评估。
  7. 输出结果:

    • 输出设计好的测线布局,包括测线的起始点、长度和方向,以及总测线长度。

为了解决问题3,我们可以使用Python编写一个函数,该函数接受海域参数,计算测线布局并返回结果。

import math

def design_survey_lines(south_north_length, east_west_width, center_depth, slope, beam_angle, overlap_ratio_min, overlap_ratio_max):
    # 声速公式(包含坡度影响)
    def sound_speed(K, rho, alpha, beta):
        return math.sqrt(K / rho) * (1 + alpha * math.tan(math.radians(beta)))

    # 声波传播时间
    def propagation_time(D, c):
        return 2 * D / c

    # 声波束角度计算
    def calculate_beam_angle(alpha, beta):
        return math.degrees(math.atan(math.tan(math.radians(beam_angle / 2)) / (1 + alpha * math.tan(math.radians(beta)))))

    # 覆盖宽度模型
    def calculate_coverage_width(D, F):
        return 2 * D * math.tan(math.radians(F / 2))

这个函数名为 design_survey_lines,它接受南北长、东西宽、海水深度、坡度、波束角度、重叠率最小值和重叠率最大值等参数,并返回一个包含测线设计结果的列表。

可以看看我的回答呀~

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

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