2011-10-07 54 views
1

通常這個功能應該給我值1,2,3或4。但是當我使用它,我得到0,1或2。你能幫我知道在哪裏問題:功能的意外結果在MATLAB

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

可能是因爲你永遠也達不到的情況下var_Test(i) = 3var_Test(i) = 4

你必須與你ifend塊有問題。按照你的方式,情況3只有在情況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; 
     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; 

仔細的縮進會有幫助。

+2

或者更好的是,使用['elseif'(http://www.mathworks.com/help/techdoc/ref/elseif.html)關鍵字。 –

+0

沒錯,試圖保持代碼儘可能地相似OP的,使他們能夠看到的錯誤。 –

+0

@克里斯A. var_Test情形:(i)= 3和var_Test(ⅰ)= 4,存在。 var_Test(i)= 0的情況不存在。所以代碼有問題 – bzak

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; 
+0

+1。非常接近我的所作所爲。 –