当前位置: 首页 > 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…...

CSS中flex:1是什么属性

flex: 1 是 CSS 中的一个简写属性,用于设置 Flex 项目的灵活伸缩比例(flex-grow)、收缩比例(flex-shrink)以及基础大小(flex-basis)。具体来说,flex: 1 实际上是以下三个属性的简写&…...

网络硬件升级指南:提升性能的策略与实践

随着企业对网络依赖程度的增加,网络性能的提升已成为信息技术部门的首要任务。本文将探讨如何通过升级网络硬件来提高网络性能,包括选择正确的硬件、实施升级策略和考虑未来网络的可扩展性。 一、网络性能的重要性 在数字化时代,网络是企业…...

XSS-过滤特殊符号的正则绕过

目录 靶场练习地址:https://xss.pwnfunction.com/ 题目源码: 代码分析: 方法一:匿名函数 方法二:使用eval函数绕过限制 示例: 方法三:利用hash绕过 靶场练习地址:https://xs…...

CocosCreator3.8 IOS 构建插屏无法去除的解决方案

CocosCreator3.8 IOS 构建插屏无法去除的解决方案 在实际项目开发过程中,我们通常无需CocosCreator 自带的插屏,一般采用自定义加载页面。 然后在构建IOS 项目时,启用(禁用)插屏无法操作,如下图所示&#…...

Linux软件编程---数据库

目录 一、数据库 1.1.概念 1.2.类型 1.关系型数据库 2.非关系型数据库 1.3.SQL语言 1.4.如何在Linux安装sqlite数据库 1.确保虚拟机可以上网 2.配置apt-get工具集合 3.安装sqlite数据库 1.5.sqlite3 1.创建数据库 2.查看数据表 3.退出数据库 4.SQL语句 二、数…...

Spring 源码解读专栏:从零到一深度掌握 Spring 框架

前言 Spring 是 Java 世界中无可争议的王者框架,它以其灵活、轻量、强大而著称,成为企业级开发的首选工具。然而,很多开发者在使用 Spring 时,往往只停留在会用的层面,对于其内部实现和设计原理知之甚少。本专栏旨在通…...

帆软-秋招提前批-笔试

单选 1. 有四个同学,每个人得到的桃子数量不同,4个到7个之间。然后,4个人都吃掉了1个或2个桃,结果每个人剩下的桃数量还是各不相同。4个人吃过桃后,说了如下的话。其中,吃了2个桃的人撒谎了,吃了1个桃的人说了实话。 安娜:"我吃过红色的桃。" …...

嵌入式AI快速入门课程-K510篇 (第七篇 系统BSP开发)

第七篇 系统BSP开发 文章目录 第七篇 系统BSP开发1. 嵌入式Linux系统介绍嵌入式Linux系统组成产品形态嵌入式芯片启动流程Linux系统Linux系统框架嵌入式编译环境 2.嵌入式Linux开发准备手册文档开发工具配套硬件工程源码 3.嵌入式Linux开发组成概述编译工具链什么是工具链什么是…...

代码随想录算法训练营day52:图03:101. 孤岛的总面积;102. 沉没孤岛;103. 水流问题

101. 孤岛的总面积 卡码网:101. 孤岛的总面积(opens new window) 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单…...

开源大模型本地私有化部署

1、安装ollama ollma下载 https://ollama.com/download/windows linux 安装 curl -fsSL https://ollama.com/install.sh | sh 运行 ollama run gemma:2b ollama run gemma:7b 使用端口11434 2、下载 open-webui 代码 https://github.com/open-webui/open-webui.git 生成目录…...