当前位置: 首页 > news >正文

python探索分形和混沌

简单产生复杂,混沌孕育秩序

0. 引言

a. 分形 fractal

【也叫碎形】
分形是一种具有自相似性和复杂结构的几何图形。在分形结构中,无论放大多少次,局部的结构特征都与整体结构相似。这种特性在自然界中广泛存在,比如树木枝干、山脉轮廓、云的形状等。

一些常见的分形:
🔸 规则分形:理想的数学模型,自相似性是明显的。包括但不限于:科赫曲线,科赫雪花,谢尔宾斯基三角形,谢尔品斯基地毯,康托尔集,皮亚诺曲线等。
🔹 无规分形:在物理学或自然界存在的分形,自相似是近似的或统计的。包括但不限于:雪花、海岸线、海绵、叶脉和毛细血管,茱利亚集,曼德尔布罗特集合等。

b. 混沌 chaos

混沌系统是指具有高度敏感性和不确定性的动态系统,其行为在长期预测中极为复杂。混沌系统通常表现出对初始条件的敏感性(蝴蝶效应),即微小的变化可以导致完全不同的结果,而且其行为往往看似随机,但实际上是由确定的规则产生的。

一些常见的混沌系统:
洛伦兹吸引子,罗西尔系统,Henon映射,杜福尔系统,物流映射,摆的混沌,干涉系统,螺旋混沌等。

c. 分形与混沌

分形强调几何图形和自相似性的特性,而混沌系统则侧重于动态行为和时间演化的性质。

分形具有缩放对称性,在标度变换下仍具有分形整体上相似的复杂性和不规则性(即无穷层次的自相似性),在某些情况下,分形可以是混沌系统的一种表现形式,出现在其分析中,但并非所有分形都是混沌系统。
有些分形(例如:洛伦兹吸引子,曼德尔布罗特集合)展示了混沌特性,而其他一些分形(例如:康托尔集)则缺乏动态的混沌行为。

d. 分维 D

零维的点、一维的线、二维的面、三维的立体、四维的时空,然而空间维数也可以是分数,不是整数。

分维(fractional dimension) D = l o g M l o g n D=\frac{logM}{logn} D=lognlogM

图形由M个相等的部分组成,其在先行尺度上是原图形的 1 n \frac{1}{n} n1 ,则 M × ( 1 n ) D = 1 M×{(\frac{1}{n})}^D=1 M×(n1)D=1 .

比如:

谢尔品斯基地毯
D = l g 3 l g 2 ≈ 1.585 \begin{align} D & = \frac{lg3}{lg2} ≈ 1.585\\ \end{align} D=lg2lg31.585

科赫曲线 D = l g 4 l g 3 ≈ 1.262 \begin{align} D & = \frac{lg4}{lg3} ≈ 1.262\\ \end{align} D=lg3lg41.262

二维扩散置限凝聚
D = 1.66 ∼ 1.71 \begin{align} D & = 1.66 ∼ 1.71\\ \end{align} D=1.661.71

1. 常见的分形

a. 蕨菜叶分形 fern

f ( x , y ) = [ a b c d ] [ x y ] + [ e f ] = [ a x + b y + e c x + d y + f ] f(x,y) = \left[ \begin{matrix} a & b\\ c & d\\ \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ \end{matrix} \right]+\left[ \begin{matrix} e\\ f\\ \end{matrix} \right]= \left[ \begin{matrix} ax+by+e\\ cx+dy+f\\ \end{matrix} \right] f(x,y)=[acbd][xy]+[ef]=[ax+by+ecx+dy+f]

ω \omega ωabcdefp产生的部分
ƒ10000.16000.01
ƒ20.850.04−0.040.8501.600.84连续变小的小叶子
ƒ30.20−0.260.230.2201.600.07最大的左侧叶
ƒ4−0.150.280.260.2400.440.07最大的右侧叶

a-f 系数;p 概率因子
所有变换的概率总和等于1,以保证在随机选择时,只有一项变换会被选中。

最知名的蕨菜叶分形是Barnsley Fern.

Barnsley fern

Barnsley fern

茎:
f 1 ( x , y ) = [ 0 0 0 0.16 ] [ x y ] + [ 0 0 ] = [ 0 0.16 y ] f_1(x,y) = \left[ \begin{matrix} 0 & 0\\ 0 & 0.16\\ \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ \end{matrix} \right]+\left[ \begin{matrix} 0\\ 0\\ \end{matrix} \right]= \left[ \begin{matrix} 0\\ 0.16y\\ \end{matrix} \right] f1(x,y)=[0000.16][xy]+[00]=[00.16y]

