混沌系统在图像加密中的应用(四维超混沌Lorenz系统)

混沌系统在图像加密中的应用(四维超混沌Lorenz系统)

前言

本节内容将学习四维连续混沌系统,根据前面学习的内容对其离散化,并绘制相图。

一、超混沌Lorenz系统

超混沌Lorenz系统是对经典Lorenz系统的扩展,它是由爱德华·诺伦·洛伦兹(Edward Norton Lorenz)发展而来的一种非线性动力学系统。爱德华·洛伦兹是一位美国气象学家,于1963年提出了经典Lorenz系统,用于描述大气运动中的热对流现象。经典Lorenz系统是一种简化的三维模型,由三个非线性常微分方程组成。然而,洛伦兹后来意识到,通过对经典Lorenz系统进行一些修改,可以得到更加复杂和混沌的动力学行为。于是,他引入了一些非线性项和额外的驱动力,从而得到了超混沌Lorenz系统。

超混沌Lorenz系统具有比经典系统更加复杂的行为,包括多个分枝和不稳定的周期轨道。这些分支指的是系统在某些条件下可以展示出多个不同的行为模式。这种系统在控制理论、混沌密码学和通信领域等具有重要的应用。

超混沌Lorenz系统对于理解混沌现象的本质和实际应用具有重要的意义。通过研究和分析该系统,我们可以深入了解非线性系统的行为特性,并探索混沌现象背后的动力学机制。

超混沌Lorenz系统的表达式为
在这里插入图片描述
其中,a=10, b=8/3, c=28, -1.52 ≤ r ≤ -0.06 时, 该系统处于超混沌态。当r = -1时,上式的4个Lyapunov指数依次为: λ1 =0.3381, λ2:= 0.1586, λ3=0, λ4=-15.1752。

二、超混沌Lorenz系统离散化

根据前面的内容,我们选取四阶龙格-库塔法(Fourth-Order Runge-Kutta method)对超混沌Lorenz系统进行离散化。读者可自行绘出其余相图和时序图
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

def lorenz(t, x, a, b, c, r):
    """超混沌 Lorenz 系统的微分方程"""
    dx = a * (x[1] - x[0]) + x[3]
    dy = x[0] * c - x[1] - x[0] * x[2]
    dz = x[0] * x[1] - b * x[2]
    dw = -x[1] * x[2] + r * x[3]
    return np.array([dx, dy, dz, dw])

def runge_kutta_lorenz(a, b, c, r, x0, dt, num_steps):
    """使用四阶龙格-库塔法离散化 Lorenz 系统"""
    t = np.zeros(num_steps + 1)
    x = np.zeros((num_steps + 1, 4))
    x[0] = x0

    for i in range(num_steps):
        t[i+1] = t[i] + dt

        k1 = lorenz(t[i], x[i], a, b, c, r)
        k2 = lorenz(t[i] + dt/2, x[i] + (dt/2) * k1, a, b, c, r)
        k3 = lorenz(t[i] + dt/2, x[i] + (dt/2) * k2, a, b, c, r)
        k4 = lorenz(t[i] + dt, x[i] + dt * k3, a, b, c, r)

        x[i+1] = x[i] + (dt/6) * (k1 + 2*k2 + 2*k3 + k4)

    return t, x

# 参数设置
a = 10
b = 8/3
c = 28
r = -1
x0 = np.array([0.1, 0, 0, 0])
dt = 0.01
num_steps = 10000

# 使用四阶龙格-库塔法离散化 Lorenz 系统
t, x = runge_kutta_lorenz(a, b, c, r, x0, dt, num_steps)

# 绘制轨迹
fig = plt.figure()
ax = fig.add_subplot(121, projection='3d')
ax.set_title('super Lorenz System - runge_kutta_lorenz')
ax.plot(x[:, 0], x[:, 1], x[:, 2], lw=1)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

ax = fig.add_subplot(122, projection='3d')
ax.plot(x[:, 0], x[:, 1], x[:, 3], lw=1)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('w')

plt.show()

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Owl City、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值