Реализация 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 может быть вашего интереса.

Другие вопросы по тегам