Ich hab ein Problem mit diesem Code. Mir ist hier der Doppelpunktoperator nicht ganz klar. Gehe ich richtig in der Annahme, dass der Doppelpunkt in der Adressierung der Matrix X so funktioniert:
In der ersten Iteration steht m=1 und k=1. Nun werden in der inneren Schleifen alle Zeilen der Matrix durchgegangen währen m und k nicht erhöht werden. Stimmt das so?
nicht die Zeilen, sondern die Spalten.
Innerhalb jeder Iteration ändern sich m und k nicht. Zunächst ist m = 1, und für k = 1 bis 5 wird R(m, k) berechnet. Dann dasselbe für m = 2 etc.
dann hab ich das so verstanden, dass er mir die 1. Spalte Minus der 1. Spalte dann elementweise durch 1. spalte + 1. spalte teilt. Da kommt doch dann zwangsweise 0 raus weil ich ja gleiche Werte voneinander abziehe!
Wenn nun die innere schleife, also k, um eins erhöht wird, rechnet er mir die 1.Spalte Minus der 2. spalte dann elementweise durch 1. spalte + 2. spalte. da komm aber dann immer noch nur 0 raus weil ich ja wieder gleiche Werte subtrahiere!
Die Lösungsmatrix die mit diesem Code rauskommt sieht übrigens so aus:
wenn X genau diese Werte hat, ist dein Schluss richtig.
Wenn die Werte in X allerdings irgendwie errechnet wurden, kann es sein, dass die Werte nur auf 4 Stellen gerundet gleich erscheinen.
Steht über der Lösungsmatrix vielleicht noch ein 1e-0x * ... ?
Wenn ich das Programm nun nochmal laufen lasse und in der Matrix X dann allerdings neue Werte stehen, dann steht vor der Lösungsmatrix R eine Potenz nämlich:
Hm, jetzt hab ich verstanden warum ich mit "händischer Rechnung" nie auf die Werte der Lösungsmatrix gekommen bin. Ich konnte es nicht weil eben die Unterschiede der Werte erst bei größeren Nachkommastellen als vier auftreten! Ich konnte nie auf das richtige Ergebnis gekommen obwohl ich die "Algorithmus" der durch die beiden for-Schleifen ausgedrückt wird richtig analysiert habe! Ich darf also nicht mit den gerundeten bzw. abgeschnittenen Werten weiterarbeiten sondern muss die "echten" Werte aus der vorhergehenden Berechnung mit durchziehen!
Danke, das hat schon mal sehr geholfen!
Ich werde mich nochmal melden wenn ich den Algorithmus in "meine Lösung" übertragen habe und dann in der Tat die richtige Lösungsmatrix rauskommt!
1.) In Matrix X stehen nun die "richtigen" nicht gerundeten/abgeschnitten Werte der vorhergehenden Berechnungen. Warum berechnet mir Matlab mehr Werte wenn ich die Lösungsmatrix vor den Iterationen der beiden for-Schleifen nicht auf eine 5x5-Nullmatrix definiert/beschränkt habe? Ich meine, normalerweise kann doch Matlab gar nicht mehr Werte berechnen weil das Ende der höchstmöglichen Iterationen ja mit 5 beschränkt ist!
2.) Wie kann man sich mit dem Befehl disp() eine oder mehrere Leerzeilen ausgeben lassen?
Wie du selber sehen kannst, benutze bzw. führe ich die Matrix R erst vor den beiden for-Schleifen ein. Ich habe auch gedacht, dass es keinen Unterschied machen sollte ob ich die Matrix R nun mit Nullen vorbelege oder nicht, aber wenn ich es nicht tue, dann bekomme ich unheimlich viele Ergebnisse ausgedruckt! Das verstehe ich nicht.
Ich soll nun bei einer letzten Aufgabe mit dem log2() und log10() (jeweils auf die Matrix R angewendet) bestimmen wie viel Bits bzw. Dezimalstellen in den Komponenten der Lösungsvektoren übereinstimmen. Das mache ich in den letzten beiden Zeilen. Wenn ich nun ein paar Werte händisch mit dem Taschenrechner ausrechne, bekomme ich auch wieder ganz andere Werte als das was mir Matlab da präsentiert... An was liegt das?
Gutes Beispiel:
Matlab: log2(0) = inf
Taschenrechner log2(0) = Mathematik Error => (ist ja auch logisch weil ein Logarithmus von 0 eben nicht geht...
du musst ein wenig genauer hinsehen: deine vierte Variante führt die QR-Zerlegung von A durch und speichert die eine Matrix in R.
Zu deinem Beispiel:
"Error" oder "Inf" oder "NaN" sind verschiedene Wege, um ein nicht endliches Ergebnis oder nicht berechenbares Ergebnis zum Ausdruck zu bringen - also nicht so unterschiedlich.
Oh mein Gott! Ich muss in der Tat aufmerksamer werden! Danke nun ist es klar.
Auch die Sache mit inf usw. leuchtet ein.
Wie aber erklärt sich z.B. ein anderer Matlab-Wert von z.B. log2(0.3757) gegenüber dem log2(0.3757) auf meinem Taschenrechner? Das sind nicht gleich Ergebnisse!
ich würde ein weiteres Problem vermuten. Wenn du in MATLAB als Ausgabe 0.3757 hast, dann kann das etwas zwischen 0.375650... und 0.375749... sein. Der gleiche Effekt, wie du ja auch schon festgestellt hast, dass in deinem X nicht alle Spalten gleich waren.
Um das analysieren zu können, müsste man wissen: was *genau* hast du in MATLAB eingegeben? Was kommt in MATLAB heraus, was auf deinem Taschenrechner?
Ich habe jedenfalls Zweifel, dass eine so elementare Operation in MATLAB nicht korrekt ist.
Ich konnte mich jetzt leider ein paar Tage zu diesem Theman nciht melden. Ich hab jetzt versucht die Tips durchzführen:
Neue Frage:
Wie kann man sich in Matlab alle Stellen ausgeben lassen mit denen Matlab rechnet? Sprich ich möchte die Werte der Matrix X mit voller Stellenanzahl sehen. Geht das?
Ich bin dann mit der Aufgabe durch! Und sieht laut Lösung auch so aus, als ob sie richtig ist
Danke!
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.