MATLAB: Plot Contour at 0km Depth

In summary: The output should now look like this:In summary,The script plots two waves using contour() . The script first defines the total time for the simulation, then sets the computation increment and calculates the number of steps. The input waves are velocity waves with frequencies of 1 and 0.5. The source depth is set to 1. The wave parameters are calculated using input. The waves are then plotted using figure() and the axes are labeled. The title and pause() functions are then called.
  • #1
henrybrent
57
0
I'm trying to generate contours that plot with the animation using contour(X,Y) but it's not quite working. I only need it to be in the x-y plane at 0km depth (see picture for greater clarification)

Matlab:
% A script to plot two 3D waves.

clear
%Define the total time for simulation
T_total=10;
%Set the computation increment
dt=0.1;
%calculate the number of steps
ntstep=T_total/dt+1;
%Define Input Waves
alphaa=1;  %velocity of wave a
alphab=2;  %velocity of wave a

fa=1;       %frequency of wave a
fb=0.5;       %frequency of wave b
ampa=6;     %amplitude of wave a in cm
ampb=3;     %amplitude of wave b in cm

%set the source depth
depth=1;

%Calc wave parameters using input
Ta=1/fa;    %period of wave a
Tb=1/fb;    %period of wave a
wa=2*pi*fa; %angular frequency of wave a
wb=2*pi*fb; %angular frequency of wave b
la=Ta*alphaa;%wavelength of wave a
lb=Tb*alphab;%wavelength of wave b
ka=2*pi/la; %wavenumber of wave a
kb=2*pi/lb; %wavenumber of wave b

x=(-10:1:10);        %x
y=(-10:1:10);        %y
z=(-20:1:0);        %z
t=zeros(length(x),length(y), length(z));        %start time
% setup the figure
figure(1);

%label axes
xlabel('Distance (m)');
ylabel('Distance (m)');
zlabel('Depth (m)');
hold on
[X,Y,Z]=meshgrid(x,y,z);
R=sqrt(X.^2+Y.^2+(Z+depth).^2);
contour3(X,Y,R);
%loop over nsamp
for n=1:ntstep
    t=t+dt; %time
    arga=wa*t-ka*R; %argument of wave a
    argb=wb*t-kb*R; %argument of wave b
    a=ampa*sin(arga)./max(1,R);
    a(R>t.*alphaa)=0; % causality condition
    a(R<t.*alphaa-la/2)=0; % limit length of input wave to one half cycle
    b=ampb*sin(argb)./max(1,R);
    b(R>t.*alphab)=0; % causality condition
    b(R<t.*alphab-lb/2)=0; % limit length of input wave to one half cycle
  
    figure(1);
    hold off;
  
    wf=a+b;
    slice(X,Y,Z,wf,x,y,z);
    axis square;
    shading INTERP
    caxis([0,1]);
    colormap([[0:0.1:1]',zeros(length([0:0.1:1]'),1),zeros(length([0:0.1:1]'),1)]);
    col=colorbar;
    alpha(0.05);
    hold on;
    %label axes
    xlabel('Distance (km)');
    ylabel('Distance (km)');
    zlabel ('Depth (km)');
    ylabel(col,'Amplitude (cm)'); % label the colour bar

  
  
    title(strcat('time = ', num2str(t(1)), ' s'));
    pause (dt);

end

CppFJgg.jpg
 
Physics news on Phys.org
  • #2
Ah, all it was was a simple case of adding

Matlab:
contour(X(:,:,21),Y(:,:,21),wf(:,:,21));
 

FAQ: MATLAB: Plot Contour at 0km Depth

What is a contour plot in MATLAB?

A contour plot is a graphical representation of 3-dimensional data on a 2-dimensional plane. In MATLAB, it is created using the contour function, which plots the contour lines of a given dataset at a specified depth, in this case 0km.

How do I specify the depth for a contour plot in MATLAB?

To plot a contour at 0km depth in MATLAB, you can use the contour(Z,0) command, where Z is the 3-dimensional dataset. This will create a contour plot at the 0km depth level.

Can I customize the appearance of a contour plot in MATLAB?

Yes, you can customize the appearance of a contour plot in MATLAB using various optional arguments in the contour function. These include changing the color, line style, and label format of the contour lines, as well as adding a colorbar and adjusting the axis limits.

How can I add a title and labels to a contour plot in MATLAB?

To add a title and labels to a contour plot in MATLAB, you can use the title, xlabel, and ylabel functions. These allow you to specify the text and format of the title and axis labels for your plot.

Is it possible to plot multiple contour levels in MATLAB?

Yes, it is possible to plot multiple contour levels in MATLAB using the contour function. You can specify the desired contour levels using the levels argument, which takes in a vector of values. This will create a plot with multiple contour lines at the specified levels.

Similar threads

Replies
8
Views
843
Replies
2
Views
3K
Replies
1
Views
1K
Replies
1
Views
809
Replies
1
Views
2K
Replies
4
Views
3K
Back
Top