HOWTO · Python

Numeri immaginari in Python

Questo tutorial discute i numeri immaginari in Python

In questa pagina

Python rappresenta i valori con componenti reali e immaginarie tramite il tipo integrato complex. Scrivi l’unità immaginaria con j (o J), come in 8 + 5j, oppure crea un valore con complex(real, imaginary). Gli esempi seguenti mostrano come creare, esaminare e usare i numeri complessi in Python e come eseguire calcoli con essi.

Rappresentare i numeri immaginari con i numeri complessi di Python

Un numero complesso ha una componente reale e una immaginaria. Python usa j come suffisso della componente immaginaria, secondo la convenzione ingegneristica; per esempio, 8 + 5j rappresenta 8 più 5 volte l’unità immaginaria. Il costruttore integrato complex() accetta le componenti reale e immaginaria come numeri separati. Entrambe le forme producono un’istanza del tipo complex.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

a = 8 + 5j
b = complex(8, 5)
print(type(a))
print(a == b)
<class 'complex'>
True

Usa il costruttore quando hai già le componenti reale e immaginaria come valori separati, per esempio se provengono da input o da calcoli precedenti. Il secondo argomento è il coefficiente dell’unità immaginaria, quindi complex(8, 5) rappresenta 8 + 5j.

Leggere le componenti e il coniugato di un numero complesso

I membri .real e .imag sono attributi: leggili senza parentesi. Restituiscono le due componenti come valori in virgola mobile. Il membro .conjugate() è invece un metodo: chiamalo con le parentesi per cambiare il segno della componente immaginaria mantenendo invariata quella reale.

Per esempio, per 8 + 5j, la parte reale è 8.0, la parte immaginaria è 5.0 e il coniugato è (8-5j). Il coniugato è utile nell’aritmetica complessa, anche per semplificare una divisione il cui denominatore è complesso.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

value = 8 + 5j
print(value.real)
print(value.imag)
print(value.conjugate())

Eseguire operazioni aritmetiche con i numeri complessi

Gli operatori aritmetici di Python agiscono direttamente sui valori complessi. L’addizione somma separatamente le componenti reali e quelle immaginarie; la moltiplicazione segue le normali regole algebriche e usa j * j == -1. Con a = 8 + 5j e b = 10 + 2j, a + b vale 18 + 7j, mentre a * b vale 70 + 66j.

La sola espressione a.imag + b.imag dà 7.0: somma esclusivamente le componenti immaginarie, quindi non è la somma dei due numeri complessi. Usa a + b quando vuoi eseguire un’addizione complessa completa.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

a = 8 + 5j
b = 10 + 2j
print(a + b)
print(a * b)

Usare cmath per i calcoli con valori complessi

Il modulo cmath della libreria standard fornisce funzioni matematiche che accettano valori complessi e possono restituire risultati complessi. Usa cmath.phase(value) per ottenere l’angolo in radianti, cmath.exp(value) per l’esponenziale e funzioni come cmath.sin(value) e cmath.sinh(value) per i calcoli trigonometrici e iperbolici. Sono funzioni del modulo cmath, non metodi del valore complesso.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import cmath

value = 1 + 1j
print(cmath.phase(value))
print(cmath.exp(value))
print(cmath.sin(value))
print(cmath.sinh(value))
0.7853981633974483
(1.4686939399158851+2.2873552871788423j)
(1.2984575814159773+0.6349639147847361j)
(0.6349639147847361+1.2984575814159773j)

La fase si misura in radianti. Le comuni funzioni math con valori reali in genere si aspettano input reali; usa cmath quando il calcolo coinvolge valori complessi. I risultati possono mostrare approssimazioni in virgola mobile: nei controlli numerici, confronta i valori calcolati usando una tolleranza.

Memorizzare numeri complessi in array NumPy

NumPy è una libreria di terze parti opzionale per lavorare con gli array. La funzione numpy.array() può memorizzare valori complessi in un array monodimensionale, per esempio numpy.array([8 + 5j, 10 + 2j, 4 + 3j]). NumPy deduce per questi valori un tipo di dato complesso, così le operazioni sull’array mantengono entrambe le componenti. Prima di usare questo esempio con la libreria, installa e importa NumPy nel tuo ambiente; il tipo integrato complex di Python non ne ha bisogno.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy

values = numpy.array([8 + 5j, 10 + 2j, 4 + 3j])
print(values)
[ 8.+5.j 10.+2.j  4.+3.j]

Scegli un array NumPy quando devi applicare operazioni numeriche a una raccolta di valori complessi. Per un singolo valore o un calcolo semplice bastano il tipo integrato e i suoi operatori. La formattazione degli array è gestita da NumPy, quindi spaziatura e precisione visualizzate possono dipendere dai valori e dalle impostazioni di stampa.