我想估计三个参数,同时用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中来“制作”它们,我对b
和c
执行相同操作。我需要向量a
和b
中的元素之和为1作为线性约束。我的问题是两个:
a,b,c
的起点,以便MATLAB知道它们的估计是在这个3D数组中重复的向量? 我想将3D数组M
展开到2D矩阵中并调整参数a,b,c
但是起点的问题仍然存在,因为我必须将它们定义为矢量而不是矩阵
我非常感谢您的想法和建议。可能我想复杂化,还有另一种方法可以做到这一点。
提前谢谢。
答案 0 :(得分:0)
请勿复制a
b
和c
!使用bsxfun
代替
f = @(a,b,c) sum( reshape( bsxfun( @minus, bsxfun( @minus, bsxfun(@minus, M, a), b' ), permute( c, [2 3 1] ) ), [], 1 ) )
现在你的参数是vecotrs而不是vector的复制品。我相信这也将解决你所有的其他问题。