Filter löschen
Filter löschen

1D griddedInterpolant of a vector of query points.

3 Ansichten (letzte 30 Tage)
Maverick
Maverick am 22 Apr. 2020
Bearbeitet: Matt J am 8 Mai 2020
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
  2 Kommentare
Star Strider
Star Strider am 22 Apr. 2020
I get no errors (R2020a) with everything except the griddedinterpolant call (that I did not run). What do you want to do? What result do you want?
Maverick
Maverick am 22 Apr. 2020
Bearbeitet: Maverick am 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?

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Matt J
Matt J am 8 Mai 2020
Bearbeitet: Matt J am 8 Mai 2020
One way:
rows=1:2;
gI= griddedInterpolant({rows,t},f);
F=@(t)gI({rows,t});
>> F(3)
ans =
0.1411
-0.9897
Another way:
Fsin = griddedInterpolant(t, sin(t));
Fcos = griddedInterpolant(t, cos(t));
F=@(t)[Fsin(t);Fcos(t)];

Kategorien

Mehr zu Interpolation finden Sie in Help Center und File Exchange

Produkte


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by