【问题标题】:forcing a parameter to be integral in nonlinear fitting in MATLAB强制参数在 MATLAB 中的非线性拟合中积分
【发布时间】: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


【解决方案1】:

用户001,

lsqcurvefit 参数是( fun(一个函数),X0 实向量/数组初始点,xdata 实向量/数组输入数据,ydata 实向量/数组响应数据来自模型,ub 实向量/数组变量上界, lb 变量的实向量/数组下界)

我没有看到任何索引值,只有数组或向量和一个函数

也许,您的 MatLab 版本与我的不同? 示例如下:

X0 = [100,-1]; fun = @(x,xdata)x(1)*exp(x(2)*xdata);

lb = [0,-2];  
ub = [3/4,-1];

xdata = ...
    [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];
ydata = ...
    [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];

【讨论】:

  • 我们有相同的设置。基本上,我希望我的“x”值之一是强制性积分,原因是目标函数包含域上的离散卷积,该域由向量的子集表示,其边界可以移动但只能以整数表示金额。谢谢。
  • 很抱歉,非线性在您的问题中是明确的。这个工具箱里可能有mathworks.com/help/releases/R2016a/pdf_doc/stats/index.html的东西,不知道你有没有权限。
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 2016-03-09
  • 2021-01-17
  • 2014-12-06
  • 1970-01-01
相关资源
最近更新 更多