неожиданные результаты функции в Matlab - PullRequest
1 голос
/ 07 октября 2011

Обычно эта функция должна давать мне значения 1, 2, 3 или 4. Но когда я ее использую, я получаю 0, 1 или 2. Не могли бы вы помочь мне узнать, в чем проблема:

function Vecteur_retour = var_Test(Test)

AA = Test;

var_Test = zeros(1,2000);

for i=3:1:2000  
     if AA(i)<=AA(i-1) && AA(i-1)<=AA(i-2)  
     var_Test(i)=1;  
     else   
     if AA(i)<=AA(i-1) && AA(i-1)>AA(i-2)  
     var_Test(i)=2;  
     if AA(i)>AA(i-1) && AA(i-1)<=AA(i-2)  
     var_Test(i)=3;  
     else  
     if AA(i)>AA(i-1) && AA(i-1)>AA(i-2)  
     var_Test(i)=4;  


     end   
     end   
     end  
     end  


end  


Vecteur_retour = var_Test;

Ответы [ 2 ]

3 голосов
/ 08 октября 2011

Сравнение векторов будет намного быстрее:

var_Test = ones(1,2000);

delta_Test = diff(Test);
var_Test([0 0 delta_Test(1:end-1)] > 0) = 2;
var_Test([0 delta_Test] > 0) = var_Test([0 delta_Test] > 0) + 2;
var_Test(1:2) = 0;
2 голосов
/ 08 октября 2011

Возможно, потому что вы никогда не достигнете случаев var_Test(i) = 3 или var_Test(i) = 4.

У вас проблема с блоками if и end.Как у вас есть, случай 3 достигается только в том случае, если первый случай был достигнут первым, но они противоречивы.

Вы хотите код, похожий на.

 function Vecteur_retour = var_Test(Test)  

 AA = Test;  
 var_Test = zeros(1,2000);  

 for i=3:1:2000        
     if AA(i)<=AA(i-1) && AA(i-1)<=AA(i-2)
         var_Test(i)=1;        
     else
         if AA(i)<=AA(i-1) && AA(i-1)>AA(i-2)
             var_Test(i)=2;
         else  % you forgot this else
             if AA(i)>AA(i-1) && AA(i-1)<=AA(i-2)        
                 var_Test(i)=3;
             else
                 if AA(i)>AA(i-1) && AA(i-1)>AA(i-2)        
                     var_Test(i)=4;          
                 end
             end
         end
     end
 end

 Vecteur_retour = var_Test;

Тщательный отступ помог бы здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...