|
muhmar |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 16.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.4
|
 |
|
|
 |
|
Verfasst am: 18.03.2009, 10:21
Titel: Matrix Invertieren
|
 |
Hey Leute,
ich habe mir in Matlab eine Anwendung geschrieben, die auf der statistischen Ausgleichung einer Kugel aus n-Punkten beruht. Wie in der Statistik üblich, muss ich zur Berechnung der ausgeglichenen Parameter verschiedene Matrizen invertieren.
Nun das Problem:
1. Wenn ich diese Anwendung durchführe, mit z.B. 25000 Punkten, kommt die Fehlermeldung:
??? Out of memory. Type HELP MEMORY for your options.
Dies bedeutet wohl, dass ich diese Invertierung mit meinem PC-Sytem nicht durchführen kann. Zwecks Arbeitsspeicher und oder Ähnlichem.
2. Ist es irgendwie möglich die Invertierung zu vereinfachen, bzw. zu stückeln? Gibt es da schon Ansätze?
gruß
Muhmar
|
|
|
|
|
Helmert |

Forum-Century
|
 |
Beiträge: 121
|
 |
|
 |
Anmeldedatum: 04.09.08
|
 |
|
 |
Wohnort: Karlsruhe
|
 |
|
 |
Version: 2011a
|
 |
|
|
 |
|
Verfasst am: 18.03.2009, 11:10
Titel:
|
 |
Hallo muhmar,
die Schätzung von Kugelparametern sollte im Prinzip möglich sein, ohne so große Matrizen invertieren zu müssen. Ist die Matrix, die du invertieren mußt, wirklich vollbesetzt, oder evtl. nur eine Diagonalmatrix? In diesem Fall würde es genügen, nur die Diagonale zu berechnen. Invertieren kann man dann durch elementweise Kehrwertbildung.
Gruß
Helmert
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 18.03.2009, 14:26
Titel:
|
 |
Auch wenn ein mathematisch anderer Ansatz vielleicht das Beste ist - ein Test unter einer 64 Bit Umgebung (== Prozessor und Betriebssystem und MATLAB) könnte sich schon lohnen. Zumindest von der MATLAB-Seite her ist das für Industrie- und Hochschulkunden nicht mit zusätzlichen Kosten verbunden.
Andreas
|
|
|
Milo |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 19.03.09
|
 |
|
 |
Wohnort: KA
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.03.2009, 19:39
Titel:
|
 |
|
|
muhmar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 16.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.4
|
 |
|
|
 |
|
Verfasst am: 20.03.2009, 09:53
Titel:
|
 |
Naja, obs wirklich an der Invertierung liegt, glaub ich selber nichtmehr. Je nachdem mit welcher Punktmenge ich rangehe, so bricht er an unterschiedlichen Stellen ab. Teilweise an Stellen an dennen nur eine Matrix durch multiplizieren erstellt wird. Ich vermute eigentlch mittlerweile, dass der Arbeitsspeicher nicht ausreicht... Unirechner halt...
gruß und danke für die Antworten.
|
|
|
Milo |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 19.03.09
|
 |
|
 |
Wohnort: KA
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.03.2009, 17:00
Titel:
|
 |
|
 |
|
Hallo,
ja, das Problem tritt auf, wenn Du mit den Ressourcen etwas großzügig haushaltest.
Einfache Möglichkeiten. Einmal mit SPARSE, wie ich schon schrieb, dann durch Zwischenspeichern und Laden der nicht benötigten Matrizen und letztlich durch Optimierung Deines Codes.
Die ersten Beiden sind recht simple. Eine Sparse Matrix erzeugst Du mit dem Befehl
mit S kannst Du nun ganz normal weiterarbeiten bspw:
da Du M nicht mehr benötigst, weg damit:
Die erzeugten Matrizen (ST und Sinv) sind automatisch wieder sparse-Matrizen.
Was bringt sowas. Nehmen wir an, Du hast eine quadratische diagonale Matrix, in der Vermessung bspw. sind die Gewichtsmatrizen idR Diagonalmatrizen (oder Bandmatrizen), dann reicht es doch, wenn Du statt der n*n-Elemente nur n-Elemente (und zwar die Hauptdiagonale) speicherst.
Wenn Du nun mal den Speicherverbrauch abfragst, dann siehst Du den Gewinn (~4.5fach):
Das ganze macht natürlich nur Sinn, wenn Du auch fleißig mit clear nicht benötigten Speicher frei gibst! Wenn Du am Ende wieder eine "richtige" Matrix haben möchtest, ist full dein Freund.
Die andere Möglichkeit ist das tmp. Zwischenspeichern der Matrizen, die viel Platz benötigen aber aktuell nicht benutzt werden. Hierfür einfach die Matrizen mit save auf die Platte schreiben, den Speicher der Matrix mit clear frei geben und bei Bedarf die Matrix mit load wieder holen.
An Deiner Normalgleichung selbst kann es ja nicht liegen, da diese ja bei der Kugel lediglich eine 4*4 Matrix ist.
Die Fehlermeldung ist im Übrigen unabhängig von der Ausstattung des PCs.
Gruß Micha
_________________
Die Geodäten - Portal für Vermesser und Geoinformatiker || Freie Ausgleichungssoftware
|
|
|
muhmar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 16.07.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.4
|
 |
|
|
 |
|
Verfasst am: 21.03.2009, 13:28
Titel:
|
 |
Was mich jetzt noch ein bischen irritiert ist, dass ich diese Sparsefunktion erst anwenden kann, wenn die Matrix geschrieben ist. Ist es vielleicht möglich, die Zielmatrix als eine "sparse"Matrix zu definieren, dass er in der laufenden for Schleife direkt nur die Hauptdiagonalenelemente speichert?
Soweit wars aber schonmal hilfreich...
|
|
|
Helmert |

Forum-Century
|
 |
Beiträge: 121
|
 |
|
 |
Anmeldedatum: 04.09.08
|
 |
|
 |
Wohnort: Karlsruhe
|
 |
|
 |
Version: 2011a
|
 |
|
|
 |
|
Verfasst am: 22.03.2009, 11:40
Titel:
|
 |
Ein Blick auf die Hilfeseite der sparse-Funktion gibt hier Aufschluß. Mit
kannst du eine leere (d. h. implizit mit lauter Nullen gefüllte) Sparse-Matrix initialisieren, deren von null verschiedenen Elemente du dann anschließend nach und nach zuweisen kannst. Beispiel:
... oder das gleiche einfacher mit einer einzigen Anweisung:
siehe auch:
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|