Verfasst am: 03.06.2010, 00:18
Titel: \ vs. pinv()
Hi,
Irgendwie bin ich gerade voll verwirrt. Ich habe ein Gleichungssystem
y = A*x
wobei y R^Mx1, A R^MxN und x R^Nx1.
Die Lösung im Least Squares Sense entspricht ja der Moore-Penrose Pseudoinversen oder? Also
x = (A^T * A)^-1 * A^T * y
Das müsste in MATLAB
x = pinv(A)*y;
entsprechen oder?
Aber was genau tut nun
x = A \ y;
?? Das Ergebnis ist definitiv ein anderes, A\y ist definitiv mehr "sparse". Laut Hilfe ist es aber die Least-Squares Lösung, müsste also gleich sein!
Auch [1] sagt dass die beiden gleich sind.
Und dann sagt die Hilfe noch was von "at most K elements", wobei dieses K nirgends beschrieben ist und ich absolut nicht weiss was das Ding jetzt meint
Kann mir wer erklären was nun der Unterschied ist?
Was ist nun die "echte" LS Lösung? Und welche entspricht definitiv der More Penrose Inversen?
Und nochwas: Mit welchen von den beiden und wie kann ich die "weighted" LS berechnen? Also
Mit beiden Methoden bekommt man die Least Squares Lösung des Gleichungssystemes. Falls die Matrix A aber nicht vollen Rang hat gibt es davon unendlich viele. Mit pinv bekommt man die Lösung mit kleinster Norm, mit backslash die mit den meisten Nullen (siehe Dokumentation pinv).
weighted least squares:
Ziel ist es die Norm von D(Ax-y) zu minimieren. Wobei D = diag(Vektor mit Gewichten). Die Definition von :Aw = D*A, yw = Dy führt dann wieder auf ein lineares Gleichungssystem.
Es gibt noch mehr Varianten mit Matlab least squares Lösungen zu bekommen:
Code:
% Generierung der Daten (Schätzung der Koeffizienten eines Polynoms)
p = [21.23.42];
x = -100:0.1:100;
y = polyval(p,x) + randn(size(x));
Mit beiden Methoden bekommt man die Least Squares Lösung des Gleichungssystemes. Falls die Matrix A aber nicht vollen Rang hat gibt es davon unendlich viele.
Wenn die Matrix A vollen Rang hat ist die Lösung eindeutig und daher durch die Inverse bestimmt:
Hat aber A nicht vollen Rang, dann gibt es unendlich viele Lösungen. Eine mögliche Lösung ist es, den minimalen quadratischen Fehler zu suchen, also die Least Squares Methode oder?
Das mache ich, indem ich einfach den quadratischen Abstand "Ist - Soll" rechne, also z.B. ||u - û||_2, das nach der unbekannten ableite, null setze und auflöse. Das hab ich schon hergeleitet. Raus kommt:
x_LS = (A^T * A)^-1 * A^T * y;
Und, TADA, genau das ist die Definition der Moore-Penrose Pseudo Inversen. Anders gesprochen: Verallgemeindert man nun die Inverse auf die nicht-quadratische Matrix A, so kann eine Lösung wie folgt geschrieben werden:
x = pinv(A)*y;
wobei pinv(.) genau die Moore-Penrose Pseudoinversen entspricht, die wiederum nichts anderes ist als diejenige Lösung (aus den unendlich vielen) die den kleinsten quadratischen Abstand hat, und diese ist eindeutig.
Zitat:
Mit pinv bekommt man die Lösung mit kleinster Norm
Bist du dir sicher? Was ist die kleinste Norm? L1 Norm oder L2 Norm?
Laut meinem Verständnis ist es die Lösung mit kleiner L2-Norm, was - wie oben geschrieben - genau der Pseudoinversen entspricht.
Zitat:
mit backslash die mit den meisten Nullen (siehe Dokumentation pinv).
Hmm, genau das verstehe ich ja nicht! Was ist das genau? Hast du das auch in algebraischer Form?
In der Doku steht nun: "If A is an m-by-n matrix
with m ~= n and B is a column vector
with m components, or a matrix with several such columns,
then X = A\B is the solution in the least squares sense
to the under- or overdetermined system of equations AX = B"
Also doch LS, und das müsste laut meinem Verständnis wie oben eben das gleiche sein wie die Pseudoinverse.
weighted least squares:
Ziel ist es die Norm von D(Ax-y) zu minimieren. Wobei D = diag(Vektor mit Gewichten). Die Definition von :Aw = D*A, yw = Dy führt dann wieder auf ein lineares Gleichungssystem.
Danke...also verstehe ich das richtig dass ich das dann als
Und noch eine letzte Frage: In einem MATLAB Code, der normalerweise eben ein weighted least squares Problem berechnen müsste steht folgendes (Definition der Variablen gleich wie oben/im ersten Post):
Im Normalfall liefert p = pinv(A)*y und p = A\y das gleiche Ergebnis. Manchmal ist die Lösung aber nicht eindeutig.
z.B. y = p(1)*x + p(2)*x
Hier gibt es unendlich viele Kombinationen von p(1) und p(2) die ||Ax-y|| minimieren. Falls y = 2*x, dann sind das genau die Kombinationen für die gilt: p(1) + p(2) = 2.
Dann liefert p = pinv(A)*y:
p(1) = 1 und p(2) = 1 (||p|| minimal)
p = A\y aber
p(1) = 2 und p(2) = 0 (p hat möglichst viele Nullen)
zu weighted least squares:
|| D(Ax-y)|| = (Ax-y)^T D^T D (Ax-y)
also sollte
p = (DA) \ (Dy) zu p = lscov(A,y,D^T*D) äquivalent sein.
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.