基于教材:《数学建模》第五版

仅是为了个人记录,也为了在有需要的情况下帮到大家,排版可能略显拉跨,但代码以及实验结果均正确!!!
如果帮到你了,请动手点个小赞吧,

一、不考虑空气阻力的简单模型

  1. 问题描述:设小型火箭初始质量为m0=1600kg,其中包括m1=1080kg燃料,火箭从地面垂直向上发射时,燃料以r=18kg/s的速率燃烧,对火箭产生F=2000N的恒定推力,燃料燃尽后火箭继续上升,知道达到最高点,因为火箭上升高度与地球半径相比很小,所以可认为整个过程中受到的地球引力不变,重力加速度取9.8kg/s2,建立火箭上升高度、速度和加速度随时间变化的数学模型,给出燃料燃尽时喉间的高度、速度和加速度以及火箭达到最高点的时间和高度;
  2. 问题分析:在求解的时候设计到三个结果:路程、速度以及加速度;我们通过牛顿定律知道当燃料燃尽时仍然会有速度,仍然会继续上升,因此我们可以将整个过程分为两个阶段:有燃料和没有燃料;
  3. 求解基本模型:(m0-rt)a=F-(m0-rt)g; (m0-m1)a=-(m0-m1)g;
    v= -g(t-t1)+v(t1); x(t)=-(g(t-t1)^2)/2+v(t1)(t-t1)+x(t1);
  4. 求解代码
%火箭发射升空--不考虑空气阻力
clc
clear
% 已知条件:初始质量m0=1600,燃料m1=1080,速度r=18
% 推力F=27000,重力加速度g=9.8
%第一阶段是有燃料,使用方程(3)-(5),t(max)=60s
g=9.8;
m0=1600;
m1=1080;
F=27000;
r=18;
t1=0:60;%关闭科学计数法:并只显示一位小数
format short g
a1=-g+F./(m0-r.*t1)
v1=-g.*t1+F/r.*log(m0./(m0-r.*t1))
%路程
temp1=(F.*(m0-r.*t1).*(log(m0-r.*t1)-1))./(r.*r);
temp2=((F.*log(m0)).*t1)./r;
temp3=(F.*m0.*(log(m0)-1))./(r.*r);
x1=-(g.*t1.*t1./2)+temp1+temp2-temp3
%第二阶段:没有燃料
tlast=60;
xlast=x1(61);
vlast=v1(61);
t2=60:(vlast/g)+60;
a2=-g;
a2=-g+zeros(1,113);
v2=-g.*(t2-tlast)+vlast
x2=-(g.*(t2-tlast).*(t2-tlast))./2+vlast.*(t2-tlast)+xlast
%路程
plot(t1,x1,'b',t2,x2,'b')
grid on
%速度
plot(t1,v1,'b',t2,v2,'b');
grid on
%加速度
line([60,60],[-9.8,a1(61)],'Color','b','LineWidth',1)
hold on
plot(t1,a1,'b',t2,a2,'b');
grid on

5.最终结果———路程x(t)

6.最终结果——速度v(t)

二、考虑空气阻力:

  1. 原因:运动的物体都会受到空气的阻力,运动速度越大阻力就越大,但二者之间没有确定的数量关系,按照相关知识和经验。低速时阻力与速度的平方成正比,比例系数记为k,于是在考虑空气阻力情况下方程(1)、(2)应该改写;

  2. 模型的建立:我们就取阻力系数k=0.3kg/m;改写后的两个主要方程:
    (m0-rt)a=F-kv^2-(m0-rt)g;
    (m0-m1)a=-kx^2-(m0-m1)g;

  3. 求解方法:这里存在微分方程的求解,我们就需要使用matlab中求解微分方程的函数ode45(),在求解的时候我们需要创建一个功能函数文件作为参数;同样,在求解的时候我们需要将整个过程划分为有阻力和没有阻力的阶段,然后依次进行求解。

  4. 主函数代码:

%有阻力的情况下
[t1,y1]=ode45(@Windfun1,[0 60],[0;0]);
%路程
plot(t1,y1(:,1))
grid on
%速度
plot(t1,y1(:,2));
grid on%加速度
g=9.8;
m0=1600;
m1=1080;
F=27000;
r=18;
k=0.3;
a1=(F-(k.*y1(:,2).*y1(:,2))-(m0-r.*t1).*g)./(m0-r.*t1);
plot(t1,a1)
grid on
% 第二个阶段
init1=y1(end,1);
init2=y1(end,2);
[t2,y2]=ode45(@Windfun2,[60 80],[init1;init2]);% 路程
plot(t1,y1(:,1),t2,y2(:,1))
grid on% 速度
plot(t1,y1(:,2),t2,y2(:,2));
grid on%加速度
a2=((-k.*y2(:,2).*y2(:,2))-(m0-m1).*g)./(m0-m1);
plot(t1,a1,'b',t2,a2,'b')
hold on
line([60 60],[a1(end) a2(1)]);
grid on

