@Sirius3 und @pillmuncher:
Wir haben in dem Wörterbuch von unserem Dozenten {Knotenpunkt: (Verbindungspunkt, Widerstand)} gegeben. Das alles versuche ich nun so zu schreiben, dass man der Funktion eine Spannung geben kann, welche am ersten und am letztem Knotenpunkt anliegt und diese dann im Sinne des Knotenpotentialverfahrens, die restlichen Spannungen berechnet. Das i mit r verglichen wird war ein Fehler meinerseits. i muss mit j verglichen werden, damit auf der Diagonale der Matrix die positive Summe steht und beim Rest die negative. Und dort wo keine Verbindung zwischen zwei Knoten besteht ist eine 0.
Und eigentlich wollte ich somit die Spannungen, an jedem Knotenpunkt berechnen.
Hier die überarbeitete Version:
Code: Alles auswählen
ResiLink = {0 : [(1,1.),(2,2.)],
1 : [(0,1.),(3,3.)],
2 : [(0,2.),(3,3.),(4,4.)],
3 : [(1,3.),(2,3.),(5,5.)],
4 : [(3,4.),(5,5.0)],
5 : [(3,5.),(4,5.0)]}
def main(ResiLink,sw=0,ew=1):
"""
Berechnung nach dem Knotenpotentialverfahren, wobei einem Knoten ein Anfangswert und ein Endwert gegeben werden kann. In diesem Falle per default(sw=0,ew=1).
"""
size = len(ResiLink)
ivec = np.zeros((size,1)) #Den Spaltenvektor der Spannungen
lgs = np.zeros((size,size)) #Die Matrix der Leitwerte
for i in range(size): #Befüllen der Matrix
line = ResiLink[i]
for (j,r) in line:
if i == j:
lgs[i,j] = 1/r
else:
lgs[i,j] = -1/r
solved = np.linalg.solve(lgs,ivec)
return solved
if __name__ == '__main__':
main(ResiLink)