2023 年 数维杯(A题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

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

在这里插入图片描述

问题重述

1、俯仰力矩和俯仰角变化:
推导俯仰力矩的表达式。
基于给定参数建立俯仰角变化模型。
计算 5 秒、10 秒和 20 秒时的姿态角。

2、滚转、俯仰和偏航力矩:
建立滚转、俯仰和偏航力矩的表达式。
建立姿态角变化模型。
计算 5 秒、10 秒和 20 秒时的姿态角。

3.机动特性:
设计低速和高速飞行的机动以实现平飞任务。

4、加速机动任务:
设计控制输入以实现前进加速和平飞。
考虑低速和高速飞行特性。

问题 1: 俯仰力矩和俯仰角变化

建模思路:
  1. 俯仰力矩表达式:

    • 俯仰力矩主要受到共轴刚性转子、螺旋桨推进器、水平尾翼的影响。

    • 共轴刚性转子产生的气动力矩可以表示为:
      M rotor = K rotor ⋅ ρ ⋅ A ⋅ V tip M_{\text{rotor}} = K_{\text{rotor}} \cdot \rho \cdot A \cdot V_{\text{tip}} Mrotor=KrotorρAVtip

    • 螺旋桨推进器产生的推力和旋转力矩:
      T propeller = C propeller T_{\text{propeller}} = C_{\text{propeller}} Tpropeller=Cpropeller

    • 水平尾翼产生的气动力矩:
      M horizontal tail = C horizontal tail ⋅ q ⋅ S horizontal ⋅ y ˉ horizontal M_{\text{horizontal tail}} = C_{\text{horizontal tail}} \cdot q \cdot S_{\text{horizontal}} \cdot \bar{y}_{\text{horizontal}} Mhorizontal tail=Chorizontal tailqShorizontalyˉhorizontal

  2. 俯仰角变化模型:

    • 利用力矩和力的平衡,可以得到俯仰角变化的微分方程:
      I y y ⋅ θ ˙ = M rotor + T propeller + M horizontal tail I_{yy} \cdot \dot{\theta} = M_{\text{rotor}} + T_{\text{propeller}} + M_{\text{horizontal tail}} Iyyθ˙=Mrotor+Tpropeller+Mhorizontal tail

    • 其中 I y y I_{yy} Iyy 是飞行器绕 y 轴的惯性矩。

  3. 数值求解:

    • 使用数值求解器(例如欧拉法)对微分方程进行离散求解,得到不同时刻的俯仰角。
  4. 初始条件:

    • 使用提供的初始条件(flight altitude, flight speed, control inputs)进行模拟。
import numpy as np
from scipy.integrate import odeint

# 定义常数和初始条件
K_rotor = 0.1
rho = 1.225
A = 10.0
V_tip = 5.0
C_propeller = 0.05
C_horizontal_tail = 0.02
q = 100.0
S_horizontal = 8.0
y_horizontal = 2.0
I_yy = 100.0
initial_conditions = [0.0]  # 初始俯仰角

# 定义微分方程
def pitch_dynamics(theta, t):
    M_rotor = K_rotor * rho * A * V_tip
    T_propeller = C_propeller
    M_horizontal_tail = C_horizontal_tail * q * S_horizontal * y_horizontal

    # 俯仰角变化微分方程
    dtheta_dt = (M_rotor + T_propeller + M_horizontal_tail) / I_yy

    return dtheta_dt

# 定义时间范围
time_points = np.linspace(0, 20, 1000)
#见完整版代码

问题 2: 滚转、俯仰和偏航力矩

建模思路:
  1. 滚转力矩表达式:

    • 滚转力矩主要由共轴刚性转子和水平尾翼贡献。

    • 共轴刚性转子产生的滚转力矩与问题一中的俯仰力矩相似,可以表示为:
      M roll = K rotor ⋅ ρ ⋅ A ⋅ V tip M_{\text{roll}} = K_{\text{rotor}} \cdot \rho \cdot A \cdot V_{\text{tip}} Mroll=KrotorρAVtip

    • 水平尾翼产生的滚转力矩:
      M horizontal tail = C horizontal tail ⋅ p ⋅ S horizontal ⋅ y ˉ horizontal M_{\text{horizontal tail}} = C_{\text{horizontal tail}} \cdot p \cdot S_{\text{horizontal}} \cdot \bar{y}_{\text{horizontal}} Mhorizontal tail=Chorizontal tailpShorizontalyˉhorizontal

      • C horizontal tail C_{\text{horizontal tail}} Chorizontal tail 是水平尾翼力矩系数, p p p 是滚转角速度, S horizontal S_{\text{horizontal}} Shorizontal 是水平尾翼面积, y ˉ horizontal \bar{y}_{\text{horizontal}} yˉhorizontal 是水平尾翼相对飞行器中心的距离。
  2. 俯仰力矩表达式:

    • 俯仰力矩在问题一中已经建模过,主要由共轴刚性转子和水平尾翼贡献。
  3. 偏航力矩表达式:

    • 偏航力矩主要由共轴刚性转子和垂直尾翼贡献。

    • 共轴刚性转子产生的偏航力矩与滚转和俯仰情形相似:
      M yaw = K rotor ⋅ ρ ⋅ A ⋅ V tip M_{\text{yaw}} = K_{\text{rotor}} \cdot \rho \cdot A \cdot V_{\text{tip}} Myaw=KrotorρAVtip

    • 垂直尾翼产生的偏航力矩:
      M vertical tail = C vertical tail ⋅ r ⋅ S vertical ⋅ y ˉ vertical M_{\text{vertical tail}} = C_{\text{vertical tail}} \cdot r \cdot S_{\text{vertical}} \cdot \bar{y}_{\text{vertical}} Mvertical tail=Cvertical tailrSverticalyˉvertical

      • C vertical tail C_{\text{vertical tail}} Cvertical tail 是垂直尾翼力矩系数,(r) 是偏航角速度, S vertical S_{\text{vertical}} Svertical 是垂直尾翼面积, y ˉ vertical \bar{y}_{\text{vertical}} yˉvertical 是垂直尾翼相对飞行器中心的距离。
  4. 滚转、俯仰和偏航角变化模型:

    • 利用力矩和力的平衡,可以得到滚转、俯仰和偏航角变化的微分方程:
      I roll ⋅ p ˙ = M roll + M horizontal tail I_{\text{roll}} \cdot \dot{p} = M_{\text{roll}} + M_{\text{horizontal tail}} Irollp˙=Mroll+Mhorizontal tail

      I pitch ⋅ q ˙ = M rotor + T propeller + M horizontal tail I_{\text{pitch}} \cdot \dot{q} = M_{\text{rotor}} + T_{\text{propeller}} + M_{\text{horizontal tail}} Ipitchq˙=Mrotor+Tpropeller+Mhorizontal tail

    I yaw ⋅ r ˙ = M yaw + M vertical tail I_{\text{yaw}} \cdot \dot{r} = M_{\text{yaw}} + M_{\text{vertical tail}} Iyawr˙=Myaw+Mvertical tail

    • 其中 I roll I_{\text{roll}} Iroll I pitch I_{\text{pitch}} Ipitch I yaw I_{\text{yaw}} Iyaw分别是飞行器绕 x、y 和 z 轴的惯性矩。
  5. 数值求解:

    • 使用数值求解器(例如欧拉法)对微分方程进行离散求解,得到不同时刻的滚转、俯仰和偏航角。
  6. 初始条件:

    • 使用提供的初始条件(flight altitude, flight speed, control inputs)进行模拟。
import numpy as np
from scipy.integrate import odeint

# 定义常数和初始条件
K_rotor = 0.1
rho = 1.225
A = 10.0
V_tip = 5.0
C_horizontal_tail = 0.02
p = 0.1
S_horizontal = 8.0
y_horizontal = 2.0
C_vertical_tail = 0.03
r = 0.05
S_vertical = 5.0
y_vertical = 1.5
I_roll = 150.0
I_pitch = 100.0
I_yaw = 80.0
initial_conditions = [0.0, 0.0, 0.0]  # 初始滚转、俯仰和偏航角

# 定义微分方程
def dynamics(variables, t):
    p, q, r = variables  # 滚转、俯仰和偏航角速度

    M_roll = K_rotor * rho * A * V_tip + C_horizontal_tail * p * S_horizontal * y_horizontal
    M_pitch = K_rotor * rho * A * V_tip + C_horizontal_tail * q * S_horizontal * y_horizontal
    M_yaw = K_rotor * rho * A * V_tip + C_vertical_tail * r * S_vertical * y_vertical

    # 滚转、俯仰和偏航角速度变化微分方程
    dp_dt = M_roll / I_roll
    dq_dt = M_pitch / I_pitch
    dr_dt = M_yaw / I_yaw

    return [dp_dt, dq_dt, dr_dt]

# 定义时间范围
time_points = np.linspace(0, 20, 1000)

问题 3: 低速和高速飞行的机动特性设计

建模思路:
  1. 低速飞行的机动特性设计:

    • 低速飞行时,主要由共轴刚性转子和螺旋桨推进器提供控制。
    • 设计共轴刚性转子的位置和螺旋桨推进器的工作能力,使飞行器实现水平飞行(零姿态角)。
  2. 高速飞行的机动特性设计:

    • 高速飞行时,主要通过螺旋桨推进器、升降舵和方向舵实现控制。
    • 设计螺旋桨推进器、升降舵和方向舵的控制输入,使飞行器在高速时能够保持水平飞行(零姿态角)。
  3. 设计方法:

    • 使用数值模拟和优化方法,调整共轴刚性转子、螺旋桨推进器、升降舵和方向舵的参数,以满足低速和高速飞行时的控制需求。
    • 可以采用基于物理模型的仿真工具,对不同飞行条件下的机动特性进行模拟。
  4. 优化目标:

    • 低速飞行:使共轴刚性转子和螺旋桨推进器的输出满足水平飞行的需求,即姿态角为零。
    • 高速飞行:通过调整螺旋桨推进器、升降舵和方向舵的输出,使飞行器在高速时能够保持水平飞行。
  5. 约束条件:

    • 考虑飞行器的物理限制,如最大速度、最大推力、最大姿态角等。
  6. 数学表达式:

    • 基于飞行器的物理模型,建立低速和高速飞行时的动力学方程,并在此基础上进行优化。
  7. 数值模拟:

    • 使用数值模拟工具,对设计的参数进行测试,验证低速和高速飞行时的机动特性。
具体步骤:
  1. 低速飞行设计:

    • 设计共轴刚性转子的位置和螺旋桨推进器的工作能力。
    • 利用数值模拟验证在低速条件下,飞行器的机动特性是否满足水平飞行的要求。
  2. 高速飞行设计:

    • 设计螺旋桨推进器、升降舵和方向舵的控制输入。
    • 利用数值模拟验证在高速条件下,飞行器的机动特性是否满足水平飞行的要求。
  3. 参数调整和优化:

    • 根据数值模拟的结果,调整和优化飞行器的参数,以达到设计的低速和高速飞行机动特性。
  4. 验证和测试:

    • 对优化后的飞行器进行验证和测试,确保其在实际飞行中能够实现设计的机动特性。
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import minimize

# 定义初始条件和参数
initial_conditions_low_speed = [0.0, 0.0, 0.0]  # 滚转、俯仰和偏航角
initial_conditions_high_speed = [0.0, 0.0, 0.0]  # 滚转、俯仰和偏航角
params_low_speed = [0.1, 1.0, 5.0]  # 共轴刚性转子和螺旋桨推进器参数
params_high_speed = [1.0, 2.0, 3.0, 1.0, 2.0, 3.0]  # 螺旋桨推进器、升降舵和方向舵参数

# 定义低速飞行动力学方程
def dynamics_low_speed(variables, t, params):
    # 省略动力学方程,根据具体问题补充
    return [0, 0, 0]

# 定义高速飞行动力学方程
def dynamics_high_speed(variables, t, params):
    # 省略动力学方程,根据具体问题补充
    return [0, 0, 0]

# 定义目标函数
def objective(params):
    # 低速飞行
    result_low_speed = odeint(dynamics_low_speed, initial_conditions_low_speed, time_points, args=(params[:3],))

    # 高速飞行
    result_high_speed = odeint(dynamics_high_speed, initial_conditions_high_speed, time_points, args=(params[3:],))

    # 计算目标函数,例如使得姿态角尽量接近零
    error_low_speed = np.sum(np.abs(result_low_speed[:, :3]))
    error_high_speed = np.sum(np.abs(result_high_speed[:, :3]))

    # 返回总体目标函数
    return error_low_speed + error_high_speed

# 定义约束条件
def constraint(params):
    # 可以根据需要添加约束条件
    return [0]

# 定义时间范围
time_points = np.linspace(0, 20, 1000)

# 优化参数
initial_guess = params_low_speed + params_high_speed
result = minimize(objective, initial_guess, constraints={'type': 'eq', 'fun': constraint})

问题四:直升机加速度机动任务

建模思路:
  1. 飞行动力学建模:

    • 基于直升机的飞行动力学,建立飞行器的速度、加速度和力矩之间的关系。
    • 考虑在低速和高速飞行模式下,直升机的动力学特性可能不同,因此需要建立不同飞行模式下的动力学模型。
  2. 控制输入设计:

    • 设计控制输入,如螺旋桨推进器、升降舵和方向舵的工作状态,以实现加速度机动任务。
  3. 目标函数和约束条件:

    • 确定加速度机动任务的目标,例如在给定时间内达到目标速度,并制定相应的目标函数。
    • 添加物理约束条件,如最大速度、最大推力、最大姿态角等。
  4. 数学表达式:

    • 建立描述直升机加速度机动任务的数学模型,考虑飞行器的动力学方程、控制输入和约束条件。
  5. 数值模拟和优化:

    • 使用数值模拟工具,对设计的参数进行测试,并通过优化算法调整参数以满足加速度机动任务的要求。
具体步骤:
  1. 低速和高速动力学模型建立:

    • 建立低速和高速飞行模式下直升机的飞行动力学模型,包括滚转、俯仰、偏航和加速度的方程。
  2. 控制输入设计:

    • 设计螺旋桨推进器、升降舵和方向舵的控制输入,以实现加速度机动任务。
    • 在低速和高速模式下,可能需要不同的控制策略和参数。
  3. 目标函数和约束条件制定:

    • 定义加速度机动任务的目标函数,可能包括最小时间达到目标速度等。
    • 添加物理约束条件,如最大速度、最大推力、最大姿态角等。
  4. 数学模型建立:

    • 将飞行动力学模型、控制输入和约束条件整合为数学模型,以描述直升机在加速度机动任务中的行为。
  5. 数值模拟和优化:

    • 使用数值模拟工具,对设计的参数进行测试,并通过优化算法调整参数以满足加速度机动任务的要求。
    • 可以采用常见的优化算法,如遗传算法、粒子群优化等。
  6. 验证和测试:

    • 对优化后的直升机进行验证和测试,确保其在实际飞行中能够实现设计的加速度机动任务。
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import minimize

# 定义初始条件和参数
initial_conditions = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]  # 滚转、俯仰、偏航角和速度、加速度
params_low_speed = [0.1, 1.0, 5.0]  # 低速模式下的控制输入参数
params_high_speed = [1.0, 2.0, 3.0, 1.0, 2.0, 3.0]  # 高速模式下的控制输入参数

