1

我想估计三个参数,同时使用 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 中来“制作”它们 3D 并且我对 and 做同样的b事情c。我需要向量中元素的总和为a1b作为线性约束。我的问题有两个:

  1. 当 Aeq 是二维矩阵而 beq 是向量时,我应该如何指定线性约束?
  2. 如何设置起点,a,b,c以便 MATLAB 知道它们的估计值是在这个 3D 数组中重复的向量?

我想将 3D 数组展开M为 2D 矩阵并调整参数a,b,c,但起点的问题仍然存在,因为我必须将它们定义为向量而不是矩阵。

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

先感谢您。

4

1 回答 1

0

不要复制a bcbsxfun改为使用

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

现在您的参数是向量,而不是向量的复制。我相信这也将解决您的所有其他问题。

于 2013-08-06T09:38:35.840 回答