MATLAB:带有三维数据的fmincon

时间:2013-08-06 08:34:36

标签: matlab minimize

我想估计三个参数,同时用MATLAB中的函数fmincon最小化最小二乘二次误差。我的目标函数如下:

f = @(a,b,c) sum(sum(sum((M - a - b - c).^2)));

其中M是尺寸为20x7x16的3D数组,估算参数a, b, c是尺寸分别为20x1,7x1和16x1的矢量。为了估计它,我通过将向量a重复到数组20x7x16中来“制作”它们,我对bc执行相同操作。我需要向量ab中的元素之和为1作为线性约束。我的问题是两个:

  1. 当Aeq是2D矩阵并且beq是向量时,我应该如何指定线性约束?
  2. 如何设置a,b,c的起点,以便MATLAB知道它们的估计是在这个3D数组中重复的向量?
  3. 我想将3D数组M展开到2D矩阵中并调整参数a,b,c但是起点的问题仍然存在,因为我必须将它们定义为矢量而不是矩阵

    我非常感谢您的想法和建议。可能我想复杂化,还有另一种方法可以做到这一点。

    提前谢谢。

1 个答案:

答案 0 :(得分:0)

请勿复制a bc!使用bsxfun代替

 f = @(a,b,c) sum( reshape( bsxfun( @minus, bsxfun( @minus, bsxfun(@minus, M, a), b' ), permute( c, [2 3 1] ) ), [], 1 ) )

现在你的参数是vecotrs而不是vector的复制品。我相信这也将解决你所有的其他问题。