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

原文画了一个简陋的曼德勃罗集 - 知乎 (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基本不用改。讲真,这才是科学计算工具应该有的样子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Three.js实现动态天空盒子(附源码)

Three.js实现动态天空盒子(附源码) 源码下载

Linux 例题及详解

1.(yum)以下描述正确的是 A.在Centos中可以使用yum install 命令安装软件包 B.在Centos中可以使用yum uninstall 命令卸载软件包 C.在Centos中可以使用yum list 查看所有可安装软件包 D.在Centos中可以使用yum show查看所有可安装软件包 选项A、C是正确…

Dify中的工具

Dify中的工具分为内置工具(硬编码)和第三方工具(OpenAPI Swagger/ChatGPT Plugin)。工具可被Workflow(工作流)和Agent使用,当然Workflow也可被发布为工具,这样Workflow(工…

java线程锁synchronized的几种情况

一、对象方法锁 1、成员方法加锁 同一个对象成员方法有3个synchronized修饰的方法,通过睡眠模拟业务操作 public class CaseOne {public synchronized void m1(){try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace()…

ChIP项目文章CMI(IF=24.1)|IRF1激活可促进辐射诱导的细胞死亡和炎症反应

2024年6月7日,四川大学张舒羽教授团队在Cellular & Molecular Immunology(IF24.1)期刊上发表了题为“Chaperone-and PTM-mediated activation of IRF1 tames radiation-induced cell death and inflammation response”的文章&#xff0c…

Flexcel学习笔记

1.引用的单元 FlexCel.Core 始终需要使用的一个单元。 多系统运行时。{$IFDEF LINUX}SKIA.FlexCel.Core{$ELSE}{$IFDEF FIREMONKEY}FMX.FlexCel.Core{ $ELSE}VCL.FlexCel.Core{$ENDIF}{$ENDIF} FlexCel.XlsAdapter这是FlexCel的xls/x引擎。如果您正在处理xls或xlsx文件&#x…

搭建邮局服务器的配置步骤?如何管理协议?

搭建邮局服务器需要考虑的安全措施?怎么搭建服务器? 在现代互联网环境中,电子邮件是重要的沟通工具。为了保证信息传递的稳定性和安全性,许多企业选择自行搭建邮局服务器。AokSend将详细介绍搭建邮局服务器的配置步骤&#xff0c…

parquet介绍

概述 Apache Parquet 是一种开源的列式数据文件格式,旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据,并且受到许多编程语言和分析工具的支持。 parquet-format parquet-format 存储库托管 Apache Pa…

ELK优化

ELK优化可以从以下几个方面进行: linux内核优化JVM优化ES配置优化架构优化(filebeat/fluentd代替logstash、加入kafka做消息队列) ES 作为日志存储时的特性: 高并发写读少接受 30 秒内的延时可容忍部分日志数据丢失 Logstash优…

如何配置yolov10环境?

本文介绍如何快速搭建起yolov10环境,用于后续项目推理、模型训练。教程适用win、linux系统 yolo10是基于yolo8(ultralytics)的改进,环境配置跟yolo8几乎一模一样。 目录 第1章节:创建虚拟环境 第2章节:…

【debug】keras使用基础问题

keras使用基础问题 一、下载报错报错详情解决方式忽略ssl检查提前将数据或者包下载到本地 参考 一、下载报错 报错详情 1、下载数据报错 (x_train, y_train_cats), (x_test, y_test_cats) cifar10.load_data()报错信息 Exception: URL fetch failure on https://www.cs.tor…

linux中,nohup ... ,改变输出目录

在Linux中,使用nohup命令结合&来在后台运行java -jar xxx.jar命令时,实际上每个nohup命令都会将其标准输出(stdout)和标准错误输出(stderr)重定向到一个名为nohup.out的文件中,除非你明确指…

Tita的OKR:最新20个HR人力资源OKR案例

OKR是一个目标设定框架,可以提高员工的参与度,同时帮助人们专注于最重要的事情。 然而,OKR最大的挑战之一是设定正确的目标,我与很多人力资源专业人士交谈过,他们证明他们的OKR并不完美。 这就是为什么我们收集了最佳…

git-打包指定提交文件.sh

#!/bin/bash # windows :git bash here read -p "请工程路径: " projdir cd $projdir read -p "请输入提交ID(至少7位): " select # latest$(git rev-parse HEAD) latest$(git rev-parse --short HEAD) # set latest$(git rev-parse HEAD) ech…

水文:CBA业务架构师

首先, 我们来了解一下什么是CBA业务架构师? CBA业务架构师认证是由业务架构师公会(Business Architecture Guild)授予的一种专业认证。标志着证书持有者已经掌握了业务架构的核心技能和知识,能够在实际工作中熟练运用业务架构技术和框架&…

Windows 安装Zookeeper

安装 下载地址:Apache ZooKeeper 我下载的版本:zookeeper-3.4.12 下载后,解压 配置 1、 在D:\zookeeper-3.4.12文件夹中创建一个“data”文件夹和“log”文件夹 2、 复制zoo_sample.cfg,改名:zoo.cfg 修改zoo.c…

Jetson-AGX-Orin 安装ROS2

Jetson-AGX-Orin 安装ROS2 确保Orin能够上网 1、安装依赖 sudo apt update sudo apt install curl gnupg2 lsb-release2、添加源 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpgecho &q…

【C++课程学习】:new和delete为什么要配套使用,new,delete和malloc,free的比较

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🎡1.new,delete和malloc,free的区别: ⌚️相同点&…

Java的SpringBoot项目中为什么要注入接口XxxService而不是具体的实现类XxxServiceImpl

Java的SpringBoot项目中为什么要注入接口XxxService而不是具体的实现类XxxServiceImpl 在 Java 中,通常建议面向接口编程。注入一个接口而不是具体的实现类有以下几个好处: **解耦:**通过注入接口,实现了服务的调用者&#xff08…

“删错文件后如何高效挽救?两大恢复策略全解析“

在数字化日益深入生活的今天,数据已成为我们工作、学习和娱乐不可或缺的一部分。然而,删错文件的经历却如同数字世界中的一场“小插曲”,不经意间就可能让我们陷入数据丢失的困境。无论是误触删除键、清空回收站,还是软件故障导致…