1
我想估计三个参数,同时用MATLAB中的函数fmincon最小二乘方误差最小。我的目标函数看起来像:MATLAB:fmincon与三维数据
f = @(a,b,c) sum(sum(sum((M - a - b - c).^2)));
M
哪里是一个三维阵列,其尺寸20x7x16和所估计的参数a, b, c
分别是与尺寸20X1,7X1和16X1载体。为了估计它,我通过将向量a
重复到数组20x7x16中来“制作”它们3D,并且我也为b
和c
做了同样的处理。我需要矢量a
和b
中元素的总和为1作为线性约束。我的问题有两个:
- 当Aeq是一个二维矩阵并且beq是一个向量时,我应该如何指定线性约束?
- 如何设置
a,b,c
的出发点,以便MATLAB知道它们的估计值是在此3D数组中重复的向量?
我想展开3D阵列M
成2D矩阵和调整参数a,b,c
但起始点的问题仍然存在,因为我必须将它们定义为一个矢量,而不是作为一个矩阵。
我非常感谢您的意见和建议。也许我想复杂,还有另一种方式如何去做。
预先感谢您。
非常感谢您的回答!这个功能真的是我需要的。我只是不明白你为什么排列数组M(我猜,因为c是一个16x1向量)。 – user2655769
@ user2655769我不排列'M',因为我需要它的非singelton维度与'M'的第三维共同引入,所以我只排列'c'。在命令行中尝试使用此命令以查看其效果。 – Shai
好吧,我现在明白了。为了减去最后一个参数'c',我们必须重新排列3D阵列'M'的剩余部分。并且为了在你将它重新整合成一个大的矢量之后使用'sum'。我把它改成了f = @(a,b,c)sum(reshape(bsxfun(@minus,permute(bsxfun(@minus,bsxfun(@minus,M,a),b'),[2 3 1] ),c),[],1)。^ 2)' – user2655769