5.功能函数文件1(有燃料阶段)代码----Windfun1.m

function y=Windfun1(t,x)
g=9.8;
m0=1600;
F=27000;
r=18;
k=0.3;
y=[x(2);(F-(k.*x(2).*x(2))-(m0-r.*t).*g)./(m0-r.*t)];
end

6.功能函数文件2(没有燃料)代码----Windfun2

function y=Windfun2(t,x)
g=9.8;
m0=1600;
m1=1080;
k=0.3;
y=[x(2);(-k.*(x(2).*x(2))-(m0-m1).*g)./(m0-m1)];
end

7.求解结果——路程

8.求解结果——速度

9求解结果——加速度

三、提示火箭的方法1:增加燃料

  1. 问题描述:要提升火箭的上升高度方法之一:增加火箭的燃料,即燃料增加一倍;m1=2160kg,m0=2680kg,时间自然变为t=120s;
  2. 解决方案:我们只需要在有阻力的功能函数文件中将火箭质量以及燃料质量一起修改为对应值即可得到相应的结果;
  3. 主文件代码
[t1,y1]=ode45(@Developfun1,[0 120],[0;0]);%路程
plot(t1,y1(:,1))
grid on%速度
plot(t1,y1(:,2));
grid on%加速度
g=9.8;
m0=2680;
m1=2160;
F=27000;
r=18;
k=0.3;
a1=(F-(k.*y1(:,2).*y1(:,2))-(m0-r.*t1).*g)./(m0-r.*t1);
plot(t1,a1)
grid on%后半程
init1=y1(end,1);
init2=y1(end,2);[t2,y2]=ode45(@Developfun2,[120 140],[init1;init2]);% 路程
plot(t1,y1(:,1),t2,y2(:,1))
grid on% 速度
plot(t1,y1(:,2),t2,y2(:,2));
grid on%加速度
a2=((-k.*y2(:,2).*y2(:,2))-(m0-m1).*g)./(m0-m1);
plot(t1,a1,'b',t2,a2,'b')
hold on
line([120 120],[a1(end) a2(1)]);
grid on

4.功能函数文件1—Developfun1.m

function y=Developfun1(t,x)
g=9.8;
m0=2680;
F=27000;
r=18;
k=0.3;
y=[x(2);(F-(k.*x(2).*x(2))-(m0-r.*t).*g)./(m0-r.*t)];
End

5.功能函数文件2—Developfun2.m

function y=Develop2fun1(t,x)
g=9.8;
m0=1600;
m1=1080;
F=54000;
r=18;
k=0.3;
y=[x(2);(F-(k.*x(2).*x(2))-(m0-r.*t).*g)./(m0-r.*t)];
End

6.求解结果——路程

7.求解过程——速度

8.求解结果——加速度

四、提升火箭方法2:增加推力
1.问题描述:将燃料的推力F改为F=54000;
2.主函数文件代码

%改装2:增加动力,其他因素不变
[t1,y1]=ode45(@Develop2fun1,[0 60],[0;0]);
%路程
plot(t1,y1(:,1))
grid on%速度
plot(t1,y1(:,2));
grid on%加速度
g=9.8;
m0=1600;
m1=1080;
F=54000;
r=18;
k=0.3;
a1=(F-(k.*y1(:,2).*y1(:,2))-(m0-r.*t1).*g)./(m0-r.*t1);
plot(t1,a1)
grid on% 阶段二
init1=y1(end,1);
init2=y1(end,2);
[t2,y2]=ode45(@Develop2fun2,[60 80],[init1;init2]);% 路程
plot(t1,y1(:,1),t2,y2(:,1))
grid on% 速度
plot(t1,y1(:,2),t2,y2(:,2));
grid on%加速度
a2=((-k.*y2(:,2).*y2(:,2))-(m0-m1).*g)./(m0-m1);
plot(t1,a1,'b',t2,a2,'b')
hold on
line([60 60],[a1(end) a2(1)]);
grid on

3.功能函数文件1——Develop2fun1

function y=Develop2fun1(t,x)
g=9.8;
m0=1600;
m1=1080;
F=54000;
r=18;
k=0.3;
y=[x(2);(F-(k.*x(2).*x(2))-(m0-r.*t).*g)./(m0-r.*t)];
end

4.功能函数文件2——Develop2fun2

function y=Develop2fun2(t,x)
g=9.8;
m0=1600;
m1=1080;
k=0.3;
y=[x(2);(-k.*(x(2).*x(2))-(m0-m1).*g)./(m0-m1)];
end

