我认为这可能是一个语法问题,这是代码。
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。
通常如果矩阵在循环中改变大小,我只会收到警告,但这次我认为这是由于我不理解的原因。
答案 0 :(得分: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