我目前正在写一个Python程序曼德尔布罗。在一个实现中,我用python的复数类型。在另一方面,我实现复数为两个独立的数字(我想我已经有一个错误)。我不明白为什么这两个程序输出不同的前瞻性的结果,因为他们都应该做同样的事情(除非我有我的代码中的一些愚蠢的错误)。有人能告诉我为什么发生这种情况(也可能是我做错了什么),我怎么能解决这个问题?
这是我的代码:
size = 40
for y in range(size):
for x in range(size*2):
c = complex(x / (size / 2) - 2, y / (size / 4) - 2)
z = complex(0, 0)
i = 0;
while i < 100:
z = z**2 + c
if abs(z) > 2:
break
i+=1
if i == 100:
print("#", end="")
elif i > 10:
print(".", end="")
else:
print(" ", end="")
print()
#########################
size = 40
for y in range(size):
for x in range(size*2):
cx = x / (size / 2) - 2
cy = y / (size / 4) - 2
zx = 0
zy = 0
i = 0
while i < 100:
zx = (zx * zx - zy * zy) + cx
zy = (2 * zx * zy) + cy
if zx * zx + zy * zy > 4:
break
i+=1
if i == 100:
print("#", end="")
elif i > 10:
print(".", end="")
else:
print(" ", end="")
print()
上执行打印此:
.
#
..
.####.
.####. .
..#..##########......
...#################.
. .###################. .
...... .#####################.
.#######..######################.
....#########.######################
##############################################.
....#########.######################
.#######..######################.
...... .#####################.
. .###################. .
...#################.
..#..##########......
.####. .
.####.
..
#
.
并且下一个打印这样的:
# . .
..#####.. . ..
############# ... .
. #################.
. #. #################### #
.#### . .#######################
#######..###########################.
##################################.
#######################################
#####################################
##############################################.
#####################################
#######################################
##################################.
#######..###########################.
.#### . .#######################
. #. #################### #
. #################.
############# ... .
..#####.. . ..
你突变ZX和ZY的计算中使用它。你需要存储ZX新价值的其他地方暂时这样你就可以正确计算ZY。事情是这样的:
temp = (zx * zx - zy * zy) + cx
zy = (2 * zx * zy) + cy
zx = temp
或者更优雅:
zx, zy = (zx * zx - zy * zy) + cx, (2 * zx * zy) + cy
这是一个猜测,但你使用python 2?在底部情节的数值似乎正在天壤之别的非常近似的图形,但稍微倾斜的前瞻性。我敢打赌,你使用python 2,其中除法运算/
只做整数除法。
如果是这样的话,无论是使用Python 3或添加到您的代码的开头:
from __future__ import division