Python Can';t使用matplotlib放大mandelbrot集,它只会切断我尝试缩放的部分
我的代码如下:Python Can';t使用matplotlib放大mandelbrot集,它只会切断我尝试缩放的部分,python,numpy,matplotlib,mandelbrot,Python,Numpy,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.linspac
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)
结果如下:
原创的
缩放:
正如您所看到的,它不会放大该部分,而是只剪切其中的一部分并仅显示该部分。这就是我被卡住的地方,因为我找不到一种方法来真正使它变焦。有什么建议吗?您正在使用数组
a
和b
的值作为矩阵M
的索引。
你想要的是M[x,y]=mandelbrot(a[x]+i*b[y])
:
将numpy导入为np
将matplotlib.pyplot作为plt导入
曼德尔布罗特(c):
z=复数(0,0)
对于范围(0,100)内的i:
z=z*z+c
如果abs(z)>2:
回报(一)
返回100
numpts=401
xymin=-.5
xymax=.5
M=np.零([numpts,numpts])
a=np.linspace(xymin,xymax,numpts)
b=np.linspace(xymin,xymax,numpts)
对于范围内的x(numpts):
对于范围内的y(numpts):
M[x,y]=mandelbrot(复数(a[x],b[y]))
plt.imshow(M,cmap='jet',范围=(xymin,xymax,xymin,xymax))
plt.show()
这就给了你正确的结果。我认为问题出在这一行
M[round((x+2)*100),round((y+2)*100)]=mandelbrot(complex(x,y))
,你没有填充整个M
,只有它的中心部分回答了你的问题。您使用的是“范围”,而不是设置xlim和ylim。有什么好方法@Enzo?我从我的老师那里得到了那个索引,我不知道该把它改成什么。@KristiFrancis看到我的了吗answer@TomMcLean这不起作用幸运的是,我真的不知道它做了什么,但我基本上只是得到了一个空的图像。非常感谢!我不确定索引部分,因为我的老师提供了它。在将它设置为(x+2)*100之前,它的作用是什么?它只是碰巧被设置为从0到400,因为(-2+2)*100是0,(2+2)*100当然是400。但正如你所看到的,如果任何一个数字发生变化,这显然是失败的。这就是为什么仅仅改变范围并没有达到你想要的效果,它只在索引150到250之间填充了M。