连续变小的小叶子:
f 2 ( x , y ) = [ 0.85 0.04 − 0.04 0.85 ] [ x y ] + [ 0 1.6 ] = [ 0.85 x + 0.04 y − 0.04 x + 0.85 y + 1.6 ] f_2(x,y) = \left[ \begin{matrix} 0.85 & 0.04\\ -0.04 & 0.85\\ \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ \end{matrix} \right]+\left[ \begin{matrix} 0\\ 1.6\\ \end{matrix} \right]= \left[ \begin{matrix} 0.85 x + 0.04y\\ -0.04x + 0.85y + 1.6\\ \end{matrix} \right] f2(x,y)=[0.850.040.040.85][xy]+[01.6]=[0.85x+0.04y0.04x+0.85y+1.6]

最大的左侧叶:
f 3 ( x , y ) = [ 0.2 − 0.26 0.23 0.22 ] [ x y ] + [ 0 1.6 ] = [ 0.2 x − 0.26 y 0.23 x + 0.22 y + 1.6 ] f_3(x,y) = \left[ \begin{matrix} 0.2 & -0.26\\ 0.23 & 0.22\\ \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ \end{matrix} \right]+\left[ \begin{matrix} 0\\ 1.6\\ \end{matrix} \right]= \left[ \begin{matrix} 0.2x - 0.26y\\ 0.23x + 0.22y + 1.6\\ \end{matrix} \right] f3(x,y)=[0.20.230.260.22][xy]+[01.6]=[0.2x0.26y0.23x+0.22y+1.6]

最大的右侧叶:
f 4 ( x , y ) = [ − 0.15 0.28 0.26 0.24 ] [ x y ] + [ 0 0.44 ] = [ − 0.15 x + 0.28 y 0.26 x + 0.24 y + 0.44 ] f_4(x,y) = \left[ \begin{matrix} -0.15 & 0.28\\ 0.26 & 0.24\\ \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ \end{matrix} \right]+\left[ \begin{matrix} 0\\ 0.44\\ \end{matrix} \right]= \left[ \begin{matrix} -0.15x + 0.28y\\ 0.26x + 0.24y + 0.44\\ \end{matrix} \right] f4(x,y)=[0.150.260.280.24][xy]+[00.44]=[0.15x+0.28y0.26x+0.24y+0.44]

通过这些参数,可以创建不同的蕨类品种,比如:变化为Thelypteridaceae fern.
Thelypteridaceae fern

Thelypteridaceae fern

ω \omega ωabcdefp产生的部分
ƒ10000.250-0.40.02
ƒ20.950.005−0.0050.93-0.0020.50.84连续变小的小叶子
ƒ30.035−0.20.160.04-0.090.020.07最大的左侧叶
ƒ4−0.040.20.160.040.0830.120.07最大的右侧叶

在这里插入图片描述


改变茎的朝向:

# 旋转点以使茎朝左
# 这里使用旋转矩阵将点旋转 180 度(在 x 轴上翻转)
points[:, 0] = -points[:, 0]

Barnsley fern

Barnsley fern

变色
在这里插入图片描述
在这里插入图片描述

b. 科赫曲线 KochCurve

在这里插入图片描述turtle绘制科赫曲线:

import turtle
import threadingpens = [] # 画笔列表
iterations_list = [1, 2, 3, 4, 5, 6] # 迭代次数列表
y_positions = [-250, -150, -50, 50, 150, 250] # 各个画笔的起始y坐标def koch_curve(t, size, iterations):# 科赫曲线if iterations == 0:t.forward(size)else:for angle in [0, 60, -120, 60]:t.left(angle)koch_curve(t, size / 3, iterations - 1)def draw_koch_curve(t, iterations):# 绘制科赫曲线t.pendown()koch_curve(t, 300, iterations)t.hideturtle()def setup_turtles():# 设置多个画笔for i, iterations in enumerate(iterations_list):t = turtle.Turtle()t.speed(0)  # 设置绘制速度为最快t.penup()t.goto(-150, y_positions[i])  # 设置起始位置,x 坐标固定,y 坐标变化pens.append((t, iterations))def draw_curve_in_thread(t, iterations):# 在新线程中绘制科赫曲线draw_koch_curve(t, iterations)# 创建一个 turtle 窗口
screen = turtle.Screen()
screen.title("Multiple Koch Curves")setup_turtles() # 设置画笔# 创建并启动线程
threads = []
def draw_all_curves():for t, iterations in pens:thread = threading.Thread(target=draw_curve_in_thread, args=(t, iterations))threads.append(thread)thread.start()# 等待所有线程完成
for thread in threads:thread.join()draw_all_curves()turtle.done() # 保持窗口开启,直到用户关闭

