Thomas-Algorithmus in Matlab programmieren

Neue Frage »

Physinetz Auf diesen Beitrag antworten »
Thomas-Algorithmus in Matlab programmieren
Hallo,

ich möchte den Thomas-Algorithmus in Matlab programmieren, zur Übung möchte ich folgendes LGS lösen: (selbst ausgedacht):

mit


und


Dazu habe ich folgendes Programm geschrieben: (siehe auch Anhang)



A=[3 2 0; 2 3 2;0 2 3];

r=[5;3;2];
m=3;

a=diag(A,-1);
b=diag(A,0);
c=diag(A,+1);

for i=2:m

q=a(i-1,1)/b(i-1,1);
b(i,1)=b(i,1)-q*c(i-1,1);
r(i,1)=r(i,1)-q*r(i-1,1);

end

y=zeros(3,1);
y(m,1)=r(m,1)/b(m,1);

for n=m-1:-1:1

y(n,1)=(r(i,1)-c(i,1)*y(n+1,1))/(b(i,1));

end

display(y);




Da ich "programmieren" (noch) nicht so kann, haperts bei der Ausführung. Mein Fehler wird von Matlab angezeigt als:

Zitat:
??? Attempted to access c(3,1); index out of bounds because size(c)=[2,1]. Error in ==> Untitled at 24 y(n,1)=(r(i,1)-c(i,1)*y(n+1,1))/(b(i,1));


Ich weiß nur nicht wo das Programm versucht auf den Eintrag (3,1) des Vektor c zuzugreifen. Mein Vektor c hat ja 2 Elemente, die Diagonalelemente der oberen Diagonale, also 2 und 2...


Vielleicht kann mir jemand helfen, bzw. mir Tipps geben was ich einfacher/besser machen kann.

stehe echt auf dem Schlauch..

Vielen Dank Freude
ComplexP Auf diesen Beitrag antworten »

Hi!

Ich habe jetzt nicht nachgeschaut was der Thomas-Algorithmus ist und ob dein Code so wirklich stimmt, aber der Fehler in Zeile 24 passiert deshalb, weil du auf c(i,1) zugreifst. Und die Variable i hat (konstant) den Wert 3, da i in der ersten Schleife von 1 bis 3 läuft und danach nicht mehr verändert wird.
Vermutlich wolltest du schreiben:

y(n,1)=(r(n,1)-c(n,1)*y(n+1,1))/(b(n,1));

also überall n statt i
Wenn man mit A\r die Probe macht, kommt so auch das richtige raus! Aber aufpassen: Nicht dein Skript ausführen und dann mit A\r kontrollieren, da dein Skritp r verändert (Zeile 15) und die Proberechnung damit verfälscht wird!

MfG, Complex
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »