2012-02-27 3 views
-4

Я исправляю код с помощью Stackfriends, см. Жирные части, если у кого-то есть аналогичный стек. Арифметика, я должен взять w = 1 и зачем получить I w = 2? Большое спасибо,основы для петель

X=linspace(0,10,6); 
Y=linspace(0,20,5); 
    Xstar=0; 
    Ystar=0; 
    **p=0;** 
    for i=1:length(X)-1 
     for j=1:length(Y)-1 
       if (Ystar==Y(j)) && (Xstar==X(i)) 
        w=1; 
       else 
        w=2; 
       end 
       **p(i,j)=w** 
     end 
    end 
+1

Что вы думаете ?? – YXD

+0

мой вопрос по-прежнему выше кода. Интересно, почему я получаю математически неправильный вывод? Вероятно, ошибка остается в цикле if. – user1018331

+0

Вы должны объяснить, какой выход вы ожидаете. Как мы собирались угадать, что означает «математически неверный», без какой-либо информации? – YXD

ответ

2

Просто догадаться, но я думаю, что вы хотите перебрать массивы назад. Вы должны использовать отладчик и смотреть на него шаг за шагом.

Попробуйте это:

... 
    for i=length(X):-1:1 
     for j=length(Y):-1:1 
       if (Ystar==Y(j)) && (Xstar==X(i)) 
        w=1; 
       else 
        w=2; 
       end 
     end 
    end 

Вот что вы должны сделать, чтобы решить эту проблему.

  • установить контрольную точку в начале цикла (Klick в MatLab окне редактора рядом с исходным кодом, красная точка должна появиться)
  • нажмите F5, чтобы начать свой сценарий, он остановится на точке останова
  • нажмите F10, чтобы шаг за строкой пройти через ваш скрипт, в то же время вы можете проверить значения ваших переменных, например в окне рабочего пространства

(я надеюсь, что эти инструкции все еще действительны, у меня есть довольно старая версия MATLAB)

+0

, тогда я получаю w = 0, но я думаю, что вижу Идею. Спасибо за ваш добрый ответ. – user1018331

+1

@ user1018331: 'w' должно быть' 1' после выполнения этого. – Lucas

+0

еще раз спасибо, я получил его с вашей помощью :) – user1018331

1

Назначение w=1; осуществляется только на первом контуре; каждый раз после этого либо X(i), либо Y(j) не равно 0, так отображается . После завершения циклов все, что вы увидите, - w=2, так как вы не сохраняете значение всех итераций.