Mandelbrot 并行实现

article/2025/9/15 18:47:08

最近要交并行计算的作业了,这周终于把作业写了个大概,这期间感觉学了不少东西,总结一下。

Mandelbrot Set 背景

前几天逛维基百科的时候看到了如下的消息:著名数学家、分形之父Benoît B. Mandelbrot(中文名本华·曼德博)美国时间10月15日辞世,享年85岁。

“1979年,在哈佛大学作为访问学者的期间,曼德博开始研究分形集之一——在复平面上一定变换下具有不变性的朱利亚集合。在加斯顿·朱利亚皮埃尔·法图学术成果的基础上,曼德博利用公式 fc(z) = z2 + c 反复迭代,在计算机上作出了朱利亚集合的图形。在研究朱利亚集合的拓扑结构是怎样依赖于复参数μ的同时,他还提出了后来一他的名字命名的曼德博集合(曼德博集合今天常常由 z2 + c 定义,因此曼德博早期以μ为参数所作的图像与后来以 c 为参数所得图像恰如镜面反射般左右对称)。”—From Wikipedia

Wikipedia上Mandelbrot的定义为:

曼德博集合可以用复二次多项式

f_ c(z) =z^{2}+ c /, 来定义

其中c是一个复参数。对于每一个c,从z = 0/,开始对fc(z)进行迭代

序列 (0, f_ c(0), f_c(f_ c(0)), f_ c(f_ c(f_ c(0))), /ldots) 的值或者延伸到无限大,或者只停留在有限半径的圆盘内。

曼德博集合就是使以上序列不延伸至无限大的所有c点的集合。

公式为:image where image

从数学上来讲,曼德博集合是一个复数的集合。一个给定的复数c或者属于曼德博集合M,或者不是。

要记住上面介绍的最后一句话:Mandelbrot Set是一个集合,谁的集合?是关于f_ c(z) =z^{2}+ c /,当中复数c的集合。刚开始我就老搞不明白Mandelbrot Set和Julia Set的区别,其实他们虽然迭代式大体相同,但是所表示的集合范围却是两码事,下面给出Julia Set的定义:

朱利亚集合可以由下式进行反复迭代得到:

fc(z) = z2 + c

对于固定的复数c,取某一z值(如z = z0),可以得到序列

z_0, f_c(z_0), f_c(f_c(z_0)), f_c(f_c(f_c(z_0))), /ldots .

这一序列可能反散于无穷大或始终处于某一范围之内并收敛于某一值。我们将使其不扩散的z值的集合称为朱利亚集合。

这里需要注意的是:这个迭代式当中,复数c的值是固定的,而Julia的集合的范围是关于z值的范围。

简单来说,对于迭代式:fc(z) = z2 + c ,Mandelbrot Set 迭代过程中的z值是固定的,是使上述迭代式始终在某一范围内而不发散于无穷大的c值的集合;而Julia Set的迭代过程中c是固定的,上述是使上述迭代式始终在某一范围内而不发散于无穷大的z值的集合。

理解了这些定义,就很容易通过编程来实现这样的集合。

最后就是关于绘图着色的问题,大部分都是通过让||z||>R的迭代次数来决定所绘制的颜色,我们定义如果在最大迭代次数N内没有超过R的集合的颜色为黑色,当最大的迭代次数N足够大时,可以认为这些点属于Mandelbrot Set,具体要多大?理论上来说当N为无穷大时,我们绘制的Mandelbrot Set才是真的符合定义,但是我们即使借助于计算机,也不可能处理这种无限的问题。所以说我们定义在最大迭代次数N之内z的模不超过R就认为就是属于Mandelbrot Set其实是不严格的,所幸的是如果z不属于Mandelbrot Set的时候,||z||的增长速度是非常的快,再加上我们一般电脑的屏幕分辨率的限制,当N值足够大的时候所显示的图像与N趋于无穷时显示的图像几乎没有区别。所以N值只要取足够大就可以了。还有一个问题就是R的大小的选择,我查阅了相关的资料,也没仔细看,相关的证明公式太多,懒得看,直接上结论:“If the absolute value of Z (that is, its distance from 0+0i) ever gets bigger than 2, it will never return to a place closer than 2, but it will actually rapidly escape to infinity.”也就是说如果z的模值大于2的时候,可以证明经过上述公式的迭代,z的模值会很快趋于无穷大。所以现在基本都是取R=2。

所以,经过上述的一番理论知识,我们用绘图的方法来展示Mandelbrot Set只是一种演示,并不完全符合Mandelbrot Set的定义,但是对于展示这个集合的相关特性,已经足够了。

