广义曼德勃罗特集的探索与交互式可视化

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 这篇文章介绍了如何使用Python和matplotlib库创建广义曼德勃罗特集的交互式可视化。作者探讨了曼德勃罗特集的基本概念,包括其自相似性和复杂边界,并扩展到广义集合,其中幂运算指数可以是任意复数。通过提供的Python代码示例,读者可以学习如何绘制并实现鼠标驱动的放大缩小功能,从而深入探索这个数学结构的细节。文章鼓励读者修改指数以观察不同形态,并提供了相关参考资料链接。


该文章是我在2014年发布在某sdn的,搬运过来。


广义曼德勃罗特集的探索与交互式可视化


引言

曼德勃罗特集(Mandelbrot Set)以其复杂的边界和无限的自相似性而闻名,它是分形几何中的一个经典实例,展现了数学与艺术的完美结合。本篇文章将引导你通过Python编程,结合matplotlib库,实现广义曼德勃罗特集的可视化,并添加放大缩小功能,使读者能够互动探索这个数学奇观的细节。


广义曼德勃罗特集的定义

传统的曼德勃罗特集由复数 c 的集合构成,对于每一个 c,若序列 𝑧𝑛+1=𝑧𝑛^2+𝑐 对于任意 n 都保持有界,则 c 属于曼德勃罗特集。然而,在广义曼德勃罗特集中,幂运算的指数可以是任意复数,例如 1+5𝑗,这为我们打开了探索更多奇异结构的大门。


image.png


Python 实现

首先,我们需要导入必要的Python库,包括numpy用于数值计算,matplotlib用于绘图,以及time库用于测量绘制时间。

Python

1import numpy as np
2import matplotlib.pyplot as plt
3from matplotlib import cm
4import time

接着,定义绘制广义曼德勃罗特集的函数,这里我们使用了两种方法来实现,一种是基于迭代次数的规范化处理,另一种则是基本的迭代绘制。

Python

1def draw_mandelbrot2(cx, cy, d, N=600):
2    x0, x1, y0, y1 = cx-d, cx+d, cy-d, cy+d 
3    y, x = np.ogrid[y0:y1:N*1j, x0:x1:N*1j]
4    c = x + y*1j
5    smooth_mand = np.frompyfunc(smooth_iter_point,1,1)(c).astype(np.float)
6    plt.imshow(smooth_mand, cmap=cm.Blues_r, extent=[x0,x1,y1,y0])
7    plt.axis('off')
8    plt.show()
9
10def smooth_iter_point(c):
11    z = c
12    d = 1+5j  # 幂运算的指数
13    for i in range(1, 20):
14        if abs(z) > 10: break 
15        z = z**d + c
16    absz = abs(z)
17    if absz > 2.0:
18        mu = i - log(log(abs(z),2),2)
19    else:
20        mu = i
21    return mu

为了增加交互性,我们利用matplotlib的事件处理机制,实现基于鼠标的放大和缩小功能。

Python

1def on_press(event):
2    global g_size
3    if not (event.xdata and event.ydata):
4        return
5    if event.button == 1:  # 左键:放大
6        g_size /= 2
7    elif event.button == 3:  # 右键:缩小
8        g_size *= 2
9    draw_mandelbrot2(event.xdata, event.ydata, g_size)

最后,初始化画布并连接鼠标事件处理器。

Python

1fig, ax = plt.subplots()
2g_size = 2.5
3fig.canvas.mpl_connect('button_press_event', on_press)
4draw_mandelbrot2(0,0,g_size)
5plt.show()

运行与探索

运行上述代码,你将看到一个充满细节的广义曼德勃罗特集图像。通过鼠标左键和右键,你可以自由地放大和缩小,探索这个数学世界的奥秘。

结语

通过本篇技术博客,我们不仅实现了广义曼德勃罗特集的可视化,还引入了交互式放大缩小功能,为数学探索提供了生动的工具。这不仅是一次编程实践,也是对数学之美的直观体验。鼓励读者尝试修改指数值,探索不同幂次下的曼德勃罗特集形态,享受数学与编程带来的乐趣。

参考资料

相关文章
|
12月前
|
算法
交互式建模PAI
交互式建模PAI
212 0
|
数据可视化
第7章 符号计算——7.10 符号分析可视化
第7章 符号计算——7.10 符号分析可视化
|
12月前
|
机器学习/深度学习 数据可视化 算法
数据分析和机器学习的11个高级可视化图表介绍
可视化是一种强大的工具,用于以直观和可理解的方式传达复杂的数据模式和关系。它们在数据分析中发挥着至关重要的作用,提供了通常难以从原始数据或传统数字表示中辨别出来的见解。
167 0
|
2月前
|
数据可视化 数据挖掘 BI
|
5月前
|
机器学习/深度学习 监控 数据可视化
Scikit-learn与可视化:让机器学习结果更直观
【4月更文挑战第17天】本文探讨了如何使用Scikit-learn和可视化工具使机器学习结果更直观。Scikit-learn作为Python的开源机器学习库,结合Matplotlib、Seaborn等可视化库,便于数据探索、模型训练过程监控及结果展示。通过示例代码,展示了数据探索的pairplot、模型训练准确率曲线的绘制以及聚类结果的散点图,强调了可视化在提升模型理解度和应用普及性上的作用。随着可视化技术进步,机器学习将变得更直观易懂。
|
5月前
|
自然语言处理 数据可视化 Python
python主题建模可视化LDA和T-SNE交互式可视化
python主题建模可视化LDA和T-SNE交互式可视化
|
5月前
|
数据可视化
R语言时间序列数据指数平滑法分析交互式动态可视化
R语言时间序列数据指数平滑法分析交互式动态可视化
|
5月前
|
机器学习/深度学习 数据可视化 算法
神经网络模型结构框架可视化的在线与软件绘图方法
神经网络模型结构框架可视化的在线与软件绘图方法
202 1
|
存储 JSON 数据可视化
MonaGO:一款新颖的交互式富集分析web工具
Monash Gene Ontology (MonaGO) 是一种新颖的基于 Web 的可视化系统,它提供了一个直观、交互式和响应式的界面,用于执行 GO 富集分析和可视化结果。MonaGO支持基于DAVID富集结果可视化,或者直接输入GO terms进行可视化。
136 0
|
机器学习/深度学习 传感器 开发框架
一种三合一组学数据可视化和分析方法附matlab代码
一种三合一组学数据可视化和分析方法附matlab代码
下一篇
无影云桌面