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:数学建模大赛之数学建模基础(经验/技巧).流程(模型准备/模型假设/建模/求解/分析/优化/预测/评价).论文写作(意义/摘要/关键词/问题重述和模型假设/建模/求解/结论/参考文 ...
- 数学建模当中常用的十大模型及各对应算法
数学建模当中常用的十大模型及各对应算法 图文展示:
最新文章
- Redis 为什么用跳表而不用平衡树?
- python免安装版_web.py入门01——python安装
- 动态调用类 java_Java动态调用类中方法
- Hadoop生态Flume(二)安装配置
- 基于Senparc的二次封装
- 思科路由器常用配置命令大全
- JavaScript 高级程序设计 笔记
- 【BUAA_CO_LAB】p5p6碎碎念
- 5.1.2全景声音箱摆位_杜比全景声7.1.2和7.1.4音箱摆位有什么区别
- word07 去掉标题前的黑点
- OpenGL核心技术之Gamma校正
- python源代码制作星空_用python画星空源代码是什么?
- 怎样架设游戏服务器 怎样搭建一个属于自己的游戏服 5分钟学会游戏架设 3D手游搭建视频教程 自己做游戏GM
- 网页字体单位px、em、%、rem、pt、vm、vh介绍
- 嵌入式开发常用英语单词--你知多少?
- 图像的等距变换,相似变换,仿射变换,射影变换及其matlab实现
- eclipse本来运行的汉字运行出来变成特殊符号或者乱码的解决方法
- 全球及中国地铁行业融资现状与十四五盈利前景分析报告2022版
- AdaDepth: Unsupervised Content Congruent Adaptation for Depth Estimation
- 云空调,GitHub 的专属冷气——GitHub 热点速览 v.21.20