Mesh Data: Interpolating data and swapping axes

11 visualizaciones (últimos 30 días)
Philip So
Philip So el 21 de Sept. de 2018
Respondida: Philip So el 24 de Sept. de 2018
Hi
I have a surface plot and would like to swap the axes.
Suppose I have data like this
A = [0 1 2 3 4]; %x-axis
B = [10 11 12]; %y-axis
C = [0 5 3 8 5; 3 4 5 3 1; 6 4 9 2 1]; %z-axis
With surf(A,B,C), I can get a surface plot like this
But now I want to swap the axes for the data, so it would look like this
A = [0 1 2 3 4]; %x-axis (same)
C = [0 1 2 3 4 5 6 7 8 9 10]; %y-axis (new)
B = [??]; %z-axis (new)
How can I compute the new matrix B? I believe I will need to interpolate the data.
  1 comentario
dpb
dpb el 22 de Sept. de 2018
"I will need to interpolate the data."
Not interpolate but extrap-olate grossly outside the range of any data. This would be risky at best...

Iniciar sesión para comentar.

Respuesta aceptada

Philip So
Philip So el 24 de Sept. de 2018
Thank you for the replies.
Regarding the C data having 3 occurences of '5', sorry, that was a bad example. I was trying to provide a simple example. My actual data set is much larger and is strictly increasing in both axes.
Anyway, I believe I have found a solution. It is a modification of the reverse look-up table discussed here: https://mathworks.com/matlabcentral/answers/12809-reverse-2d-lookup-table
It's modified to loop the reverse look-up table.
Here's the code, and I have provided a better example of the C matrix
A = [20 21 22 23 24]; %x-axis
B = [10 11 12]; %y-axis
C = [0 0.1 0.2 0.3 0.4; 0.1 0.2 0.3 0.4 0.5; 0.2 0.3 0.4 0.5 0.6]; %z-axis
figure(1)
surf(A,B,C)
title('Original Plot')
xlabel('A');
ylabel('B');
zlabel('C');
new_C_range = 0:0.1:0.6;
for j = 1:size(B,2)
for k = 1:size(new_C_range,2)
A_new(j,k) = interp1(C(j,:),A,new_C_range(k));
end
end
figure(3)
surf(new_C_range,B,A_new)
title('Reconstructed A')
xlabel('C');
ylabel('B');
zlabel('A');
Here's the original plot with C as the matrix
and here's the new plot with a reconstructed A matrix (yeah, I realised I reconstructed the wrong axis. In my original question, I wanted to reconstruct the B matrix instead, but the same logic applies.)
I've tried my best to compare the two plots. I believe they are identical and the algorithm is working correctly. Could someone help to double check the two plots and the algorithm? Thank you!

Más respuestas (1)

Walter Roberson
Walter Roberson el 22 de Sept. de 2018
You cannot do that. Look in your original C data and see that there are three different locations at which C is 5. It is not possible to pick just one of them as being "the" correct place for 5 to occur.

Categorías

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

Productos


Versión

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by