二維聲波傳播方程的有限差分模擬

2021-09-20 09:33:59 字數 1257 閱讀 9058

首發於www.dspstack.com

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-1

for i=3:nx-2

for j=3:nz-2

if i==100&j==100

u(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

endfilename='二維波場快照.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==1

imwrite(imind,cm,filename,'gif', 'loopcount',inf,'delaytime',0.05); %採用延遲時間為0.05秒寫入給定的檔案

差分矩陣 二維差分

輸入乙個n行m列的整數矩陣,再輸入q個操作,每個操作包含五個整數x1,y1,x2,y2,c,其中 x1,y1 和 x2,y2 表示乙個子矩陣的左上角座標和右下角座標。每個操作都要將選中的子矩陣中的每個元素的值加上c。請你將進行完所有操作後的矩陣輸出。輸入格式 第一行包含整數n,m,q。接下來n行,每...

差分 (2)二維差分

前面部分我們介紹了一維差分,下面我們擴充套件一下,來介紹二維差分。我們有乙個矩陣,如下圖所示。根據二維字首和表示的是右上角矩形的和,由於差分只涉及前面相鄰的數 由一維可以推出 並且由前面範圍的數相加得到這個位置的數。那麼模擬二維字首和和一維差分,可以簡單推測出二維差分的公式 如何從差分矩陣得到原矩陣...

一維差分與二維差分

自 leetcode周賽第四題需要用到二維差分,所以就找了篇文章,便於檢視b i a i a i 1 稱b陣列是a陣列的差分陣列。舉個栗子 a 0,1 2,3 4,5 b 0,1,1,1,1,1 為啥呢?a 5 a 4 b 5 a 4 a 3 b 4 a 3 a 2 b 3 a 2 a 1 b 2 ...