画了一个简陋的曼德勃罗集

原文画了一个简陋的曼德勃罗集 - 知乎 (zhihu.com)

前两天看妈咪叔科普曼德勃罗集的视频:

【分形与混沌2】最有魅力的几何图形——曼德勃罗集与朱利亚集 天使与魔鬼共存_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com/video/av79113074​编辑

虽然看过很多次曼德勃罗集的图形,但是之前一直没有去了解这个究竟是什么。看了视频觉得挺神奇的。这个集合的定义超级简单,只需要一个二次迭代公式:

𝑧𝑛+1=𝑧𝑛2+𝑐,𝑧0=0,𝑐∈𝐶

曼德勃罗集就是所有使数列 𝑧0,𝑧1,...𝑧𝑛 收敛的 𝑐 的集合。 𝑧0,𝑧1,...𝑧𝑛 可能收敛到一个或多个复平面上的点,而且收敛到的点数和 𝑐 所在的区域有关。

正好最近养病不想干什么费脑子的事情,于是就想着自己动手画一画。现在没有MATLAB用了,只能重新捡起了好久没有用的Matplotlib用Python写了一下。

不会写Python的人写的Python在这里:

https://github.com/myc24601/mandelbrot/tree/master​github.com/myc24601/mandelbrot/tree/master

我用了最简单粗暴的算法:对要画的每个点,扔到迭代公式里面看看数列收不收敛。一开始我尝试画3000x4000个点,我的15年小破本本艰难地跑了18分钟才计算完,Matplotlib又用了6分钟才把图画出来。不精确地记了一下时,算一个点大概在0.1ms这个量级。吓得我赶紧把绘图精度降了两个数量级(300x400)。跑出来的结果大概是下面这个样子:

动图封面

对于曼德勃罗集外面的点,生成的序列是发散的(Matplotlib在我的本本上实在太慢了,在显示第一个发散序列之前有一个漫长的停顿,我都已经把鼠标挪到集合里面了。只能将就着看)。对于中间大圆区域内的点,所有数列最后会收敛在一个点上;在左边那个第二大圆内的点,数列会收敛在两个点上......妈咪叔的视频里有更加详细的介绍,而且视频里看上去是Mathematica作的图,比我这个不知道高到哪里去了。

最后吐槽:NumPy和Matplotlib的设计真的是非常的不直观,对小白用户一点都不友好,一段时间不用的话就得重新熟悉一下基本概念(一定是它们设计的反人类不是我记性不好,嗯......)。本来我就是想悠闲地画个图散散心,结果折腾得无比心累。所以有钱的话还是买个MATLAB吧,反正学生版家庭版一年也不花多少钱,买不了吃亏买不了上当。MATLAB R2020a还有几个月就要上市了,大家期待一下呗。

P.S. 强行给MATLAB加戏只是为了能把我这篇小破短文发到MATLAB专栏orz。但是2020a还是非常值得期待的!

P.P.S. 经评论提醒,MATLAB有一个GPU加速画曼德勃罗集的例子:

Illustrating Three Approaches to GPU Computing: The Mandelbrot Set​www.mathworks.com/help/parallel-computing/examples/illustrating-three-approaches-to-gpu-computing-the-mandelbrot-set.html​编辑

用MATLAB的Parallel Computing Toolbox只需要把普通array替换成gpuArray,其他的code基本不用改。讲真,这才是科学计算工具应该有的样子。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 17:12:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 17:12:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 17:12:04       62 阅读
  4. Python语言-面向对象

    2024-07-11 17:12:04       72 阅读

热门阅读

  1. 使用分布式锁解决淘客返利系统中的并发问题

    2024-07-11 17:12:04       25 阅读
  2. 数据分析主流的数据分析方法与框架使用

    2024-07-11 17:12:04       21 阅读
  3. 如何修改 grafana 密码,grafana忘了怎么办

    2024-07-11 17:12:04       23 阅读
  4. C语言旋转动画

    2024-07-11 17:12:04       22 阅读
  5. C++ 多态和虚函数

    2024-07-11 17:12:04       27 阅读
  6. Centos搭建FTP

    2024-07-11 17:12:04       23 阅读
  7. Vue在使用el-image时显示加载失败问题

    2024-07-11 17:12:04       21 阅读
  8. Dell IdracSCv2020服务器硬件监控指标解读

    2024-07-11 17:12:04       20 阅读
  9. 学习STM32的加速度传感器

    2024-07-11 17:12:04       22 阅读
  10. ARM/Linux嵌入式面经(十三):紫光同芯嵌入式

    2024-07-11 17:12:04       24 阅读
  11. webpack之ts打包

    2024-07-11 17:12:04       23 阅读
  12. 【ARMv8/v9 GIC 系列 6 -- 中断优先级详细介绍】

    2024-07-11 17:12:04       28 阅读
  13. 科研入门笔记

    2024-07-11 17:12:04       25 阅读
  14. 1984. 学生分数的最小差值

    2024-07-11 17:12:04       21 阅读