
Estoy buscando una forma rápida de linealizar un valor entre valores en Matlab.
Ejemplo:
a = ([10 20 30 40])
index = 1.5 //a float index
func(a,index); //shall return a value between index 1 and 2. In this case would be the value 15.
Ans = 15
Respuesta1
// define a function that interpolates a vector 'a' defined on a regular grid
// at interpolated support coordinates 'x'
f = @(a, x) interp1( 1:length(a), a, x);
// test vector (given by OP)
a=[10 20 30 40];
// this vector interpolated at coordinate 1.5 gives 15
// (can be a vector of coordinates)
f(a, 1.5)
hace lo que quieres.
El vector a
contiene los valores que se interpolarán en coordenadas espaciadas regularmente que van desde 1 hasta la longitud de a
. Para lograr eso, se puede usar la función Matlab interp1
, que realiza interpolaciones lineales dados los puntos de soporte (primer argumento), los valores en estos puntos de soporte (segundo argumento) y las coordenadas de interpolación solicitadas (tercer argumento). Sin embargo, según la solicitud del OP de realizar la interpolación con una breve llamada a función específica, esta función f
permite interpolar el vector a
en una coordenada específica (o vector de coordenadas) siempre que se mantengan dentro del rango [1,length(a)]
.