这个功能给了我一些悲伤,我觉得有些事情可能会四舍五入或者表现得不像我期望的那样。我尝试以小增量改变phi,AFn的值以绝对不应该的方式跳跃。它应该是这样的圆形辐射模式:
它有正确的趋势,但显然有些不对劲。 这是代码:
import numpy as np
import matplotlib.pyplot as plt
N = 7 #number of arrays
phi = np.arange(0, np.pi, np.pi/100)`
def ArrayFact(phi):
i, k, d = 0.0, 4.0, 1.0
while i<N:
d = d+2
AF = AF + np.cos( k*d * np.cos(phi) ) #array factor formula for nonuniform baselines
i=i+1
AFn = (1 / float(N)) * AF
return abs(AFn)
plt.figure(figsize=(12, 8))
plt.polar(phi, ArrayFactor(phi, N, k) * np.sin(phi))
plt.legend(loc='lower right', bbox_to_anchor = (1, 0))
plt.show()
非常感谢任何帮助。
编辑:谢谢大家,这篇文章从头到尾都是一团糟,但这对我们所有人来说都是最好的。我想我们都在这里学到了一些东西,也许不是关于Python而是关于人。
答案 0 :(得分:2)
试试这样:
import numpy as np
import matplotlib.pyplot as plt
N = 7 #number of arrays
phi = np.arange(0.0, np.pi, np.pi/1000.0)
k = 4.0
def ArrayFactor(phi,N,k):
i = 0.0
d = 1.0
AF = 0.0
while i<N:
d = d+2
AF = AF + np.cos( k*d * np.cos(phi) ) #array factor formula for nonuniform baselines
i=i+1
AFn = (1 / float(N)) * AF
return abs(AFn)
plt.figure(figsize=(12, 8))
plt.polar(phi, ArrayFactor(phi, N, k) * np.sin(phi))
plt.legend(loc='lower right', bbox_to_anchor = (1, 0))
plt.show()
答案 1 :(得分:2)
清理完代码后,我能够将其绘制成圆形曲线:
import numpy as np
import matplotlib.pyplot as plt
N = 7 #number of arrays
phi = np.arange(0, np.pi, np.pi/500) # Increased it from np.pi/100 to get the roundedness
def ArrayFact(phi):
i, k, d = 0, 4.0, 1
AF = 0
while i<N:
d = d+2
AF = AF + np.cos( k*d * np.cos(phi) ) #array factor formula for nonuniform baselines
i=i+1
AFn = (1 / float(N)) * AF
return abs(AFn)
plt.figure(figsize=(12, 8))
plt.polar(phi, ArrayFact(phi) * np.sin(phi))
plt.legend(loc='lower right', bbox_to_anchor = (1, 0))
plt.show()