Error using interp1 on MATLAB R2015b for Mac
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Rosa Santos
am 18 Aug. 2017
Kommentiert: Walter Roberson
am 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 Kommentare
Akzeptierte Antwort
Walter Roberson
am 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 Kommentare
Walter Roberson
am 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');
Weitere Antworten (2)
Chad Greene
am 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
am 22 Aug. 2017
2 Kommentare
Torsten
am 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
am 22 Aug. 2017
You seem to have overlooked my comment to my answer, where I do a sort
Siehe auch
Kategorien
Mehr zu Graphics Performance finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!