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

Methode der kleinsten Quadrate

 

Harry1987

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2012, 22:37     Titel: Methode der kleinsten Quadrate
  Antworten mit Zitat      
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.

F=\sum\limits_{i=1}^N( \overline{r}-r_i)^2, (3)

wo

r_i=\sqrt{(X_i-X_C)^2+(Y_i-Y_C)^2+(Z_i-Z_C)^2} (4)

\overline{r}=\frac{1}{N}\sum\limits_{i=1}^N r_i (5)

Die Gleichung, die die Zusatzbedingung stellt, dass das Zentrum der Kugel auf der Ebene liegen muss

A(X_C)+B(Y_C)+C(Z_C)=0 (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


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2012, 23:12     Titel:
  Antworten mit Zitat      
Hallo,

am geeignetsten erscheint mir auf den ersten Blick FMINCON aus der Optimization Toolbox.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2012, 10:01     Titel:
  Antworten mit Zitat      
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
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.11.2012, 21:26     Titel:
  Antworten mit Zitat      
Hallo,

in wesentlichen musst du die Zielfunktion formulieren. Das wird dann so aussehen:
Code:

function F = zielfunktion(p, datax, datay, dataz)
xc = p(1)
yc = p(2)
% und jetzt aus xc, yc, datax, datay, dataz das F bestimmen


Die an fmincon zu übergebende Zielfunktion sieht dann so aus:
Code:
@(p) zielfunktion(p, datax, datay, dataz)

Die Datenpunkte müssen dazu vorher geladen / definiert werden.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2012, 22:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe nun folgende Funktion erstellt:

Code:
function F = zielfunktion(p,datax,datay,dataz)
lsq=least_square_polyfit_xyz(datax,datay,dataz,[1 0;0 1;0 0]);
[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)


Leider führt das zu einem Fehler in derart:

??? Error using ==> fmincon at 211
FMINCON requires at least four input arguments.

Was sind diese beiden zusätzlichen Eingabeparameter bzw. sieht das bisher ordentlich aus?

Danke und Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.11.2012, 22:58     Titel:
  Antworten mit Zitat      
Hallo,

wirf doch mal einen Blick in die Dokumentation, dann siehst du, wo das Problem liegt:
Code:


fmincon ist für Optimierung mit Nebenbedingungen gedacht.
Wenn du keine Nebenbedingungen hast, kannst du fminunc statt fmincon nehmen.

Grüße,
Harald
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.