Numerische Berechnungen mit NumPy

Anhand von zwei Beispielen soll gezeigt werden, wie mit dem Modul NumPy Matrizen multipliziert und lineare Gleichungen gelöst werden können. NumPy akzeptiert auch komplexe Zahlen.

Matrizenmultiplikation mit NumPy

Das Programmbeispiel zeigt, wie mit den Ketten-Parametern die Eingangsspannung U1 und die Eingangsstromstärke I1 einer π-Schaltung berechnet werden.

pi-schaltung

Die aktuelle NumPy-Dokumentation empfiehlt, die Klasse "matrix" nicht mehr zu verwenden. Stattdessen sollen reguläre NumPy-Arrays genutzt werden. Die Klasse "matrix" wird in naher Zukunft nicht mehr zur Verfügung gestellt.

Mehr Informationen zur NumPy-Klasse "matrix" finden Sie hier.

Für den Querwiderstand gilt:

\[A_{q}=\left( \begin{matrix}1&0\\ Y&1\end{matrix} \right) \]

Für den Längswiderstand gilt:

\[A_{l}=\left( \begin{matrix}1&R\\ 0&1\end{matrix} \right) \]

Das Programm multipliziert die Matrix des ersten Quergliedes mit der Matrix des Längsgliedes und der Matrix des zweiten Quergliedes.

#Multiplikation von Matrizen
import numpy as np
from numpy.linalg import multi_dot
R1=1. #Querwiderstand am Eingang
R2=2. #Längswiderstand
R3=1. #Querwiderstand am Ausgang
U2=1. #Ausgangsspannung
I2=1. #Ausgangsstrom
#Matrizen der Kettenparameter
A1q=np.array([[1., 0],
            [1./R1, 1.]])
Al=np.array([[1, R2],
            [0, 1.]])
A2q=np.array([[1., 0],
            [1./R3, 1.]])
#A1=np.matmul(A1q,Al)              #1
#A=np.matmul(A1,A2q)               #2
#A=A1q@Al@A2q                      #3        
#A=A1q.dot(Al).dot(A2q)            #4
A=multi_dot([A1q,Al,A2q])          #5
b=np.array([[U2],[I2]])
E=np.matmul(A,b)
#Ausgabe
print("Kettenform A\n",A)
print("Eingangsgrößen\n",E)
print("Eingangsspannung U1=%3.2f V" %E[0])
print("Eingangsstrom    I1=%3.2f A" %E[1])

Ausgabe

Kettenform A
 [[3. 2.]
 [4. 3.]]
Eingangsgrößen
 [[5.]
 [7.]]
Eingangsspannung U1=5.00 V
Eingangsstrom    I1=7.00 A

Analyse

Die Matrizenmultiplikation erfolgt in der Zeile #5 mit der NumPy-Methode multi_dot(...). Alternative Möglichkeiten sind auskommentiert. Am einfachsten kann die Matrizenmultiplikation mit dem At-Symbol @ durchgeführt werden.

Lösen eines linearen Gleichungssystems

Für das Netzwerk mit komplexen Wechselstromwiderständen sollen die vier Maschenströme berechnet werden.

wechselstromnetzwerk

Aus der Schaltung kann folgende Koeffizientenmatrix abgelesen werden:

Z1+Z2+Z4  -Z2    -Z4     0
  -Z2   Z2+Z3+Z5  0     -Z5
  -Z4      0   Z4+Z6+Z7 -Z7
    0     -Z5    -Z7  Z5+Z7+Z8

Das Programm berechnet die Maschenströme I1 bis I4.

#Lösung eines linearen Gleichungssystems
import numpy as np
import numpy.linalg
U1=230
U2=-230
U3=230
U4=-230
Z1=1+2j
Z2=2-4j
Z3=3+4j
Z4=2+5j
Z5=1+5j
Z6=2+5j
Z7=4-5j
Z8=1+5j
#Koeffizientenmatrix
Z=np.array([[Z1+Z2+Z4,-Z2,-Z4, 0],
            [-Z2,Z2+Z3+Z5, 0,-Z5],
            [-Z4, 0,Z4+Z6+Z7,-Z7],
            [0,-Z5,-Z7,Z5+Z7+Z8]])
U=np.array([U1,-U2,U3,-U4])
I=np.linalg.solve(Z,U)             #1
I=np.round(I,decimals=2)
#Ausgabe
print("Maschenstrom 1:",I[0],"A")
print("Maschenstrom 2:",I[1],"A")
print("Maschenstrom 3:",I[2],"A")
print("Maschenstrom 4:",I[3],"A")     

Ausgabe

Maschenstrom 1: (33.16-52.04j) A
Maschenstrom 2: (19.63-49.35j) A
Maschenstrom 3: (20.09-41.98j) A
Maschenstrom 4: (18.09-51.66j) A

Analyse

In Zeile #1 wird das Gleichungssystem mit der Methode linalg.solve(Z,U) gelöst. Als erster Parameter wird die Koeffizientenmatrix und als zweiter Parameter wird der Spaltenvektor der Spannungsquellen übergeben. Der Lösungsvektor wird in dem Objekt I gespeichert.

Besuchen Sie die Seite von NumPy.

Startseite Matplotlib SciPy SymPy VPython