RuntimeError: main thread is not in main loop

threads = []for t, iterations in pens:thread = threading.Thread(target=draw_curve_in_thread, args=(t, iterations))threads.append(thread)thread.start()# 等待所有线程完成
for thread in threads:thread.join()turtle.done() # 保持窗口开启,直到用户关闭

解决办法

在这里插入图片描述

c. 科赫雪花 KochSnowflake

在这里插入图片描述可以由科赫曲线旋转得到。

import turtledef koch_curve(size, iterations):# 递归绘制科赫曲线if iterations == 0:turtle.fd(size)else:for angle in [0, 60, -120, 60]:turtle.left(angle)koch_curve(size / 3, iterations - 1)# 设置 turtle 窗口
turtle.setup(800, 600)  # 增加高度以适应更大的布局
turtle.speed(0)  # 设置为最快速度
turtle.pensize(1)# 绘制多个不同迭代次数的科赫曲线
iterations_list = [0, 1, 2, 3, 4]  # 定义要绘制的迭代次数
size = 100  # 每条曲线的长度,可以调整以适应布局
horizontal_spacing = 110  # 各个曲线间的垂直间距# 循环绘制
for i, iterations in enumerate(iterations_list):turtle.penup()turtle.goto( i*horizontal_spacing -300, 250 -size / 2)  # 适当的垂直间距turtle.setheading(0)  # 确保每条曲线都从水平位置开始绘制turtle.pendown()koch_curve(size, iterations)  # 绘制科赫曲线# 旋转并绘制相同曲线两次,形成完整的三角形for _ in range(2):turtle.right(120)koch_curve(size, iterations)turtle.hideturtle() # 隐藏 turtle
turtle.done() 

上色
在这里插入图片描述
在这里插入图片描述

相关文章:

python探索分形和混沌

简单产生复杂,混沌孕育秩序 0. 引言 a. 分形 fractal 【也叫碎形】 分形是一种具有自相似性和复杂结构的几何图形。在分形结构中,无论放大多少次,局部的结构特征都与整体结构相似。这种特性在自然界中广泛存在,比如树木枝干、山…...

LeetCode77 组合

