Interpolation values from a table

12 views (last 30 days)
Tomás Costa
Tomás Costa on 9 Sep 2019
Commented: Jon on 17 Sep 2019
Hi guys, i wonder if anyone can help me! Im trying to intepolate values from a table that i load on to matlab but i dont understand what is the thing that i am doing wrong, can someone help me? Here is my code:
Screenshot 2019-09-09 at 17.55.35.png
Screenshot 2019-09-09 at 17.55.24.png
Screenshot 2019-09-09 at 17.55.08.png
I didnt put the whole code on here because i dont think it is necessary! Basically i got the areatemp1 file with has values for areas mach and temperatures and i want to interpolate to get a mach value after calculating a Area value. if anyone could help me, it would be great
  4 Comments
Dheeraj Singh
Dheeraj Singh on 12 Sep 2019
Please check the variable type of T.Area . You can print the variable to see if it is of expected type or not. You can refer to the documentation of interp1 to see the expected type of T.Area.
Hope this helps.
Tomás Costa
Tomás Costa on 12 Sep 2019
T.Area is a cell array of 31x1. Basically i have a table called 'areatemp1' which has values of area, mach number and temperatures. What im calculating is an area and i want to use that calculated area to interpolate on the table and export the values for mach number and temperature. I can do everything but once i get to the interpolation this error comes up:
Error using interp1>reshapeAndSortXandV (line 414)
X must be a vector of type double or single.
Error in interp1 (line 93)
[X,V,orig_size_v] = reshapeAndSortXandV(varargin{1},varargin{2});
Error in Tese (line 51)
machs = interp1(T.Area, T.Mach, dif); %array of viscosities the same size as temperature

Sign in to comment.

Answers (1)

Jon
Jon on 12 Sep 2019
Edited: Jon on 12 Sep 2019
If T.area is a cell array, and maybe T.Mach is also a cell array you must first turn them into ordinary MATLAB vectors, (n by 1 or 1 by n arrays) before interpolating. So, for example you could do something like
area = cell2mat(T.Area)
Mach = cell2mat(T.mach)
machs = interp1(area,mach,dif);
or perhaps more compactly
machs = interp1(cell2mat(T.area),cell2mat(T.mach),dif)
  5 Comments
Jon
Jon on 16 Sep 2019
Edited: Jon on 16 Sep 2019
It seems that somehow your arguments aren't really what you think they are.
interp1 expects three input arguments, and looking at the code superficially, it looks like you are supplying it with 3 input arguments, so it is not obvious what the error is. Somehow, one of the three arguments you are supplying must not be evaluating to just a vector. I would suggest stepping through the code with the debugger and checking to see what those arguments evaluate to just before the function is called. Put a breakpoint on the line that generates the error. See https://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html and then look in the workspace window to see what T.Area, T.Mach, and dif really are at that point. If those are as expected, e.g. cell array 31 by 1 as for T.Area, then type on the command line cell2mat(T.Area) and see what that returns (should return a vector), repeat for cell2mat(T.Mach), and then just type dif to see what that gives. Hopefully you can figure out which of those arguments is somehow not a vector and fix it from there.
If you don't want to use the debugger (although it really is the best way to debug things) you can insert the lines to just before the call to interp1 that throws the error, as earlier suggested by @Dheeraj. Note no semicolon so output will print to you command window.
T.Area
T.Mach
diff
cell2mat(T.Area)
cell2mat(T.Mach)
Jon
Jon on 17 Sep 2019
Did this answer your question? In the end what was causing the wrong number of arguments error?

Sign in to comment.

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Products


Release

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!