2017-09-15 46 views
-4

這個功能給了我一些悲傷,我認爲有可能是四捨五入或者不像我期望的那樣。我試着以小增量改變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,而是關於人。

+0

讓我們通過固定的縮進開始這樣我們才能準確評估。 – pstatix

+2

並刪除'arange(... pi/100)'後的錯誤後退勾號,以便我們可以輕鬆地複製和粘貼。 \t 並根據您定義的名稱而不是'ArrayFactor'調用函數'ArrayFact'。並在某處定義'k',以便我們可以實際使用您的情節調用。至少有兩個額外的錯誤會導致您發佈的代碼引發錯誤並且無法使用。 – saintsfan342000

+0

我認爲這是尖刻的,因爲你只有100分。 np.pi/100我認爲它是100分。用1000看起來更好。看我的答案。 –

回答

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

+0

啊,多謝了,我發現了這個問題。實際上,我是如何在原始代碼中更改d的。謝謝您的幫助。 – Kieran

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() 
相關問題