2010-12-15 4 views
2

J'ai une fonction qui calcule la force acoustique d'un poisson en fonction de l'angle d'incidence du front d'onde sur le poisson. J'ai aussi quelques mesures in situ de la force acoustique. Ce que j'essaie de faire est de déterminer quelle distribution normale des angles donne les données du modèle correspondant le plus étroitement avec les données in situ.Problème minimisant la fonction dans Matlab (fmincon)

Pour ce faire, je suis en train d'utiliser la fonction Matlab fmincon pour minimiser la fonction suivante:

function f = myfun(x) 

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

Alors, que cette fonction n'est calcule la somme des carrés des résidus, que je veux minimiser. Pour ce faire, j'essayer d'utiliser fmincon:

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

Ainsi, j'utilise une orientation en commençant par une moyenne de 65 degrés et un écart-type de 8. Je fixeraient également les limites d'angle signifie être de 0 à 90 degrés et les limites d'écart-type doivent être comprises entre 0 et 20 degrés.

Cependant, il ne semble pas que l'on trouve correctement les angles d'écart moyen et moyen qui minimisent la fonction. Habituellement, il produit quelque chose juste autour de N (65,8), presque comme s'il n'essayait pas vraiment beaucoup d'autres valeurs loin des points de départ.

Des idées sur ce que je peux faire pour que cela fonctionne? Je sais que je peux définir les paramètres TolX et TolFun, mais je ne suis pas vraiment sûr de ce qu'ils font et de l'effet qu'ils auraient. Si cela aide, les valeurs typiques que je traite sont généralement autour de -45 dB.

Merci!

+3

"force acoustique d'un poisson"? Peut-être la force acoustique d'un écho sonar d'un poisson? Bien que le premier est un nom de groupe bien meilleur. De toute façon, c'est un problème intéressant! – mtrw

+0

Oui, je ne voulais pas devenir trop technique. Les valeurs réelles avec lesquelles je travaille sont Target Strengths, qui est essentiellement le rapport entre l'intensité de la puissance reçue d'un écho et celle de l'intensité de la puissance de sortie. – Josiah

Répondre

1

vous devriez regarder l'ordre de grandeur des valeurs de f pour différentes entrées. cela pourrait influencer les valeurs que vous devez mettre dans TolFun (la tolérance de l'algorithme de minimisation aux changements de f). par exemple, si TolFun = 1e-6 et la différence entre f (45) et f (64) est 1e-7, l'algorithme pourrait s'arrêter à 65. aussi, je pense que l'algorithme que vous utilisez suppose que les fonctions sont différentiable (il utilise des dérivés pour trouver "où aller ensuite"), pas sûr que ce soit le cas dans votre fonction. Si ce n'est pas le cas, vous devriez utiliser simplex pour trouver le minimum.

+0

Ok, je peux essayer de faire varier TolFun et voir si cela aide du tout. Je pense que je commence à le réduire davantage, mais il pourrait probablement être amélioré. Je pense que l'un des principaux problèmes que j'ai eu était que, puisque ma fonction implique une distribution normale, chaque itération de fonction va donner des résultats légèrement différents. Ainsi, il est plus difficile pour le fmincon de minimiser quelque chose qui change constamment. Je vais vérifier simplex, aussi. Merci pour l'aide. – Josiah

Questions connexes