2014-06-12 16 views
1

我真的需要這個幫助。bsxfun實現中求解min。優化任務

我得矩陣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 - 問題是fulfied點p。最後我可以回到我的矩陣L1L2找到滿足這個min-問題的值的索引位置。我做到了這一點,如下所示:

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

這是可行的。但我現在需要的是:

我要乘,坐tensor-product,也被稱爲所謂的alphaLBR載體Kronecker productalpha給出如下:

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); 

但是,這一次,除了尋找從L1L2指數位和值滿足該min - 問題的,我需要找到從值的索引位置已經成倍增加並且滿足min-問題的向量alpha。我不知道我該如何做到這一點,所以任何幫助將非常感激!

在此先感謝!如果需要,我可以張貼L1L2矩陣。

回答

1

我相信你需要這種修正在你的代碼 -

[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可能是你的興趣。

+0

嗨@Divakar,明天我會試試你的建議。非常感謝您的幫助...... D: –

+0

@SergioHaram讓我知道它是怎麼回事! :) – Divakar

+0

我很抱歉,我不得不嘗試您的建議,當然沒有必要這樣做,您的代碼完美無缺! :D我實際上已經嘗試了很多'ind2sub'的變體 - 'alpha',但我沒有想到我應該使用'numel',爲什麼?爲什麼'size(alpha)'不起作用?而且,我非常抱歉,我可以給你一個upvote! :) –