2014-10-15 3 views
0

Итак, у меня есть следующий код, который является простым оператором if с всплывающим окном. Мой вопрос в том, почему это не работает, когда я использую какие-либо (error == 1) вместо любого (any (error == 1))?Почему любая (любая (A)) работает там, где нет (A)?

K=100 
error = zeros(K,28) 

%lots of other code 

error(K,2)=1      %this is here as a test to trigger the true logic statement 
if any(any(error==1)) 
    disp('hello') 
    f = figure; 
    h = uicontrol('Position',[20 20 50 40],'String','Ok','Callback','uiresume(gcbf)'); 
    uiwait(gcf); 
    close(f); 
end 

У меня работает мой код, но вы хотите понять работу «любой» функции.

+0

Выполнение кода с последующим «любой (ошибка == 1)» возвращает нет ошибок в моей системе. Это то, что возвращается вектор? Это проблема? – danny

+2

Поскольку 'error' является двумерной матрицей,' any (error == 1) ', которая по существу' any (error == 1,1) ', будет вектором строки, и если вы используете ее с условным условным обозначением' IF', это должно быть все 'ones/true', чтобы попасть в часть IF. Но с 'any (any (error == 1))', который был бы скаляром и для этого был бы 'one/true', любой из элементов из ранее полученного вектор-строки должен быть' one/true'. Итак, подведем итог: 'any (any (error == 1))' немного более «внимательный», чем 'any (error == 1)'. – Divakar

+0

Хорошо. Я подозревал, что это, вероятно, причина, но я не понимал, что IF должен быть полностью заполнен теми, которые запускают TRUE. Очень полезно, спасибо. – josh

ответ

2

Потому что заявление if.

Оператор if требует 1 логического продолжения. Если у него более 1 вход, для ВСЕХ их нужно иметь значение true.

В коде:

>> any(error==1) 

ans = 

    Columns 1 through 18 

    0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 

    Columns 19 through 28 

    0  0  0  0  0  0  0  0  0  0 

и

>> any(any(error==1)) 

ans = 

    1 

Поэтому первый случай, когда ВСЕ индекс вектора не являются истинными, он пропустит, если, однако во втором один, поскольку ответ 1, он выполняет код.

Попробуйте и убедитесь в этом сами

if [0 1] 
    disp('This is not going to be displayed') 
end 
if [1 1] 
    disp('Hellooo, this will!') 
end 
if any([0 1]) 
    disp('Yay! this also!') 
end 
Смежные вопросы