数字水印 | 混沌逻辑斯谛映射(Chaotic Logistic Map)基本原理及 Python 代码实现

本文主要是介绍数字水印 | 混沌逻辑斯谛映射(Chaotic Logistic Map)基本原理及 Python 代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

      • 1 基本原理
      • 2 代码实现
      • 3 分岔图代码实现



1 基本原理

参考:维基百科 - 逻辑斯谛映射

逻辑斯谛映射(Logistic Map)是一种二次多项式的映射递推关系式,是一个由简单非线性方程式产生混沌现象的经典范例。其数学表达为:
x n + 1 = μ x n ( 1 − x n ) x_{n+1}=\mu x_n(1-x_n) xn+1=μxn(1xn)
其中,参数 μ \mu μ 通常取 ( 0 , 4 ] (0, 4] (0,4] 区间内的值,因此 x n x_n xn [ 0 , 1 ] [0, 1] [0,1] 上保持有界。

个人理解:可以把 x n x_n xn 看作是变量 X X X 在第 n n n 时刻的值,把 x n + 1 x_{n+1} xn+1 看作是变量 X X X 在第 n + 1 n+1 n+1 时刻的值。根据上述公式可知, x n + 1 x_{n+1} xn+1 的值是根据 x n x_n xn 的值计算出来的,即当前时刻的值是由上一时刻的值计算而来的,因此被称为递推关系式。

针对 x n x_n xn [ 0 , 1 ] [0, 1] [0,1] 上保持有界,参考下图:

在这里插入图片描述

个人理解:如果初值 x 0 x_0 x0 的值在 0 0 0 1 1 1 之间,那么根据二次函数的表达式, x n x_n xn 的值也必定在 0 0 0 1 1 1 之间。因此,我们说 x n x_n xn [ 0 , 1 ] [0, 1] [0,1] 上保持有界。




参数 μ \mu μ 的取值

  • 0 0 0 1 1 1 之间:不论起始数值 x 0 x_0 x0 为何, x n x_n xn 会越来越少,最后趋近于 0 0 0
  • 1 1 1 2 2 2 之间:不论起始数值 x 0 x_0 x0 为何, x n x_n xn 会快速地趋近 μ − 1 μ \frac{\mu-1}{\mu} μμ1
  • 2 2 2 3 3 3 之间:经过几次迭代, x n x_n xn 会越来越接近 μ − 1 μ \frac{\mu-1}{\mu} μμ1,而且收敛速度是线性的;
  • 3 3 3 x n x_n xn 仍然会越来越接近 μ − 1 μ \frac{\mu-1}{\mu} μμ1,但收敛速度较为缓慢,而且不是线性的;

个人理解:迭代次数就是指 x n + 1 = μ x n ( 1 − x n ) x_{n+1}=\mu x_n(1-x_n) xn+1=μxn(1xn) 计算了多少次,即 x n + 1 x_{n+1} xn+1 是初值 x 0 x_0 x0 迭代 n + 1 n+1 n+1 次的结果。

在这里插入图片描述

说明:由于散点图中的点粘在一起,看不出值的变化,因此我画的是折线图。但需要注意的是, x n + 1 x_{n+1} xn+1 的取值只会是一个个的点,而不包含图中的直线。

  • 3 3 3 1 + 6 ≈ 3.45 1+\sqrt{6}\approx3.45 1+6 3.45 之间:不论起始数值 x 0 x_0 x0 为何, x n x_n xn 最终会在 2 2 2 个值之间持续震荡;
  • 1 + 6 ≈ 3.45 1+\sqrt{6}\approx3.45 1+6 3.45 ≈ 3.54 \approx3.54 3.54 之间: x n x_n xn 最终会在 8 , 16 , 32 , . . . 8,16,32,... 8,16,32,... 个值之间持续震荡;
  • ≈ 3.5699 \approx3.5699 3.5699:震荡消失,系统进入混沌状态。不论起始数值 x 0 x_0 x0 为何,都不会再出现固定周期的震荡;

在这里插入图片描述

可以看出 μ \mu μ 越大, x n x_{n} xn 的震荡越没有周期性。



2 代码实现

参考:https://www.jianshu.com/p/580e36a34378

控制参数 μ \mu μ 的值不变,迭代 100 100 100 次,观察这 100 100 100 次中 x n x_{n} xn 值的变化:

import matplotlib.pyplot as plt
import numpy as npn = 1  # 控制迭代次数
x = 0.2  # 初值
mu = 2  # 参数μnum = []  # 存放x轴坐标
logistic_num = []  # 存放y轴坐标while n < 100:x = mu * x * (1.0 - x)  # 计算x_{n+1}的值num.append(n)  # 纳入该点的x轴坐标logistic_num.append(x)  # 纳入该点的y轴坐标n = n + 1# 画图
plt.plot(num, logistic_num, linestyle='-', linewidth=1.0)
plt.ylim(0, 1)
plt.yticks(np.arange(0, 1.2, 0.2))plt.savefig('{mu}.jpg'.format(mu=mu), dpi=400, bbox_inches='tight')
plt.show()

前文的两张图就是用这段代码绘制的。



3 分岔图代码实现

参考:https://blog.csdn.net/laplacebh/article/details/104598545

为参数 μ \mu μ 设置不同的值,迭代 1100 1100 1100 次,观察 1000 1000 1000 1100 1100 1100 次中 x n x_{n} xn 值的变化:

import matplotlib.pyplot as plt
import numpy as npdef logistic_map():mu = np.arange(2, 4, 0.0001)print(mu)  # [2.     2.0001 2.0002 ... 3.9997 3.9998 3.9999]x = 0.2  # 初值t1 = 1000  # 前1000次t2 = 100  # 后100次for i in range(t1 + t2):x = mu * x * (1 - x)if i >= t1:  # 只绘制1000~1100次的结果plt.plot(mu, x, ',k', alpha=0.25)plt.show()logistic_map()

由于我们想要观察的是 x n x_n xn 最终收敛或者未收敛的值,因此虽然做了 1100 1100 1100 次的迭代,但是我们只会绘制最后 100 100 100 x n ( x 1000 , . . . , x 1100 ) x_n(x_{1000},...,x_{1100}) xn(x1000,...,x1100) 的值。

效果如下图所示:

在这里插入图片描述
个人理解:

μ \mu μ 2 2 2 3 3 3 之间时,由于 x n x_n xn 最终会收敛到一个固定的值上,因此迭代 1000 1000 1000 1100 1100 1100 次之间的 x n x_n xn 值相同,汇聚在了上图中的一个点上。当 μ \mu μ 3 3 3 ≈ 3.45 \approx3.45 3.45 之间时,由于 x n x_n xn 最终会在 2 2 2 个值之间震荡,因此汇聚在了上图中的两个点上。

在这里插入图片描述

我们也可以反过来看,即根据结果推测原因。当 μ \mu μ ≈ 3.45 \approx3.45 3.45 ≈ 3.54 \approx3.54 3.54 之间时,由于 x n x_n xn 的值汇聚在了上图中的四个点上,因此可以看出 x n x_n xn 最终会在 4 4 4 个值之间震荡。



这篇关于数字水印 | 混沌逻辑斯谛映射(Chaotic Logistic Map)基本原理及 Python 代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010686

相关文章

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

Nginx之https证书配置实现

《Nginx之https证书配置实现》本文主要介绍了Nginx之https证书配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录背景介绍为什么不能部署在 IIS 或 NAT 设备上?具体实现证书获取nginx配置扩展结果验证

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req