⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getj.m

📁 这是在网上下的一个东东
💻 M
字号:
%% [J,ttcal,rpstore]=getj(SCALE,PSCALE,NIT,CONV,XFAC,xn,zn,v,sc,rc,calcrays,rpinit)%% I assume that J is the Jacobian of some function but I don't know what% function it is the jacobian of.  Furthermore, I don't know what the % output variable ttcal is for, and I don't have explanations of what any% of the input variables are. rpstore contains the ray path coordinates.%calcrays=0 reinitializes the ray paths; calcrays~=1 uses the starting raypaths stored in the 3-d array rpinit.%function [J,ttcal,rpstore]=getj(SCALE,PSCALE,NIT,CONV,XFAC,xn,zn,v,sc,rc,calcrays,rpinit)NSEG=PSCALE*2;J=zeros(PSCALE*PSCALE,PSCALE*PSCALE);%  loop over sources and receiversrpnum=0;for j=1:PSCALExs=sc(j,1);zs=sc(j,2);for k=1:PSCALE%keep track of the ray path number being evaluatedrpnum=rpnum+1;xr=rc(k,1);zr=rc(k,2);%  set up initial pathdx=(xr-xs)/NSEG;dz=(zr-zs)/NSEG;xp=[xs:dx:xr];zp=zs+[0:NSEG]*dz;if calcrays==0rp=[xp;zp]';elserp(:,:)=rpinit(rpnum,:,:);end%  travel time modeling convergence loopivec=[2:NSEG];ttstore=-1;for it=1:NIT%  now perturb pathrpnew=rp;x2a=0.5*(rp(ivec+1,1)+rp(ivec-1,1));z2a=0.5*(rp(ivec+1,2)+rp(ivec-1,2));dxa=rp(ivec+1,1)-rp(ivec-1,1);dza=rp(ivec+1,2)-rp(ivec-1,2);dna=dxa.*dxa+dza.*dza;rdx=dxa./sqrt(dna);rdz=dza./sqrt(dna);[cxul,czul]=cellfunc(x2a,xn,z2a,zn);vmid=vel2(x2a,z2a,cxul,czul,xn,zn,v);[vx,vz]=vel2d(x2a,z2a,cxul,czul,xn,zn,v);% pseudo-bending calculationsvrd=vx.*rdx+vz.*rdz;rvx=vx-vrd.*rdx;rvz=vz-vrd.*rdz;rvs=sqrt(rvx.*rvx+rvz.*rvz);%  begin path segment loopfor i=1:NSEG-1xxk=x2a(i);zzk=z2a(i);%  which node is to upper left of segment midpointif (rvs(i)~=0)rvx(i)=rvx(i)/rvs(i);rvz(i)=rvz(i)/rvs(i);rcur=vmid(i)/rvs(i);rtemp=rcur-sqrt(rcur*rcur-0.25*dna(i));% compute the new points and distance of perturbations% using convergence enhancementxxk=x2a(i)+XFAC*rvx(i)*rtemp;zzk=z2a(i)+XFAC*rvz(i)*rtemp;% end of if rvs ne 0 sectionend%  store new path point coordinaterpnew(i+1,1)=xxk;rpnew(i+1,2)=zzk;%  end of path segment loopend%  re-initialize rp ray paths[n,m]=size(rp);%check for ray path convergenceif norm(reshape(rp-rpnew,n*m,1))/norm(reshape(rp,n*m,1)) < CONVbreakendrp=rpnew;% end of ray tracing convergence loopendrpstore(rpnum,:,:)=rp;jvec=[2:NSEG+1];xmida=0.5*(rp(jvec,1)+rp(jvec-1,1));zmida=0.5*(rp(jvec,2)+rp(jvec-1,2));dxa=rp(jvec,1)-rp(jvec-1,1);dza=rp(jvec,2)-rp(jvec-1,2);ra=sqrt(dxa.*dxa+dza.*dza);[cxul,czul]=cellfunc(xmida,xn,zmida,zn);[vmid2w,wv]=vel2w(xmida,zmida,cxul,czul,xn,zn,v);% loop over this ray path to compute travel time and derivatives%contributions from the four surrounding nodesnobs=j+PSCALE*(k-1);for i=1:NSEG%  which node is to upper left of segment midpoint%construct G matrix indicesnode1=cxul(i)+PSCALE*(czul(i)-1);node2=cxul(i)+PSCALE*(czul(i)-1)+1;node3=cxul(i)+PSCALE*czul(i);node4=cxul(i)+PSCALE*czul(i)+1;% update this (nobs) row of the G matrixJ(nobs,node1)=(ra(i)*wv(i,1))'+J(nobs,node1);J(nobs,node2)=(ra(i)*wv(i,2))'+J(nobs,node2);J(nobs,node3)=(ra(i)*wv(i,3))'+J(nobs,node3);J(nobs,node4)=(ra(i)*wv(i,4))'+J(nobs,node4);end%get travel timesttcal(j,k)=sum(ra./vmid2w);%  end of source and receiver loopsendend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -