数学建模笔记-斜抛运动建模

作者:Peiy_Liu
日期:2020-02-04


1. 数学模型

质量为m的质点作斜抛运动,假定质点出射后,只受到恒力mgm\bf{g}mg和空气阻力f\bf{f}f作用,其中f的大小与速度大小的平方成正比,方向与速度相反,即f=−kv2(1.1)f=-kv^2 \tag{1.1}f=−kv2(1.1)则质点始终在初速度确定的竖直平面内运动,在质点运动平面内以高度为0处一点为原点,水平方向为xxx轴,竖直方向为yyy轴建立坐标系。令r\bf{r}r =[xy]T= \left[\begin{matrix}x&y\end{matrix}\right]^T=[x​y​]T为质点的位矢,由牛顿第二定律列出质点动力学方程f+mg=mr¨(1.2){\bf{f}}+m{\bf{g}}=m\ddot{\bf r} \tag{1.2}f+mg=mr¨(1.2)由于空气阻力方向与速度方向相反,f\bf{f}f可写为f=−kv2e=−k[x˙x˙2+y˙2y˙x˙2+y˙2](1.3){\bf{f}}=-kv^2{\bf{e}}=-k\left[\begin{matrix}\dot{x}\sqrt{\dot{x}^2+\dot{y}^2}\\\dot{y}\sqrt{\dot{x}^2+\dot{y}^2}\end{matrix}\right] \tag{1.3}f=−kv2e=−k[x˙x˙2+y˙​2​y˙​x˙2+y˙​2​​](1.3)式中e=[1/1+y′2y′/1+y′2]T{\bf{e}}=\left[\begin{matrix}1/\sqrt{1+y'^2}&y'/\sqrt{1+y'^2}\end{matrix}\right]^Te=[1/1+y′2​​y′/1+y′2​​]T为质点速度方向的单位矢量.由此,式(1.2)可写成一个二阶微分方程组{mx¨=−kx˙x˙2+y˙2my¨=−ky˙x˙2+y˙2−mg(1.4)\begin{cases}m\ddot{x}=-k\dot{x}\sqrt{\dot{x}^2+\dot{y}^2}\\m\ddot{y}=-k\dot{y}\sqrt{\dot{x}^2+\dot{y}^2}-mg\end{cases}\tag{1.4}{mx¨=−kx˙x˙2+y˙​2​my¨​=−ky˙​x˙2+y˙​2​−mg​(1.4)再令z1=x˙,z2=y˙z_1=\dot{x},z_2=\dot{y}z1​=x˙,z2​=y˙​方程组(1.4)化为形如Y′=f(t,Y)(1.5){\bf Y'}={\bf f}(t,{\bf Y})\tag{1.5}Y′=f(t,Y)(1.5)的标准形式{z1˙=−kz1z12+z22/mz2˙=−kz2z12+z22/m−g(1.6)\begin{cases}\dot{z_1}=-kz_1\sqrt{z_1^2+z_2^2}/m\\\dot{z_2}=-kz_2\sqrt{z_1^2+z_2^2}/m-g\end{cases}\tag{1.6}{z1​˙​=−kz1​z12​+z22​​/mz2​˙​=−kz2​z12​+z22​​/m−g​(1.6)
就可以用MATLAB中提供的函数求解了。

2. MATLAB建模

2.1 MATLAB解常微分方程

很多常微分方程难以求出解析解,需要运用数值解法,如方程组(1.6)。MATLAB提供了如ode45、ode23、ode113等函数可以解出形如式(1.5)的常微分方程(组)的数值解,通用用法为

[T,Y] = solver(fun,tspan,y0)

solver可用ode45、ode23、ode113中的任意一个替代,fun为等式右边的f\bf ff向量,它所代表的M文件须有如下形式

function dy = fun(t,y)dy = ...

不管是否在fun中用到,fun一定有两个参数t和y。tspan为求解区间向量,y0为初值向量。返回值中T是自变量的取值,Y的各列为数值解。对由一个高阶常微分方程化为的方程组。Y(:1)是对应t的初值解,Y(:n)为对应t处初值解的n-1阶导数。

2.2 编程求轨迹

先用上述方法解出z1,z2z_1,z_2z1​,z2​(即vx,vyv_x,v_yvx​,vy​),再对分速度分别进行数值积分则可得到轨迹上的点(x,y)(x,y)(x,y),最后可使用plot()函数绘出轨迹图。下面是代码

m = 2;                                    %质点质量kg
k = 0.50;                                 %空气阻力f = -k * v^2,国际单位
g = 9.8;                                  %重力加速度
theta = pi / 4;                           %出射仰角rad
v0 = 20;                                  %初速度大小
vx0 = v0 * cos(theta);
vy0 = v0 * sin(theta);
z0 = [vx0, vy0];                          %构造微分方程组
x0 = 0;
y0 = 0;
f = @(t,z) [-k * z(1) * sqrt(z(1)^2 + z(2)^2) / m; -k * z(2) * sqrt(z(1)^2 + z(2)^2) / m - g];
[T, Z] = ode45(f, [0, 1.5], z0);
vx = Z(:,1);
vy = Z(:,2);
x = x0;
y = y0;
for i = 1:length(T)-1                     %手动数值积分tempx =  x(i) + vx(i) * (T(i+1) - T(i));tempy =  y(i) + vy(i) * (T(i+1) - T(i));x = [x;tempx];y = [y;tempy];
end
plot(x, y)

运行效果如图

##参考文献
司守奎《数学建模算法与应用》

数学建模笔记-斜抛运动建模相关推荐

  1. matlab模拟斜抛运动60,大学物理教学改革论文,关于大学物理教学方法改革-Matlab的妙用相关参考文献资料-免费论文范文...

    导读:本文是一篇关于大学物理教学改革论文范文,可作为相关选题参考,和写作参考文献. (1.长江师范学院大学物理教研室 重庆 408100, 2.内蒙古工业大学 理学院物理系 内蒙古呼和浩特 01005 ...

  2. Python + matplotlib.animation 模拟斜抛运动动画(含完整代码)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Abstract Introduction Matplotlib.animation Physics model and C ...

  3. 三维场景中斜抛运动顶点的生成

    三维场景中斜抛运动顶点的生成 1 算法思想-斜抛运动 2 代码 3 参考文献 1 算法思想-斜抛运动 2 代码 void getparabola_vertex_2(glm::vec3 _Point, ...

  4. Unity 斜抛运动 路径点

    1.截图   2.代码介绍 使用Unity自带Rigidbody刚体插件. 代码比较简单:使用Unity的 Rigidbody.velocity 进行位移(不使用AddForce). private ...

  5. C语言编码小球斜抛运动,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我把源代码分享出来,欢迎有兴趣的朋友下载测试,修改优化. /*********************************************** ...

  6. 斜抛运动的最远射程问题

    问题概述: 在o点上方高度为h处以速度v抛出一物体,该物体运动一段时间后落到地面p处,问抛出方向与水平方向的夹角是多少时,op有最大值,最大值是多少? 当    时: op有最大值: 题目:迎风舞

  7. 斜抛运动的最大水平射程

    1.抛出点与落地点在同一水平面:在这种情况下,当抛出角为 45度时,水平射程最大,其值为: 2.抛出点与落地点不在同一水平面上:当抛出角等于 arctg(v0/vt)时,水平射程最大,其值为:v0*v ...

  8. HDOJ 5166 -----斜抛运动

    题意:一个人站在H高的地方斜向上抛小球,求出小球落地后的水平距离. 算法思想: 1.计算出小球的最大滞空时间 2.计算出小球的水平速度 3.s=Vx*t; 推导来自小岛: 代码如下: #include ...

  9. matlab 斜抛 空气阻力,运用MATLAB对运动学、动力学问题进行过程分析

    第 29 卷第 6 期 Vol. 29 NO. 6 重庆工商大学学报( 自然科学版) J Chongqing Technol Business Univ. ( Nat Sci Ed) 2012 年 6 ...

  10. 数学建模笔记——插值拟合模型(二)

    今天是8月21日,距离上次写文章好像将近一个月了--这段时间经历了建模校内选拔赛,考试周,以及与网络小说的斗智斗勇--好吧,其实也没干什么,除了考试就是荒废-- 我最近有在思考一个问题,就是我所关注的 ...

最新文章

  1. ESP8266-iot-2
  2. qc linux mysql 安装教程_mysql5.7在centos上安装的完整教程以及相关的“坑”
  3. oracle随机备选数,Oracle查询优化器(一)
  4. vue中子组件向父组件传递数据(实现加减的实例)
  5. 剑指offer(12)数值的整数次方
  6. java清除缓存池_Java 缓存池(使用Map实现)
  7. Kali Linux 更新源 操作完整版教程
  8. java安装后怎么打开_java安装后怎么打开教程
  9. 构建自己的Conficker
  10. 【uni-app系列】uni-ui扩展组件和uViewUI的安装使用
  11. 你还为给自己的IT团队起名字,写口号烦恼吗?(较为流行的团队名称)
  12. 健身环1536级小结:相当适合码农的锻炼方式
  13. STRING:蛋白质相互作用(PPI网络)数据库简介
  14. MySQL 中你应该使用什么数据类型表示时间?
  15. android查ip地址,Android 查看IP地址
  16. GPS导航(一):分类和原理
  17. CSS实现个性化水球图
  18. UTC GMT 时区 时间戳
  19. c语言程序设计提纲,C语言程序设计”期末考试复习提纲
  20. 不知道这样可不可以得积分

热门文章

  1. php qrcode二维码应用
  2. 时间格式数据会多一层引号
  3. Excel运用: Excel的窗口冻结与拆分
  4. vue+ele 使用及demo
  5. icp光谱仪的工作原理_ICP的工作原理
  6. 徐思201771010132《面向对象程序设计(java)》第十六周学习总结
  7. LookAhead优化器方法
  8. uniapp push推送服务使用指南
  9. VSCode python extension loading 终极解决方案
  10. Linux的DNS深度学习(DNS服务器搭建)