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

fminsearch oä. für Zeilen einer Matrix

 

MaFu
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2009, 10:01     Titel: fminsearch oä. für Zeilen einer Matrix
  Antworten mit Zitat      
Hallo liebe Matlab-Gemeinde,

ich hoffe, ich kann euch mein Problem darstellen und habe mich nicht beim Suchen zu dusselig angestellt.

Im Prinzip arbeitet fminsearch ja so, dass ich die zu variierenden Parameter übergebe (zum Beispiel alpha und beta) und eine Funktion. Fminsearch setzt alpha und beta in die Funktion ein, erhält als Rückmeldung einen Restabstand oder Restfehler, variiert alpah und beta, setzt es wieder ein und schaut, wann der Restfehler minimal ist.

Ich würde diese Funktion nun gerne auf mehrere Zeilen einer Matrix zeitgelich anwenden, ist dies möglich? Ich würde also gerne je einen Vektor von alphas und betas übergeben, diese sollen gemeinsam in eine Funktion eingesetzt werden und es kommt ein Vektor mit den entsprechenden Restfehlern zurück. Die Minimierung soll dabei für jede einzelne Zeile vorgenommen werden, die Restfehler sind also unabhängig voneinander zu betrachten. Geht das?

Mein Problem rührt daher, dass ich eine Abstandsfunktion habe, die auf vollständigen Vektoren arbeitet (also zum Beispiel gleichzeitig alle Abstände für 250 Paare alphas und betas berechnet). Ich könnte diese Funktion natürlich so umstellen, dass sie für einzelne Paare den Restfehler berechnet, aber dies bedeutet einen enormen Rechen-Mehraufwand.

Ich freue mich auf eure Antwort (hoffentlich mit einem Lösungstipp). Ich habe bisher keinen Anhaltspunkt darauf gefunden, wie sich fminsearch bei Vektoren verhält.

Liebe Grüße, MaFu
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 05.06.2009, 10:12     Titel:
  Antworten mit Zitat      
Moin,

du kannst deine eigene Funktion mit deiner eigenen Optimierungsvariablen erstellen. FMINSEARCH minimiert dann diese. Das heißt, du kannst eine Funktion schreiben, die in Abhängigkeit von deinen Alphas und Betas etwas berechnet. Am Ende berechnest du dann aus diesen Ergebnissen einen Fehler, der minimiert werden soll (musst du dir dann in deinem speziellen Fall überlegen, wie du den berechnest) und dieser Fehler wird von der Funktion zurückgegeben und durch FMINSEARCH minimiert. Das bedeutet dann, dass du eine Funktion schreibst, die einen Aufruf deiner eigentlichen Berechnungsfunktion enthält.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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: 05.06.2009, 10:40     Titel:
  Antworten mit Zitat      
Hallo MaFu,

noch zwei Anmerkungen:

1. die alphas und betas dürfen nicht als Matrix, sondern müssen als Vektor an fminsearch übergeben werden. In der Zielfunktion (objective function) können sie dann wieder in eine Matrix umgeformt und an Deine Fehlerfunktion übergeben werden.

2. fminsearch kann nicht mehrere unabhängige Zielfunktionswerte gleichzeitig verarbeiten (das kann übrigens kein mir bekannter Optimierungsalgorithmus. Wenn Du aber beispielsweise das Maximum der Fehler minimierst, minimierst Du gleichzeitig alle Fehler. Dass die Zielfunktion durch die Maximumbildung undifferenzierbar wird, ist kein Problem, da fminsearch sowieso keine Ableitungsinformation verwendet.

Herzliche Grüße
Bijick
_________________

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2009, 11:02     Titel:
  Antworten mit Zitat      
Hallo,

danke für die Antworten. Mein Gedanke hinsichtlich der unabhängigen Minimierung der Restfehler war der, dass ich zum Beispiel je 10 alpha und 10 beta Werte als zu variierende Parameter an fminsearch gebe und fminsearch setzt dann diese 10 Paare in eine Funktion ein, die 10 Restfehler zurückgibt.

Der Vorschlag, das Maximum dieser 10 Restfehler zu minimieren ist im Prizip sehr gut, aber es wird doch dann meines Verständnisses nach so sein, dass fminsearch alle Parameter immer wieder variiert, um das Maximum klein zu kriegen? Mal angenommen, 8 von 10 Paaren enthalten schon perfekte Werte und die Restfehler der entsprechenden Zeilen sind bereits minimal, in einer weiteren Zeile gibt es jedoch noch einen sehr großen Fehler. Dann bräuchte fminsearch sich eigentlich ja nur noch auf die verbleibenden beiden Zeilen zu konzentrieren. Wird dadurch, dass fminsearch theoretisch nicht unterscheiden kann, welche Zeilen tatsächlich noch variiert werden müssen, großer zusätzlicher Rechenaufwand erforderlich?

Aber auf der anderen Seite wird die Berechnung der Restfehler ja sowieso immer für alle 10 Paare vorgenommen, auch wenn sich bestimmte Paare gar nicht verändert hätten. Zusätzlicher Rechenaufwand käme also allein durch die Variation der Werte durch fminsearch zustande. Und fminsearch müsste ja theoretisch merken, dass die Variation bestimmter Parameter keine Verbesserung mehr bringt und diese ruhen lassen?

Ich mache mir um dieses Problem so einen Kopf, da es sich bei mir um etwa 150.000 alphas und betas handelt, die ich in Vektoren zu je 250 Paaren optimieren möchte.

Liebe Grüße, MaFu
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: 05.06.2009, 11:27     Titel:
  Antworten mit Zitat      
Hallo MaFu,

Deinen Gedanke hatte ich schon verstanden. Allerdings würde er zuende gedacht bedeuten, dass 10 kleine fminsearchs gleichzeitig arbeiten müssten. Man kann eine Optimierung nicht vektorisieren, da je nach alpha und beta etwas verschiedenes in jedem Schritt passieren müsste. Es kann sogar sein, dass die verschiedenen Optimierungen unterschiedlich viele Schritte brauchen. Deshalb funktioniert es so nicht.

fminsearch ist dagegen so gemacht, dass es prinzipiell merkt, wenn eine Veränderung bestimmter Variablen keine Verbesserung mehr bringt. Diese werden dann nicht mehr variiert, also sozusagen "ruhen gelassen". Allerdings werden die Fehler natürlich trotzdem noch berechnet, weil ja die Fehlerfunktion mit allen alphas und betas aufgerufen wird. Und fminsearch braucht natürlich einige Auswertungen, bis es das Verhalten der Fehlerfunktion auf Veränderungen "bemerkt".

Es wäre wohl einen Versuch wert, ob es schneller geht, fminsearch 150000 mal mit je zwei Variablen aufzurufen, oder 600 mal mit 500 Variablen (natürlich erstmal klein anfangen Smile). Ich denke, die erste Alternative wäre besser, weil sie erstens das Problem besser abbildet (immerhin sind die Variablen unabhängig) und zweitens die Optimierung zweier Variabler rasend schnell gehen müsste im Vergleich mit 500. Der in fminsearch implementierte Algorithmus müsste dann geometrische Operationen in einem 500-dimensionalen Raum ausführen. Und das eben auch noch, wenn sich in 498 Variablen nichts mehr ändert. Ich selbst hatte bisher maximal 100 Variablen für fminsearch und war dann auch nicht zufrieden. Aber es kommt natürlich immer auf das exakte Problem an.

Ich hoffe, ich konnte Dir etwas weiterhelfen.
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.