Python中的Julia分形


Python中的Julia分形:介绍

分形是引人入胜的数学实体,展现出复杂且重复的图案。Julia分形以法国数学家Gaston Julia的名字命名,是其中一个迷人的分形。通过对复数进行简单的数学函数迭代,可以创建Julia分形。它一直是数学和计算机图形学领域的研究和探索课题。本文将探索Julia分形的世界,并了解如何使用Python来生成它们。

Python中的Julia分形

定义

Julia分形的公式是一个复杂的迭代函数。它是通过在复平面上对每个点重复求解以下方程得到的:

Z_{n+1} = Z_{n}^2 + C

其中,“Z_n”表示第n次迭代时的复数,“Z_n+1”表示第(n+1)次迭代时的复数,“C”是一个固定的复数,它决定了分形的结构。生成的图案是通过根据每个点达到给定幅度阈值所需的迭代次数对其进行颜色编码来创建的。不同的颜色用于区分逃逸到无穷大和限制在一定范围内的点。

算法

  • 步骤1 - 定义最终图像的宽度和高度。

  • 步骤2 - 通过更改缩放级别、x和y偏移量来更改分形的位置和放大倍数。

  • 步骤3 - 指定逃逸阈值和最大迭代次数。

  • 步骤4 - 使用指定的参数调用'julia_fractal()'函数。

  • 步骤5 - 使用命令'plt.show()'显示生成的Julia分形。

方法

  • 方法1 - 使用matplotlib库生成曼德勃罗集的图像。

  • 方法2 - 使用matplotlib库和正弦函数生成曼德勃罗集的图像。

方法1:使用matplotlib库生成曼德勃罗集的图像

示例

import numpy as np
from matplotlib import pyplot as plt
image_x = 400
image_y = 300
mesh_x = np.linspace(-2.5,1.5, num= image_x + 1)
mesh_y = np.linspace(-1.5,1.5, num= image_y + 1)
image = np.zeros((len(mesh_y), len(mesh_x)))
for i,y in enumerate(mesh_y):
   for j, x in enumerate(mesh_x):
      cr, ci = x,y
	  zr, zi = 0,0 
	  count = 0
	  color = ‘black’
	  while count<= 50:
	     count = count + 1
		 z_mod_sq = zr*zr + zi*zi
		 if z_mod_sq > 4:
		    color = ‘white’
			break
		 #zr + I zi = zr^2 – zi^2=2zrziI+ cr +I ci
		 zr, zi = (zr*zr – zi*zi + cr), (2*zr*zi + ci)
	   if color != ‘white’:
	      image[i][j] = 1
	   else:
	      image[i][j] = count
plt.imshow(image)
plt.show()

输出

代码实现了著名的数学分形——曼德勃罗集。曼德勃罗集是通过对复数迭代应用函数,并确定结果是否逃逸到无穷大或保持有界来生成的。此代码中,复平面上每个像素都由一个复数表示。对于每个像素,算法都确定迭代函数在预定次数的迭代内(本例中为50次)是否会逃逸到无穷大。如果函数逃逸到无穷大,则相应的像素被着色为白色;否则,被着色为黑色。输出显示了曼德勃罗集的复杂且重复的图案。

方法2:使用matplotlib库和正弦函数生成曼德勃罗集的图像

示例

import numpy as np
from matplotlib import pyplot as plt
image_x = 400
image_y = 300
mesh_x = np.linspace(-2.5,1.5, num= image_x + 1)
mesh_y = np.linspace(-1.5,1.5, num= image_y + 1)
image = np.zeros((len(mesh_y), len(mesh_x)))
for i,y in enumerate(mesh_y):
   for j, x in enumerate(mesh_x):
      cr, ci = x,y
	  zr, zi = 0,0 
	  count = 0
	  color = 'black'
	  while count<= 50:
         count = count + 1
		 z_mod_sq = zr*zr + zi*zi
		 if z_mod_sq > 4:
		    color = 'white'
			break
		 #zr + I zi = zr^2 – zi^2=2zrziI+ cr +I ci
		 zr, zi = (zr*zr – zi*zi + cr), (2*zr*zi + ci)
	  if color != ‘white’:
	     image[i][j] = 1
      else:
	     import math
		 image[i][j] = int(math.sin(count) * 10)
plt.imshow(image)
plt.show()

输出

代码仍然实现了曼德勃罗集,但对未逃逸到无穷大的像素的颜色分配做了一点修改。修改后的代码根据迭代计数的值为这些像素分配不同的灰色阴影,而不是使用二进制的黑白颜色方案。迭代计数的值乘以10,然后通过正弦函数传递,以生成一系列灰色值。这将曼德勃罗集转换为视觉上令人愉悦的灰度表示形式,突出了分形的精细特征。

现在,修改后的代码根据迭代次数为像素分配灰度值,从而使图像具有渐变的外观。重写的代码使用正弦函数将迭代计数转换为-1到1之间的值,而不是简单地使用二进制的黑白颜色。此值乘以10并转换为整数后,会生成一系列灰色颜色。此更新旨在通过视觉方式突出显示与曼德勃罗集的不同程度的偏差,从而生成更细致和美观的图像。

结论

Julia分形为我们提供了一个迷人的窗口,可以窥探数学的无限复杂性和精致之美。在本教程中,我们探讨了Julia分形的概念,并学习了如何使用Python来生成它们。我们定义了Julia分形函数,解释了其语法,并提供了生成Julia分形的逐步算法。此外,我们提供了两种不同的方法,并附带可执行代码和结果。通过调整不同的参数,包括缩放、偏移量、最大迭代次数、逃逸阈值和常数值,可以生成各种引人入胜的Julia分形图案。交互式方法允许实时探索,从而促进对底层数学概念和Julia分形的独特特性的更深入理解。

Python凭借其丰富的科学库(包括NumPy和Matplotlib),为生成和显示分形提供了强大的环境。因此,请深入探索Julia分形的世界,尽情发挥你的想象力,踏上探索分形几何无限壮丽的永恒之旅。

更新于: 2023年10月12日

258 次浏览

开启你的职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.