Error in interp2 (interpolation) command.
    6 views (last 30 days)
  
       Show older comments
    
I woyld like to intepolate my data. I have an ascii file with 3 columns (x,y,z). Each column has 700 lines (number). I am using the following commands, in order to interpolate (smooth) my data:
clc
clear
filename1= 'mydata.csv'; 
[d1,tex]= xlsread(filename1);
y=d1(:,3);
x=d1(:,4);
z=d1(:,5);
[xq, yq] = meshgrid(...
    linspace(min(x),max(x)),...
    linspace(min(y),max(y)));
zq = interp2(x,y,z,xq,yq,'cubic');
[c,h]= contourf(xq,yq,zq);
but command window shows me:
Error using griddedInterpolant
The grid vectors must be strictly monotonically increasing.
Error in interp2>makegriddedinterp (line 228)
    F = griddedInterpolant(varargin{:});
Error in interp2 (line 128)
        F = makegriddedinterp({X, Y}, V, method,extrap);
could you please help me?
3 Comments
  Torsten
      
      
 on 22 Oct 2022
				No, the two inputs being provided to the INTERP2 are not vectors, but are in fact the (matrix) outputs from MESHGRID.
The inputs x,y and z to interp2 the OP provides are vectors (which is wrong). The query values xq and yq are matrices obtained from "meshgrid".
Answers (2)
  Torsten
      
      
 on 22 Oct 2022
        
      Edited: Torsten
      
      
 on 22 Oct 2022
  
      Read about the requirements for input arguments x, y and z for interp2:
Paragraph "Input Arguments".
4 Comments
  Torsten
      
      
 on 22 Oct 2022
				Your data are not gridded. Thus you will have to use "scatteredInterpolant":
F = scatteredInterpolant(x,y,z);
[xq,yq] = meshgrid(linspace(min(x),max(x)),linspace(min(y),max(y)));
zq = F(xq,yq)
  Steven Lord
    
      
 on 22 Oct 2022
				Confirm that your x and y vectors are sorted.
issorted(x, 'strictascend')
issorted(y, 'strictascend')
One or both of those will return false. Once you know which one(s) are not strictly ascending, you need to determine why. Plotting that vector may help you identify where the flat, decreasing, or missing segments are.
  Torsten
      
      
 on 22 Oct 2022
        d1 = readmatrix("https://de.mathworks.com/matlabcentral/answers/uploaded_files/1165673/mydata.csv");
y=d1(:,3);
x=d1(:,4);
z=d1(:,5);
F = scatteredInterpolant(x,y,z,'nearest');
[xq,yq] = meshgrid(linspace(min(x),max(x)),linspace(min(y),max(y)));
zq = F(xq,yq);
contourf(xq,yq,zq)
colorbar
3 Comments
  Stephen23
      
      
 on 24 Oct 2022
				@Ivan Mich: you could try a thin-plate spline: https://www.mathworks.com/help/curvefit/tpaps.html
  Torsten
      
      
 on 24 Oct 2022
				Your z-data are not continuous - they only take values 1 1.5 2 2.5 3 ... 9. So would continuous values as 3.1865 even make sense for your application ?
And if you look at the contour plot from your raw data above: the only thing you can learn is that the values for the south-east part are lower than those for the north-west part. 
Everything else like further smoothing would not be appropriate in my opinion.
See Also
Categories
				Find more on Contour Plots 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!