У меня есть задача найти максимальный продукт элементов в матрице. Входными аргументами являются матрица и скаляр n, которые сообщают мне, сколько элементов нужно умножить. Если n = 2, то я должен умножить два на два. Максимальный продукт может лежать либо в строках, либо в столбцах по диагонали. Например, в этом случае элементы A были умножены на 2 по 2 вдоль строк (B) и столбцов (C).Найти индексы элементов матрицы, которые образуют максимальный продукт
A =
8 1 6
3 5 7
4 9 2
B =
8.0000 6.0000
15.0000 35.0000
36.0000 18.0000
C =
24.0000 5.0000 42.0000
12.0000 45.0000 14.0000
Я делаю это с помощью петли
c=[]
for ii = 1:(length(A)-n+1)
p = prod(A(:,ii:ii+n-1));
c=[c p];
end
или
for i=1:size(A,2)
B(i,:)=real(exp(conv(log(A(i,:)),ones(1,n),'valid')));
C(:,i)=real(exp(conv(log(A(:,i)),ones(1,n),'valid')));
end
В обоих случаях я получить продукт, но когда дело доходит до получения максимального числа, что продукты, (в моем случай, являющийся продуктом A (2,2) * A (3,2) = 45) Я не могу найти индексы исходных элементов матрицы, которые сформировали этот продукт, т. е. (2,2) и (3,2) ,
Любая помощь будет оценена по достоинству.
Как это работает для N = 3? Возьмите B, а затем умножьте строки и столбцы на BB = [48 525 648] и BC = [120 210; 540 630]? Или вы вернетесь к исходной матрице? –
Нет, мы начинаем всегда с оригинальной матрицы. «N» - входной аргумент, и он показывает количество элементов, которые я должен использовать для умножения. В случае 'n = 3' мы получаем' B = 48,0000 105,0000 72,0000' и 'C = 96,0000 45,0000 84,0000'. В этом случае max составляет 105, что является произведением' A (3,1) * A (3,2) * A (3,3) ' – esem
Последние бит разъяснений; скажем, ваш вход - это вектор строки [2 2 1 2]. Правильный ответ для n = 3 4, или это 8? [Нужны ли номера в строке?]. Если входной сигнал [1 0; 0 1] является ответом на n = 2 0? Вы, кажется, только умножаетесь на строки или столбцы, но это не обязательно дает максимальный продукт в матрице –