Python解微分方程(验证数学建模第五版火箭发射模型)
目录
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解微分方程(验证数学建模第五版火箭发射模型)相关推荐
- python 广义线性模型_数学建模/机器学习:广义加性模型(GAM)及其Python实现
笔者做过国赛也做过美赛,其中一类典型问题就是分析相关性,从而进行预测或者其他操作.这类问题通常情况下属于比较常规的问题,一般通过matlab或SPSS分析相关性,得到一个较好的数值即可. 然而有的时候 ...
- 数学建模——智能优化之粒子群模型详解Python代码
数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...
- 数学建模——一维、二维插值模型详解Python代码
数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...
- 数学建模清风第一次直播:传染病模型和微分方程拟合
学习网址:课件下载 数学建模清风第一次直播:传染病模型和微分方程拟合 数学建模清风第二次直播:模拟退火算法 数学建模清风第三次直播:excel在数学建模中的应用 博客笔记: 数学建模清风第一次直播:传 ...
- python求解析解,Python解微分方程
Python解微分方程 微分方程回顾 微分方程:python 解析解(SymPy) 微分方程:python数值解(SciPY) 微分方程组:python数值解 微分方程回顾 微分方程是用来描述某一类函 ...
- Matlab数学建模(七):连续模型
一.学习目标 (1)了解连续模型及解题步骤. (2)掌握用 dsolve 求解常见的微分方程解析解. (3)掌握用 ODE 家族的求解器求解数值解. (4)掌握使用专用的求解器求解. 二.实例演练 ( ...
- 【数学建模】1层次分析法模型部分
目录 1 数学建模的任务分配 2 简介 3 模型介绍 3.1 评价类问题 3.2 拿到建模问题 3.3 推荐搜索网站 3.4 确定好指标 3.5 确定指标权重 (1)采用分而治之的思想 (2)分而治之 ...
- u=q k 的交通流模型图 matlab,数学建模回归分析matlab版.ppt
<数学建模回归分析matlab版.ppt>由会员分享,可在线阅读,更多相关<数学建模回归分析matlab版.ppt(51页珍藏版)>请在装配图网上搜索. 1.2020/11/2 ...
- Algorithm:数学建模大赛之数学建模基础(经验/技巧)、流程(模型准备/模型假设/建模/求解/分析/优化/预测/评价)、论文写作(意义/摘要/关键词/问题重述和模型假设/建模/文献)之详细攻略
Algorithm:数学建模大赛之数学建模基础(经验/技巧).流程(模型准备/模型假设/建模/求解/分析/优化/预测/评价).论文写作(意义/摘要/关键词/问题重述和模型假设/建模/求解/结论/参考文 ...
- 数学建模当中常用的十大模型及各对应算法
数学建模当中常用的十大模型及各对应算法 图文展示:
最新文章
- SQLAlchemy实现插入数据(使用前端页面)
- 无法访问linux mysql_远程无法访问linux Mysql解决方案(转)
- string转成对象_JAVA学习分享[008]——面向对象深化(一)
- iOS应用数据持久化(一)
- 程序设计实习MOOC / 程序设计与算法(三)第一周测验
- iOS之常用的方法和技巧
- 如何领导团队做好技术债管理?
- 【BZOJ3681】Arietta,主席树优化网络流
- Qt常用类——QWidget
- 基于VGG19的图片分割网络
- vue项目打包部署到服务器子目录二级目录。
- sql 主键 外键
- 基于Java实现(APP)智能停车场管理系统【100010044】
- 描述计算机内的存储单位及换算关系,计算机存储单位换算
- 整理英语句子:将首字母大写,单词之间只能一个空格,最后加句号
- 如何使用JavaScript,纯前端实现字符、字数统计?
- <script>标签通过src属性调用js文件
- wifi p2p 调试
- 十分钟教你搭建一个漂亮的博客(二--主题的修改)
- IntelliJ IDEA)中弹出“IntelliJ IDEA License Activation”时怎么办