为什么Matlab会给我一个未初始化的变量?

时间:2012-04-12 19:56:06

标签: matlab function variables indexing arguments

在编辑时,“epoch”被确定为变量而且这个  变量未初始化。 “epoch”也是一个功能名称和以前的版本  MATLAB会调用该函数。  但是,MATLAB 7禁止在同一名称中使用相同的名称  上下文既是函数又是变量。

function slope1_4=s(x,m)
A=xlsread(x);
slope1_4=[];
%B=xlsread(y);
%nbligneA=size(A,1);
%nbcolonneA=size(A,2);
%nbligneB=size(B,1);
%nbcolonneB=size(B,2);
for j=m %nbcolonneA
    clear ini;
    clear fin;
    ini=epoch(:,A(1,j),1);
    fin=epoch(:,A(1,j),2);
    ini(ini==0)=[];
    fin(fin==0)=[];
    for i=1:size(ini,1)
        clear f;
        clear a;
        clear b;
        clear y;
        debut=ini(i);
        ending=fin(i);
        interval=ending-debut+1;
        a=A(debut+1:ending+1,j);
        for y=1:interval
            f(y)=a(y);
        end
        y=1:interval;
        b=polyfit(y,f,1);
        slope1_4=[slope1_4,b(1)];
    end
end

问题可能来自epoch(:,A(1,j),1)中的“:”但我不知道如何解决这个问题..

1 个答案:

答案 0 :(得分:2)

您不能将:作为参数传递给函数。 colon仅作为变量的索引有效,因此MATLAB假定epoch应该是变量。但是,您无法从尚未初始化的变量中提取数据,因此会出现错误。

您的函数epoch期望索引(或索引范围)作为第一个参数。因此,您必须为其提供标量索引或您希望它返回的数据索引向量。如果您希望它返回所有数据(即所有可能的索引),但您在调用epoch时不知道数据有多大,然后你可以传递冒号字符串作为参数,如下所示:

ini=epoch(':',A(1,j),1);
fin=epoch(':',A(1,j),2);