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的方法,我们还应该明白,在定义变量时,不能乱用变量名。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值