matlab中一个函数的意外结果

时间:2011-10-07 17:05:46

标签: matlab

通常这个函数应该给我值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 个答案:

答案 0 :(得分:3)

矢量比较会更快:

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;

答案 1 :(得分:2)

可能是因为您永远无法联系到案例var_Test(i) = 3var_Test(i) = 4

您的ifend数据块存在问题。你得到它的方式,只有在案例2被击中时才会达到案例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;

小心缩进会对此有所帮助。