for-schleife < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 00:08 Mi 14.06.2006 | Autor: | meg |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo, könnte mir vielleicht jemand bei dieser aufgabe helfen..
Es sei A aus R(n,n) eine untere Dreiecksmatrix mit von Null verschiedenen Elementen auf der Diagonalen. Schreiben Sie eine Matlab-Funktion x=vorwaerts(A,b), welche das Gleichungssystem Ax=b löst.
Es wird darauf hingewisen, dass man hier for-schleife und size-Befehl benutzen sollte.
Die Aufgabe habe ich wie gewöhnlich angefangen:
function x = vorwaerts(A,b)
Ich komme leider nicht weiter :(
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 01:23 Mi 14.06.2006 | Autor: | dormant |
Hi!
Finde irgendwo (z.B. aus einem Satz in der Vorlesung, oder in einem Buch über numerische Mathematik, etwa von Stoer oder Plato; in fast allen Büchern über lineare Algebra) einen Algorithmus wie durch Vorwärtseinsetzen ein homogenes lineares Gleichungssystem gelöst wird und versuch den in Matlab umzusetzen.
Sonst ist prinzipiell alles klar - Variablen definieren (hier A und b), Algorithmus ausführen, Ausgabe oder ähnliches.
Gruß,
dormant
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:03 Mi 14.06.2006 | Autor: | meg |
Danke! Ich habe mich schon erfahren, worum es im Vorwärts- und Rückwärtseinsetzen geht :)
ich habe aber immer Probleme mit Schreiben der for-schleife. Also das geht noch, wenn ich selbst auf dem zettel rechne, aber mit matlab ist schon etwas komplizierter...
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 02:45 Do 15.06.2006 | Autor: | dormant |
Hi!
Na gut - dann schreib mal hier rein, was du auf deinem Zettel hast.
Gruß,
dormant
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:41 Do 15.06.2006 | Autor: | meg |
Also:
Ax=b
=> x=1/A*b
Und versuchte ich das in Matlabsprache zu übersetzen : )
function x= vorwaerts(A,b)
Aa=inv(A);
x=size(n,1)
for i=1:n
x=0
for j=1:n
x=x+Aa(i,j)*b(j,1)
x(j,1)=x
end
end
Wo mache ich den Fehler?
Danke im Voraus : )
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:43 Do 15.06.2006 | Autor: | dormant |
Hi!
Das ist nicht der Algorithmus für Vorwärtseinsetzen - du darfst die Matrix A nicht invertieren! Ich meine - du darfst sie schon invertieren, aber man hat ja Methoden wie das Rück- und Vorwärtseinsetzen entwickelt um das numerisch aufwändige Problem der inversen Matrix zu umgehen.
Du sollst [mm] a_{11}*x_{1}=b_{1} [/mm] benutzen, das Ergebnis für [mm] x_{1} [/mm] in die zweite Gleichung einsetzen und da ergibt sich [mm] a_{21}*\bruch{b_{1}}{a_{11}}+a_{22}*x_{2}=b_{2} [/mm] usw.
Gruß,
dormant
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:25 Sa 17.06.2006 | Autor: | viktory_hh |
also hier:
[m,n]=size(A);
x=zeros(n,1); %nicht notwendig aber damit schneller läuft
for i=1:n
temp=0;
for j=1:i-1
temp = temp + x(j)*A(i,j);
end
x(i)=(b(i)-temp)/A(i,i);
end
so ich hoffe das ist richtig, hatte keine Lust Matlab zu starten.
wenn nicht läufr, bitte Morgen nochmal melden.
|
|
|
|