Is it possible to use surf function calling parameters from a 4-D matrix?

2 views (last 30 days)
I have an equation which is a fn of four variables. So i created a 4-D matrix to calculate an output, ie Output=f(a,b,c,d) inside a multi for loop of 4.
Now I wish to use the surf command to plot Output as fn of any above 2 variables.
It seems I can only plot a surface if the matrix is of the form Output=f(a,b,c), ie
surf(a,b,output(:,:,1,1)
It does not accept any other variation like
surf(a,b,output(1,:,:,1) etc
So am i restricted to Output=f(a,b,c) inside the for loop?
Thanks in advanced

Accepted Answer

Wayne King
Wayne King on 29 Sep 2013
You can use squeeze() to do this
output = randn(20,20,20,20);
surf(squeeze(output(1,:,:,1)))
  2 Comments
bugatti79
bugatti79 on 1 Oct 2013
Edited: bugatti79 on 1 Oct 2013
Hi Wayne, I have come across some confusion when selecting parameters from the 4D matrix into the surf command.
Referring to my original message, say I want to issue the following
surf(c,d,squeeze(output(1,1:,:))).
Sometimes the squeeze(output) is a row vector instead of a column vector and it doesn't match with the inputs c,d. So I end up transposing the squeeze(output) and the result 'looks right' but I am doing it rather blindly. So the question I have is
1)If the inputs are column vectors then the output must also be a matching column vector and so I must transpose in order to achieve this?
2)Does the matching work in chronological order? ie,
surf(a,b, squeeze(output(:,:,1,1)
surf(b,c, squeeze(output(1,:,:,1)
surf(c,d, squeeze(output(1,1,:,:)
surf(a,d, squeeze(output(:,1,1,:) etc
Thanks in advanced.

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!