ich habe die Aufgabe, ein Programm für das SOR-Verfahren zu schreiben.
Ich habe bisher bereits eine Matrix und die rechte Seite eingelesen und das Verfahren grundlegend als Rechnungen programmiert.
Mein Problem ist, dass ich die Rechenschritte eigentlich immer wiederholen müsste und nicht weiß, wie das funktioniert.
normalerweise müsste ich die Schritte für die verschiedenen x0 immer wiederholen, bis mein Vergleichswert 0 ergibt (Die Annäherung von x0 zum tatsächlichen Ergebnis x auf 10^-7 Stellen).
Hab es schon irgendwie mit For und While versucht, aber es hat nie das gemacht was ich wollte.
Kann mir jemand sagen, ob es einen Befehl gibt, der den Abschnitt zwischen den #### so lange wiederholt, bis die Annäherung genau genug ist?
Alternativ ginge auch den Abschnitt n-mal zu wiederholen.
Vielen Dank schonmal
Code: Alles auswählen
import math
from pprint import pprint
import numpy as np
from numpy import array, zeros, diag, diagflat, dot
w = 1
A = np.loadtxt("Matrix.txt")
b = np.loadtxt("rechte Seite")
x0 = [0,1,-1,2]
############################
s1 = np.dot( np.array(A)[0,:], x0)
xa1=np.array(x0)[0]-(w/np.array(A)[0,0]) *(s1-np.array(b)[0])
x0.remove(0)
x0.insert(0,xa1)
s2 = np.dot( np.array(A)[1,:], x0)
xa2=np.array(x0)[1]-(w/np.array(A)[1,1]) *(s2-np.array(b)[1])
x0.remove(1)
x0.insert(1,xa2)
s3 = np.dot( np.array(A)[2,:], x0)
xa3=np.array(x0)[2]-(w/np.array(A)[2,2]) *(s3-np.array(b)[2])
x0.remove(-1)
x0.insert(2,xa3)
s4 = np.dot( np.array(A)[3,:], x0)
xa4=np.array(x0)[3]-(w/np.array(A)[3,3]) *(s4-np.array(b)[3])
x0.remove(2)
x0.insert(3,xa4)
print (x0)
s1 = np.dot( np.array(A)[0,:], x0)
xb1=np.array(x0)[0]-(w/np.array(A)[0,0]) *(s1-np.array(b)[0])
x0.remove(xa1)
x0.insert(0,xb1)
s2 = np.dot( np.array(A)[1,:], x0)
xb2=np.array(x0)[1]-(w/np.array(A)[1,1]) *(s2-np.array(b)[1])
x0.remove(xa2)
x0.insert(1,xb2)
s3 = np.dot( np.array(A)[2,:], x0)
xb3=np.array(x0)[2]-(w/np.array(A)[2,2]) *(s3-np.array(b)[2])
x0.remove(xa3)
x0.insert(2,xb3)
s4 = np.dot( np.array(A)[3,:], x0)
xb4=np.array(x0)[3]-(w/np.array(A)[3,3]) *(s4-np.array(b)[3])
x0.remove(xa4)
x0.insert(3,xb4)
print (x0)
s1 = np.dot( np.array(A)[0,:], x0)
xa1=np.array(x0)[0]-(w/np.array(A)[0,0]) *(s1-np.array(b)[0])
x0.remove(xb1)
x0.insert(0,xa1)
s2 = np.dot( np.array(A)[1,:], x0)
xa2=np.array(x0)[1]-(w/np.array(A)[1,1]) *(s2-np.array(b)[1])
x0.remove(xb2)
x0.insert(1,xa2)
s3 = np.dot( np.array(A)[2,:], x0)
xa3=np.array(x0)[2]-(w/np.array(A)[2,2]) *(s3-np.array(b)[2])
x0.remove(xb3)
x0.insert(2,xa3)
s4 = np.dot( np.array(A)[3,:], x0)
xa4=np.array(x0)[3]-(w/np.array(A)[3,3]) *(s4-np.array(b)[3])
x0.remove(xb4)
x0.insert(3,xa4)
print (x0)
###########################################
print ("A:", A)
print ("b:", b)
print ("x:", x0)
y = np.linalg.solve(A, b)
print ("y:",y)
z = np.around(Ergebnis-y,7)
t = np.array([1,1,1,1])
Vergleich=np.dot( z, t)
print(Vergleich)