c7ce1858-27d8-47f5-a7be-47ee77968416
本文首发于 算法社区 dspstack,转载请注明出处,谢谢。
clc;
clear;
Nx=201; Nz=201; Nt=400;%设置采样点数,采样时间点数
h=8; %x方向和z方向的步长
dt=0.001; %时间步长
c=3000; %波传播速度为3km/s
f=20; %震源频率
gama=3; %频带控制参数
A=(dt*c)^2/h^2;
u=zeros(Nx,Nz,Nt);
for k=2:Nt-1for i=3:Nx-2for j=3:Nz-2if i==100&j==100u(i,j,k+1)=exp(-(2*pi*f*k*dt/gama).^2).*cos(2*pi*f*k*dt);%在(100km,100km)处设置一个振动源else u(i,j,k+1)=A*(u(i+1,j,k)+u(i-1,j,k)+u(i,j+1,k)+u(i,j-1,k)-4*u(i,j,k))-u(i,j,k-1)+2*u(i,j,k);endu(3,j,k+1)=u(4,j,k+1);endend
end
filename='二维波场快照.gif';
for k=1:4:Nt
pcolor(u(:,:,k))
shading interp;
colormap('bone');
axis equal;
axis([0,200,0,200]);
set(gca,'Ydir','reverse');
xlabel('x'); ylabel('z');
title('顶部为自由边界条件,其他为透射边界的二维声波传播快照');
if(k==201) keyboard; end
f=getframe(gcf); % 捕获画面
imind=frame2im(f);
[imind,cm] = rgb2ind(imind,256);if k==1imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',0.05); %采用延迟时间为0.05秒写入给定的文件elseimwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.1); %采用延迟时间为0.1秒写入给定的文件endend
本文发布于:2024-02-02 14:32:36,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170685555444437.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |