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

Lösen eines überbestimmten LGS mit Least-Square

 

Poldinator

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2017, 12:28     Titel: Lösen eines überbestimmten LGS mit Least-Square
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem: Ich habe zwei Vektoren x und y und möchte die Transformationsmatrix M mit least-squares herauskriegen. Die Gleichung dazu ist: M*x= y. Dabei haben die Vektoren 3 Elemente, M ist also eine 3x3-Matrix. Da ich aber mehrere Messpuntke habe, also sozusagen x_1, x_2, x_3 usw. bzw. korrespondierend dazu y_1, y_2 ,y_3 usw. habe ich eine überbestimmtes Gleicungssystem. Dieses würde ich dann gern mit der least-square Methode lösen, ich verstehe aber nicht so ganz wie ich es programmieren soll (habe erst seit ein paar Wochen Matlab).
Ich habe es bisher mit lsqcurvefit probiert, das war nicht so erfolgreich, hier ist der Teil des Programms:
Code:
M = lsqcurvefit(@fun,x0,xyzk,vectorxyzk);
function F = fun(x,xdata)
    F(1,1) = x(1,1)*xdata(1,1)+x(1,2)*xdata(1,1)+x(1,3)*xdata(1,1);
    F(1,2) = x(2,1)*xdata(1,2)+x(2,2)*xdata(1,2)+x(2,3)*xdata(1,2);
    F(1,3) = x(3,1)*xdata(1,3)+x(3,2)*xdata(1,3)+x(3,3)*xdata(1,3);
    F(2,1) = x(1,1)*xdata(2,1)+x(1,2)*xdata(2,1)+x(1,3)*xdata(2,1);
    F(2,2) = x(2,1)*xdata(2,2)+x(2,2)*xdata(2,2)+x(2,3)*xdata(2,2);
    F(2,3) = x(3,1)*xdata(2,3)+x(3,2)*xdata(2,3)+x(3,3)*xdata(2,3);
    F(3,1) = x(1,1)*xdata(3,1)+x(1,2)*xdata(3,1)+x(1,3)*xdata(3,1);
    F(3,2) = x(2,1)*xdata(3,2)+x(2,2)*xdata(3,2)+x(2,3)*xdata(3,2);
    F(3,3) = x(3,1)*xdata(3,3)+x(3,2)*xdata(3,3)+x(3,3)*xdata(3,3);
end


Das ist alles relativ umständlich und führt nicht zum Ergebnis, da er die Iterationen direkt am Anfang beendet:
Code:
Initial point is a local minimum.

Optimization completed because the size of the gradient at the initial point
is less than the default value of the optimality tolerance.

<stopping criteria details>


Ich habe bisher beim Suchen immer nur Probleme gefunden, wo die Matrix bekannt war, deswegen versuche ich es mal auf diesem Weg.


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.05.2017, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

das kannst du deutlich einfacher gestalten:

Code:
function ypred = fun(mvec,xdata)
M = reshape(mvec, 3, 3);
ypred = M*xdata;
    end


Um das Problem nachzuvollziehen, müsste man das Beispiel reproduzieren können.

Ein anderer Punkt ist, dass dies ja ein lineares Problem ist. Eigentlich sollte man also die Gleichungen so aufstellen, dass man A * mvec = b hat.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Poldinator

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2017, 15:36     Titel:
  Antworten mit Zitat      
Ok,

vielen Dank erstmal für den verkürzten Code, da sieht man, dass ich noch neu bin Very Happy
Ich habe das Problem mittlerweile selbst gelöst, der Fehler lag wohl tatsächlich daran, dass die Messwerte, die ich zufällig ausgewählt habe sehr unpassend gewesen sind und ich xdata und ydata vertauscht hatte.
Zur Linearisierung: Das hatte ich mir auch gedacht, allerdings ist mir bislang kein Weg dafür eingefallen, bei dem nicht Zusammenhänge zwischen den einzelnen Gleichungen verloren gehen und außerdem sind die Ergebnisse, die ich jetzt herausbekomme relativ vernünftig.
Also für alle die das gleiche Problem haben: Nehmt die Funktion von Harald und für xdata und ydata Vektoren, die jeweils 3 Zeilen haben.
 
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 - 2024 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.