# 定义低速和高速飞行动力学方程
def dynamics(variables, t, params):
    # 省略动力学方程,根据具体问题补充
    return [0, 0, 0, 0, 0, 0]

# 定义目标函数
def objective(params):
    # 低速飞行
    result_low_speed = odeint(dynamics, initial_conditions, time_points, args=(params[:3],))

    # 高速飞行
    result_high_speed = odeint(dynamics, initial_conditions, time_points, args=(params[3:],))

    # 计算目标函数,例如使得加速度尽量大
    error_low_speed = -result_low_speed[-1, 4]  # 取负号表示最大化加速度
    error_high_speed = -result_high_speed[-1, 4]

    # 返回总体目标函数
    return error_low_speed + error_high_speed

# 定义约束条件
def constraint(params):
    # 可以根据需要添加约束条件

更多完整的代码和思路看这里:
2023 年 数维杯(A题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/155748.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Rust】快速教程——冻结表达式

前言 以前谁是魔我杀谁,现在我杀谁谁就是魔。——《拔魔》 \;\\\;\\\; 目录 前言Rust基本知识结构体元组结构体局部作用域冻结字面量Vec元素的类型由第一个push进的类型确定type别名from和intoTryFrom和TryInto 表达式 Rust基本知识 结构体 #[derive(Debug)] str…

华为eNSP综合实验考试

VLAN信息表 设备名称 端口 链路类型 VLAN 参数 HZ-HZCampus-Agg01-S5731 GE0/0/1 Trunk PVID:1 Allow-pass:10 20 Eth-trunk1(GE0/0/2,0/0/3,0/0/23) Trunk PVID:1 Allow-pass:10 20 GE0/0/24 Access PVID&#xf…

vb.net 实时监控双门双向门禁控制板源代码

本示例使用设备介绍:实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) Imports System.Net.Sockets Imports System.Net Imports System.Text Imports System.ThreadingImports System.Net.NetworkInformation Imports System.Man…

