我在遇到这个问题时遇到了麻烦。它返回的只是一个空白图。
在这里,我们最后将像在练习6中看到的那样绘制图,该图显示了从plane到4-1的复数平面中从不同起点收敛到的根。 首先粘贴练习11中的which_roots_z4(z,n)(或者,如果从未使用过,请使用发布的解决方案中的那个-如果这样做,请发表评论以表明您已这样做)。 然后,构造一个复数二维数组,其实部和虚部给出的网格点的x和y值跨过-2到+2。每个维度使用1000点(总计106点)。然后使用此数组作为z调用n,n = 100。 现在制作图像,创建一个新的3d整数数组,形状为(1000,1000,3)。最后一个维度将在1000x1000网格点的每个点上保留图像的红色,绿色和蓝色分量的强度。 填写数组,使收敛到根0的点显示为红色(255,0,0),收敛到索引1的点显示为蓝色(0,0,255)-并为其他两个根选择其他两种颜色。 最后,您可以使用plt.imshow()显示图像。
到目前为止,这里的代码是
import numpy as np
import matplotlib.pyplot as plt
def which_root_z4(z,n):
for i in range(n):
z=z-(z**4-1)/(4*z**3)
d=np.zeros((4,)+z.shape)
d[0]=np.abs(z-1)
d[1]=np.abs(z-1j)
d[2]=np.abs(z-1)
d[3]=np.abs(z-1j)
mins=np.argmin(d,axis=0)
return mins
x1d=np.arange(-2,2,1000)
y1d=np.arange(-2,2,1000)
x2d,y2d =np.meshgrid(x1d,y1d)
z2d=x2d + 1.j*y2d
f2d=which_root_z4(z2d,100)
f3d=np.zeros((1000,1000,3))
roots=np.array([x1d,y1d])
colours=[]
f3d[np.where(f2d==0)]=(255,0,0)
f3d[np.where(f2d==1)]=(0,0,255)
f3d[np.where(f2d==2)]=(255,255,0)
f3d[np.where(f2d==3)]=(255,165,0)
plt.imshow(f3d,extent=(-2,2,-2,2))
plt.show()