数学之美 - Python视角下的Peter de Jong吸引子
据说蝴蝶扇动翅膀这样一件小事,可能最终会引起对面半球的一场飓风。
— 电影《蝴蝶效应》
上面这行话来源于2004年的电影《蝴蝶效应》的开篇字幕。更早期,这段话则与气象学家Edward Lorenz有关。他发现简单的热对流现象居然能引起令人无法想象的气象变化,在对相关发现进行数学分析后,Lorenz于1963年提出了混沌理论 - Chaos Theory。混沌理论认为在混沌系统中,初始条件十分微小的变化,经过不断放大,对其未来状态会造成极其巨大的差别。
经过多年的发展,该理论已在气象、经济、化学、信息等诸领域得到广泛应用。但如果以混沌理论为关键词在Google上进行搜索,还会发现一些美轮美奂的艺术作品,这些艺术作品都与混沌理论中的吸引子有关。
本文节选自作者的《Python编程基础及应用》视频教程。
版权声明
本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。
本文不可以以纸质出版为目的进行改编、摘抄。
1. Peter de Jong吸引子
所谓吸引子 - Attractor,是动力系统里的一个状态,系统演化会趋向那个方向靠拢。Peter de Jong是一个奇异吸引子。奇异吸引子上的运动对初始值表现出极强的敏感依赖性,在初始值上的微不足道的差异,就会导致运动轨道的截然不同。奇异吸引子往往具有非整数维,如2.06维、1.2365维等。
Peter de Jong吸引子就是一个奇异吸引子,它可以由下述迭代方程描述:
xn+1=sin(ayn)−cos(bxn)yn+1=sin(cxn)−cos(dyn)x_{n+1} = sin(ay_{n})-cos(bx_{n})\\ y_{n+1} = sin(cx_{n})-cos(dy_{n}) xn+1=sin(ayn)−cos(bxn)yn+1=sin(cxn)−cos(dyn)
这个方程有4个参数,分别为a,b,c,d。随意指定x0和y0的值,比如(0,0),通过上述公式,可计算得x1和y1。然后以x1和y1为基础,可计算得x2,y2 … 这样一直迭代-iterate计算,我们就可以获得N个平面上的点(xi,yi),把这些点在坐标系中画出来,就得到Peter de Jong吸引子的图像。
#SimplePeterDeJong.py
from math import sin,cos
from matplotlib import pyplot as pltdef iteration():a,b,c,d = 0.970,-1.899,1.381,-1.506x,y = 0,0xdata,ydata = [],[]for i in range(1000000):xNew = sin(a*y) - cos(b*x)yNew = sin(c*x) - cos(d*y)x,y = xNew,yNewxdata.append(x)ydata.append(y)return xdata,ydataxdata,ydata = iteration()
plt.figure(figsize=(6,6))
plt.title("Peter de Jong Attractor")
plt.scatter(xdata,ydata,s=0.005)
plt.show()
程序只有寥寥数行。首先我们从math模块导入了正弦-sin和余弦-cos函数;还导入了matplotlib中的pyplot模块并取名为plt。matplotlib是著名的C/C++语言编写的绘图包,可以很简单地生成各种图表。
iteration()函数进行迭代计算,首先初始化x = 0, y = 0,然后迭代计算100万个点,并把相应数据存入xdata,ydata列表并返回。xdata,ydata列表中存储了100万个点,其中第i个点的x轴坐标数据为xdata[i],y轴坐标数据为ydata[i]。
plt.figure(figsize=(6,6))创建了一个长6英寸,宽6英寸的图-Figure,plt.title()函数设置了图的标题,plt.scatter()函数则在xy平面上绘制散点图,相应点的坐标数据包含在xdata及ydata列表中,s参数指定了点的绘制尺寸。plt.show()则把绘制好的图显示在屏幕上。程序运行结果如下:
在上图中,可以看到,x,y坐标的取值范围都是[-2, +2]。这是因为正弦函数和余弦函数的值域都是[-1, +1],上述x,y取值为一个sin()减去一个cos(),两者各取极值,可得[-2,+2]的值域。
这个图表示了Peter de Jong吸引子的点的分布。它表现出混沌特性,当a,b,c,d的参数值不同时,图像差异会很大。为了把图变得美观一点,我们引入颜色。
2. 彩色PDJ吸引子
#ColoredPeterDeJong.py
...
def iteration():e,f = 0.7,-1.1a,b,c,d = 0.970,-1.899,1.381,-1.506x,y,z = 0,0,0xdata,ydata,zdata = [],[],[]for i in range(1000000):xNew = sin(a*y) - cos(b*x)yNew = sin(c*x) - cos(d*y)zNew = sin(e * x) - cos(f * z)x,y,z = xNew,yNew,zNewxdata.append(x)ydata.append(y)zdata.append(z)return xdata,ydata,zdataxdata,ydata,zdata = iteration()
...
plt.scatter(xdata,ydata,s=0.005,c=zdata)
plt.show()
这段代码同前述代码有以下区别。首先,我们引用了新的参数e,f,并引入了z值。该z值以类似于x,y的方式被迭代计算,并通过zdata列表返回。
在plt.scatter()函数中,c=zdata表示每个散点的颜色从zdata列表中获取,即第i个散点的颜色数据为zdata[i]。至于matplotlib如何把zdata当中的浮点数据转换成实际的颜色,在这里作者没有深入探究。新程序的执行结果如下图。
3. 修改PDJ参数
作者尝试了几个不同的a,b,c,d参数,得到下述吸引子图像。
a,b,c,d = -0.709,1.638,0.452,1.740 |
a,b,c,d = 1.4,-2.3,2.4,-2.1 |
严格地说,上述吸引子图像远没有达到“艺术”效果。要想把上述吸引子图像画成“艺术”效果,需要图像渲染算法的知识,在这里没办法展开。其中一种比较有名的算法称之为分形火焰算法 - fractal flame algorithm。
本文节选自作者的《Python编程基础及应用》视频教程及同名教科书。想完整零基础学习Python程序设计,欢迎使用此免费视频教程。
数学之美 - Python视角下的Peter de Jong吸引子相关推荐
- 超纯超美的曲线(Peter De Jong Attractor)
from: http://blog.csdn.net/jia20003/article/details/7198612 无意之中在网上看到一篇基于HTML5 Demo的Peter De Jong 吸引 ...
- Processing 分形之二—— Peter de Jong Attractor
人真正变强大,不是因为守护着自尊心,而是抛开自尊心的时候. --<请回答1988> Strange Attractor是混沌运动的主要特征之一,由法国物理学家小D和小F在1970年左右引进 ...
- MATLAB | 一起来感受数学之美叭
前两天去观摩了MATHWORKS官方举办的Mathematics is beautiful数学之美投票比赛,见到了很多非常惊艳的作品,在这里分享给大家让大家一同感受大神们的创造力,接下来由我来做全程解 ...
- python绘制如下图形、小三角形边长20_在编程中发现数学之美——使用Python小龟绘制多边形...
在使用数学知识画出很酷的各种图形之前,你需要先学习Python编程语言的基础知识.本文将会带你熟悉以下编程概念:循环.变量.函数.使用小龟模块绘制图像.本文假设你已经安装了Python,如果没有,欢迎 ...
- 【Python爬虫】2022年数学建模美赛B题数据爬取
2022年数学建模美赛B题数据爬取 背景 2022年的美赛刚刚落下帷幕,该题的一个主要难点在于数据的获取.很多人无法找到有效的数据,或者是无法获取数据. 比如找到了如下米德湖的水文数据,但是发现并没有 ...
- Python代码中的数学之美:从自由落体到爬虫悖论,十分钟开启数学思维
数学思维,就是用数学的方式去解决问题,就象吃饭用筷子.喝水用杯子一样,自然而然又理所当然.数学思维并非知识的积累,而是一种由特定思维习惯蕴育而成的能力--这种特定习惯的养成,往往是从解决看似简单的问题 ...
- 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型
数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...
- 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...
数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型 我们上次谈到用最大熵模型可以将各种信息综合在一起.我们留下一个问题没有回答,就是如何构造最大熵模型.我们已经所有的最大熵模型都 ...
- 【读书笔记】数学之美(下)
作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 本文为旧博客文章,数学公式显示不正常,请至 https://segmentf ...
最新文章
- windows游戏编程_少儿编程该怎么学?看看帕拉卡3D动画编程创始人李西峙分享七个核心...
- Java数据结构和算法:线性表
- asp(javascript)中request.form(a).count 在ie6中总是为0
- 再严重的感冒,马上就好!!
- 获取和设置c# 应用程序目录
- 2008年12月答疑贴
- 其他技术(Path)
- Oracle常用的几个父栓
- javascript-运算符
- 使用过滤器解决SQL注入和跨站点脚本编制
- 微信小程序自动回复机器人(模拟云信案例)
- 《最优化方法》——数学基础知识线性规划无约束优化算法初步
- 中毒了(QQ群搞笑聊天记录)
- php订阅号发送消息,php实现微信公众号主动推送消息
- elment文件上传 展示点击下载
- android 爱普生打印机,安卓打印 爱普生推出智能iPrint新应用
- Python人工智能完整学习路线,让你惊艳到爆
- JavaWeb - 仿小米商城网(2) 用户注册
- 【论文阅读】3D点云 -- PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
- 知乎音乐封神榜,你想听的都在这里。