Bsxfun在解决最小优化任务中的实现



我真的需要帮助。

我有两个矩阵L1L2,它们都是(500x3)的大小。

首先计算L1各列各元素与L2的差值:

lib1 = bsxfun(@minus, L1(:,1)',L2(:,1));
lib1=lib1(:);
lib2 = bsxfun(@minus, L1(:,2)',L2(:,2));
lib2=lib2(:);
lib3 = bsxfun(@minus, L1(:,3)',L2(:,3));
lib3=lib3(:);
LBR = [lib1 lib2 lib3];

结果是矩阵LBR。然后我有一个min问题要解决:

[d,p] = min((LBR(:,1) - var1).^2 + (LBR(:,2) - var2).^2 + (LBR(:,3) - var3).^2);

返回满足min问题的p点。最后,我可以回到我的矩阵L1L2,以找到满足min问题的值的索引位置。我的操作如下:

[minindex_alongL2, minindex_alongL1] = ind2sub(size(L1),p);

这是好的。但是我现在需要的是:

我必须乘,取tensor-product,也称为Kronecker product的矢量alphaLBR, alpha如下所示:

alpha = 0:0.1:2;

并且,这个Kronecker product我已经计算如下:

val = bsxfun(@times,LBR,permute(alpha,[3 1 2]));
LBR = reshape(permute(val,[1 3 2]),size(val,1)*size(val,3),[]);

我现在需要的是:我需要解决相同的min问题:

[d,p] = min((LBR(:,1) - var1).^2 + (LBR(:,2) - var2).^2 + (LBR(:,3) - var3).^2);

但是,这一次,除了找到满足min问题的L1L2的索引位置和值外,我还需要找到来自已乘以并满足min问题的alpha向量的单个值的索引位置。我不知道我怎么能做到这一点,所以任何帮助将非常感激!

提前感谢!

Ps:如果需要,我可以发布L1L2矩阵。

我相信你需要在你的代码中更正这一点-

[minindex_alongL2, minindex_alongL1] = ind2sub([size(L2,1) size(L1,1)],p)

对于解决方案,您需要将p的大小添加到最后一步的索引查找中,因为计算min的向量具有alpha的"附加影响"-

[minindex_alongL2, minindex_alongL1,minindex_alongalpha] = ind2sub([size(L2,1) size(L1,1) numel(alpha)],p)

minindex_alongalpha可能是您感兴趣的

相关内容

  • 没有找到相关文章

最新更新