如何解决无法放大使用 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)。
结果如下:
原创
缩放:
如您所见,它不会放大该部分,而是仅切掉其中的一部分并仅显示该部分。这是我卡住的地方,因为我找不到实际放大的方法。有什么建议吗?
解决方法
您正在使用数组 a
和 b
的值作为矩阵 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 举报,一经查实,本站将立刻删除。