Matlab interp1将最后一行显示为NaN

时间:2018-02-08 20:20:10

标签: matlab multidimensional-array interpolation nan

我遇到与here类似的问题。但是,似乎没有解决方案。

我的问题是这样的:我需要导入一些文件,例如,5。每个文件中有20列,但行数是多种多样的。第1列是曲柄角度的时间,其余是数据。

所以我的代码首先导入所有文件,找到行数最多的文件,然后创建一个包含多行的多维数组。时间是在引擎周期中,因此,我将从导入的文件中删除超出整个引擎周期的行。这样,我总是有X个整个发动机循环的数据。然后我只是将数据插入到预先分配的数组中,以便为5个数据文件创建一个巨大的多维数组。

但是,这似乎总是导致每个页面的每一列的最后一行都填充了NaN。请看下面的代码。我无法看到我做错的地方。哦,顺便说一句,因为我之前被搞砸了,这不是功课。

maxlines = 0;
maxcycle = 999;
for i = 1:1
    filename = sprintf('C:\\Directory\\%s\\file.out',folder{i});
    file = filelines(filename); % Import file clean
    lines = size(file,1); % Find number of lines of file
    if lines > maxlines
        maxlines = lines; % If number of lines in this file is the most, save it
    end
    lastCAD = file(end,1); % Add simstart to shift the start of the cycle to 0 CAD
    lastcycle = fix((lastCAD-simstart)./cycle); % Find number of whole engine cycles
    if lastcycle < maxcycle
        maxcycle = lastcycle; % Find lowest number of whole engine cycles amongst all designs
    end
    cols = size(file,2); % Find number of columns in files
end

lastcycleCAD = maxcycle.*cycle+simstart; % Define last CAD of whole cycle that can be used for analysis

% Import files
thermo = zeros(maxlines,cols,designs); % Initialize array to proper size
xq = linspace(simstart,lastcycleCAD,maxlines); % Define the CAD degrees
for i = 1:designs
    filename = sprintf('C:\\Directory\\%s\\file.out',folder{i});
    file = importthermo(filename, 6, inf); % Import the file clean
    [~,lastcycleindex] = min(abs(file(:,1)-lastcycleCAD)); % Find index of end of last whole cycle
    file = file(1:lastcycleindex,:); % Remove all CAD after that
    thermo(:,1,i) = xq;
    for j = 2:17
        thermo(:,j,i) = interp1(file(:,1),file(:,j),xq);
    end
    sprintf('file from folder %s imported OK',folder{i})
end

thermo(end,:,:) = []; % Remove NaN row

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

你的样品超出了范围吗?如果是这样,你需要告诉interp1你想要外推

 interp1(file(:,1),file(:,j),xq,'linear','extrap');