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