Verfasst am: 03.01.2010, 17:06
Titel: Hilfe beim SOR-Verfahren
Hi, mein erster post ist gleich mal ein Problem, hoffe mir kann jemand helfen. Ich möchte noch erwähnen dass ich seit ca 10 Stunden mit Matlab arbeite, und sonst keinerlei Erfahrungen auf diesem Gebiet habe.
Ich glaube die Iterationsvorschrift stimmt nicht. Bekomme für Vektor x immer NaN raus.
Code:
for k=1:n
x(k)=(1-w)*x(k)+(w/A(k,k))*(b(k)-(A(k,:)*x-A(k,k)*x(k)));
end
Kennt sich da niemand aus? Also, ich habe ein paar Dinge am Programm geändet. Scheint jetzt zu funktionieren, ABER:
Nur für Matrizen bis 18x18!? Ab 19x19 bekomm ich immer NaN, woran kann da liegen?
Code:
function[x]= sor(A,b,w,x0,eps) % SOR-Verfahren Lösung von LGS Ax=b % A Matrix des LGS % b Ergebniss des LGS (rechte Seite) % w Relaxionsparameter % x Startvektor % eps Fehlerschranke % x Ergeniss Vektor x % i Anzahl der Iterationen
% Prüfe, ob A und b gegeben if nargin<2 error('Mindesteingabe erforderlich'), end
% Prüfe, ob Matrix A quadratisch ist [n,m]=size(A);
if n~=m
error('A ist keine quadratische Matrix'), end
% Prüfe, ob b Spaltenvektor ist [zb,sb]=size(b);
if sb>1
b=b'; end
% Prüfe, ob Dimension von Matrix A und Vektor b passt if n~=size(b) error('Dimensionen von A und b ungültig'), end
% Prüfe, ob w geg., und im korrekten Intervall if nargin<3
w=1.2; end if w<=1, error('w nicht im Intervall(1,2]'), end if w>2, error('w nicht im Intervall(1,2]'), end
% Prüfe, ob Startvektor geg., ansonsten setze Vektor auf 0
n=length(b);
if nargin<4
x0=zeros(n,1); end
% Prüfe, ob x Spaltenvektor ist [zx0,sx0]=size(x0);
if sx0>1
x0=x0'; end
% Falls kein Abbruchkriterium geg., setze Ak auf 5E-6 if nargin<5 eps=5E-6; end
% Bilden der Diagonalmatrix D und Dreiecksmatrizen L und U
L=tril(A);
U=triu(A);
D=L.*U;
for i=0:1000;
x=((D+w*L)^(-1))*((1-w)*D-w*U)*x0+w*((D+w*L)^(-1))*b;
Erstens sind es die negativen Dreiecksmatrizen. Und zweitens hab ich gelesen, dass die ausgangsmatrix positiv definit sein muss. Dann funktioniert es.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.