Python函数进阶

函数进阶 一.函数多返回值二.函数多种传参方式三.匿名函数 一.函数多返回值 思考:如果一个函数有两个return,程序如下 只执行了一个return,原因是return可以退出当前函数,导致return下方代码不会执行 多个返回值 按照返回值的顺…

BananaPi BPI-M6(Raspberry Pi 5) Android 平板电脑镜像测试温度

我已经在本文中介绍了 全新的Banana Pi BPI-M6,并讨论了其与Raspberry Pi 5的硬件特性比较。 然后我将 Android 平板电脑固件上传到 eMMC,从而使 Banana Pi 实际可用。一开始有点坎坷,但文章中有更多内容。 在另一台电脑上,一切都…

Vatee万腾未来科技之航:Vatee创新引领的新纪元

在当今数字化时代,Vatee万腾科技正在开创一段引领未来的全新征程。以其卓越的创新能力和领导地位,Vatee万腾成为数字化领域的引领者。其未来科技之航展现了一种独特的数字化愿景,引领着科技创新进入新的纪元。 Vatee万腾在数字科技领域展现出…

如何使用功率信号源保证高精度测量

使用功率信号源是实现高精度测量的关键因素之一。在许多应用中,精确的功率信号源可以提供稳定、可靠的信号,帮助实现准确的测量结果。以下是使用功率信号源保证高精度测量的几个关键方面: 信号稳定性:在进行精确测量时&#xff0c…

