hi, ich habe eine C Methode, die mit einer mehrdimensionalen gauss'schen Normalverteilung arbeitet. Parameter der Methode sind die Mittelwerte und die Kovarianzmatrix. Alle Parameter sind reellwertig. Siehe auch hier: http://de.wikipedia.org/wiki/Mehrdimensionale_Normalverteilung Nun muss ich zunächst überprüfen, ob die Übergebene Matrix tatsächlich eine Kovarianzmatrix sein kann. Das Ding muss also symmetrisch und positiv semidefinit sein. Siehe auch hier: http://de.wikipedia.org/wiki/Kovarianzmatrix Symmetrie lässt sich einfach abprüfen; für die Semidefinitheit muss ich aber zeigen, dass die Eigenwerte alle nicht negativ sind. Eigenwertberechnungen erfordern allerdings das Lösen eines Polynoms n-ter Ordnung. Und das macht für beliebige Eingangsmatrizen im allgemeinen Fall nur wenig Spaß. Das hätte ich gerne einfacher. Ich habe mir also mal die anderen Kriterien angesehen: http://de.wikipedia.org/wiki/Definitheit#Kriterien_f.C3.BCr_Definitheit Hier meine Ergebnisse a) Eigenwerte <-- aufwändig b) Hauptminoren <-- kann keine Semidefinitheit zeigen c) Gaußsches Eliminationsverfahren <-- noch aufwändiger d) Cholesky-Zerlegung <-- kein Nachweis, funktioniert nur falls Definitheit vorliegt e) Diagonaldominante Matrizen <-- nicht in allen Fällen ein Nachweis damit komme ich also nicht weiter. Hier wird noch das Rayleigh-Kriterium angeführt. Und wenn der kleinste Eigenwert positiv ist, sind alle positiv: https://inst.eecs.berkeley.edu/~ee127a/book/login/l_sym_sed.html Das wird aber auf zu einem n-1 Dimensionalen Optimierungsproblem, das aber auch zu keiner geschlossenen Lösung führt. Ein Ansatz für 3D wäre hier, als Einsvektor in Kugelkoordinaten anzugeben und das Skalarprodukt zu minimieren über die beiden Parameter theta und phi. Eigentlich kann das doch nicht so schwierig sein, oder?
A. S. schrieb: > c) Gaußsches Eliminationsverfahren <-- noch aufwändiger Hä? Easy. . Sortieren nach führenden Nullen . Jede Zeile i . Index j des ersten Nicht-Null Elementes finden . Zeile mit Element an [i][j] multiplizieren. für jede nachfolgende Zeile k . Wenn [k][j] != 0 . [k] -= [i] * [k][j] . Höchsten Nicht-Null Index in [k] finden und k mit dem Inversen multiplizieren Fertig.
okay, da meine Suche sonst zu nichts geführt hat, sehe ich mir gerade das Gauss-Verfahren nochmal an. Aus wiki: > Eine reelle symmetrische quadratische Matrix A ist genau dann positiv > definit, wenn das Gaußsche Eliminationsverfahren bei Diagonalstrategie, > das heißt ohne Zeilenvertauschungen, mit n positiven Pivotelementen > durchgeführt werden kann. Ich suche nach positiver Semidefinitheit. Ich möchte also beispielsweise für die Matrix 0 0 0 0 1 0 0 0 0 herausbekommen, dass sie gültig ist, denn die Eigenwerte sind 0,0,1 und sie ist symmetrisch. Das kann Gauss nicht liefern, oder?
:
Bearbeitet durch User
Cholesky liefert sehr Wohl kriterium fuer positv semidefinit. Ist numeridch super. Bei Gauss ist auf jeden fall pivotsuche noetig, sonst wird es instabil. Sowas nicht selber machen, da gibt es jede menge fallstricke, in 'Numerical recipes' abkupfern. Math rulez! Cheers Detlef
was ist denn das besagte kriterium? auf wiki steht nur dass die Zerlegung existieren muss. Klar. Und wie weise ich nach, dass die Zerlegung existiert, wenn sie nur für positiv definite Matrizen definiert ist? Rechnen, bis der Algo durch 0 dividiert? Sagt mal wenn ich das Rayleigh-Kriterium ein bisschen weiterverfolge. Im Prinzip kann ich den Suchraum nach dem kleinsten Eigenwert als die n-1 dimensionale Oberfläche einer n-dimensionalen Einheitskugel darstellen. Und diese Einheitskugel schneidet eine n-dimensionale Wolke, deren Hauptachsen alle aufeinander senkrecht stehen, richtig? Kann ich da nicht mit irgendeiner Gradientenmethode zum kleinsten Eigenwert hinwandern (also da wo die Wolke am dünnsten ist)? Es dürfte ja keine lokalen Minima geben. Oder passt mein Bild der "Wolke" nicht mehr, falls negative Eigenwerte vorliegen?
:
Bearbeitet durch User
>>Rechnen, bis der Algo durch 0 dividiert? Ja, genau, so schlicht ist das. Im angehängten screenshot des Cholesky Algo aus http://apps.nrbook.com/c/index.html ist das genau die Abfrage. math rulez! Cheers Detlef
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.