Я хочу применить оператор IF к следующей матрице:

А =

 2     5     2     4     8
 2     5     0     0     0
 2     4     0     0     0
 6     8     0     0     0
 9     5     0     0     0
 4     7     0     0     0
 8     1     0     0     0

На данный момент у меня есть следующее:

if A(1,2)>A(1,4),
A(2,3)=A(1,4);
A(2,4)=(A(1,5))+1;
end


if A(1,2)<A(1,4),
A(2,4)=(A(1,4))-1;
A(2,4)=(A(1,4))-(A(2,3));
end

В вышеупомянутом коде я сравниваю только 2-й и 4-й столбцы первой строки. Затем из первой строки строится вторая строка.

Затем я хочу сравнить вторую строку и использовать ее для построения третьей строки ... и так далее ... во всех 7 строках.

Могу я добавить 1: n, чтобы изменить это?

Какие-либо предложения?

2
Kelly 22 Сен 2012 в 22:42
Мне так не кажется. Вы вычисляете A (2,4) на основе A (1,4). Затем A (3,4) будет вычисляться на основе нового значения A (2,4). У вас есть зависимость по данным ... И, похоже, вы ошиблись во втором операторе if. Вы дважды присваиваете один и тот же индекс A.
 – 
angainor
22 Сен 2012 в 22:58
Могут ли индексы увеличиваться на 1 каждый раз в цикле?
 – 
Kelly
22 Сен 2012 в 23:13

1 ответ

Лучший ответ

Вы можете написать следующий цикл

for i=1:size(A, 1)-1
    if A(i,2)>A(i,4),
        A(i+1,3)=A(i,4);
        A(i+1,4)=A(i,5)+1;
    end 
    if A(i,2)<A(i,4),
        A(i+1,4)=A(i,4)-1;
        % wrong index here? You assign twice to the same A entry.
        % the above line has no effect...
        A(i+1,4)=A(i,4)-A(i+1,3);
    end 
end
1
angainor 22 Сен 2012 в 23:23
Спасибо! Это то, что я искал. Да, я допустил пару ошибок в кодировании ... пытался изобразить на примере большую матрицу. У меня были проблемы с оператором for и индексами. Это проясняет ситуацию.
 – 
Kelly
23 Сен 2012 в 01:45