1

我认为这可能是语法问题,这是代码。

  load ([ 'C:\Users\Abid\Desktop\Inquiry Runs\dtS' ])
 dtS((dtS==0))=nan;
 for j=2:9;
maxS=max(dtS(j,:));
minS=min(dtS(j,:));

maxval(j,:)=dtS((dtS>(maxS-.1*maxS)));
minval(j,:)=dtS((dtS<(minS+.1*minS)));

avmax(j)=mean(maxval(j,:));
avmin(j)=mean(minval(j,:));

avs(j,:)=[avmax(j) avmin(j)]
 end

所以我知道每个循环的行矩阵大小不同。例如 maxval(j,:) 将根据它正在查找某些值的一行而改变。

我手动执行此操作,我看到在第一个循环中矩阵的大小为 (1,1),但是,如果我将循环设置为仅运行 j=2,则行长为 13。

通常,如果矩阵在循环中改变大小,我只会收到警告,但这次我认为这是由于我不明白的原因。

4

1 回答 1

1

你是对的,问题在于 maxval(j, :) 的大小不同。length(maxval(j, :))不是length(dtS((dtS>(maxS-.1*maxS))));这会导致一个问题,因为 maxval 必须是“矩形”,但如果它被这行代码扩展,它的一些值将不会被定义。考虑:

x = [1, 2; 3, 4];
x(3, :) = [5, 6, 7];

如果此代码合法,则结果将是:

x: [1, 2, ?;
    3, 4, ?;
    5, 6, 7]

由于这些未定义的值,matlab 不会让你这样做。您可以改用元胞数组:

maxval = cell(9, 1);
avmax = zeros(9, 1);
avs = zeros(9, 2);
for j=2:9;
  maxS=max(dtS(j,:));
  minS=min(dtS(j,:));

  maxval{j} = dtS((dtS>(maxS-.1*maxS)));
  minval{j} = dtS((dtS<(minS+.1*minS)));

  avmax(j)=mean(maxval{j});
  avmin(j)=mean(minval{j});

  avs(j,:)=[avmax(j) avmin(j)]
end
于 2012-04-08T06:39:59.093 回答