目录

1.Python解微分方程数值解

2.验证火箭发射模型


1.Python解微分方程数值解

Python解微分方程要用到几个库:numpy, matplotlib.pyplot, scipy.integrate,没有的话就

pip install 相应的库就行,本次用的python为3.6.8

我们先来看一下简单的微分方程

对于Python求解微分方程只需要跳相应的库即可

from typing import Listimport numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint# 一阶微分方程的例子
def diff_equation(y_list: List[float], x: float):y1, y2, y3 = y_listreturn np.array([y2 * y3, -y1 * y3, -0.51 * y1 * y2])  # 微分方程格式,左边一定是dy/dx,返回右边x = np.linspace(0, 12, 100)  # 初始点是0,终点是12,其中有100个点
result = odeint(diff_equation, [0, 1, 1], x)  # 中间那个是y初值
plt.plot(x, result[:, 0], label='y1')  # result整个矩阵的第一列
plt.plot(x, result[:, 1], label='y2')
plt.plot(x, result[:, 2], label='y3')plt.legend()
plt.grid()  # 网格
plt.show()  # 这是y=f(x)的图像

结果展示

2.验证火箭发射模型

掌握了解方程之后我们就可以来验证火箭发射模型了

高阶微分方程,我们可以化为微分方程组来解,在这里书上义给出微分方程组,但只给出了0~t1阶段即火箭燃料还有的阶段,t1~t2为燃料耗尽的时间阶段,其中r=18,t1~t2的微分方程组为 -g+(-k*x2*x2/m),这里的m是火箭净重量。

为了验证以下表格

代码如下

from typing import Listimport matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeintdef get_acceleration(x: np.ndarray, result: np.ndarray, time: float, f: float, m: float, g: float,k: float) -> np.ndarray:"""获取火箭发射的加速度:param x: 距离数组:param result::param time:  时间:param f: 外力:param m: 质量:param g :重力加速度:param k : 阻力系数:return: 加速度数组"""temp = []# 重力加速度result = result[:, 1]for i in range(np.size(result)):if x[i] < time:temp.append(-g + (f - k * pow(result[i], 2)) / (m - x[i] * 18))else:temp.append(-g + (- k * pow(result[i], 2)) / 520)return np.array(temp)def diff_equation1(x_list: List[float], x: float):x1, x2 = x_listtemp = ((27000 - 0.3 * x2 * x2) / (1600 - x * 18)) if x <= 60 else -0.3 * x2 * x2 / 520return np.array([x2, -9.8 + temp])  # 微分方程格式,左边一定是dy/dx,返回右边def diff_equation2(x_list: List[float], x: float):x1, x2 = x_listtemp = ((27000 * 2 - 0.3 * x2 * x2) / (1600 - x * 18)) if x <= 60 else -0.3 * x2 * x2 / 520return np.array([x2, -9.8 + temp])  # 微分方程格式,左边一定是dy/dx,返回右边def diff_equation3(x_list: List[float], x: float):x1, x2 = x_listtemp = ((27000 - 0.3 * x2 * x2) / (2680 - x * 18)) if x <= 120 else -0.3 * x2 * x2 / 520return np.array([x2, -9.8 + temp])  # 微分方程格式,左边一定是dy/dx,返回右边def diff_equation(x_list: List[float], x: float):x1, x2 = x_listtemp = ((27000 * 2 - 0.3 * x2 * x2) / (2680 - x * 18)) if x <= 120 else -0.3 * x2 * x2 / 520return np.array([x2, -9.8 + temp])  # 微分方程格式,左边一定是dy/dx,返回右边x = np.linspace(0, 140, 10000)  # 初始点是0
x1 = np.linspace(0, 80, 10000)
result = odeint(diff_equation, [0., 0.], x)  # 中间那个是y0初值,即x=0时y=1
result1 = odeint(diff_equation1, [0., 0.], x1)
result2 = odeint(diff_equation2, [0., 0.], x1)
result3 = odeint(diff_equation3, [0., 0.], x)plt.plot(x, get_acceleration(x, result, 120, 27000 * 2, 2680, 9.8, 0.3), label='a3(t)')
plt.plot(x1, get_acceleration(x1, result2, 60, 27000 * 2, 1600, 9.8, 0.3), label='a2(t)')
plt.plot(x, get_acceleration(x, result3, 120, 27000, 2680, 9.8, 0.3), label='a1(t)')
plt.plot(x1, get_acceleration(x1, result1, 60, 27000, 1600, 9.8, 0.3), label='a0(t)')plt.legend()
plt.grid()  # 网格
plt.show()  # 这是微分方程的图像

结果展示

x的关系图

v的关系图

a的关系图

闲着没事干写的,写的不是很好,有疑问可以发我邮箱liuzhi_wdq@foxmail.com

妈妈,他们抛弃了我 像歌唱一样抛弃了我

妈妈,我是多么爱你 当你沉默的时候我爱你

只是那些猛烈的情绪

在睡不着的时候折磨着我

我那早已死去的父亲

在没有星星的夜晚看着你

