先上图
好看的曼德勃罗集错了错了是这个
特别好看的曼德勃罗集
当然你需要下载Python(https://www.python.org)
和Visual Studio 2019(https://visualstudio.microsoft.com/zh-hans/downloads/)
记得在Visual Studio中加入Python的环境
让我们开始吧
一、什么是曼德勃罗集
这里就不对曼德勃罗集的历史、发现之类的内容进行说明了,想知道的朋友自行搜索。
我们先构造一个数列:
比如我们取c=1
于是
z₁=z₀²+c=1
z₂=z₁²+c=2
z₃=z₂²+c=5
z₄=z₃²+c=26
很明显,这个数列最后会变成无穷大(blows up to infinity英文可能跟好理解)
注:复平面上到原点距离大于2的点(即复数c)套入数列后,数列最后一定会变成无穷大
又比如我们取c=i(i²=-1)
于是
z₁=z₀²+c=i
z₂=z₁²+c=-1+i
z₃=z₂²+c=-i
z₄=z₃²+c=-1+i
很明显,这个数列最后不会变成无穷大,而是再-1+i与-i之间反复横跳
于是我们就能把复平面上的点(即复数c)分成两类套入数列后,数列最后会变成无穷大
套入数列后,数列最后不会变成无穷大
如果满足第二种,我们就把这个点涂成黑色
注:彩色图片中的颜色是根据数列变成无穷大的速度涂色的
二、用Python实现
大致思路是这样的:用for循环计算数列,看看最后的结果到原点的距离是否大于2
用if判断:如果大于2,在这个位置打上一个”空格”;如果小于2,在这个位置打上一个“字符”
用for循环检索x∈[-2,2],y∈[-2,2]的点,重复1、2步
首先,很容易写出计算数列的代码:
为了减少计算量,当z离原点的距离大于2时,停止这个循环
加入打字的内容,
我的思路是,将每一次判断大于2还是小于2的结果加入一个变量text中
最后,我们用两个for循环套在外面,让它可以检索x∈[-2,2],y∈[-2,2]的点,注意,我们要先沿实轴正方向检索,再演虚轴“负方向”检索。
但这只能输出这样的图:
不行,我们要更大的。问题出在哪里呢?
注意,range函数只能让i从一个整数,跳到另一个整数。为了使检索的精度变高,我们可以在写for循环时,给i和j的下界与上界都乘一个整数p,在最后用到变量的时候,除以p,增加它的检索精度。
按下按钮,静静等待
tada~
本人Python学的也不是很好,希望有大佬能对代码修改或优化
图片来源:
[1]彩色曼德勃罗集:http://f8r.cn/uvxbtq