Thomas-Algorithmus in Matlab programmieren |
02.12.2011, 19:21 | Physinetz | Auf diesen Beitrag antworten » | ||
Thomas-Algorithmus in Matlab programmieren 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:
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 |
||||
05.12.2011, 00:19 | 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 |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|