Mesh Data: Interpolating data and swapping axes

11 Ansichten (letzte 30 Tage)
Philip So
Philip So am 21 Sep. 2018
Beantwortet: Philip So am 24 Sep. 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 Kommentar
dpb
dpb am 22 Sep. 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...

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Philip So
Philip So am 24 Sep. 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!

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 22 Sep. 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.

Kategorien

Mehr zu Interpolation finden Sie in Help Center und File Exchange

Produkte


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by