4

我得到了一些关于 Mandelbrot 集的分形可视化的工作。

我不是在寻找一个完整的解决方案(自然),我在寻求有关复数轨道的帮助。

假设我有一个Complex从复平面上的点派生的给定数字。我现在需要迭代它的轨道序列并根据轨道是否增加数量级来绘制点。

如何收集复数的轨道?非常感谢任何指导(链接等)。测试轨道序列所需的数学函数的任何指针,例如Math.pow()

我正在使用 Java,但这在这里并不是特别重要。

再次感谢,亚历克斯

4

4 回答 4

7

当您显示 Mandelbrot 集时,您只需将实平面和虚平面分别转换为 x 和 y 坐标。

因此,例如复数4.5 + 0.27i转换为x = 4.5, y = 0.27.

Mandelbrot 集是方程Z = Z² + C永远不会达到 |Z| 的值的所有点。>= 2,但在实践中,您包括在特定迭代次数内值不超过 2 的所有点,例如 1000。为了获得您通常看到的集合的彩色渲染,您为外部点分配不同的颜色设置取决于他们达到极限的速度。

因为它是复数,所以方程实际上是Zr + Zi = (Zr + Zi)² + Cr + Ci。你可以把它分成两个方程,一个用于实平面,一个用于虚平面,然后它就是简单的代数。C 是要测试的点的坐标,Z 的初始值为零。

这是来自我的多线程 Mandelbrot 生成器的图像 :)

曼德布罗集

于 2010-11-01T02:01:18.953 回答
3

实际上,Mandelbrot 集是迭代收敛的复数集。

所以 Mandelbrot 集合中唯一的点就是中间那个大而无聊的颜色。你看到的所有漂亮的颜色只不过代表了边界附近的点(但错误的一侧)旋转到无穷大的速率。

在数学上,

M = {c in C : lim (k -> inf) z_k = 0 } where z_0 = c, z_(k+1) = z_k^2 + c

即选择任何复数 c。现在要确定它是否在集合中,反复迭代它 z_0 = c,z_(k+1) = z_k^2 + c,z_k 将接近零或无穷大。如果它的极限(因为 k 趋于无穷大)为零,那么它在。否则不是。

有可能证明一次 |z_k| > 2,它不会收敛。这是一个很好的优化练习:IIRC |Z_k|^2 > 2 就足够了......无论哪种方式,平方都会为您节省昂贵的 sqrt() 函数。

于 2010-11-01T09:11:57.230 回答
1

Wolfram Mathworld 有一个关于 Mandelbrot 集 的好网站。

一个复杂的类将是最有帮助的。

也许这样的例子激发一些思考。我不建议使用 Applet。

除了正弦、余弦、指数等函数之外,您还必须知道如何对复数进行加、减、乘、除和幂运算。如果您不知道这些,我会从那里开始。

教我的书是Ruel V. Churchill "Complex Variables"

于 2010-11-01T01:21:29.123 回答
0
/d{def}def/u{dup}d[0 -185 u 0 300 u]concat/q 5e-3 d/m{mul}d/z{A u m B u
m}d/r{rlineto}d/X -2 q 1{d/Y -2 q 2{d/A 0 d/B 0 d 64 -1 1{/f exch d/B
A/A z sub X add d B 2 m m Y add d z add 4 gt{exit}if/f 64 d}for f 64 div
setgray X Y moveto 0 q neg u 0 0 q u 0 r r r r fill/Y}for/X}for showpage
于 2011-06-18T21:34:20.307 回答