Python3 SciPy解常微分方程 用Matplotlib演示_matplotlib 微分方程-程序员宅基地

技术标签: python  Python  

Python科学计算 简单记录几篇笔记 用SciPy解常微分方程,在jupyter notebook用matplotlib演示,以下需要注意的几点:

  • integrate模块提供的odeint函数
  • Anaconda 3的jupyter notebook上
  • matplotlib 2D 绘制求解 牛顿冷却定律
  • matplotlib 3D 绘制求解 洛伦兹吸引子
jupyter notebook上绘制2D图表
%matplotlib inline #内联显示
# %config InlineBackend.figure_format="svg" #使用svg格式显示在网页上
import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, '.-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')

plt.subplot(2, 1, 2)
plt.plot(x2, y2, '-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

matplotlib 2D

牛顿冷却定律作为最基础的微分方程,就用它来演示第一个例子

T(t)=α(T(t)H)T(t)=H+(T0H)eαt

%matplotlib inline 
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import numpy as np

from IPython import display

# 冷却定律的微分方程
def cooling_law_equ(w, t, a, H):
    return -1 * a * (w - H)

# 冷却定律求解得到的温度temp关于时间t的函数
def cooling_law_func(t, a, H, T0):
    return H + (T0 - H) * np.e ** (-a * t)

t = np.arange(0, 10, 0.01)
initial_temp = (90) #初始温度
temp = odeint(cooling_law_equ, initial_temp, t, args=(0.5, 30)) #冷却系数和环境温度
temp1 = cooling_law_func(t, 0.5, 30, initial_temp) #推导的函数与scipy计算的结果对比
plt.subplot(2, 1, 1)
plt.plot(t, temp)
plt.ylabel("temperature")

plt.subplot(2, 1, 2)
plt.plot(t, temp1)
plt.xlabel("time")
plt.ylabel("temperature")

display.Latex("牛顿冷却定律 $T'(t)=-a(T(t)- H)$)(上)和 $T(t)=H+(T_0-H)e^{-at}$(下)")

温度随时间变化和对比

jupyter notebook上绘制3D图表
%matplotlib inline 
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend()

这里写图片描述

三维空间下洛伦兹吸引子的演示

dxdt=σ(yx)dydt=x(ρz)ydzdt=xyβz

%matplotlib inline 
from scipy.integrate import odeint
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

from IPython import display

fig = plt.figure()
ax = fig.gca(projection='3d')

def lorenz(w, t, p, r, b):
    # 位置矢量w, 三个参数p, r, b
    x, y ,z = w.tolist()
    # 分别计算dx/dt, dy/dt, dz/dt
    return p * (y-x), x*(r-z)-y, x*y-b*z

t = np.arange(0, 30, 0.02)
initial_val = (0.0, 1.00, 0.0)

track = odeint(lorenz, initial_val, t, args=(10.0, 28.0, 3.0))
X, Y, Z = track[:,0], track[:,1], track[:,2]
ax.plot(X, Y, Z, label='lorenz')
ax.legend()

display.Latex(r"$\frac{dx}{dt}=\sigma\cdot(y-x) \\ \frac{dy}{dt}=x\cdot(\rho-z)-y \\ \frac{dz}{dt}=xy-\beta z$")

这里写图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m454078356/article/details/77776092

智能推荐

python爬虫网页解析之parsel模块_import parsel-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏6次。python爬虫网页解析之parsel模块一.parsel模块安装官网链接https://pypi.org/project/parsel/1.0.2/pip install parsel==1.0.2二.模块作用改模块主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配推荐Python大牛在线分享技术 扣qun:855408893领域:web开发,爬虫,数据分..._import parsel

安卓国际化之strings.xml导入Excel表格及从excel恢复到Strings.xml中_安卓国际化 .string文件怎么打开-程序员宅基地

文章浏览阅读2k次,点赞5次,收藏12次。 APP国际化已经是一个比较常用的需求了,当然中文部分身为开发人员自己就能三两下搞定,如果是其他语种。。。emm,我们身为开发人员的是不会越俎代庖的(关键是懒其实是不会),还是交给专业人士好了,哈哈哈。如果你把整个strings.xml文件发给翻译人员,估计他们会一脸懵逼,叫他们直接把文件里面的中文翻译成英文,但是不能破坏xml里的尖括号的格式,让男翻译火冒三丈,让女翻译的男朋友偷偷发..._安卓国际化 .string文件怎么打开

Visual Studio 快捷键更改和设置_visual studio中提示内容的选中键怎么设置-程序员宅基地

文章浏览阅读9.1w次,点赞35次,收藏55次。Visual Studio 快捷键更改和设置Visual Studio是程序员最为经常利用的利器,一把利器没有快捷键的支持将会少了很多乐趣和便捷。Qt的快捷键也是非常灵活多变。一般来说Visual Studio中的有些快捷键将会让你大开眼界。举个简单例子,大家都知道Ctrl+C是复制功能,操作便是选中按键复制粘贴。但是你却忽略了:当光标在某一行代码上,你按ctrl+C键,将会复制一行,无需..._visual studio中提示内容的选中键怎么设置

基于kinect的人体动作识别系统_行为动作识别 kinect-程序员宅基地

文章浏览阅读5.6k次,点赞9次,收藏64次。基于kinect的人体动作识别系统(算法和代码都放出)首先声明一下,本系统所使用的开发环境版本是计算机系统Windows 10、Visual Studio 2013、Opencv3.0和Kinect SDK v2.0。这些都可以在百度上找到,download下来安装一下即可。关于kinect的环境配置以及骨骼数据获取等等等问题,参考我之..._行为动作识别 kinect

IntelliJ idea 导入javaweb项目后找不到jar包 javax.servlet.http.HttpServletRequest_add java ee 6 jars to module dependencies-程序员宅基地

文章浏览阅读3.6w次,点赞22次,收藏54次。导入java项目在之前的文章有详细的讲解:https://blog.csdn.net/qq_33442160/article/details/81394346 1. 提示找不到servlet-jar包: 2. 解决办法两种: ①:web项目缺少tomcat运行时环境,所以直接去导入tomcat的jar包即可: ②:在代码上使用智能提示:Alt+Enter:选择Add Jav..._add java ee 6 jars to module dependencies

benchmarksql测试mysql_使用benchmarkSQL测试数据库的TPCC-程序员宅基地

文章浏览阅读789次。压力测试是指在MySQL上线前,需要进行大量的压力测试,从而达到交付的标准。压力测试不仅可以测试MySQL服务的稳定性,还可以测试出MySQL和系统的瓶颈。TPCC测试:Transaction Processing Performance Council,要熟练使用TPC是一系列事务处理和数据库基准测试的规范。其中TPC-C是针对OLTP的基准测试模型,一方面可以衡量数据库的性能,另一方面可以衡量..._benchmarksql 无法生成超过内存大小的数据量

随便推点

【向上取整/向下取整】C语言向上或向下取整 函数[内容与错误,请看评论]_c语言向上取整-程序员宅基地

文章浏览阅读9.9w次,点赞25次,收藏70次。C语言有以下几种取整方法:1、直接赋值给整数变量。如:int i = 2.5; 或 i = (int) 2.5;这种方法采用的是舍去小数部分2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关。3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:floor(2.5) =_c语言向上取整

java技术--缓存机制之EHCache(基于hibernate的默认缓存实现方式)_org.hibernate.cache.ehcacheprovider-程序员宅基地

文章浏览阅读336次。hibernate缓存:一级缓存,二级缓存(https://mp.csdn.net/mdeditor)1.一级缓存:即session级别的缓存,亦即事务级别的缓存策略,这种缓存策略是Hibernate内置的,不可被拆卸的2.二级缓存:即SessionFactory的外置缓存,其同时也称为进程级缓存或集群范围内的缓存。hibernate的二级缓存是需要第三方支持的,hibernate默认的二级..._org.hibernate.cache.ehcacheprovider

理解DALL·E 2, Stable Diffusion和 Midjourney工作原理_dall2-程序员宅基地

文章浏览阅读7.2k次,点赞5次,收藏30次。作者 | Arham Islam编译 | 岳扬在过去的几年里,人工智能(AI)取得了极大的进展,而AI的新产品中有AI图像生成器。这是一种能够将输入的语句转换为图像的工具。文本转图像的AI工具有许多,但最突出的就属DALL-E 2、Stable Diffusion和Midjourney了。DALL-E 2由OpenAI开发,它通过一段文本描述生成图像。其使用超过100亿个参数训练的GPT-3转化器模型,能够解释自然语言输入并生成相应的图像。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传_dall2

RK3399平台开发系列讲解(系统篇)1.20、 Android 9.0 下中科微 GNSS HAL 的移植过程_rk gps 中科微-程序员宅基地

文章浏览阅读3.7k次,点赞17次,收藏19次。如何在 Linux 系统中结束结束进程或是中止程序 在 Linux 中有几种使用命令行或图形界面终止一个程序的方式。进程出错的时候,您可能会想要中止或是杀掉这个进程。在本文中,我们将探索在命令行和图形界面中终止进程或是应用程序,这里我们使用 gedit 作为样例程序。使用命令行或字符终端界面Ctrl + C在命令行中调用 gedit (如果您没有使用 gedi..._rk gps 中科微

【IOS】AFNetworking 2.0中XML请求处理专题_af response xml-程序员宅基地

文章浏览阅读3k次。因为AFNetworking2.0中,对于响应返回的xml格式没有做专门的解析处理,因此需要开发者自己来做处理。在笔者的项目中,使用了一个叫AFGDataXMLRequestOperation的第三方类库来统一处理。_af response xml

查找匹配子集与子集和(Subset Sum Problem)--动态规划实现-程序员宅基地

文章浏览阅读4.6k次。问题和实现引自资料:https://en.wikipedia.org/wiki/Subset_sum_problem介绍子集和问题(英语:Subset sum problem),又称子集合加总问题,是计算复杂度理论和密码学中一个很重要的问题。问题可以描述为:给一个整数集合,问是否存在某个非空子集,使得子集内中的数字和为0。例:给定集合{−7, −3, −2, 5, 8},答案是..._subset sum problem