web-dev-qa-db-fra.com

Comment tracer des nombres complexes (diagramme d'Argand) en utilisant matplotlib

Je voudrais créer un diagramme d'Argand à partir d'un ensemble de nombres complexes en utilisant matplotlib.

  • Existe-t-il des fonctions prédéfinies pour m'aider à faire cela?

  • Quelqu'un peut-il recommander une approche?

 enter image description here

Image par LeonardoG , CC-SA-3.0

11
atomh33ls

Je ne sais pas exactement ce que vous cherchez ici ... vous avez un ensemble de nombres complexes et vous souhaitez les mapper au plan en utilisant leur partie réelle comme coordonnée x et la partie imaginaire comme y? 

Si tel est le cas, vous pouvez obtenir la partie réelle de tout nombre imaginaire python avec number.real et la partie imaginaire avec number.imag. Si vous utilisez numpy, il fournit également un ensemble de fonctions d’aide numpy.real et numpy.imag etc. qui fonctionnent sur des tableaux numpy.

Ainsi, par exemple, si vous avez stocké un tableau de nombres complexes, procédez comme suit:

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

... tu peux juste faire

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

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

Ceci trace des points sur un diagramme d'argands pour chaque point.

edit: Pour la partie traçage, vous devez bien sûr avoir importé matplotlib.pyplot via from matplotlib.pyplot import * ou (comme je l’ai fait) utiliser le shell ipython en mode pylab.

14
inclement

Pour faire suite à la réponse de l'inclination; la fonction suivante produit un graphique d'argands centré autour de 0,0 et mis à l'échelle à la valeur absolue maximale dans l'ensemble des nombres complexes.

J'ai utilisé la fonction de tracé et spécifié des lignes continues à partir de (0,0). Ceux-ci peuvent être supprimés en remplaçant ro- par 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()

Par exemple:

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

produit: argand function output graph

MODIFIER:

Je viens de me rendre compte qu'il existe également une fonction polar plot:

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

enter image description here

5
atomh33ls
import matplotlib.pyplot as plt
from numpy import *


'''
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
This draws the axis for argand diagram
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
'''
r = 1
Y = [r*exp(1j*theta) for theta in linspace(0,2*pi, 200)]
Y = array(Y)
plt.plot(real(Y), imag(Y), 'r')
plt.ylabel('Imaginary')
plt.xlabel('Real')
plt.axhline(y=0,color='black')
plt.axvline(x=0, color='black')


def argand(complex_number):
    '''
    This function takes a complex number.
    '''
    y = complex_number
    x1,y1 = [0,real(y)], [0, imag(y)]
    x2,y2 = [real(y), real(y)], [0, imag(y)]


    plt.plot(x1,y1, 'r') # Draw the hypotenuse
    plt.plot(x2,y2, 'r') # Draw the projection on real-axis

    plt.plot(real(y), imag(y), 'bo')

[argand(r*exp(1j*theta)) for theta in linspace(0,2*pi,100)]
plt.show()

https://github.com/QuantumNovice/Matplotlib-Argand-Diagram/blob/master/argand.py

0
Random Science Stuff