【问题标题】:Problem minimizing function in Matlab (fmincon)Matlab(fmincon)中的函数最小化问题
【发布时间】:2010-12-15 20:29:15
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • “鱼的声学强度”?也许是鱼的声纳回声的声学强度?虽然前者是一个更好的乐队名称。无论如何,这是一个有趣的问题!
  • 是的,我不想太技术化。我正在使用的实际值是目标强度,它本质上是从回波接收的功率强度与输出功率强度的比率。

标签: math matlab constraints physics minimize


【解决方案1】:

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

【讨论】:

  • 好的,我可以尝试改变 TolFun 看看是否有帮助。我想我开始缩小范围,但可能会有所改进。我认为我遇到的主要问题之一是,由于我的函数涉及正态分布,因此每次函数迭代都会产生略微不同的结果。因此,它使 fmincon 更难最小化不断变化的东西。我也会检查单工。感谢您的帮助。
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多