文章列表

美赛学习笔记

Champ2024.11.26 00:00访问量0 次阅读
美赛学习笔记
解读

题目

中文赛题:搜寻潜水器 希腊的海上巡游迷你潜艇公司(MCMS)制造能够将人类运送到海洋最深处的潜水器。潜水器被移动到位置并从主船上解开束缚后部署。MCMS现在希望使用他们的潜水器带领游客探索爱奥尼亚海底的沉船冒险。然而,在他们能够做到这一点之前,他们需要通过开发安全程序以防潜水器与主船失去通信和可能的机械故障包括潜水器推进力丧失的情况,来赢得监管机构的批准。特别是,他们希望你开发一个模型来预测潜水器随时间的位置。不同于陆地上或海面上的典型搜索与救援,有缺陷的潜水器可能会发现自己位于海底或在水下的某个中性浮力点。它的位置可能进一步受到海流、海水中不同密度和/或海底地理的影响。你的任务是: <br>1.定位 - 开发一个或多个模型预测潜水器随时间的位置。这些预测有哪些不确定性? 潜水器在事故发生前可以定期向主船发送哪些信息以减少这些不确定性?潜水器需要哪些设备才能做到这一点? <br>2.准备 - 如果需要,你会推荐公司在主船上携带哪些额外的搜索设备?你可以考虑不同类型的设备,但也必须考虑这些设备的可用性、维护、准备和使用成本。如果需要,救援船需要带来什么额外的设备以协助? <br>3.搜索 - 开发一个模型,使用你的定位模型的信息来推荐初始部署点和搜索模式,以尽量减少定位丢失潜水器的时间。确定随时间和累积搜索结果找到潜水器的概率。 <br>4.推断 - 你的模型如何扩展以考虑其他旅游目的地,如加勒比海?当多个潜水器在同一大致区域移动时,你的模型将如何改变?

1.定位

分海洋垂直方向上(z)的和水平方向上(xy)的定位

1.垂直方向上:牛顿第二定律 F=Ma,M=m+m(water),m(water)可能会变化,因为潜水艇可以选择把艇内的水往外排或往内吸,同时考虑水流阻力F(f)和浮力F(b)的影响,在这篇文章中忽略了水流垂直方向流动对速度的影响

对于水流阻力F(f),与潜艇的受力面积S潜艇速度v水的密度p阻力系数c有关,阻力系数与流体状态,**雷诺系数(Reynolds number)**有关。

将流体海水假设成稳定流动的laminar flow state1,则阻力系数c可知,代入求解出z的坐标

2.水平方向上,套用垂直方向上的公式,但是没有了浮力的影响,多了水流速度造成的影响(速度->相对速度)

最后的方程是二阶微分方程,类似于(ma=kv,a是s关于t二阶导),将其转换成两个一阶常微分方程,利用四阶龙格库塔方法迭代求解近似解

runge-kutta(龙格库塔)

欧拉法:将曲线上的两点连线的斜率近似成是这两点函数值连线的斜率k,两点间任意点的函数值F(X+h)=Xn+k*h,h为步长(deltaX) 欧拉法只采用两个点,一个斜率,误差偏大,因此有了改进版欧拉法(两个斜率),梯形法和runge-kutta法(四个斜率) 欧拉法的改进版<br>,四阶龙格-库塔方法(Fourth-order Runge-Kutta Method,简称 RK4),是一种用于求解常微分方程(ODE)的数值积分方法。它是一种显式的迭代方法,适用于初值问题,可以有效地逼近微分方程的解,尤其在解的精度和计算效率之间取得较好的平衡。

import numpy as np
import matplotlib.pyplot as plt

# 参数设置
m = 10  # 质量(kg)
k = 2   # 阻力系数(N·s/m)
v0 = 0  # 初始速度(m/s)
s0 = 0  # 初始深度(m)
t0 = 0  # 初始时间(s)
t_end = 10  # 结束时间(s)
h = 0.1  # 时间步长

# 定义微分方程组
def ds_dt(t, s, v):
    return v

def dv_dt(t, s, v):
    return -(k / m) * v

# 四阶龙格-库塔方法
def runge_kutta_4(t0, s0, v0, t_end, h):
    t = np.arange(t0, t_end, h)
    s = np.zeros(len(t))
    v = np.zeros(len(t))
    s[0] = s0
    v[0] = v0
    
    for i in range(1, len(t)):
        k1s = h * ds_dt(t[i-1], s[i-1], v[i-1])
        k1v = h * dv_dt(t[i-1], s[i-1], v[i-1])
        
        k2s = h * ds_dt(t[i-1] + h/2, s[i-1] + k1s/2, v[i-1] + k1v/2)
        k2v = h * dv_dt(t[i-1] + h/2, s[i-1] + k1s/2, v[i-1] + k1v/2)
        
        k3s = h * ds_dt(t[i-1] + h/2, s[i-1] + k2s/2, v[i-1] + k2v/2)
        k3v = h * dv_dt(t[i-1] + h/2, s[i-1] + k2s/2, v[i-1] + k2v/2)
        
        k4s = h * ds_dt(t[i-1] + h, s[i-1] + k3s, v[i-1] + k3v)
        k4v = h * dv_dt(t[i-1] + h, s[i-1] + k3s, v[i-1] + k3v)
        
        s[i] = s[i-1] + (k1s + 2*k2s + 2*k3s + k4s) / 6
        v[i] = v[i-1] + (k1v + 2*k2v + 2*k3v + k4v) / 6
    
    return t, s, v

# 求解方程
t, s, v = runge_kutta_4(t0, s0, v0, t_end, h)

# 绘制结果
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(t, s, label='Depth (s)')
plt.xlabel('Time (s)')
plt.ylabel('Depth (m)')
plt.title('Depth vs Time')
plt.legend()

plt.subplot(1, 2, 2)
plt.plot(t, v, label='Velocity (v)', color='orange')
plt.xlabel('Time (s)')
plt.ylabel('Velocity (m/s)')
plt.title('Velocity vs Time')
plt.legend()

plt.tight_layout()
plt.show()

2.准备

3.搜索

4.推断

Footnotes

  1. 层流状态,指流体流动平稳有序,没有涡流或紊流。

历史留言 (0)
ICP备案号浙ICP备2026065730号-1公安备案号浙公网安备33019202003213号