前言 题目: 77. 组合 文档: 代码随想录——组合 编程语言: C 解题状态: 没尝试出来 思路 经典的组合问题,可以考虑使用回溯法。使用回溯法时可以根据回溯法的模板来考虑如何解决。 代码 回溯法 class Solution { p…...

C#:Bitmap类使用方法—第1讲

首先看一下Bitmap定义:封装 GDI 位图,此位图由图形图像及其属性的像素数据组成。 Bitmap 是用于处理由像素数据定义的图像的对象。 下面介绍一下使用的例子: Bitmap image1; private void Button1_Click(System.Object sender, System.Eve…...

PaddleNLP 3.0 支持大语言模型开发

huggingface不支持模型并行。张量并行,不满足大规模预训练的需求。 1、组网部分 2、数据流 3、训练器 4、异步高效的模型存储...

32次8.21(学习playbook-roles,脚本创建数据库和表,mycat读写分离)

1.roles目录介绍 files:⽤来存放由copy模块或script模块调⽤的⽂件。 tasks:⾄少有⼀个main.yml⽂件,定义各tasks。 handlers:有⼀个main.yml⽂件,定义各handlers。 templates:⽤来存放jinjia2模板。 vars&#xff1a…...

I2C通信协议(软件I2C和硬件I2C)

相比于之前学的异步全双工且需要两条通信线的串口通信,I2C则为同步半双工,仅需要一条通信线,全双工与半双工区别如下: 全双工(Full Duplex)半双工(Half Duplex)数据传输方式同时双向…...

Linux入门——08 进程间通讯——管道

1.进程间通讯 1.1什么是通讯 进程具有独立性(每个进程都有自己的PCB,独立地址空间,页表)但是要进行进程的通信,通信的成本一定不低,打破了独立性 进程间通信目的 数据传输:一个进程需要将它的数据发送给…...

深入探讨SD NAND的SD模式与SPI模式初始化

在嵌入式系统和存储解决方案中,SD NAND的广泛应用是显而易见的。CS创世推出的SD NAND支持SD模式和SPI模式,这两种模式在功能和实现上各有优劣。在本文中,我们将深入探讨这两种模式的初始化过程,并比较它们在不同应用场景下的优劣&…...

【jvm】栈和堆的区别

目录 1. 用途2. 线程共享性3. 内存分配和回收4. 生命周期5. 性能特点 1. 用途 1.堆:主要用于存储对象实例和数组。在Java中,所有通过new关键字创建的对象都会被分配到堆上。堆是一个大的内存池,用于存储所有的Java对象,包括实例变…...

智能的意义是降低世界的不确定性

世界充满着不确定性,而智能天生就追求一定的确定性,因为不确定性会危及智能的生存。智能本身是一种有序、相对确定的结构产生的,虽然也有一定的不确定性,而且这些不确定性有利于智能的进化,但是,相对而言&a…...

python实现指数平滑法进行时间序列预测

python实现指数平滑法进行时间序列预测 一、指数平滑法定义 1、指数平滑法是一种常用的时间序列预测算法,有一次、二次和三次平滑,通过加权系数来调整历史数据权重; 2、主要思想是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数…...

linux文件——用户缓冲区——概念深度探索、IO模拟实现

前言:本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题, 然后通过分析问题, 将缓冲区的概念与原理一步一步地讲解。同时, 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf, fprintf接口&#xff0c…...

Hive3:常用查询语句整理

一、数据准备 建库 CREATE DATABASE itheima; USE itheima;订单表元数据 1 1000000 100058 6 -1 509.52 0.00 28155.40 499.33 0 0 lisi shanghai 157 2019-06-22 17:28:15 2019-06-22 17:28:15 1 2 5000000 100061 72 -1 503.86 0.00 38548.00 503.86 1 0 zhangsan shangha…...

Ubuntu下载安装教程|Ubuntu最新长期支持(LTS)版本24.04 LTS下载安装

安装Ubuntu Ubuntu最新长期支持(LTS)版本24.04 LTS Ubuntu 24.04 LTS | 概览 Ubuntu长期支持(LTS)版本,LTS意为“长期支持”,一般为5年。LTS版本将提供免费安全和维护更新至 2029年4月。 Ubuntu 24.04 LTS(代号“Noble Numbat”,…...

通知:《自然语言及语音处理设计开发工程师》即将开课!

自然语言及语音处理设计开发工程师:未来职业的黄金选择 下面我们来看看证书颁发的背景:​ 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求,深入实…...

Vim youcompleteme Windows 安装保姆级教程

不说废话。 准备 检查 Vim 的 Python 配置 安装好 vim 和 python 后(python 必须 ≥ \ge ≥ 3.6),在 cmd 下运行 vim --version会弹出以下窗口。 如果发现 python/dyn 和 python3/dyn 都是 - (我不知道只有前者是 能不能运行…...

港迪技术IPO提交注册,拟募资6.56亿元

武汉港迪技术股份有限公司(下称“港迪技术”)拟在创业板IPO上市,并于近期在深交所提交招股书(注册稿),进入提交注册阶段。 港迪技术IPO招股书(注册稿)显示,公司是一家专…...

retinaface在ubuntu20.04(wsl2)下使用tensorrt(c++)部署

1. 参考博客: 1. Retinaface Tensorrt Python/C部署:https://blog.csdn.net/weixin_45747759/article/details/124534079 2. B站视频教程:https://www.bilibili.com/video/BV1Nv4y1K727/ 3. Retinaface_…...

vue打包设置 自定义的NODE_ENV

默认NODE_ENV 自定义process.env.NODE_ENV的值_process.node.env的值-CSDN博客 ‌NODE_ENV开发环境下:NODE_ENVdevelopment(默认) 生产环境下:NODE_ENVproduction(默认) NODE_ENV 除了默认的 development 和 production 以外,确实可以自定义…...

python爬虫521

爬虫521 记录 记录 最近想学爬虫,尝试爬取自己账号下的文章标题做个词云 csdn有反爬机制 原理我就不说啦 大家都写了 看到大家结果是加cookie 但是我加了还是521报错 尝试再加了referer 就成功了(╹▽╹) import matplotlib import requests from wordcloud impor…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...