热点检测/降级框架Akali的部分原理解析

发现个“轻量级本地化热点检测/降级框架 这个框架名为Akali,项目地址:https://gitee.com/bryan31/Akali主要有两个作用 1:热点检测及处理 2:降级检测及处理 从官网文档来看使用是比较简单的,一个注解就能搞定 怀着好奇的心情c…

光模块厂家如何提高千兆光模块和万兆光模块的可靠性

随着互联网的发展,光纤通信作为高速、稳定的通信方式越来越受到人们的关注。而千兆光模块和万兆光模块作为通信中必不可少的组成部分,其可靠性一直是厂家和用户所关注的重要问题。光模块的不可靠性会导致通信系统的故障和影响用户的体验,因此…

networkx使用draw画图报错:TypeError: ‘_AxesStack‘ object is not callable

一、问题描述 在使用networkx的draw绘图时nx.draw(g,posnx.spring_layout(g)),报错:TypeError: _AxesStack object is not callable 二、原因 可能是当前python环境下的networkx和matplotlib的版本不匹配。我报错时的networkx2.8,matplotl…

Element UI 偶发性图标乱码问题

1. 问题如图所示 2. 原因:sass版本低 sass: 1.26.8 sass-loader: 8.0.2 3. 解决方法 (1) 提高sass版本 (2) 在vue.config.js中添加配置 css: {loaderOptions: {sass: {sassOptions: {outputStyle: expanded}}}},4. 遇到的问题 升级后打包,报错 Syntax…

