1D griddedInterpolant of a vector of query points.

5 views (last 30 days)
Is it possible to use griddedInterpolant in a vectorized form? I have a vector function f sampled over time domain t which must be interpolated.
The following relations follow: size(t,2) = size(f,2) and size(t,1) < size(f,1).
Here is a simple example that works with interp1 and spline.
Is there a way to achieve the same outcome with griddedInterpolant?
% works!
t = linspace(0,5,100);
f = [sin(t); cos(t)]; % define some vector function
pp = interp1(t, f', 'pchip','pp'); % warning, Matlab suggests to use griddedInterpolant
% or
pp2 = spline(t, f);
% This throws an error:
F = griddedInterpolant(t, f); % ! how to make use of this function with a vector function? !
f = sin(t) % now f is a scalar function
F = griddedInterpolant(t, f); % now this line works
Maverick on 22 Apr 2020
Edited: Maverick on 22 Apr 2020
Please, try to run griddedinterpolant command since it does produce an error (at least on R2017b). I must interpolate a 1D vector function (i.e. a function, that has stacked multiple values at a time instant). Variable f above is a simple example of a 2-vector function. This code works with interp1 or spline, as I showed in the example. However, I want to use griddedinterpolant and check if it is more efficient thatn those counterparts.
I know that presented syntax would work if size(f,1) was equal to 1, however, I don't know how to apply griddedInterpolant to a vector function, or whether it is even possible?

Sign in to comment.

Answers (1)

Matt J
Matt J on 8 May 2020
Edited: Matt J on 8 May 2020
One way:
gI= griddedInterpolant({rows,t},f);
>> F(3)
ans =
Another way:
Fsin = griddedInterpolant(t, sin(t));
Fcos = griddedInterpolant(t, cos(t));


Find more on Interpolation 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!

Translated by