妈妈,我会在夏天开放吗

像你曾经的容颜那样

妈妈,这种失落会持久吗

这个世界会好吗

忘记一些隐秘的委屈

在回头观望的时候迷失了自己

我的正在老去的身体

从某一天开始就在渐渐死去

妈妈我爱你

妈妈,我居然爱上了她

像歌唱一样就爱上了她

妈妈,当你又回首一切

这个世界会好吗

妈妈,我是多么恨你

当我歌唱的时候我恨你

Python解微分方程(验证数学建模第五版火箭发射模型)相关推荐

  1. python 广义线性模型_数学建模/机器学习:广义加性模型(GAM)及其Python实现

    笔者做过国赛也做过美赛,其中一类典型问题就是分析相关性,从而进行预测或者其他操作.这类问题通常情况下属于比较常规的问题,一般通过matlab或SPSS分析相关性,得到一个较好的数值即可. 然而有的时候 ...

  2. 数学建模——智能优化之粒子群模型详解Python代码

    数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...

  3. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

  4. 数学建模清风第一次直播:传染病模型和微分方程拟合

    学习网址:课件下载 数学建模清风第一次直播:传染病模型和微分方程拟合 数学建模清风第二次直播:模拟退火算法 数学建模清风第三次直播:excel在数学建模中的应用 博客笔记: 数学建模清风第一次直播:传 ...

  5. python求解析解,Python解微分方程

    Python解微分方程 微分方程回顾 微分方程:python 解析解(SymPy) 微分方程:python数值解(SciPY) 微分方程组:python数值解 微分方程回顾 微分方程是用来描述某一类函 ...

  6. Matlab数学建模(七):连续模型

    一.学习目标 (1)了解连续模型及解题步骤. (2)掌握用 dsolve 求解常见的微分方程解析解. (3)掌握用 ODE 家族的求解器求解数值解. (4)掌握使用专用的求解器求解. 二.实例演练 ( ...

  7. 【数学建模】1层次分析法模型部分

    目录 1 数学建模的任务分配 2 简介 3 模型介绍 3.1 评价类问题 3.2 拿到建模问题 3.3 推荐搜索网站 3.4 确定好指标 3.5 确定指标权重 (1)采用分而治之的思想 (2)分而治之 ...

  8. u=q k 的交通流模型图 matlab,数学建模回归分析matlab版.ppt

    <数学建模回归分析matlab版.ppt>由会员分享,可在线阅读,更多相关<数学建模回归分析matlab版.ppt(51页珍藏版)>请在装配图网上搜索. 1.2020/11/2 ...

  9. Algorithm:数学建模大赛之数学建模基础(经验/技巧)、流程(模型准备/模型假设/建模/求解/分析/优化/预测/评价)、论文写作(意义/摘要/关键词/问题重述和模型假设/建模/文献)之详细攻略

    Algorithm:数学建模大赛之数学建模基础(经验/技巧).流程(模型准备/模型假设/建模/求解/分析/优化/预测/评价).论文写作(意义/摘要/关键词/问题重述和模型假设/建模/求解/结论/参考文 ...

  10. 数学建模当中常用的十大模型及各对应算法

    数学建模当中常用的十大模型及各对应算法 图文展示:

最新文章

  1. SQLAlchemy实现插入数据(使用前端页面)
  2. 无法访问linux mysql_远程无法访问linux Mysql解决方案(转)
  3. string转成对象_JAVA学习分享[008]——面向对象深化(一)
  4. iOS应用数据持久化(一)
  5. 程序设计实习MOOC / 程序设计与算法(三)第一周测验
  6. iOS之常用的方法和技巧
  7. 如何领导团队做好技术债管理?
  8. 【BZOJ3681】Arietta,主席树优化网络流
  9. Qt常用类——QWidget
  10. 基于VGG19的图片分割网络
  11. vue项目打包部署到服务器子目录二级目录。
  12. sql 主键 外键
  13. 基于Java实现(APP)智能停车场管理系统【100010044】
  14. 描述计算机内的存储单位及换算关系,计算机存储单位换算
  15. 整理英语句子:将首字母大写,单词之间只能一个空格,最后加句号
  16. 如何使用JavaScript,纯前端实现字符、字数统计?
  17. <script>标签通过src属性调用js文件
  18. wifi p2p 调试
  19. 十分钟教你搭建一个漂亮的博客(二--主题的修改)
  20. IntelliJ IDEA)中弹出“IntelliJ IDEA License Activation”时怎么办

热门文章

  1. java roll_java.util.Calendar roll()方法
  2. Office2016专业增强版与Visio2016专业版不能共存的解决办法
  3. 2021 CSDN查看自己关注的人
  4. python菜鸟教程 pdf-菜鸟教程 python pdf/Python菜鸟教程怎么样
  5. Hadoop运行原理总结
  6. IntelliJ idea 主题包下载以及安装
  7. 2060年未来人KFK的问答
  8. 微信 html5商城,微信公众号H5商城源码
  9. java接口自动化测试
  10. 本地邮件服务器 易邮 使用