Matlab中最小化函数的问题(fmincon)

时间:2010-12-15 20:29:16

标签: math matlab constraints physics minimize

我有一个功能,根据鱼的波前入射角计算鱼的声强。我还有一些声学强度的原位测量。我要做的是弄清楚哪个角度的正态分布导致模型数据与原位数据最匹配。

为此,我正在尝试使用Matlab函数fmincon来最小化以下函数:

function f = myfun(x)

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

所以这个函数做的是计算残差平方和,我想最小化。为此,我尝试使用fmincon:

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

因此,我使用平均值为65度且标准偏差为8的起始方向。我还将平均角度边界设置为0到90度,标准偏差界限为0到20度。

然而,似乎没有正确找到使功能最小化的平均和标准偏差角度。通常它会在N(65,8)附近输出一些东西,几乎就像它没有真正尝试远离起点的许多其他值。

关于我能做些什么才能使这项工作的想法?我知道我可以设置TolX和TolFun设置,但我不确定它们会做什么以及它们会产生什么影响。如果它有帮助,我正在处理的典型值通常约为-45 dB。

谢谢!

1 个答案:

答案 0 :(得分:1)

你应该看一下不同输入的f值的数量级。它可能会影响你需要放入TolFun的值(最小化算法对f变化的容差)。例如,如果TolFun = 1e-6并且f(45)和f(64)之间的差值是1e-7,则算法可能停在65。 另外,我认为你使用的算法假设函数是可微的(它使用导数来找到“下一步去哪里”),不确定你的函数是什么情况。如果不是,你应该使用simplex来找到最小值。