Error using interp1 on MATLAB R2015b for Mac
8 views (last 30 days)
Show older comments
Rosa Santos
on 18 Aug 2017
Commented: Walter Roberson
on 22 Aug 2017
Hi! I am a newbie on matlab trying to interpolate temp & pressure profile data and its getting the error:
Error using griddedInterpolant
The coordinates of the input points must be finite values; Inf and NaN are not permitted.
Error in interp1 (line 161)
F = griddedInterpolant(X,V,method);
Error in RSatto (line 30)
pressI = interp1(A(~nanx),B(~nanx),x,'nearest','extrap');
This is my code:
clear; clc;
%cd /Users/Rosinha/Documents/GoBLE/Dados&Resultados/GoBLE-ATTO_RS-2015/ProfessoraRosa/ATTO/ATTO_alterados/ATTO;
pwd
%raw = dir('2015*.dat');
%x=(0:50:30000)'; %Intervalo usado para Interpolação
grd = 180 ./ 3.141593; rad = 3.141593 ./ 180;
Dz=50;
g=9.8;
%%Lendo arquivos *.dat
atto = load('201510311100.dat');
%%****** Formato *******
% alt(m) press(hPa) T(oC) RH(%) Td(oC) Tvi(oC) densidade(kg/m3) ff(m/s) dd(o)
% uvel(m/s) vvel(m/s)
alt = atto(:,1); %press = atto(:,2); T = atto(:,3); RH = atto(:,4);
%Td = atto(:,5); Tvi = atto(:,6); densidade = atto(:,7);
%ff = atto(:,8); dd = atto(:,9); uvel = atto(:,10); vvel = atto(:,11);
%%******* Interpolação *******************
x=(0:50:numel(alt))'; %intervalo de interpolação
%x=(0:50:3500)'
C = unique(atto(:,1:2),'rows');
nanx=isnan(C(:,2));
A=C(:,1);
B=C(:,2);
pressI = interp1(A(~nanx),B(~nanx),x,'nearest','extrap');
I typed "dbstop if naninf"and got the following msg:
NaN/Inf breakpoint hit for fullfile.p on line 28.
29 persistent fileSeparator;
29 persistent fileSeparator;
I have no idea what I'm doing wrong! Could someone help me? Thanks!
0 Comments
Accepted Answer
Walter Roberson
on 18 Aug 2017
Your code is protecting against B being nan, but it is not protecting against A being nan, and is not protecting against inf on the input. I recommend changing
nanx=isnan(C(:,2));
to
nanx = ~all(isfinite(C),2);
2 Comments
Walter Roberson
on 19 Aug 2017
nanx = ~all(isfinite(C),2);
tempC = sort( C(nanx,:), 'rows');
A = tempC(:,1);
B = tempC(:,2);
pressI = interp1(A, B, x, 'nearest', 'extrap');
More Answers (2)
Chad Greene
on 18 Aug 2017
What do you get if you type
sum(A(~nanx))
I have a feeling there are some NaNs in there. Perhaps the line just above it should be
nanx=isnan(C(:,1));
Rosa Santos
on 22 Aug 2017
2 Comments
Torsten
on 22 Aug 2017
The error message clearly states that the vector A is not strictly increasing as it should be, i.e.
A(i) < A(i+1) for i=1,...,numel(A)-1.
So you will have to sort A first and rearrange B accordingly.
Best wishes
Torsten.
Walter Roberson
on 22 Aug 2017
You seem to have overlooked my comment to my answer, where I do a sort
See Also
Categories
Find more on Graphics Performance in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!