混沌系统在图像加密中的应用(基于哈密顿能量函数的混沌系统构造1.3)
- 前言
- 一类三维非哈密顿系统的构造与动态特性分析
- 1.相关理论基础
- 2.类Nosé-Hoove系统构造的思路及实现
- 3.基于哈密顿能量理论的Nosé-Hoove系统的分析与仿真
- 3.1 平衡点分析
- 3.2 不同强度激励下系统的动态特性
- 3.2.1 无激励(k=0)
- 3.2.2 弱激励(k=0.01)
- 3.2.3 强激励(k=1)
- 总结
- python代码
前言
续接混沌系统在图像加密中的应用(基于哈密顿能量函数的混沌系统构造1.2)
一类三维非哈密顿系统的构造与动态特性分析
1.相关理论基础
2.类Nosé-Hoove系统构造的思路及实现
3.基于哈密顿能量理论的Nosé-Hoove系统的分析与仿真
3.1 平衡点分析
3.2 不同强度激励下系统的动态特性
3.2.1 无激励(k=0)
3.2.2 弱激励(k=0.01)
-----------------------------------------------------------------------(a)------------------------------------------------------
-----------------------------------------------------------------------(b)------------------------------------------------------
3.2.3 强激励(k=1)
系统(3.17)存在复杂动力学特性不仅仅受外力影响,而且还受系统参数的a,b影响。
总结
前面的分析是依据参数和初始值,得到了系统(3.17)存在的各类非线性现象。 下节着重研究系统的逆时间对称性。
python代码
import numpy as np
from scipy.integrate import odeint
import matplotlib.pylab as mpl
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['Times new roman'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
def dmove(Point, t, sets):
a, b, k = sets
x, y, z = Point
return np.array([a * y + b * z,
-a * x + y * z,
- b * x - y * y +k])
t = np.arange(0, 1000, 0.01) # 时间序列 总共有 100/0.01=10000 个点
T = np.linspace(0,100,len(t))
par_a = 1
par_b = 1
#par_k = 0.01
par_k = 1
par = [par_a, par_b, par_k]
P = odeint(dmove, (-2, 2, 0), t, args=(par,))
#P = odeint(dmove, (-0.2, 0.2, 0), t, args=(par,))
H = 1 / 2 * (P[:, 0]**2 + P[:, 1]**2 + P[:, 2]**2) # 哈密顿能量
dH_dt = par_k * P[:, 2]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(P[:, 0], P[:, 1], P[:, 2], lw=0.7, c="b")
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_zlabel('z', fontsize=12)
plt.tight_layout()
ax.set_title("")
ax.grid()
plt.figure()
plt.plot(T, P[:, 0], lw=1,label="x")
plt.plot(T, P[:, 1], lw=1,label="y")
plt.plot(T, P[:, 2], lw=1,label="z")
plt.legend()
plt.xlabel("t", fontsize=15)
plt.ylabel("x,y,z", fontsize=15)
plt.figure()
plt.plot(P[:, 0], P[:, 1], lw=1, c="b")
plt.xlabel("x", fontsize=15)
plt.ylabel("y", fontsize=15)
plt.figure()
plt.plot(P[:, 1], P[:, 2], lw=1, c="b")
plt.xlabel("y", fontsize=15)
plt.ylabel("z", fontsize=15)
plt.figure()
plt.plot(P[:, 0], P[:, 2], lw=1, c="b")
plt.xlabel("x", fontsize=15)
plt.ylabel("z", fontsize=15)
plt.show()