刚开始我定义迭代次数n>N时,为黑色,属于Mandelbrot Set,对于不属于Mandelbrot Set的,我还是通过迭代次数n来决定其颜色,当n从N到N/2时,颜色从黑变红,当n从N/2到0时,颜色从红到白,结果出现如下后果,十分血腥。。。

然后我到网上搜索了相关的配色,最后在Rocky Mountain College的K. Stuart Smith 教授那里找到了一份配色的方案,他是将最大迭代次数设为256,应该是和256色有关,但是具体的色彩算法我也不是很清楚,不过他应该是用的一种叫HSB的配色方案,他写的函数就是将HSB的颜色转换为RGB的,具体代码如下:

   1: void setHSBColor (float hue, float saturate, float bright) {
   2:   // when I wrote this, openGL only liked colors specified by RGB values. The
   3:   // mandelbrot routine generated an HSB color, so I wrote this routine to do
   4:   // the conversion. It sure isn't perfect, but it does a respectable job.
   5:   //
   6:   // I expect that part of this work (but the final openGL call) could be
   7:   // pushed back with the mandelbrot color generator for more speedup.
   8:   //
   9:   float red, green, blue;    
  10:   float h = (hue * 256) / 60;
  11:   float p = bright * (1 - saturate);
  12:   float q = bright * (1 - saturate * (h - (int)h));
  13:   float t = bright * (1 - saturate * (1 - (h - (int)h)));
  14:  
  15:   switch ((int)h) {
  16:   case 0: 
  17:     red = bright,  green = t,  blue = p;
  18:     break;
  19:   case 1:
  20:     red = q,  green = bright,  blue = p;
  21:     break;
  22:   case 2:
  23:     red = p,  green = bright,  blue = t;
  24:     break;
  25:   case 3:

http://chatgpt.dhexx.cn/article/UENcctJc.shtml

相关文章

Mastering Qt 5 学习笔记-Mandelbrot

是一个 Mandelbrot 分形的多线程计算。 用户将看到分形,并能够在该窗口中平移和缩放。Mandelbrot 分形是一个处理复数 (a bi) 的数值集,该图像中的每个黑色像素都趋向于发散到一个无限值,,而绿色像素则有界于一个有限值。绿色像素…

Mandelbrot集合及其渲染

什么是Mandelbrot集合? Mandelbrot集合是在复数平面上组成分形的点的集合,它正是以数学家Mandelbrot命名。 Mandelbrot集合可以用复二次多项式\[ f_c(z)z^2c \] 来定义 其中c是一个复数。对于每一个c,从\(z 0\),开始对\(f_c(z)\)进行迭代。 …

分形之父 Mandelbrot

著名数学家,被誉为分形之父的Mandelbrot先生,美国时间10月15日在马萨诸塞州剑桥辞世,享年85岁。他用“美丽”改变了我们的世界观,他被认为是20世纪后半叶少有的影响深远而且广泛的科学伟人之一,1993年他获得沃尔夫物理…

Ettercap系列 II:基于命令行界面(结合driftnet截获目标机器正在浏览的图片)

相信跟着这个系列走,一直看到这篇文章的读者已经了解了基于图形化Ettercap的操作,并对Arp欺骗和Ettercap相关的术语有所了解。本篇就如何在命令行界面下操作ettercap,以实现与图形化界面相同的效果展开讨论。可能你会不解:既然我已…

无线局域网的嗅探攻击和防御——ettercap+driftnet

 无线局域网的嗅探攻击和防御 -----ettercapdriftnet 1 实验要求和目的 ●了解局域网转发数据的规则与协议 ●了解抓包软件的原理与操作流程 ●对网络中数据传输的协议有更深层次的认识 2 实验原理和背景知识 2.1 抓包软件与分析软件 本次嗅探试验所…

python实现图片嗅探工具——自编driftnet

python实现图片嗅探工具——自编driftnet 前言一、数据包嗅探二、图片捕获三、图片显示及主函数写在最后 前言 想必尝试过中间人攻击(MITM)的小伙伴,大概率是知道driftnet的。这是一款简单使用的图片捕获工具,可以很方便的从网络数据包中抓取…

kali中 arpspoof、driftnet、流量转发的图片抓取

1、开启内核转发模式(echo 1为转发 echo 0为拦截) echo 1 /proc/sys/net/ipv4/ip_forward 配置完成使用命令查看cat /proc/sys/net/ipv4/ip_forward 2、使用 Arpspoof 开始攻击 命令:Arpspoof -i (自己网卡) -t 目标IP 网关 3、打开另一个终端 查看dri…

ARP欺骗攻击(流量图片)——dsniff与driftnet使用

ARP欺骗攻击(流量&图片) 原理: 首先我们![请添加图片描述](https://img-blog.csdnimg.cn/7de7923387224bcda1ea4be958032ae9.png 要明白何为ARP(地址解析协议):是根据 IP地址 获取 物理地址 的一个 TC…

NO.26——利用ettercap和driftnet截获数据流里的图片

原理 Ettercap最初设计为交换网上的sniffer,但是随着发展,它获得了越来越多的功能,成为一款有效的、灵活的中介攻击工具。它支持主动及被动的协议解析并包含了许多网络和主机特性(如OS指纹等)分析。 Ettercap…

linux嗅探器抓包,Kali Linux 嗅探/欺骗工具 driftnet 教程

日期:2018年01月11日 观看: 13,491 C 次 Driftnet是一个监听网络流量并从它观察到的TCP流中提取图像的程序。有趣的是看到很多网络流量的主机上运行。在实验性增强中,driftnet现在从网络流量中挑选出MPEG音频流,并尝试播放它们。 Driftnet是一款从网络流量捕获图像并将其显…

ARP中使用driftnet工具捕获图片

在进行任何网络攻防实验时,请务必遵守当地法律法规以及道德准则,必须遵守法律规定,只能在合法授权的情况下进行实验和演练。 预备知识 基本网络概念:了解TCP/IP协议、IP地址、MAC地址等基本网络概念。 ARP协议:了解A…

使用Arp欺骗与driftnet工具监听局域网信息

【重点声明】此系列仅用于工作和学习,禁止用于非法攻击,非法传播。一切遵守《网络安全法》 环境: Ubuntu 16.0.4攻击主机:192.168.1.130,Windows10 目标机:192.168.1.219 扫描该网段存活的主机&#xff1…

(arpspoof + driftnet)实现arp欺骗

(arpspoof driftnet)实现arp欺骗 虚拟机环境:kali linux window 7 文章目录 (arpspoof driftnet)实现arp欺骗前言一、安装arpspoof和driftnet二、Attack1.信息收集2.MAC欺骗与流量截图 总结 前言 ARP欺骗:欺骗局域网内主机的网关MAC地址&#xff0c…

自举电路介绍

自举电路也叫升压电路,利用自举升压二极管,自举升压电容等电子元件,使电容放电电压和电源电压叠加,从而使电压升高.有的电路升高的电压能达到数倍电源电压。 升压电路原理 举个简单的例子:有一个12V的电路&#xff0c…

秒懂电容自举电路

自举电容的核心原理是:电容两端电压不能突变。 从这句话中,我们可以获取到两个关键字:两端电压、不能突变。 两端电压指的是电容一边相对另一边的电压,我们知道电压本身就是个参考值(一般认定参考GND,认定…

STM32自举程序

空间分布 将flash空间分为自举程序区和应用程序区。 应用程序区存放用户应用程序。 自举程序负责获取用户应用程序数据,并写入应用程序区,实现程序升级。 程序跳转 自举程序需要可以跳转到应用程序区,当然应用程序也可以根据需要设计成可…

自举电路(升压电路)

the boost converter,或者叫step-up converter,是一种开关直流升压电路,它可以是输出电压比输入电压高。基本电路图见图1.假定那个开关(三极管或者mos管)已经断开了很长时间,所有的元件都处于理想状态,电容电压等于输入电压。下面…

Web精美个人网页静态展示

今天和大家分享一个纯用web(htmlcssjs)实现的一个优美的个人信息菜单资料展示。 项目结构很简单只有一个html文件一个css样式文件以及一个js脚本文件。 项目实现的功能: 1:进入首页是一个天气样式页面(显示当前时间…

【测控电路】自举式高输入阻抗放大电路

ref 测控电路第五版 有些传感器输出阻抗很高, 要求其测量放大电路有高输入阻抗. 开环集成运放的输入阻抗通常很高, 反相运放输入阻抗远低于同相运放, 为提高输入阻抗, 可在输入端加接电压跟随器, 但会引入共模误差. 在要求较高的场合下, 可采用高输入阻抗集成运放/采用通用运放…

自举电路工作原理分析

OTL功率放大器中要设自举电路,图18-9所示是自举电路。电路中的C1, R1和R2构成自举电路。C1为自举电容,R1O 隔离电阻,R2将自举电压加到 VT2基极。 向左转 | 向右转 VT1集电极信号为正半周期间VT2导通、放大,当输入VT2基极的信号比较大 时&…