天天看点

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的方法,我们还应该明白,在定义变量时,不能乱用变量名。

继续阅读