2013-04-08 1 views
0

В MATLAB, если у меня есть:Как найти максимальное значение в каждой строке матрицы без функции max?

A = [1 2 3 4; 2 3 4 5; 4 8 9 10]; 
[N M] = size(A); 
c = zeros(N,1); 
for n=1:N; 
    for m=1:M; 
     c(n) = ?; 
    end 
end 

Что я заменить? с которым будет найдено максимальное значение в каждой строке A без использования функции max?

+0

Вы знаете, как найти максимальное значение для одномерного массива? –

+0

и для чего вы хотите это сделать? – Shai

+0

@ Эйтан, нет, я этого не делаю. Алгоритмически я запутался. – remarkableearth

ответ

0
A = [1 2 3 4; 2 3 4 5; 4 8 9 10]; 
[N M] = size(A); 
c = A(:,1); % modified per Eitan's suggestion 
for n=1:N; 
    % c(n) = A(n,1); % commented out per Eitan's suggestion. 
    for m=1:M; 
     c(n) = (c(n)<A(n,m))*A(n,m) + (c(n)>=A(n,m))*c(n); 
    end 
end 

Только одно из логических утверждений будет истинным, и, таким образом, минимум будет либо обновлен, либо останется неизменным. Супер неудобно ... но благодаря Eitan T больше не нужна дополнительная линия. Хотелось бы, чтобы внутреннее начало цикла на 2, но не обязательно для этого кода для работы (и сводит к минимуму необходимые изменения от исходного кода данного.)

Не знаю, почему вы когда-нибудь не использовать функцию min , но я думаю, у вас была причина ...

+0

Зачем вам вставлять дополнительную строку 'c (n) = A (n, 1)' вместо просто инициализации 'c' в' A (:, 1) '? –

+1

@EitanT Я старался максимально точно отразить код OP; но согласитесь с тем, что ваш твист совершенно правдоподобен и обходит дополнительную линию. Обновил ответ соответственно. – Floris