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

Can't zoom in on a mandelbrot set with matplotlib, instead it just cuts off the part I try to zoom

我的代码如下:

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, 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, 2))
plt.show()

这非常有效。下一个任务是更改 a 和 b,以便它放大集合的某个部分。我尝试改变 a 和 b 这样: a = np.linspace(-0.5, 0.5, 401) b = np.linspace(-0.5, 0.5, 401)

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

这些是结果:

原创

缩放:

如您所见,它并没有放大那部分,而是只是切掉一部分并只显示它。这是我卡住的地方,因为我找不到真正让它缩放的方法。有什么建议吗?

您正在使用数组 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, xymax, 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, xymax, xymin, xymax))
plt.show()

这给了你正确的结果。