2024 长三角高校数学建模竞赛(A题)数学建模完整思路+完整代码全解全析

本次赛题居然选择了华为手机,华为手机遥遥领先!会自己游回来(狗头)

下面进入正题


你是否在寻找数学建模比赛的突破点?数学建模进阶思路!

作为经验丰富的数学建模团队,我们将为你带来2024长三角高校数学建模竞赛(A题)的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析,帮助你全面理解并掌握如何解决类似问题

长三角(ABC题)完整内容可以在文章末尾领取!

最优搜索策略: 根据手机掉落到水中的范围,可以采用以下搜索策略: 1. 首先,从水平方向上的2h范围内开始搜索,即以手机掉落点为中心,以2h为半径的圆内进行搜索。 2. 如果在该范围内未找到手机,则逐步扩大搜索范围,分别增加1h、2h、3h...直至找到手机为止。 3. 在每个搜索范围内,可以采用网格搜索的方法,即将范围分割为若干小网格,逐个网格进行搜索,直至找到手机为止。 4. 如果在某个范围内仍未找到手机,则可以考虑使用水下摄像头等工具进行搜索。 5. 如果在所有范围内仍未找到手机,则可以考虑使用潜水员等专业人士进行搜索。

import numpy as np
import matplotlib.pyplot as plt

# 定义西湖的水域范围为一个正方形,边长为200米
lake_size = 200

# 定义手机的尺寸为15cm*7.5cm,考虑到手机可能会旋转,将其视为一个圆形,半径为7.5cm
phone_radius = 7.5

# 定义搜索步长为1米,即每次移动1米进行搜索
step_size = 1

# 定义搜索的起始点为西湖的中心点
start_point = np.array([lake_size/2, lake_size/2])

# 定义搜索范围为正方形,边长为手机尺寸的两倍
search_range = np.array([phone_radius*2, phone_radius*2])

# 定义搜索的方向,一共有8个方向,每个方向的角度为45度
directions = [np.array([1, 0]), np.array([1, 1]), np.array([0, 1]), np.array([-1, 1]),
              np.array([-1, 0]), np.array([-1, -1]), np.array([0, -1]), np.array([1, -1])]

# 定义用于存储搜索结果的列表
search_results = []

# 定义用于计算搜索范围内的点的函数
def get_points_in_range(start_point, search_range, step_size):
    points = []
    # 计算搜索范围内所有的点
    for x in np.arange(start_point[0]-search_range[0]/2, start_point[0]+search_range[0]/2, step_size):
        for y in np.arange(start_point[1]-search_range[1]/2, start_point[1]+search_range[1]/2, step_size):
            points.append(np.array([x, y]))
    return points

# 定义用于判断点是否在圆形范围内的函数
def is_in_circle(point, center, radius):
    # 计算点与圆心的距离
    distance = np.linalg.norm(point-center)
    # 如果距离小于等于半径,则认为点在圆形范围内,返回True,否则返回False
    if distance <= radius:
        return True
    else:
        return False

# 对每个搜索方向进行搜索
for direction in directions:
    # 获取搜索范围内的所有点
    points = get_points_in_range(start_point, search_range, step_size)
    # 对每个点进行判断,如果在圆形范围内,则将其添加到搜索结果中
    for point in points:
        if is_in_circle(point, start_point + direction, phone_radius):
            search_results.append(point)

# 将搜索结果绘制在图中
plt.figure(figsize=(8, 8))
# 绘制西湖的范围
plt.plot([0, lake_size, lake_size, 0, 0], [0, 0, lake_size, lake_size, 0])
# 绘制搜索范围的边界
plt.plot([start_point[0]-search_range[0]/2, start_point[0]+search_range[0]/2, start_point[0]+search_range[0]/2, start_point[0]-search_range[0]/2, start_point[0]-search_range[0]/2],
         [start_point[1]-search_range[1]/2, start_point[1]-search_range[1]/2, start_point[1]+search_range[1]/2, start_point[1]+search_range[1]/2, start_point[1]-search_range[1]/2])
# 绘制搜索结果
for result in search_results:
    plt.scatter(result[0], result[1], marker='o', color='r')
# 标记手机的位置
plt.scatter(start_point[0], start_point[1], marker='x', color='b')
# 添加标题和坐标轴标签
plt.title("Search Results for Phone in West Lake")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

# 打印搜索结果
~~

# 将搜索结果按照距离手机的距离进行排序

~~

# 打印最优搜索策略的结果

~~

问题 2:在京杭大运河拱宸桥附近,从游船上掉落到水里一款华为 Mate 60 Pro 手机,请你们研究手机可能的掉落范围以及最优搜索策略。

import math
import numpy as np

# 定义水域信息
canal_width = 100 # 运河宽度,单位为米
canal_depth = 5 # 运河深度,单位为米
canal_length = 1000 # 运河长度,单位为米
canal_speed = 0.5 # 运河流速,单位为米/秒

# 定义手机信息
phone_width = 0.08 # 手机宽度,单位为米
phone_length = 0.16 # 手机长度,单位为米
phone_depth = 0.01 # 手机厚度,单位为米

# 定义游船信息
boat_speed = 2 # 游船速度,单位为米/秒
boat_width = 3 # 游船宽度,单位为米
boat_length = 10 # 游船长度,单位为米

# 计算手机可能的掉落范围
# 首先计算手机从游船上掉落到水中的最大掉落距离
max_drop_distance = boat_speed * (boat_width + phone_width) # 最大掉落距离,单位为米
# 计算手机可能出现的掉落区域
# 由于手机可能在运河的任意位置掉落,因此需要将运河划分为多个小区域,计算每个小区域内手机可能的掉落位置
# 将运河划分为长方形小区域,每个小区域的长和宽分别为手机的最大掉落距离
num_x = math.ceil(canal_length / max_drop_distance) # x方向上小区域的数量
num_y = math.ceil(canal_width / max_drop_distance) # y方向上小区域的数量
# 计算每个小区域的中心点坐标
x_coords = np.linspace(max_drop_distance/2, canal_length-max_drop_distance/2, num_x) # x方向上中心点坐标
y_coords = np.linspace(max_drop_distance/2, canal_width-max_drop_distance/2, num_y) # y方向上中心点坐标
# 将每个小区域的中心点坐标组合成二维数组
grid = np.meshgrid(x_coords, y_coords)
# 计算每个小区域内手机可能的掉落位置
phone_drop_locations = []
for i in range(num_x):
    for j in range(num_y):
        phone_drop_locations.append([grid[0][i][j], grid[1][i][j]])
phone_drop_locations = np.array(phone_drop_locations)

# 计算最优搜索策略

~~~~~~~~~~~~

更多内容具体可以看看我的主页!
和 《小天数模》 团队,同名公众号 一起拿奖!里面包含本次竞赛全部思路与分析!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值