2017-09-15 3 views
-4

Cette fonction me donne un peu de chagrin, je pense que quelque chose est possible d'arrondir ou de ne pas se comporter comme je le souhaite. J'ai essayé de changer phi par petits incréments et la valeur de AFn saute d'une manière qui ne devrait certainement pas. Il devrait être un diagramme de rayonnement rond comme ceci: Expected radiation responseQuelle est la cause de cette fonction simple à tracer mal?

mais ça sort chatoyante et, comme aspect discret ceci: Gross wrong radiation pattern

Il a la bonne sorte de tendances, mais il y a clairement quelque chose de mal. Voici le code:

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

Toute aide serait grandement appréciée. Edit: Merci les gars, ce message était un gâchis du début à la fin, mais tout a fonctionné pour le mieux pour nous tous. Je pense que nous avons tous appris quelque chose ici, peut-être pas à propos de Python mais certainement à propos des gens.

+0

permet de démarrer en fixant votre indentation afin que nous puissions évaluer avec précision. – pstatix

+2

Et en supprimant le tick arrière erroné après 'arange (... pi/100)' afin que nous puissions facilement copier et coller. \t Et appelez votre fonction 'ArrayFact' par le nom que vous avez défini plutôt que' ArrayFactor'. Et définissant 'k' quelque part afin que nous puissions utiliser votre appel plot. Et les au moins deux erreurs supplémentaires qui rendent le code tel que vous l'avez posté provoquent des erreurs et sont inutilisables. – saintsfan342000

+0

Je pense que c'est piquant parce que vous avez seulement 100 points. np.pi/100 Je pense qu'il fait 100 points. Regarde mieux avec 1000. Vois ma réponse. –

Répondre

2

Après le nettoyage du code, j'ai pu obtenir ce pour tracer des courbes arrondies:

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

Ah merci beaucoup, j'ai trouvé le problème. C'était en fait dans la façon dont je changeais d dans mon code original. Merci pour l'aide. – Kieran

2

Essayez comme ceci:

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