2

我有一个函数可以根据鱼上波前的入射角计算鱼的声学强度。我也有一些声学强度的现场测量。我想要做的是找出哪个角度的正态分布导致模型数据与原位数据最匹配。

为此,我尝试使用 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 左右。

谢谢!

4

1 回答 1

1

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

于 2010-12-16T01:13:49.883 回答