Anhand von zwei Beispielen soll gezeigt werden, wie mit Python und Julia Matrizen multipliziert und lineare Gleichungen gelöst werden können. NumPy und Julia unterstützen auch Berechnungen mit komplexen Zahlen.
Das Programmbeispiel zeigt, wie mit den Ketten-Parametern die Eingangsspannung U1 und die Eingangsstromstärke I1 einer π-Schaltung berechnet werden.
Für den Querwiderstand gilt:
Für den Längswiderstand gilt:
#pi_schaltung.py
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.]])
#Matrizenmultiplikation
A=A1q@Al@A2q #1
b=np.array([[U2],[I2]]) #2
E=A@b #3
U1,I1=E[0,0],E[1,0]
#Ausgabe
print("Kettenform A\n",A)
print("Eingangsgrößen\n",E)
print("Eingangsspannung U1=%3.2f V" %U1)
print("Eingangsstrom I1=%3.2f A" %I1)
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 #1 mit dem NumPy-Infixoperator @
. In #2 steht der Inhomogenitätsvektor. In #3 werden die Einganggrößen U1 und I1 berechnet.
Der Operator für die Matrizenmultiplikation ist das Asterisk-Symbol *
.
#pi_schaltung.jl
using LinearAlgebra
R1,R2,R3=1,2,1
U2 = 1
I2 = 1
A1q=[1 0
1/R1 1]
Al =[1 R2
0 1]
A2q=[1 0
1/R3 1]
A=A1q*Al*A2q
b = [U2,I2]
E=A*b
println("A = ",A)
println("E = ",E)
println("U1 = ",E[1]," V")
println("I1 = ",E[2]," A")
A = [3.0 2.0; 4.0 3.0] E = [5.0, 7.0] U1 = 5.0 V I1 = 7.0 A
Für das Netzwerk mit den acht komplexen Wechselstromwiderständen sollen die vier Maschenströme berechnet werden.
Aus der Schaltung kann folgendes Gleichungssystem abgelesen werden:
\[\left( \begin{gathered}Z_{1}+Z_{2}+Z_{4}\ -Z_{2}\ -Z_{4}\ \ 0\\ -Z_{2}\ \ \ Z_{2}+Z_{3}+Z_{5}\ \ 0\ -Z_{5}\\ -Z_{4}\ \ 0\ \ \ Z_{4}+Z_{6}+Z_{7}\ -Z_{7}\\ \ \ \ \ 0\ -Z_{5}\ -Z_{7}\ \ \ Z_{5}+Z_{7}+Z_{8}\end{gathered} \right) \bullet \left( \begin{gathered}\begin{gathered}I{}_{1}\\ I_{2}\\ I_{3}\end{gathered}\\ I_{4}\end{gathered} \right) =\left( \begin{gathered}U_{1}\\ U_{2}\\ U_{3}\\ U_{4}\end{gathered} \right) \]Das Python-Programm maschenstromverfahren.py berechnet die vier Maschenströme I1 bis I4.
#maschenstromverfahren.py
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]])
#Inhomogenitätsvektor
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 NumPy-Funktion 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.
#maschenstromverfahren.jl
using LinearAlgebra
U1 = 230
U2 = -230
U3 = 230
U4 = -230
Z1 = 1 + 2im #1
Z2 = 2 - 4im
Z3 = 3 + 4im
Z4 = 2 + 5im
Z5 = 1 + 5im
Z6 = 2 + 5im
Z7 = 4 - 5im
Z8 = 1 + 5im
#Koeffizientenmatrix
Z = [(Z1+Z2+Z4) -Z2 -Z4 0;
-Z2 (Z2+Z3+Z5) 0 -Z5;
-Z4 0 (Z4+Z6+Z7) -Z7;
0 -Z5 -Z7 (Z5+Z7+Z8)]
#Inhomogenitätsvektor
U = [U1, -U2, U3, -U4]
I = Z \ U #2
I = round.(I; digits=2, base=10)
#Ausgabe
println("Maschenstrom 1: ", I[1], " A") #3
println("Maschenstrom 2: ", I[2], " A")
println("Maschenstrom 3: ", I[3], " A")
println("Maschenstrom 4: ", I[4], " A")
Maschenstrom 1: 33.16 - 52.04im A Maschenstrom 2: 19.63 - 49.35im A Maschenstrom 3: 20.09 - 41.98im A Maschenstrom 4: 18.09 - 51.66im A
im
(=Imaginärteil einer komplexen Zahl) vereinbart (#1). Das Gleichungssystem wird in #2 gelöst. In Julia wird ein lineares Gleichungssystem mit dem Backslash-Operator \ gelöst. Der Backslash-Operator steht zwischen der Koeffizientenmatrix und dem Inhomogenitätsvektor. Bei der Ausgabe der Maschenströme muss berücksichtigt werden, dass bei Julia-Vektoren die Indexierung mit einer 1 beginnt (#3). Erwartungsgemäß berechnen beide Programme die gleichen Lösungen.
Besuchen Sie die Seite von NumPy.
Besuchen Sie die Seite von Julia.
Startseite | Funktionsplots | Differenzieren | Integrieren | Differenzialgleichungen | Animationen | Literaturverzeichnis | Impressum