天天看點

Subscript indices must either be real positive integers or logicals怎麼解決

    matlab裡運作出bug,千萬不能着急,亂改一通。至于我之前的方法,重敲一遍、重新開機軟體等等傻瓜式的方法,也不可取。     我的相關源程式段如下: %-------------------------訓練樣本---------------------------------------% std=std(x,0,2)%std函數,用來求解标準差,作為熵值求取的中間變量 for j=1:1:40   for i=(5*j-4):1:5*j       r=r_factor*std1(i,1)     [A(i,1)]=approx_entropy(m,r,x(i,:))%A為熵值,一個imf為一個熵   end end %-------------------------檢測樣本---------------------------------------% stdt=std(xt,0,2) for j=1:1:40   for i=(5*j-4):1:5*j       r=r_factor*std2(i,1)     [At(i,1)]=approx_entropy(m,r,xt(i,:))%A為熵值,一個imf為一個熵   end end

    運作後,訓練樣本那一塊可以解決問題,但是檢測樣本std總是出現标題中的錯誤。原因如下: 根據提示,下标引用錯誤,也就是檢測樣本裡函數std(xt,0,2),被matlab誤認為數組std。出現這個情況的原因是在訓練樣本程式中,std=std(x,0,2)語句将std函數結果存在std數組裡。運作空間裡有std數組,matlab自帶std函數,難怪軟體自己混亂。也容易解釋,為什麼有的時候可以運作,有的時候出現了bug。     糾正後如下,bug解除: %-------------------------訓練樣本---------------------------------------% std1=std(x,0,2)%std函數,用來求解标準差,作為熵值求取的中間變量 for j=1:1:40   for i=(5*j-4):1:5*j       r=r_factor*std1(i,1)     [A(i,1)]=approx_entropy(m,r,x(i,:))%A為熵值,一個imf為一個熵   end end %-------------------------檢測樣本---------------------------------------% std2=std(xt,0,2) for j=1:1:40   for i=(5*j-4):1:5*j       r=r_factor*std2(i,1)     [At(i,1)]=approx_entropy(m,r,xt(i,:))%A為熵值,一個imf為一個熵   end end     出了查找bug的方法,我們還應該明白,在定義變量時,不能亂用變量名。

繼續閱讀