Verfasst am: 18.05.2017, 12:28
Titel: Lösen eines überbestimmten LGS mit Least-Square
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
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
Poldinator
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.05.2017, 15:36
Titel:
Ok,
vielen Dank erstmal für den verkürzten Code, da sieht man, dass ich noch neu bin
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.
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.