Freeswitch中mod_commonds

mod_commands Table of Contents (click to expand) 0. About1. Usage 1.1 CLI1.2 API/Event Interfaces1.3 Scripting Interfaces1.4 From the Dialplan2. Format of returned data3. Core Commands 3.1 acl  3.1.1 Syntax3.1.2 Examples3.2 alias 3.2.1 Syntax3.2.2…

VBA技术资料MF83:将Word文档批量另存为PDF文件

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

初始MySQL(六)(自增长,索引,事务,隔离级别)

目录 自增长 索引 索引的原理: mysql索引的类型 添加/删除索引/查看索引 添加索引 删除索引 查看索引(没有生成或者问问什么时候存在) 小结 MySQL事务 关于事务的一些概念 mysql数据库控制台事务的几个重要操作 MySQL事务细节讨论 MySQL事务隔离级别 介绍 数据库…

ElasticSearch 安装(单机版本)

文章目录 ElasticSearch 安装(单机版本)环境配置下载安装包调整系统参数安装启动并验证 ElasticSearch 安装(单机版本) 此文档演示 ElasticSearch 的单机版本在 CentOS 7 环境下的安装方式以及相关的配置。 环境配置 Linux 主机一…

Android 14 Beta 1

Android 14的第一个 Beta 版,围绕隐私、安全、性能、开发人员生产力和用户定制等核心主题构建,同时继续改进平板电脑、可折叠设备等大屏幕设备的体验。我们一直在完善 Android 14 的功能和稳定性方面取得稳步进展,现在是时候向开发者和早期采…

