【问题标题】:Subscript indices must either be real positive integers or logicals下标索引必须是实数正整数或逻辑数
【发布时间】:2012-04-14 07:58:23
【问题描述】:

我的matlab函数代码出现以下错误:

???下标索引必须是实数正整数或逻辑数。

==> AFA 在 15 时出错 M(k,j) = 均值(T(i:sze,j));

这是问题所在的代码部分:

sz =size(T);
lim = sz(2) - ordre;
M = zeros(sz(1),sz(2));
r= 0;
for j=1:sze,
    k = 1;
for i=1:lim,
    M(k,j) = mean(T(i:i+ordre,j));
    k = k + 1;    
end

for i=lim+1:sz(2),
    M(k,j) = mean(T(i:sz(2),j));
    k = k + 1; 
end
end

【问题讨论】:

  • 听起来ordre 为零,然后lim+1 > sz(2)。只是猜测......
  • 不,此时实际上是 ordre=5
  • matlab 能否将数据打印到屏幕或日志文件?您能否让它在该函数调用之前打印所有变量的状态,然后查看日志以查看它抱怨的索引是什么?

标签: matlab


【解决方案1】:

以下内容对我有用,没有错误

T = magic(25);ordre = 5; %# I make up some values here
sz =size(T);
lim = sz(2) - ordre;
%# I've added a check here
if lim < 1, error('ordre has to be at most sz(2)-1 (is %i)',ordre);end
M = zeros(sz(1),sz(2));
r= 0;
for j=1:sz(2), %# I needed to change this line (sz(1) works as well)
    k = 1;
for i=1:lim,
    M(k,j) = mean(T(i:i+ordre,j));
    k = k + 1;    
end

for i=lim+1:sz(2),
    M(k,j) = mean(T(i:sz(2),j));
    k = k + 1; 
end

结束

【讨论】:

  • 是的,而不是将 sz(1) 放入您修改的行中,而是尝试放入 sz(2),因为在我的情况下 sze = sz(2)。
  • @TarikMokafih:一切都适用于sz(2)。 T 的大小是多少?
  • 我刚刚尝试过你的,它正在工作,但是当 T 是我传递给函数的输入矩阵时它不起作用(T 是一个大小为 100*4 的整数矩阵)跨度>
  • @TarikMokafih:因为你的数组有四列,ordre 是 5,lim 是 -1,i 在最后一个循环中从 0 开始。
  • @TarikMokafih:看我的新版本
猜你喜欢
  • 1970-01-01
  • 2012-11-27
  • 2013-12-04
  • 2012-12-29
  • 2014-09-25
  • 2013-04-19
  • 2016-02-16
相关资源
最近更新 更多