
Estou procurando uma maneira rápida de linearizar um valor entre valores no Matlab.
Exemplo:
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
Responder1
// 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)
faz o que você quer.
O vetor a
contém os valores a serem interpolados em coordenadas regularmente espaçadas que variam de 1 ao comprimento de a
. Para conseguir isso, pode-se usar a função Matlab interp1
, que realiza interpolações lineares dados pontos de suporte (primeiro argumento), valores nesses pontos de suporte (segundo argumento) e coordenadas de interpolação solicitadas (terceiro argumento). Porém, conforme solicitação do OP para fazer a interpolação com uma curta chamada de função específica, esta função f
permite interpolar o vetor a
em uma coordenada específica (ou vetor de coordenadas) desde que se mantenham dentro do intervalo [1,length(a)]
.