Verfasst am: 02.05.2012, 12:14
Titel: Fmincon minimum einer Kreuzkorrelation
Hallo,
ich möchte mit fmincon das minimum einer Funktion bestimmen, nur weiß ich noch nicht genau wie ich das genau mit einer Matrix mache.
Meine funktion lautet:
Code:
for j= 1:430
u(j) = u1(j) - (x1(j)*p1(j)+x2(j)*p2(j));
end
also ich führe eine Kreuzkorrelation durch und möchte das die Summe minimal wird. x1 und x2 sind meine Variablen mit jeweils 430 elementen.
Mein Problem ist nun das ich durch die Kreuzkorrelation nicht einfach für j=1 dann j=2 usw das minimum bestimmen kann sondern alles zusammenhängend aufeinmal bestimmen muss durch den mittelwert.
außerdem sollten alle x positiv sein gibt es eine möglichkeit das ganze mit fmincon umzusetzen?
kannst du mal was zum Hintergrund sagen. Handelt es sich dabei um die Kreuzkorrelation zweier diskreter Zeitsignale? Kann man das überhaupt minimieren? (die Frage klingt vielleicht dumm, ist aber ernst gemeint...)
Grüße, MaFam
Hanspeter
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.05.2012, 07:25
Titel:
Hallo MaFam,
bei der Kreuzkorrelation handelt es sich einmal um die Ableitung einer Spannung dU/dt und einmal um die Ableitung einer Leistung dP/dt.
Normalerweise sollte eine minimierung ja möglich sein da wenn ich die x Werte Variere die Summe der Kreuzkorrelation sich auch verändert.
Achja x1 und x2 stellen sozusagen Widerstände da und j=1:430 sind die Messpunkte, also ich Messe 430 mal.
Dann baue doch eine Funktion myfun(x1,x2), wenn das deine Variablen sind. Ich sehe hier übrigens nun auch Optimierungspotential.
Hanspeter
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.05.2012, 07:17
Titel:
Hallo MaFam,
das Problem das ich habe ist das es nicht nur die Variabeln x1 und x2 gibt. In x1 und x2 stehen jeweils 430 Werte also habe ich sozusagen 860 Variabeln. Ich habe es nun mal so versucht das ich myFun mit 860 Variabeln habe aber irgenwie dauert das viel zu lange und ich kriege kein Ergebniss. Aber ich glaube es geht gar nicht anders oder was hast du für eine Optimierungs möglichkeit?
und welche Nebenbedingungen gibt es? Minimierung in 860 Dimensionen ohne irgendwelche Nebenbedingungen erscheint mir nicht unbedingt sinnvoll.
Poste doch mal deine bisherigen Versuche.
Grüße,
Harald
Hanspeter
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.05.2012, 11:54
Titel:
Hallo,
meine Nebenbedingung ist das die Variabeln in myFun nicht negativ sein dürfen(das kriege ich hin mit lower Bound und uper bound). Und das die einzelnen Werte der Kreuzkorrelation nicht > 1 sein dürfen.
die Funktion muss extrem oft aufgerufen werden, alleine zur Gradientenbestimmung 860 oder wahrscheinlich eher 1720 in jeder einzelnen Iteration.
Daher ist es wichtig, den Code so effizient wie möglich zu gestalten:
- wenige oder gar keine globale Variablen.
- wenige oder gar keine for-Schleifen.
Falls das nicht hilft, würde ich es mal mit fminsearch und künstlichen Beschränkungen versuchen (hohe Werte wenn Nebenbedingung verletzt).
Wirklich ausprobieren kann man das wohl leider nur mit den Daten.
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.