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

本文涉及的产品
大数据开发治理平台 DataWorks,不限时长
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 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()

运行与探索

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

结语

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

参考资料

相关文章
|
9月前
|
算法
交互式建模PAI
交互式建模PAI
151 0
|
9月前
|
数据可视化 JavaScript 前端开发
[Python可视化]一种极具特色(但是并没有什么用)的GIS专题图可视化方法
[Python可视化]一种极具特色(但是并没有什么用)的GIS专题图可视化方法
67 0
|
10月前
|
机器学习/深度学习 自然语言处理 数据库
Python 基于循环神经网络的情感分类系统设计与实现,附可视化界面.
Python 基于循环神经网络的情感分类系统设计与实现,附可视化界面.
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
机器学习 —— 数据分析与图表绘制
机器学习 —— 数据分析与图表绘制
33 2
|
2月前
|
分布式计算 数据可视化 数据库
R语言进行相关矩阵分析及其可视化
R语言进行相关矩阵分析及其可视化
|
2月前
|
分布式计算 数据可视化 数据挖掘
R语言进行相关矩阵分析及其网络可视化
R语言进行相关矩阵分析及其网络可视化
|
2月前
|
自然语言处理 数据可视化 Python
python主题建模可视化LDA和T-SNE交互式可视化
python主题建模可视化LDA和T-SNE交互式可视化
|
2月前
|
数据可视化 网络可视化
R语言混合图形模型MGM的网络可预测性分析
R语言混合图形模型MGM的网络可预测性分析
|
2月前
|
数据可视化
R语言时间序列数据指数平滑法分析交互式动态可视化
R语言时间序列数据指数平滑法分析交互式动态可视化
|
2月前
|
机器学习/深度学习 数据可视化 算法
神经网络模型结构框架可视化的在线与软件绘图方法
神经网络模型结构框架可视化的在线与软件绘图方法
157 1