| |
|
|
p.specht
| qui Gauss-Seidel-Iteration est un zyklisches procéder zur Solution linearer Gleichungssysteme (LGS) qui allgemeinen forme A*x = b. cet peux on schrittweise lösen, indem on mehrfach rechnet: x(récente) = x(vieux) - Korr, avec Korrekturvektor Korr = A*x(vieux) - b
Es handelt sich alors um une Fehlerrückkopplung. chacun Durchgang verbessert cela Ergebnis un peu. on beginnt dabei avec geratenen Werten, et quelque chose Glück venez un faute très proche zéro heraus.
qui Gauß-Seidel-Iteration ist speziell approprié pour mal konditionierte Gleichungsysteme (ce sont solche, chez denen sich Rundungs- et Binärübersetzungsfehler mutuel verstärken würden). vous reagiert aussi moins empfindlich sur fehlerbehaftete Koeffizienten comme cela Gauß-procéder. Natürlicher le tort de Iterationsverfahren ist, qui qui Rechenzeit erheblich größer ist comme chez direkten Algorithmen.
Fehlermeldungen devrait amélioré volonté, car qui le cas "Singuläre Matrix" liegt chez Division par zéro nämlich pas toujours avant. Es était cependant sinnvoll, zumindest cette faute einmal abzufangen.
Titre de la fenêtre "LGS-Solution mittels Gauß-Seidel-Iteration"
' source: https://www.rhirte.de/vb/gleichsys.htm#seidel
' Aus Visual Basic dans XProfan 11.2a traduit de
' P. Specht 2012-04. Demoware! aucun comment toujours geartete la responsabilité,
' Verwendung ausschließlich sur eigenes Risiko des Anwenders!
'
' TESTMATRIX DEFINIEREN:
Var n&=4
Var e!=val("1e-9")
Déclarer A![n&,n&+1],x![n&],il$
' Koeffizienten + Rechte page:
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:
Déclarer xp![n&],R!,S!,T!,i&,j&,num&
WhileLoop n&:i&=&Boucle
x![i&] = 5' Startvektor avec einer ersten Ausgangslösung
Endwhile
Repeat
WhileLoop n&
i&=&Boucle
S!=0
WhileLoop i&-1
j&=&Boucle
S!=S!+A![i&,j&]*xp![j&]
Endwhile
T!=0
WhileLoop i&+1,n&
j&=&Boucle
T!=T!+A![i&,j&]*X![j&]
Endwhile
si A![i&,i&]=0
imprimer " Singuläre Matrix!"
il$="sing"
BREAK
Endif
xp![i&]=(A![i&,n&+1]-S!-T!) / A![i&,i&]
Endwhile
cas il$="sing":pause
S!=0
WhileLoop n&:i&=&Boucle
R!=X![i&]-xp![i&]
S!=S!+ R!*R!
X![i&]=xp![i&]
Endwhile
num& = num& + 1
Until Sqr(S!/(n&-1)) < e!
Cas il$<>»:Goto "Stop"
' Ausgabe:
imprimer "\n Ergebnis trouvé dans ";num&;" Durchläufen:"
WhileLoop n&
i&=&Boucle
imprimer " x"+str$(i&)+" = ";x![i&]
Endwhile
Stop:
imprimer
WaitInput
Fin
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 17.04.2021 ▲ |
|
|
|