2013-07-03 21 views

risposta

10

Non sono sicuro di cosa stai cercando qui ... hai una serie di numeri complessi e vuoi mapparli al piano usando la loro parte reale come coordinata x e la parte immaginaria come ?

In questo modo è possibile ottenere la parte reale di qualsiasi numero immaginario di python con number.real e la parte immaginaria con number.imag. Se usi numpy, fornisce anche un insieme di funzioni di aiuto numpy.real e numpy.imag ecc. Che funzionano su array numpy.

Così, per esempio, se si ha avuto una serie di numeri complessi memorizzati o meno così:

In [13]: a = n.arange(5) + 1j*n.arange(6,11) 

In [14]: a 
Out[14]: array([ 0. +6.j, 1. +7.j, 2. +8.j, 3. +9.j, 4.+10.j]) 

... si può solo fare

In [15]: fig,ax = subplots() 

In [16]: ax.scatter(a.real,a.imag) 

Questo trame punti su un diagramma di Argand per ogni punto.

modifica: Per la parte di stampa, è necessario aver importato matplotlib.pyplot tramite from matplotlib.pyplot import * o (come ho fatto io) utilizzare la shell ipython in modalità pylab.

+7

cercare di evitare '' import *: è molto più leggibile e meno confusione se non si importano nello spazio di nome attuale e fare qualcosa di simile 'importazione matplotlib.pyplot come plt' e poi' plt.'. Inoltre, questo ti evita possibili scontri sul nome –

4

Per seguire la risposta di @ inclemento; la seguente funzione produce un diagramma di argand centrato attorno a 0,0 e ridimensionato al massimo valore assoluto nell'insieme di numeri complessi.

Ho usato la funzione di tracciamento e le linee continue specificate da (0,0). Questi possono essere rimossi sostituendo ro- con ro.

def argand(a): 
    import matplotlib.pyplot as plt 
    import numpy as np 
    for x in range(len(a)): 
     plt.plot([0,a[x].real],[0,a[x].imag],'ro-',label='python') 
    limit=np.max(np.ceil(np.absolute(a))) # set limits for axis 
    plt.xlim((-limit,limit)) 
    plt.ylim((-limit,limit)) 
    plt.ylabel('Imaginary') 
    plt.xlabel('Real') 
    plt.show() 

Ad esempio:

>>> a = n.arange(5) + 1j*n.arange(6,11) 
>>> from argand import argand 
>>> argand(a) 

produce: argand function output graph

EDIT:

ho appena capito c'è anche una funzione polar trama:

for x in a: 
    plt.polar([0,angle(x)],[0,abs(x)],marker='o') 

enter image description here