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

Kleinste quadratische Abweichung mit fminsearch?

 

Alex12
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 06.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2009, 08:36     Titel: Kleinste quadratische Abweichung mit fminsearch?
  Antworten mit Zitat      
Guten Morgen zusammen

Ich versuche seit gestern eine Gleichung mit zwei Unbekannten zu minimierern, mit fminsearch und es kommen immer irgendwelche Fehlermeldungen, die ich nicht umsetzen kann Sad

Praktisch versuche ich die kleinste quadratische Abweichung von geschätzten Wahrscheinlichkeiten zu einer Normalverteilung zu finden, d.h. das mu und sigma einer Normalverteilung zu finden, welche die geschätzten Werte am besten wiederspiegelt.

Dafür habe ich die Gleichung der kleinsten quadratischen Abweichung mal explizit aufgeschrieben (sind nur 7 geschätzte Wahrscheinlichkeiten, die ich habe) und wollte nun mit fminsearch das mu und sigma finden, für die diese Gleichung (also die quadratische Abweichung) minimal wird.

Code:

syms x;
p=(1/(sig*sqrt(2*pi)))*exp(-0.5*((x-mu)/sig)^2);

f=@(mu,sig)(int(p,x,-1,-0.25)-0.09)^2+(int(p,x,-0.25,-0.2)-0.03)^2+(int(p,x,-0.2,-0.1)-0.046)^2+(int(p,x,-0.1,0.1)-0.509)^2+(int(p,x,0.1,0.2)-0.125)^2+(int(p,x,0.2,0.25)-0.05)^2+(int(p,x,0.25,1)-0.15)^2;

[mu,sig,fval]=fminsearch(f,[0.09,0.17])
 


Dann erhalte ich allerdings die Fehlermeldung:
??? Error using ==> sym.mpower at 25
Matrix must be square.

Error in ==> Min at 4
p=(1/(sig*sqrt(2*pi)))*exp(-0.5*((x-mu)/sig)^2);


Weiss jemand was da falsch ist. Hat MATLAB mit dem Integral Probleme?
Bzw. hab ich fminsearch irgendwie falsch angewendet oder ist es gar die flasche Anwendung und eine andere Lösungsmöglichkeit wäre besser?

Ich wäre sehr sehr dankbar für jegliche Hinweise! Bin ein neuer Anwender von MATLAB und arbeite noch nicht so lang damit.

Danke euch!![/code]
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 07.08.2009, 14:31     Titel:
  Antworten mit Zitat      
Hallo Alex12,

was mir sofort auffällt: Die anonyme Funktion f darf nicht von zwei Variablen mu und sig abhängen, wenn sie an fminsearch übergeben wird, sondern nur von einem Vektor von Variablen. Übersichtlicher wird es wahrscheinlich mit einer extra Funktion:

Code:
function main

[vars,fval]=fminsearch(@myfun,[0.09,0.17])

function f = myfun(vars)
syms x;
mu = vars(1);
sig = vars(2);

p=(1/(sig*sqrt(2*pi)))*exp(-0.5*((x-mu)/sig)^2);

f=(int(p,x,-1,-0.25)-0.09)^2+(int(p,x,-0.25,-0.2)-0.03)^2+(int(p,x,-0.2,-0.1)-0.046)^2+(int(p,x,-0.1,0.1)-0.509)^2+(int(p,x,0.1,0.2)-0.125)^2+(int(p,x,0.2,0.25)-0.05)^2+(int(p,x,0.25,1)-0.15)^2;

end

end


Ob das mit dem int gut funktioniert, kann ich nicht so gut abschätzen. Wenn Du die Optimization Toolbox hast, solltest Du Dir auch mal lsqcurvefit anschauen.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Alex12
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 06.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2009, 08:00     Titel:
  Antworten mit Zitat      
Hallo Bijick,

vielen Dank für deine schnelle und hilfreiche Antwort!!
Das mit den zwei Variablen dachte ich mir auch, ob das gehen kann, aber ich wusste nicht wie ich es anders machen kann. Mit der extra Funktion, die du vorgeschalgen hast, hat es dann super geklappt Very Happy Vielen Dank!

Das mit dem Integral war noch ein Problem. Da kam als Fehlermeldung:
??? Undefined function or method 'lt' for input arguments of type 'sym'.

Error in ==> fminsearch at 323
if fxr < fv(:,1)

Error in ==> main at 3
[vars,fval]=fminsearch(@myfun,[0.09,0.17])


Wenn ich die Integrale aber mit trapz einzeln ausrechnen lasse, dann geht es.

Das einzige was ich jetzt noch nicht ganz verstehe ist, dass die Lösung, die ich für mu und sigma erhalte, extrem davon abhängig ist welche Startparameter ich eingebe.
Das fval gibt mir den Funktionswert an dem gefundenem Minimum an, oder? Also müsste ich jetzt mal verschiedene Startpunkte ausprobieren, bis ich den kleinsten fval finde?

Beste Grüsse und vielen Dank!

Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 08.08.2009, 15:03     Titel:
  Antworten mit Zitat      
Alex12 hat Folgendes geschrieben:
Das fval gibt mir den Funktionswert an dem gefundenem Minimum an, oder?


Ja, das stimmt.

Alex12 hat Folgendes geschrieben:
Also müsste ich jetzt mal verschiedene Startpunkte ausprobieren, bis ich den kleinsten fval finde?


Ja, das ist eine Möglichkeit. Durch die Integriererei, egal ob mit int oder trapz, wird die Funktion sehr nichtlinear. Daher braucht man eine globale Optimierungsmethode. Das so genannte "Multistart", das Du vorschlägst, ist eine der einfachsten Möglichkeiten. Für elaboriertere Alternativen bräuchtest Du die Genetic Algorithm and Direct Search Toolbox oder zumindest die Optimization Toolbox.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.