How can I make my wave propagate in my patch?

2 次查看(过去 30 天)
Hello everyone,
I am a French student in volcanology. I am a matlab beginner and I would like to model the propagation of a seismic wave through a ground. My problem is that I can't get the wave to propagate in my patch, imagesc crushes my patch and create another image. How can I make my wave propagate in my patch?
Thank you for helping me.
clear all
% %creation du sol et du ciel
figure(1)
patch('xdata', [0 5000 5000 0], 'ydata', [0 0 1000 1000], 'facecolor', [0 0.6 0.9]) %ciel
patch('xdata', [0 5000 5000 0], 'ydata', [0 0 -200 -200], 'facecolor', [ 0 0.3 1]) %basalte
patch('xdata', [0 5000 5000 0], 'ydata', [-200 -200 -1500 -1500], 'facecolor', [1 1 0]) %sédiments
patch('xdata', [0 5000 5000 0], 'ydata', [-1500 -1500 -5000 -5000], 'facecolor', [1 0 0]) %granite
%affichage de la distance parcouru par l'onde
obj_texte=text(250, 250,'', 'color', 'b');
%Vitesses sismiques dans les différents miilieux
V0( 1:300, 1:500) = 340; %vitesse dans l'air
V0(50:300, 1:500) = 2000; %vitesse dans le sol
V1=4*V0.*V0; %terme de l'?quation d'onde utilis? dans la boucle
dx = 10; dy = 10; %pas d'espace en m
x=[1:500]*dx; y=[1:300]*dy; %vecteurs x et y en km
%Au d?but du calcul, les vitesses du sol et les déplacements sont nuls
v = V0*0; u = V0*0;
dt = 1/500; %pas de temps du calcul
tmax = 1.0; %temps maximal de calcul
u(50,250)= 1e-3; %d?placement initial
figure (1)
for t=dt:dt:tmax %boucle de calcul
a=V1.*del2(u,dx,dy); %calcul de l'acc?l?ration des particules gr?ce ? l'?quation d'onde
v= (v+a*dt); %calcul des vitesses des particules ? partir de leur acc?l?ration
u= (u+v*dt); %calcul des d?placements
imagesc(x, y, u, [-1e-6 1e-6]); %visualisation
drawnow %visualisation
%mon_texte=sprintf('distance : %5.1f m', t*2000);
%set(obj_texte, 'string' , mon_texte);
end

回答(1 个)

Kiran Felix Robert
Kiran Felix Robert 2020-12-18
编辑:Kiran Felix Robert 2020-12-18
Hi Pierre,
Try using hold to plot on same figure
For your issue, the following is an example,
clear all
% %creation du sol et du ciel
figure(1)
patch('xdata', [0 5000 5000 0], 'ydata', [0 0 1000 1000], 'facecolor', [0 0.6 0.9]) %ciel
patch('xdata', [0 5000 5000 0], 'ydata', [0 0 -200 -200], 'facecolor', [ 0 0.3 1]) %basalte
patch('xdata', [0 5000 5000 0], 'ydata', [-200 -200 -1500 -1500], 'facecolor', [1 1 0]) %sédiments
patch('xdata', [0 5000 5000 0], 'ydata', [-1500 -1500 -5000 -5000], 'facecolor', [1 0 0]) %granite
hold on
%affichage de la distance parcouru par l'onde
obj_texte=text(250, 250,'', 'color', 'b');
%Vitesses sismiques dans les différents miilieux
V0( 1:300, 1:500) = 340; %vitesse dans l'air
V0(50:300, 1:500) = 2000; %vitesse dans le sol
V1=4*V0.*V0; %terme de l'?quation d'onde utilis? dans la boucle
dx = 10; dy = 10; %pas d'espace en m
x=[1:500]*dx; y=[1:300]*dy; %vecteurs x et y en km
%Au d?but du calcul, les vitesses du sol et les déplacements sont nuls
v = V0*0; u = V0*0;
dt = 1/500; %pas de temps du calcul
tmax = 1.0; %temps maximal de calcul
u(50,250)= 1e-3; %d?placement initial
figure (1)
for t=dt:dt:tmax %boucle de calcul
a=V1.*del2(u,dx,dy); %calcul de l'acc?l?ration des particules gr?ce ? l'?quation d'onde
v= (v+a*dt); %calcul des vitesses des particules ? partir de leur acc?l?ration
u= (u+v*dt); %calcul des d?placements
imagesc(x, y, u, [-1e-6 1e-6]); %visualisation
drawnow %visualisation
%mon_texte=sprintf('distance : %5.1f m', t*2000);
%set(obj_texte, 'string' , mon_texte);
end
hold off

标签

Community Treasure Hunt

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

Start Hunting!