WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

\ vs. pinv()

 

divB
Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 23.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2010, 00:18     Titel: \ vs. pinv()
  Antworten mit Zitat      
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 Sad

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

min_x \sum_i=1^N w_i * x_i^2 sodass y = A*x

Vielen Dank && lg,
divB

[1] http://www.stanford.edu/class/ee263/notes/ls_ln_matlab.pdf
Private Nachricht senden Benutzer-Profile anzeigen


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2010, 06:42     Titel:
  Antworten mit Zitat      
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 = [2 1.2 3.4 2];
    x = -100:0.1:100;
    y = polyval(p,x) + randn(size(x));

    % Schätzung von p mit unterschiedlichen Methoden

    % backslash
    tic;
    A = zeros(length(x),length(p));
    for k = 0:length(p)-1
        A(:,k+1) = x'.^k;
    end
    p = A\y';
    toc;

    % polyfit
    tic;
    p = polyfit(x,y,3);
    toc;

    % backslah Variante 2

    tic;
    A = zeros(length(x),length(p));
    for k = 0:length(p)-1
        A(:,k+1) = x'.^k;
    end
    p = (A'*A)\(A'*y');
    toc;

    % pinv

    tic;
    A = zeros(length(x),length(p));
    for k = 0:length(p)-1
        A(:,k+1) = x'.^k;
    end
    p = pinv(A)*y';
    toc;

    % lsqr

    tic;
    A = zeros(length(x),length(p));
    for k = 0:length(p)-1
        A(:,k+1) = x'.^k;
    end
    p = lsqr(A,y');
    toc;

 
Private Nachricht senden Benutzer-Profile anzeigen
 
divB
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 23.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2010, 14:19     Titel:
  Antworten mit Zitat      
Hi,

Vielen Dank für deine ausführliche Antwort!

Ich verstehe aber nicht ganz was du meinst.

Zitat:
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:

Code:


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

min_x || D(Ax-y) ||_2

anschreiben könnte? Ist das das gleiche wie

(y-Ax)^T * D * (y-Ax)

zu minimieren??

Sind beide äquivalent zum MATLAB Befehl

Code:
?

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):

Code:
x = D*A \ D*y;


Ist das jetzt weightes least squares? Wie lautet der algebraische Ausdruck dafür? Ist das das gleiche wie

min_x || D(Ax - y) ||_2

Vielen Dank nochmals!

LG,
divB


[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2010, 18:37     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.