2010-12-15 10 views
2

Ich habe eine Funktion, die die akustische Stärke eines Fisches in Abhängigkeit vom Einfallswinkel der Wellenfront auf dem Fisch berechnet. Ich habe auch einige Messungen der akustischen Stärke in situ. Ich versuche herauszufinden, welche normale Winkelverteilung dazu führt, dass die Modelldaten am ehesten mit den In-situ-Daten übereinstimmen.Problem minimierende Funktion in Matlab (fmincon)

Um dies zu tun, ich versuche, die Matlab-Funktion fmincon verwenden Sie die folgende Funktion zu minimieren:

function f = myfun(x) 

TS_krm = KRM(normrnd(x(1),x(2),100,1), L); 
f = sum((TS_insitu - TS_krm).^2); 

Also, was diese Funktion tut, ist berechnet die Summe der quadrierten Residuen, die ich minimieren möchten. Um dies zu tun, ich versuche mit fmincon:

x = fmincon(@myfun, [65;8], [], [], [], [], [0;0], [90;20], [], options); 

So, ich bin eine Start Orientierung mit einem Mittelwert von 65 Grad und einer Standardabweichung von 8. Verwendung bin ich auch die mittleren Winkel Grenzen Einstellung von sein 0 bis 90 Grad und die Standardabweichung von 0 bis 20 Grad.

Es scheint jedoch nicht richtig zu sein, die mittleren und Standardabweichungswinkel zu finden, die die Funktion minimieren. Normalerweise gibt es etwas in der Nähe von N (65,8) aus, fast so, als würde es nicht viele andere Werte versuchen, die weit von den Startpunkten entfernt sind.

Irgendwelche Ideen, was ich tun kann, damit dies funktioniert? Ich weiß, dass ich die TolX- und TolFun-Einstellungen einstellen kann, aber ich bin mir nicht sicher, was diese tun und welchen Effekt sie haben. Wenn es hilft, liegen die typischen Werte, mit denen ich es zu tun habe, normalerweise bei -45 dB.

Danke!

+3

"akustische Stärke eines Fisches"? Vielleicht die akustische Stärke eines Echolots von einem Fisch? Obwohl ersteres ist ein viel besserer Bandname. Wie auch immer, das ist ein interessantes Problem! – mtrw

+0

Ja, ich wollte nicht zu technisch werden. Die wahren Werte, mit denen ich arbeite, sind Target Strengths, was im Wesentlichen ein Verhältnis der von einem Echo empfangenen Leistungsintensität zu der der Ausgangsleistungsintensität ist. – Josiah

Antwort

1

sollten Sie die Größenordnung der Werte von f für verschiedene Eingaben betrachten. Es kann die Werte beeinflussen, die Sie in TolFun eingeben müssen (die Toleranz des Minimierungsalgorithmus gegenüber Änderungen in f). Wenn zum Beispiel TolFun = 1e-6 ist und der Unterschied zwischen f (45) und f (64) 1e-7 ist, könnte der Algorithmus bei 65 stoppen. Ich denke, der Algorithmus, den Sie verwenden, setzt voraus, dass die Funktionen sind differenzierbar (es verwendet Derivate, um "wo weiterzugehen") zu finden, nicht sicher, ob dies in Ihrer Funktion der Fall ist. Wenn dies nicht der Fall ist, sollten Sie Simplex verwenden, um das Minimum zu finden.

+0

Ok, ich kann versuchen, TolFun zu ändern und zu sehen, ob das überhaupt hilft. Ich denke, ich fange an, es mehr einzugrenzen, aber es könnte wahrscheinlich verbessert werden. Ich denke, eines der Hauptprobleme, die ich hatte, war, dass, da meine Funktion eine normale Verteilung beinhaltet, jede Funktionsiteration zu etwas anderen Ergebnissen führen wird. Dadurch wird es für den fmincon schwieriger, etwas zu minimieren, das sich ständig ändert. Ich werde auch Simplex sehen. Danke für die Hilfe. – Josiah