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.
Das Programmbeispiel zeigt, wie mit den Ketten-Parametern die Eingangsspannung U1 und die Eingangsstromstärke I1 einer π-Schaltung berechnet werden.
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])
Kettenform A [[3. 2.] [4. 3.]] Eingangsgrößen [[5.] [7.]] Eingangsspannung U1=5.00 V Eingangsstrom I1=7.00 A
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.
Für das Netzwerk mit komplexen Wechselstromwiderständen sollen die vier Maschenströme berechnet werden.
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")
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
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.