-
史上最全的smd贴片型led封装解常微分方程组
资源介绍
3.6 解常微分方程组
scipy.integrate库提供了数值积分和常微分方程组求解算法odeint。下面让我们来看看如何用odeint
计算洛仑兹吸引子的轨迹。洛仑兹吸引子由下面的三个微分方程定义:
dx
dt
= σ(y − x)
dy
dt
= x(ρ− z)− y
dz
dt
= xy − βz
洛仑兹吸引子的详细介绍: http://bzhang.lamost.org/website/archives/lorenz_attactor
这三个方程定义了三维空间中各个坐标点上的速度矢量。从某个坐标开始沿着速度矢量进行积分,就
可以计算出无质量点在此空间中的运动轨迹。其中 σ, ρ, β 为三个常数,不同的参数可以计算出不同的
运动轨迹: x(t), y(t), z(t)。 当参数为某些值时,轨迹出现馄饨现象:即微小的初值差别也会显著地影
响运动轨迹。下面是洛仑兹吸引子的轨迹计算和绘制程序:
1 # -*- coding: utf-8 -*-
2 from scipy.integrate import odeint
3 import numpy as np
4
5 def lorenz(w, t, p, r, b):
6 # 给出位置矢量w,和三个参数p, r, b计算出
7 # dx/dt, dy/dt, dz/dt的值
8 x, y, z = w
9 # 直接与lorenz的计算公式对应
10 return np.array([p*(y-x), x*(r-z)-y, x*y-b*z])
11
12 t = np.arange(0, 30, 0.01) # 创建时间点
13 # 调用ode对lorenz进行求解, 用两个不同的初始值
14 track1 = odeint(lorenz, (0.0, 1.00, 0.0), t, args=(10.0, 28.0, 3.0))
15 track2 = odeint(lorenz, (0.0, 1.01, 0.0), t, args=(10.0, 28.0, 3.0))
16
17 # 绘图
18 from mpl_toolkits.mplot3d import Axes3D
19 import matplotlib.pyplot as plt
20
21 fig = plt.figure()
22 ax = Axes3D(fig)
23 ax.plot(track1[:,0], track1[:,1], track1[:,2])
24 ax.plot(track2[:,0], track2[:,1], track2[:,2])
25 plt.show()
3.6. 解常微分方程组 51
- 上一篇: 清除过滤器-软件定义边界和零信任
- 下一篇: 数值积分-smd贴片型led的封装史上最全