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

Math Matlab中的函数最小化问题(fmincon),math,matlab,constraints,physics,minimize,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:

我有一个函数,它根据波前在鱼身上的入射角来计算鱼的声音强度。我也有一些现场测量的声音强度。我想做的是找出哪个角度的正态分布会导致模型数据与现场数据最接近

为此,我尝试使用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)附近输出一些东西,几乎就像它在远离起点的地方没有尝试很多其他值一样

我能做些什么来让这一切顺利进行,你有什么想法吗?我知道我可以设置过路费和过路费设置,但我不确定它们会做什么,会产生什么效果。如果有帮助的话,我处理的典型值通常在-45 dB左右


谢谢

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

“鱼的声学强度”?也许是鱼发出的声纳回声的声音强度?虽然前者是一个更好的乐队名称。无论如何,这是一个有趣的问题!是的,我不想太技术化。我使用的实际值是目标强度,它本质上是从回声接收到的功率强度与输出功率强度的比率。好的,我可以尝试改变TolFun,看看这是否有帮助。我想我已经开始缩小范围了,但可能会有所改进。我认为我遇到的一个主要问题是,因为我的函数涉及正态分布,所以每次函数迭代都会产生稍微不同的结果。因此,它使FMINCO更难最小化不断变化的事物。我也会去查单工的。谢谢你的帮助。