user2649077
user2649077

Reputation:

Matlab -plot a vector field

I have written a function in Matlab that gives me a vector at a position (x,y,z).

Now I am looking for the easiest way to make a colored map of this field on a grid and the color should be related to the norm of the vector.

What is the easiest way to define such a grid for $x \in [x_0,x_1],y \in [y_0,y_1], z \in [z_0,z_1]$? Probably linspace for each component would be possible, but maybe there is already a command that gives me the grid.

Now I need to evaluate my function. The problem is, that it actually gives me two vectors, but I am only interested in the first one. So when I first tried to do this I thought that $[A(i,j,k),~]=function(x(i),y(j),z(k))$ could work, but it did not(My goal was: Choose the first vector(A) and mark him with the reference(i,j,k), so that you later on know to which coordinates this vector belongs to).

So I am highly interested in any kind of ideas.

Upvotes: 2

Views: 2107

Answers (2)

Buck Thorn
Buck Thorn

Reputation: 5074

Instead of

[A(i,j,k),~]=function(x(i),y(j),z(k));

try

[A(i,j,k,:),~]=function(x(i),y(j),z(k));

so that you can fit the entire size of the 3-coordinate vector. Also, if you want to preallocate space use

 A = zeros(Nx,Ny,Nz,3);

where Nx,... are the dims of your coordinate space. Then like @Moly explains, use meshgrid to generate a 3D grid,

 [X Y Z] = meshgrid(x,y,z);

and loop or vectorize to resolve values of your function at points X(i,j,k),Y(i,j,k),Z(i,j,k), compute the norm and store it in 3D array C.

Edit

Representing a cube with mesh(X,Y,Z,C) is not possible but individual slices of the 3D cube can be visualized with mesh, setting the height Z equal to the result of the function C. Some additional work is then required to get coloring right.

Yet another alternative is to use pcolor or contourf. This is perhaps the easiest way to show the 4D data beyond creating a 3D isosurface.

code:

figure
colormap(jet)
for ii=1:9
    subplot(3,3,ii)
    pcolor(X(:,:,ii),Y(:,:,ii),F(:,:,ii))
    axis('equal','square'), title(['Z=' num2str(ii)])
    caxis([0 1])
end

enter image description here

Upvotes: 0

Molly
Molly

Reputation: 13610

The function meshgrid might be what you are looking for to generate the x, y and z coordinates.

Upvotes: 2

Related Questions