Verfasst am: 08.11.2012, 22:37
Titel: Methode der kleinsten Quadrate
Hallo miteinander,
es geht um ein kniffliges Problem und zwar möchte ich aus vielen Punkten im 3D Raum, die eine Bewegungsbahn beschreiben, eine Achse berechnen:
Zuerst wird aus der Punktbahn mit Hilfe der Methode der kleinsten Quadrate die Ebene mit dem kleinsten Abstand von allen Punkten errechnet.
Die habe ich bereits nach Recherche mit dem folgenden Programm realisiert -> http://www.mathworks.com/matlabcentral/fileexchange/24062
Weiter soll nun mit Hilfe der Methode der kleinsten Quadrate eine beste Kugel erzeugt werden, mit der Bedingung, dass die Kugelmitte auf der oben erhaltenenen Ebene liegt.
Die Berechnungsvorschrift lautet dazu:
Die zu minimierende Funktion, F, bestimmt den durchschnittliche Abstand von der Mitte der Kugel zu jedem i-ten Datenpunkt.
, (3)
wo
(4)
(5)
Die Gleichung, die die Zusatzbedingung stellt, dass das Zentrum der Kugel auf der Ebene liegen muss
(6)
wird nach der Variablen mit dem größten Koeffizienten aufgelöst und substituiert in (4). Dies reduziert die Optimierung in ein 2D Problem, welches eine Optimierungsroutine für Y und Z liefert. Der Wert für X wird berechnet unter Verwendung von (6). Die mehrdimensionale Optimierungsroutine Downhill-Simplex-Methode soll für das 2D Problem benutzt werden. Der Startpunkt des Verfahrens wird definiert als der Mittelwert aller zu verwendenden Punkte.
Mir fehlt völlig der Ansatz den zweiten Teil mit der Kugel hinzubekommen.
Ich bin ein Neuling, was Matlab angeht, habe mir aber schon gute Grundlagen angeeignet.
Vielleicht hilft mir jemand bei dieser Sache! Danke und Grüße
am geeignetsten erscheint mir auf den ersten Blick FMINCON aus der Optimization Toolbox.
Grüße,
Harald
Harry1987
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 09.11.2012, 10:01
Titel:
Hallo Harald,
danke für deine Antwort.
Ich erhalte ja durch das erste Programm die Ebene.
Wie kann ich damit nun weiter arbeiten.
Die Funktion, die du nanntest scheint mir in der help Übersicht einiges an Möglichkeiten zu offenbaren, nur fehlt mir der Überblick, wie ich da an die Sache herangehe und was nötig ist. Eventuell bist du dazu bereits, mit mir die Sache anzugehen? Grüße
Die Datenpunkte müssen dazu vorher geladen / definiert werden.
Grüße,
Harald
Harry1987
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 11.11.2012, 22:30
Titel:
Hallo Harald,
ich habe nun folgende Funktion erstellt:
Code:
function F = zielfunktion(p,datax,datay,dataz)
lsq=least_square_polyfit_xyz(datax,datay,dataz,[10;01;00]);
[Q I]=max([-lsq([1,2],1),1]);
for i=1:3 if I==1
yc=p(1);
zc=p(2);
rj=zeros(1,size(datax,2));
for j=1:size(datax,2)
rj(1,j)=sqrt((datax(1,j)+((lsq(3,1)-lsq(2,1)*yc-1*zc)/lsq(1,1)))^2+(datay(1,j)-yc)^2+(dataz(1,j)-zc)^2);
end
r_oben=1/size(datax,2)*sum(rj,2);
SUMME=zeros(1,size(datax,2));
for j=1:size(datax,2)
SUMME(1,j)=(r_oben-rj(1,j))^2;
end
F=sum(SUMME,2);
elseif I==2
xc=p(1);
zc=p(2);
rj=zeros(1,size(datay,2));
for j=1:size(datay,2)
rj(1,j)=sqrt((datax(1,j)-xc)^2+(datay(1,j)+((lsq(3,1)-lsq(1,1)*xc-1*zc)/lsq(w,1)))^2+(dataz(1,j)-zc)^2);
end
r_oben=1/size(datay,2)*sum(rj,2);
SUMME=zeros(1,size(datay,2));
for j=1:size(datay,2)
SUMME(1,j)=(r_oben-rj(1,j))^2;
end
F=sum(SUMME,2);
elseif I==3
xc=p(1);
yc=p(2);
rj=zeros(1,size(dataz,2));
for j=1:size(dataz,2)
rj(1,j)=sqrt((datax(1,j)-xc)^2+(datay(1,j)-yc)^2+(dataz(1,j)+((lsq(3,1)-lsq(1,1)*xc-1*yc)/1))^2);
end
r_oben=1/size(dataz,2)*sum(rj,2);
SUMME=zeros(1,size(dataz,2));funkt
for j=1:size(dataz,2)
SUMME(1,j)=(r_oben-rj(1,j))^2;
end
F=sum(SUMME,2);
end end
Ich habe zielfunktion.m und least_square_polyfit_xyz.m auf derselben Ebene abgespeichert, sodass ich sie dort verwenden kann.
Weiterhin habe ich in Matlab eingeben:
Code:
X0=[mean(datax,2);mean(datay,2);mean(dataz,2)];
X = FMINCON(@(p) zielfunktion(p, datax, datay, dataz),X0)
fmincon ist für Optimierung mit Nebenbedingungen gedacht.
Wenn du keine Nebenbedingungen hast, kannst du fminunc statt fmincon nehmen.
Grüße,
Harald
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.