5.求解结果——路程

6.求解结果——速度


7.求解过程——加速度

数学建模:火箭发生升空模型——基于matlab语言相关推荐

  1. dna序列分类数学建模matlab,数学建模DNA序列分类模型(终稿).doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp高等教育&nbsp>&nbsp生物学 数学建模DNA序列分类模型(终稿).doc32页 本文 ...

  2. Python小白的数学建模课-09.微分方程模型

    小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型的建模与求解,通过常微分方程.常微分方程组.高阶常微分方程 3个案例手 ...

  3. 【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响

    目录 一. SEIR传染病模型 二. SEIR模型的延伸--SEIDR模型 三. 模型延伸--影响因素1:疫苗接种 四. 模型延伸--影响因素2:政府管控 五. 模型延伸--影响因素3:病毒变异 写在 ...

  4. 数学建模学习记录——数学规划模型

    数学建模学习记录--数学规划模型 一.线性规划问题 MatLab中线性规划的标准型 MatLab中求解线性规划的命令 二.整数线性规划问题 三.非线性规划问题 MatLab中非线性规划的标准型 Mat ...

  5. 数学建模中matlab程序,数学建模中常用的30个MATLAB程序和函数

    <数学建模中常用的30个MATLAB程序和函数>由会员分享,可在线阅读,更多相关<数学建模中常用的30个MATLAB程序和函数(15页珍藏版)>请在人人文库网上搜索. 1.内部 ...

  6. matlab传播损耗,基于MATLAB语言的电波传播路径损耗的仿真

    基于MATLAB 语言的电波传播路径损耗的仿真 龙云亮,黄 明,王兴玮,王 泳 (中山大学无线电电子学系,广东广州510275) 摘 要:根据几何绕射理论的建模思想,利用MATLAB 语言,对自由空间 ...

  7. 游程理论提取灾害事件特征---基于MATLAB语言的编程实现

    变强从来不是因为社会的阳光面,而是为了当社会的阴暗面向我或我们在意的人伸手时,我们能够干净利索地绞杀它们. 游程理论识别灾害事件---基于MATLAB语言的编程实现 前言 1. 版本 2. 摘要 3. ...

  8. 电力系统matlab实验报告,基于matlab语言计算电力系统暂态稳定仿真程序实验报告.docx...

    基于matlab语言计算电力系统暂态稳定仿真程序实验报告 BeijingJiaotongUniversity 电力系统分析 暂态稳定分析实验 学院:电气工程学院 班级:xxxxxxxx 学号:xxxx ...

  9. 主振型 matlab 振动,基于MATLAB语言的多自由度振动系统的固有频率及主振型计算分析...

    基于 MATLAB 语言的多自由度振动系统的固有频率及主振型计算分析 文 涛 ,胡青春 (华南理工大学 机械工程学院 ,广东 广州 510640) 摘要 :多自由度振动系统固有频率及主振型计算分析是研 ...

最新文章

  1. 无线红外探测器03-环境搭建及程序详解
  2. Linux课程第六天学习笔记
  3. 什么是加密?—Vecloud微云
  4. Mathematica初学者第二讲
  5. vsftp mysql_vsftp mysql安装配置
  6. 大数据数据库技术简介与分类分析
  7. liferay-ui:search-container 用法
  8. 启动JavaFx程序界面乱码如何解决?
  9. 谷歌同意向法国支付近10亿美元罚款 以了结4年前的财务欺诈调查
  10. C++学到什么程度才算是精通?
  11. 5分钟轻松学Python:4行代码写一个爬虫
  12. 【渝粤题库】广东开放大学mysql数据库及应用 形成性考核 - 副本 (5)
  13. 搭建自己的OwnCloud私有云
  14. libevent实现TCP 客户端
  15. html5游戏修改,Duang! Html5游戏调试神器全新出炉!- Cocos DevTools
  16. openlayers动态添加自定义div图层 具有筛选功能 和浮窗
  17. 《R语言数据挖掘》读书笔记:三、分类
  18. java 等待线程/线程池执行完毕
  19. 读取grib格式的小工具,在linux中的安装
  20. 基于LabVIEW和Access数据库的温湿度监测系统上位机程序设计

热门文章

  1. 【可视化】对比与位置的艺术 - how we position and what we compare
  2. C# 中where关键字详解
  3. Echarts 里的桑基图
  4. Lombok Plugin
  5. 小白服务器编程指北(2)——用Docker编配你的服务器环境
  6. [转载]命令行也强大之下载迅雷资源的方法
  7. python 发送匿名邮件或无发件人
  8. 获取json中数组的length
  9. Redis的数据结构及底层原理
  10. R-RCN 论文理解3