C++基础(3)——类与对象

1.构造函数: 1.1 构造函数的引入: 在关于数据结构这一部分的文章中,创建了一个新的数据结构后,通常需要编写一个初始化函数来对这个数据结构进行一次初始化。在C的类中,如果存在函数,同样也需要对函数进行…

传递函数的推导和理解

传递函数的推导和理解 假设有一个线性系统,在一般情况下,它的激励 x ( t ) x(t) x(t)与响应 y ( t ) y(t) y(t)所满足的的关系,可用下列微分方程来表示: a n y ( n ) a n − 1 y ( n − 1 ) a n − 2 y ( n − 2 ) ⋯ a 1 y…

【重点文章】服务升级惨痛教训

文章目录 事故解析:避免方法涉及知识 以前怎么接触过大表,所以alter操作我都是一次性执行好几条的,这几条一下子干过去了   结果就是一直在转圈执行,因为alter产生的是表级排它锁,所以有关这几个表的查询更新操作全部处于阻塞…

CTF-栈溢出-基本ROP-【ret2shellcode】

文章目录 ret2shellcodeHTBCyberSanta 2021 sleigh思路exp ret2shellcode 控制程序去执行我们自己填充的代码。 条件: 我们填充的代码的位置具有可执行权限 HTBCyberSanta 2021 sleigh 检查保护 Has RWX segments提示有可读可写可执行的段 main函数 banner函数…