Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Gauß Seidel Verfahren in Matlab
Autor
Kein bestimmter Bereich J Gauß Seidel Verfahren in Matlab
francesblue
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 03.05.2004
Mitteilungen: 73
Wohnort: Berlin
  Themenstart: 2004-05-27

Hallo Da mir letztens so gut mit der LR Zerlegung geholfen wurde wollte ich nochmal fragen ob mir jemand bei dem Gauß Seidel Verfahren helfen kann! Der Aufruf des Programms lautet x=solve(a,b,c,d,x0,tol,nmax) Es soll Ax=d lösen A soll nicht als n x n Matrix gespeichert werden sonder nur die Hauptdiagonale a und die Nebendiagonalen c und b! x0 ist der Startvektor x soll alle Iterierten x_k Spaltenweise enthalten Es soll Abgebrochen werden wenn norm(Ax_k-d)_2 + norm(x_k-x_(k-1))_2 < tol oder sobald nmax überschritten wird 1) Wie speichere ich meine x(k) so das sie Spaltenweise in x stehen? 2) Wie ungefair muss das Programm in Matlab aussehen? Danke


   Profil
N-man
Senior Letzter Besuch: im letzten Monat
Dabei seit: 15.10.2002
Mitteilungen: 2579
Wohnort: Zürich
  Beitrag No.1, eingetragen 2004-05-30

Hallo du! Also... ich hab kein Matlab hier und kann es ohne Hilfe schlecht aus dem Kopf... also alles ohne Gewähr. 1.) x ist nun eine Matrix und in jedem Schritt hängst du eine Spalte an, das geht mittels x=(x,xk) dabei ist xk die Lösung der k-ten Iteration in Form eines Spaltenvektors. Es kann sein, dass man statt runder eckige Klammern braucht. 2.) Zunächst solltest du dir die Bandmatrix basteln. Das geht ganz gut, glaub ich, mit dem Befehl "spdiag"... da hilft die Hilfe weiter, aber keine Garantie, dass der Befehl wirklich so heißt. Und dann baust du dir eine Schleife, irgendwie der Art... while ...>tol AND Anzahl


   Profil
francesblue
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 03.05.2004
Mitteilungen: 73
Wohnort: Berlin
  Beitrag No.2, vom Themenstarter, eingetragen 2004-05-30

Hallo Hier mein Programm function x=solve1(a,b,c,d,x0,tol,nmax,par) [n,m]=size(a); A=zeros(n,n); [s,t]=size(b); [k,l]=size(c) b(n)=0 c(n)=0 A=diag(a(1:n)); B=diag(b(1:n-1),-1); C=diag(c(1:n-1),+1); A=A+B+C A*x0 x(1)=a(1)*x0(1)+(b(1)*x0(2)) %x(2)=c(1)*x0(1)+a(2)*x0(2)+b(2)*x0(3) x(n)=c(n-1)*x0(n-1)+a(n)*x0(n) for i=2:n     x(i)=c(i-1)*x0(i)+a(i)*x0(i+1)+b(i)*x0(i+2)     size(x(i)) end x(n)=c(n-1)*x0(n-1)+a(n)*x0(n) %entweder x=[x,neuervektor] %oder x(:,i)=neuervektor switch (par)     case 1         D = diag(a) ;                     L = diag(b(1:n-1),-1) ;                         U = diag(c(1:n-1),1) ;         x=[n];         i = 2;                                           while  i<=nmax             x0=x(1);             x(i)=inv(D)*(L+U)*x(i-1)+inv(D)*b;             if sqrt((mvmult(a,b,c,x0))^2-d^2)+sqrt(x(i)^2+x(i-1)^2)


   Profil
susi0815
Senior Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 20.11.2003
Mitteilungen: 1559
Wohnort: Hannover
  Beitrag No.3, eingetragen 2004-06-01

Hi, warum so ein Aufwand ? Das ist ja mit Kanonen auf Spatzen schießen ! Du kennst doch sicher die elementweisen Formeln für das Gauß-Seidel-Verfahren, die kann man ganz leicht auf den Fall mit den Nebendiagonalen übersetzen. Das nutzt dann zwar nicht die Möglichkeiten von matlab mit Inversen usw. aus, ist aber viel kürzer und schneller als das da. Gruß, Susi.


   Profil
francesblue hat die Antworten auf ihre/seine Frage gesehen.
Das Thema wurde von einem Senior oder Moderator abgehakt.
francesblue wird per Mail über neue Antworten informiert.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]