导致这个简单函数绘制不良的原因是什么?

时间:2017-09-15 17:12:51

标签: python numpy math matplotlib plot

这个功能给了我一些悲伤,我觉得有些事情可能会四舍五入或者表现得不像我期望的那样。我尝试以小增量改变phi,AFn的值以绝对不应该的方式跳跃。它应该是这样的圆形辐射模式:Expected radiation response

但它出现了spikey和离散的外观,如下所示:Gross wrong radiation pattern

它有正确的趋势,但显然有些不对劲。 这是代码:

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而是关于人。

2 个答案:

答案 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()

enter image description here