| |
|
|
p.specht
| El Gauss-Seidel-Iteration es una zyklisches Verfahren a Solución linearer Gleichungssysteme (LGS) el allgemeinen Form A*x = b. Diese puede ser schrittweise lösen, indem uno mehrfach rechnet: x(neu) = x(alt) - Korr, con Korrekturvektor Korr = A*x(alt) - b
Lo es se also una Fehlerrückkopplung. Jeder Durchgang mejorado el Ergebnis una wenig. Man beginnt esta con geratenen Werten, y algo Glück kommt una Fehler muy nahe Null heraus.
El Gauß-Seidel-Iteration es específicamente geeignet para schlecht konditionierte Gleichungsysteme (el son solche, en denen se Rundungs- y Binärübersetzungsfehler gegenseitig verstärken würden). Sie reagiert auch weniger empfindlich en fehlerbehaftete Koeffizienten como el Gauß-Verfahren. Natürlicher Nachteil de Iterationsverfahren es, daß el Rechenzeit erheblich größer es como en direkten Algorithmen.
Fehlermeldungen debería todavía ser mejorada, porque el Fall "Singuläre Matrix" liegt en Division por Null nämlich no siempre antes. Lo war sin embargo sinnvoll, zumindest esta Fehler una vez abzufangen.
Título de la ventana "LGS-Solución mittels Gauß-Seidel-Iteration"
' Quelle: https://www.rhirte.de/vb/gleichsys.htm#seidel
' Aus Visual Basic en XProfan 11.2a traducido de
' P. Pájaro carpintero 2012-04. Demoware! Keine como siempre geartete Haftung,
' Verwendung ausschließlich en propio Risiko des Anwenders!
'
' TESTMATRIX DEFINIEREN:
Var n&=4
Var e!=val("1e-9")
Declarar A![n&,n&+1],x![n&],Er$
' Koeffizienten + Rechte Página:
A![1,1]=1 :A![1,2]=0 :A![1,3]=0 :A![1,4]=0 : A![1,5]=10' = b1
A![2,1]=0 :A![2,2]=1 :A![2,3]=0 :A![2,4]=0 : A![2,5]=20' = b2
A![3,1]=0 :A![3,2]=0 :A![3,3]=1 :A![3,4]=0 : A![3,5]=30' = b3
A![4,1]=0 :A![4,2]=0 :A![4,3]=0 :A![4,4]=1 : A![4,5]=40' = b4
Start:
Declarar xp![n&],R!,S!,T!,i&,j&,num&
WhileLoop n&:i&=&Loop
x![i&] = 5' Startvektor con uno ersten Ausgangslösung
EndWhile
Repeat
WhileLoop n&
i&=&Loop
S!=0
WhileLoop i&-1
j&=&Loop
S!=S!+A![i&,j&]*xp![j&]
EndWhile
T!=0
WhileLoop i&+1,n&
j&=&Loop
T!=T!+A![i&,j&]*X![j&]
EndWhile
if A![i&,i&]=0
imprimir " Singuläre Matrix!"
Er$="sing"
BREAK
Endif
xp![i&]=(A![i&,n&+1]-S!-T!) / A![i&,i&]
EndWhile
caso Er$="sing":romper
S!=0
WhileLoop n&:i&=&Loop
R!=X![i&]-xp![i&]
S!=S!+ R!*R!
X![i&]=xp![i&]
EndWhile
num& = num& + 1
Until Sqr(S!/(n&-1)) < e!
Case Er$<>"":Goto "Stop"
' Edición:
imprimir "\n Ergebnis gefunden en ";num&;" Durchläufen:"
WhileLoop n&
i&=&Loop
imprimir " x"+str$(i&)+" = ";x![i&]
EndWhile
Stop:
imprimir
WaitInput
End
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 17.04.2021 ▲ |
|
|
|