关于复数怪异的行为

问题描述 投票:1回答:2

我目前正在写一个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()

上执行打印此:

                                    .
                                        #
                                     ..
                                   .####.
                                   .####.      .
                            ..#..##########......
                           ...#################.
               .           .###################. .
                ......    .#####################.
                .#######..######################.
            ....#########.######################
##############################################.
            ....#########.######################
                .#######..######################.
                ......    .#####################.
               .           .###################. .
                           ...#################.
                            ..#..##########......
                                   .####.      .
                                   .####.
                                     ..
                                        #
                                    .

并且下一个打印这样的:

                                        # .    .
                                     ..#####.. .   ..
                                 ############# ... .
                  .            #################.
                 .  #.        #################### #
                 .#### .   .#######################
                 #######..###########################.
                ##################################.
              #######################################
             #####################################
##############################################.
             #####################################
              #######################################
                ##################################.
                 #######..###########################.
                 .#### .   .#######################
                 .  #.        #################### #
                  .            #################.
                                 ############# ... .
                                     ..#####.. .   ..
python python-3.x complex-numbers
2个回答
2
投票

你突变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

-2
投票

这是一个猜测,但你使用python 2?在底部情节的数值似乎正在天壤之别的非常近似的图形,但稍微倾斜的前瞻性。我敢打赌,你使用python 2,其中除法运算/只做整数除法。

如果是这样的话,无论是使用Python 3或添加到您的代码的开头:

from __future__ import division
© www.soinside.com 2019 - 2024. All rights reserved.