Interpolate matrices for different times in Matlab

1 visualización (últimos 30 días)
mldmnn
mldmnn el 9 de Ag. de 2018
Comentada: mldmnn el 10 de Ag. de 2018
I have computed variables stored in a matrix for a specific time vector. Now I want to interpolate between those whole matrices for a new time vector to get the matrices for the desired new time vector.
I've came up with the following solution but it seems clunky and computational demanding:
clear all;
a(:,:,1) = [1 1 1;2 2 2;3 3 3]; % Matrix 1
a(:,:,2) = [4 4 4;6 6 6;8 8 8]; % Matrix 2
t1 = [1 2]; % Old time vector
t2 = [1 1.5 2]; % New time vector
% Interpolation for each matrix element
for r = 1:1:size(a,2)
for c = 1:1:size(a,1)
tab(:) = a(r,c,:);
tabInterp(r,c,:) = interp1(t1,tab(:),t2);
end
end
The result is and should be:
[2.5000 2.5000 2.5000
4.0000 4.0000 4.0000
5.5000 5.5000 5.5000]
Any thoughts?

Respuesta aceptada

Stephen23
Stephen23 el 10 de Ag. de 2018
Editada: Stephen23 el 10 de Ag. de 2018
Simpler in just one line and more efficient without all of those intermediate variables:
>> a(:,:,1) = [1 1 1;2 2 2;3 3 3];
>> a(:,:,2) = [4 4 4;6 6 6;8 8 8];
>> b = permute(interp1([1,2],permute(a,[3,2,1]),[1,1.5,2]),[3,2,1])
b(:,:,1) =
1 1 1
2 2 2
3 3 3
b(:,:,2) =
2.5000 2.5000 2.5000
4.0000 4.0000 4.0000
5.5000 5.5000 5.5000
b(:,:,3) =
4 4 4
6 6 6
8 8 8
And compared to your original code:
>> isequal(tabInterp,b)
ans = 1
  1 comentario
mldmnn
mldmnn el 10 de Ag. de 2018
That is even better than the other answer! Nice to learn from experts!

Iniciar sesión para comentar.

Más respuestas (1)

Ameer Hamza
Ameer Hamza el 9 de Ag. de 2018
You can use interp3 as follow:
clear all;
a(:,:,1) = [1 1 1;2 2 2;3 3 3]; % Matrix 1
a(:,:,2) = [4 4 4;6 6 6;8 8 8]; % Matrix 2
t1 = [1 2]; % Old time vector
t2 = [1 1.5 2]; % New time vector
% Interpolation for each matrix element
[X, Y, Z] = meshgrid(1:size(a,1), 1:size(a,2), t1);
[X2, Y2, Z2] = meshgrid(1:size(a,1), 1:size(a,2), t2);
tabInterp = interp3(X,Y,Z,a,X2,Y2,Z2);
  2 comentarios
mldmnn
mldmnn el 10 de Ag. de 2018
It works very well. Thank you! Didn't think about using interp3 for this issue.
Ameer Hamza
Ameer Hamza el 10 de Ag. de 2018
You are welcome.

Iniciar sesión para comentar.

Categorías

Más información sobre Interpolation en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by