【发布时间】:2016-11-25 17:55:18
【问题描述】:
在 MATLAB 中使用函数lsqcurvefit,如何为参数之一强制执行整数类型?所讨论的特定参数是向量的索引,因此只有整数值才有意义;但是,拟合例程可能会在迭代期间尝试参数的任意实数值。
【问题讨论】:
-
Integer programming 是数值优化的一个主要子领域——而且它很难:请参阅mixed integer–linear programs 上的这篇 Matlab 文章,但
lsqcurvefit比线性程序。 -
您可以尝试运行
lsqcurvefit,并且在您的目标函数中,只需round向量的“整数”元素——最小化例程当然会尝试浮点数,但可能会注意到变化 -
除非您处于整数规划是一种常用技术的领域,否则我会努力重新表述问题以避免整数约束。也许如果没有数万亿个索引,您可以将整数索引固定并在 each 整数上运行
lsqcurvefit(对所有索引进行暴力搜索),然后选择具有最小值的索引错误? -
@AhmedFasih:谢谢,这些都是很好的建议。我还考虑过对整数进行四舍五入。向量不是很大(只有 300 到 500),但我会优化两个参数,向量中的下索引和上索引,因此蛮力方法中的迭代总数将上升到第 300 次(或500th) 三角数。
-
啊,二维网格搜索 ????... 你可能会走运:如果误差函数在两个索引上平滑变化,你可以跳过 5 或 10?我的意思是,你可以用
SKIP = 5; for i=1 : SKIP : N; for j=i : SKIP : N; err(j,i) = fminsearch(@(x) objective(x, i, j), init); end; end代替for i=1:N; for j=i:N; err(j,i) = fminsearch(@(x) objective(x, i, j), init); end; end?????
标签: matlab non-linear-regression model-fitting