Реализация bsxfun при решении мин. задача оптимизации
Мне действительно нужна помощь с этим.
Я должен матрицы L1
а также L2
, оба (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);
Который возвращает точку p
где это min
-проблема выполнена. Наконец я могу вернуться к своим матрицам L1
а также L2
чтобы найти позиции индекса значений, которые удовлетворяют этому min
-проблемы. Я сделал это следующим образом:
[minindex_alongL2, minindex_alongL1] = ind2sub(size(L1),p);
Хорошо. Но сейчас мне нужно:
Я должен умножить, взять tensor-product
, также называемый Kronecker product
вектора под названием alpha
в LBR
, 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);
но на этот раз, в дополнение к поиску позиций индекса и значений из L1
а также L2
который удовлетворяет этому min
-проблема, мне нужно найти позицию индекса одного значения из alpha
вектор, который был умножен и который выполняет min
-проблемы. Я понятия не имею, как я могу это сделать, поэтому любая помощь будет очень признательна!
Заранее спасибо!
Ps: я могу опубликовать L1
а также L2
матрицы при необходимости.
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
может быть вашего интереса.