微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法放大使用 matplotlib 设置的 mandelbrot,它只是切断了我尝试放大的部分

如何解决无法放大使用 matplotlib 设置的 mandelbrot,它只是切断了我尝试放大的部分

我的代码如下:

import numpy as np
import matplotlib.pyplot as plt

def mandelbrot(c):
    z = complex(0,0)
    for i in range(0,100):
        z = z*z+c
        if abs(z) > 2:
            return(i)
    return 100

M = np.zeros([401,401])
a = np.linspace(-2,2,401)
b = np.linspace(-2,401)

for x in a:
    for y in b:
        M[round((x+2)*100),round((y+2)*100)] = mandelbrot(complex(x,y))


plt.imshow(M,cmap='jet',extent=(-2,-2,2))
plt.show()

这完美地工作。下一个任务是更改 a 和 b,以便放大集合的某个部分。我尝试改变 a 和 b 使得: a = np.linspace(-0.5,0.5,401) b = np.linspace(-0.5,401)

并且还改变范围,使得范围=(amin,amax,bmin,bmax)。

结果如下:

原创

Original

缩放:

Zoom

如您所见,它不会放大该部分,而是仅切掉其中的一部分并仅显示该部分。这是我卡住的地方,因为我找不到实际放大的方法。有什么建议吗?

解决方法

您正在使用数组 ab 的值作为矩阵 M 的索引。 你想要的是M[x,y] = mandelbrot(a[x] + i*b[y])

import numpy as np
import matplotlib.pyplot as plt

def mandelbrot(c):
    z = complex(0,0)
    for i in range(0,100):
        z = z*z+c
        if abs(z) > 2:
            return(i)
    return 100

numpts = 401
xymin = -.5
xymax = .5

M = np.zeros([numpts,numpts])

a = np.linspace(xymin,xymax,numpts)
b = np.linspace(xymin,numpts)

for x in range(numpts):
    for y in range(numpts):
        M[x,y] = mandelbrot(complex(a[x],b[y]))


plt.imshow(M,cmap='jet',extent=(xymin,xymin,xymax))
plt.show()

哪个给你正确的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。