求matlab解释语句大神解释一下这段程序,感激不尽啊!

查看: 2282|回复: 1|关注: 0
求大神帮看下
最短路径法射线追踪方法原理
最短路径法的基础是Fermat 原理及图论中的最短
路径理论。其基本思路是,对实际介质进行离散化,将
这个介质剖分成一系列小单元,在单元边界上设置若干
节点,并将彼此向量的节点相连构成一个网络。网络中,
速度场分布在离散的节点上。相邻节点之间的旅行时为
他们之间欧氏距离与其平均慢度之积。将波阵面看成是
由有限个离散点次级源组成,对于某个次级源(即某个
网格节点),选取与其所有相邻的点(邻域点)组成计
算网格点;由一个源点出发,计算出从源点到计算网格
点的透射走时、射线路径和射线长度;然后把除震源之
外的所有网格点相继当作次级源,选取该节点相应的计
算网格点,计算出从次级源点到计算网格点的透射走时、射线路径和射线长度;将每次计算
出来走时加上从震源到次级源走时,作为震源点到该网格节点的走时,记录下相应射线路径
位置及射线长度(
clear,clc& &% 清除工作空间 显示屏幕
Length=20; Width=8; %区域长20米 宽8米
m=17; n=21;&&%离散成m行 n列
VDOTMN=ones(m,n); VDOTMN([4:5],[8:10])=4;
VDOTMN([13:14], [8:10])=4; VDOTMN([8:10],[13:15])=4; %构造速度模型
% Q为未作子波源点集合 P做过子波源点集合 A已经做过走时点集合&&开始都为空集合
Q=zeros(m,n); P=zeros(m,n); A=zeros(m,n); S=zeros(m,n);
%结点矩阵DOTMN初始化
& &for j=1:n
& && &DOTMN(i,j).velocity=VDOTMN(i,j); %速度矩阵按以上模型赋值
& && &DOTMN(i,j).x=(j-1)*Length/(n-1); %X坐标矩阵赋值
& && &DOTMN(i,j).z=(i-1)*Width/(m-1);&&%Z坐标矩阵赋值
& && &DOTMN(i,j).flag_A=0;&&%已经做过走时点矩阵全赋值0
& && &DOTMN(i,j).flag_Q=1;&&%未作子波源点矩阵全赋值1
& && &DOTMN(i,j).before_i=NaN;
& && &DOTMN(i,j).before_j=NaN;
& && &DOTMN(i,j).time=
& && &DOTMN(i,j).uptime=NaN;
dotfa_i=1; dotfa_j=3; %输入震源点坐标和初值
& &&&DOTMN(dotfa_i,dotfa_j).flag_A=1;
& &&&DOTMN(dotfa_i,dotfa_j).flag_Q=0;
& &&&DOTMN(dotfa_i,dotfa_j).time=0;
jiedian_i=dotfa_i;
jiedian_j=dotfa_j;
for i=1:m& &%统计未作子波震源点即结点个数
& &for j=1:n
& && &if DOTMN(i,j).flag_Q == 0
& && && &P(i,j)=1;
& & for j=1:n
& && &&&fanshu=(DOTMN(i,j).x-DOTMN(jiedian_i,jiedian_j).x).^2+(DOTMN(i,j).z-DOTMN...
& & (jiedian_i,jiedian_j).z).^2;%走时点到震源点距离的平方
& &&&DOTMN(i,j).time=2*sqrt(fanshu)/(DOTMN(i,j).velocity+DOTMN(jiedian_i,jiedian_j).velocity );
counter_P=nnz(P); %得到个数存入counter_P中
while counter_P & (m*n) %循环开始 直到所有结点都作为子波震源点
if (1&jiedian_i&21)&&(1&jiedian_j&17)
& && &&&V_i(1)=abs(jiedian_i-1);
& && &&&V_j(1)=abs(jiedian_j-1);
& && &&&V_i(2)=abs(jiedian_i-1);
& && &&&V_j(2)=abs(jiedian_j);
& && &&&V_i(3)=abs(jiedian_i-1);
& && &&&V_j(3)=abs(jiedian_j+1);
& && &&&V_i(4)=abs(jiedian_i);
& && &&&V_j(4)=abs(jiedian_j-1);
& && &&&V_i(5)=abs(jiedian_i);
& && &&&V_j(5)=abs(jiedian_j+1);
& && &&&V_i(6)=abs(jiedian_i+1);
& && &&&V_j(6)=abs(jiedian_j-1);
& && &&&V_i(7)=abs(jiedian_i+1);
& && &&&V_j(7)=abs(jiedian_j);
& && &&&V_i(8)=abs(jiedian_i+1);
& && &&&V_j(8)=abs(jiedian_j+1);
& &&&if (jiedian_i==21)&&(1&jiedian_j&17)
& && &&&V_i(1)=jiedian_i-1;
& && &&&V_j(1)=jiedian_j-1;
& && &&&V_i(2)=jiedian_i-1;
& && &&&V_j(2)=jiedian_j;
& && &&&V_i(3)=jiedian_i-1;
& && &&&V_j(3)=jiedian_j+1;
& && &&&V_i(4)=jiedian_i;
& && &&&V_j(4)=abs(jiedian_j-1);
& && &&&V_i(5)=jiedian_i;
& && &&&V_j(5)=jiedian_j+1;
& &&&if (1&jiedian_i&21)&&(jiedian_j==17)
& && &&&V_i(1)=jiedian_i-1;
& && &&&V_j(1)=jiedian_j-1;
& && &&&V_i(2)=jiedian_i;
& && &&&V_j(2)=jiedian_j-1;
& && &&&V_i(3)=abs(jiedian_i-1);
& && &&&V_j(3)=jiedian_j;
& && &&&V_i(4)=jiedian_i+1;
& && &&&V_j(4)=jiedian_j-1;
& && &&&V_i(5)=jiedian_i;
& && &&&V_j(5)=jiedian_j;
& &&&if (jiedian_i==21)&&(jiedian_j==17)&&
& && &&&V_i(1)=20;
& && &&&V_j(1)=16;
& && &&&V_i(2)=20;
& && &&&V_j(2)=17;
& && &&&V_i(3)=21;
& && &&&V_j(3)=16;
& &&&if (jiedian_i==1)&&(jiedian_j==1)&&
& && &&&V_i(1)=2;
& && &&&V_j(1)=1;
& && &&&V_i(2)=1;
& && &&&V_j(2)=2;
& && &&&V_i(3)=2;
& && &&&V_j(3)=2;
& &&&if (jiedian_i==1)&&(1&jiedian_j&17)
& && &&&V_i(1)=jiedian_i;
& && &&&V_j(1)=jiedian_j-1;
& && &&&V_i(2)=jiedian_i+1;
& && &&&V_j(2)=jiedian_j-1;
& && &&&V_i(3)=jiedian_i+1;
& && &&&V_j(3)=jiedian_j;
& && &&&V_i(4)=jiedian_i+1;
& && &&&V_j(4)=abs(jiedian_j+1);
& && &&&V_i(5)=jiedian_i;
& && &&&V_j(5)=jiedian_j+1;
& && &if (1&jiedian_i&21)&&(jiedian_j==1)
& && &&&V_i(1)=jiedian_i-1;
& && &&&V_j(1)=jiedian_j;
& && &&&V_i(2)=jiedian_i-1;
& && &&&V_j(2)=jiedian_j+1;
& && &&&V_i(3)=abs(jiedian_i);
& && &&&V_j(3)=jiedian_j+1;
& && &&&V_i(4)=jiedian_i+1;
& && &&&V_j(4)=jiedian_j+1;
& && &&&V_i(5)=jiedian_i+1;
& && &&&V_j(5)=jiedian_j;
& && &if (jiedian_i==1)&&(jiedian_j==17)&&
& && &&&V_i(1)=1;
& && &&&V_j(1)=16;
& && &&&V_i(2)=2;
& && &&&V_j(2)=16;
& && &&&V_i(3)=2;
& && &&&V_j(3)=17;
& &&&if (jiedian_i==21)&&(jiedian_j==1)&&
& && &&&V_i(1)=20;
& && &&&V_j(1)=1;
& && &&&V_i(2)=20;
& && &&&V_j(2)=2;
& && &&&V_i(3)=21;
& && &&&V_j(3)=2;
for ii=1:length(V_i)
& && &i=V_i(ii);
& && &j=V_j(ii);
& && &DOTMN(i,j).flag_A=1;&&%将所有已经做过走时点矩阵值赋为1
& &&&for j=1:n
& && &&&if DOTMN(i,j).flag_A == 1
& && && & A(i,j)=1;& && && &%统计已经做过走时点保存在集合A
& && &&&end
S=A-P;& &%矩阵运算 得到做过走时但未做过震源结点即走时不为零结点集合S
[S_i,S_j]=find(S);%将S非零元素下标向量存入[S_i,S_j]
for ii=1:length(S_i)%开始循环 求每个走时点的走时
& &&&i=S_i(ii);
& &&&j=S_j(ii);
& &&&fanshu=(DOTMN(i,j).x-DOTMN(jiedian_i,jiedian_j).x).^2+(DOTMN(i,j).z-DOTMN...
& & (jiedian_i,jiedian_j).z).^2;%走时点到震源点距离的平方
& &&&DOTMN(i,j).uptime=2*sqrt(fanshu)/(DOTMN(i,j).velocity+DOTMN(jiedian_i,jiedian_j).velocity );
& &&&%求震源到每个走时点的走时
& & tmin_panju=min(DOTMN(i,j).time,DOTMN(jiedian_i,jiedian_j).time+DOTMN(i,j).uptime);
& & if tmin_panju & DOTMN(i,j).time
& && && &DOTMN(i,j).time=tmin_
& && && &DOTMN(i,j).before_i=jiedian_i;
& && && &DOTMN(i,j).before_j=jiedian_j;
& & end& &&&%求得S集合各结点的新旅行时
time_min=%找Q中一个旅行时最小的结点
for ii=1:length(S_i)
& && &i=S_i(ii);
& && &j=S_j(ii);
& && &DotTime(i,j)=DOTMN(i,j).
& && &if DotTime(i,j) &= time_min
& && && & time_min=DotTime(i,j);
& && && & jiedian_i=i;
& && && & jiedian_j=j;
%将子波结点移出集合Q并计算P集合结点个数
DOTMN(jiedian_i,jiedian_j).flag_Q=0;
& &&&for j=1:n
& && &&&if DOTMN(i,j).flag_Q == 0
& && && &&&P(i,j)=1;
& && &&&end
counter_P=nnz(P);
end %while循环结束
for dotjie_i=1:m
& & for dotjie_j=1:n
& && &lu_i=dotjie_i;
& && &lu_j=dotjie_j;
& && && &Xi(1)=lu_i;
& && && &Zj(1)=lu_j;
& && &counter_lu=2;
& && &lu_panju=isnan( DOTMN(lu_i,lu_j).before_i );
& && &while lu_panju& 1
& && && && &Xi(counter_lu)=DOTMN(lu_i,lu_j).before_i;
& && && && &Zj(counter_lu)=DOTMN(lu_i,lu_j).before_j;
& && && && &&&lu_temp=lu_i;
& && && && &lu_i=DOTMN(lu_i,lu_j).before_i;
& && && && &lu_j=DOTMN(lu_temp,lu_j).before_j;
& && && && && &lu_temp=[];
& && && && &lu_panju=isnan( DOTMN(lu_i,lu_j).before_i );
& && && && &&&counter_lu=counter_lu+1;
& && &&&DOTMN(dotjie_i,dotjie_j).lujing_I=Xi;
& && &&&DOTMN(dotjie_i,dotjie_j).lujing_J=Zj;
& && &&&Xi=[];Zj=[];
运行时有个错误
??? Cell contents indices must be greater than 0
Error in ==& Untitled11 at 147
& && &DOTMN(i,j).flag_A=1;&&%将所有已经做过走时点矩阵值赋为1
求大神给指出错误&&感激不尽
Cell contents indices must be greater than 0& &这个是什么意思啊 求大神解释……
站长推荐 /1
Powered by求matlab大神给下面一个源程序给个详细的注释,就是程序每一步的操作,速求_百度知道
求matlab大神给下面一个源程序给个详细的注释,就是程序每一步的操作,速求
subplot(3;noise reduction by average filter&#39:w-n+1
a=f(i,2:),w]=size(v):j+(n-1));1;);Users&#92,:w-n+1
c=f(i;zhourui&#92,3),'noise reduction by median filter'
end endsubplot(3;a=ones(n;
for u=2;):i+(n-1),2;
y(i+(n-1)&#47:h-n+1
for j=1;for i=1;noise image&#39:h-n+1
for j=1;subplot(3;v=rgb2gray(k):n
e=[e;Desktop\
mm=median(e);;n=9.jpg'imshow(uint8(x))title(&#39.1););(n*n);
endend subplot(3,j+(n-1)&#47,2;
s=sum(sum(a)):i+(n-1),1):j+(n-1));
%读入图像的具体位置;orginal image&#39,2);2)=s/ for i=1:\y=f;2)=mm,j;gaussian'[h,0,n);imshow(v)title('imshow(g)title(&#39,k=imnoise(g;);
f=double(v),j,j+(n-1)/
x (i+(n-1)/2;
e=c(1,c(u;2:)],4);imshow(uint8(y))title('C;x=f,;),2g=imread(&#39
提问者采纳
),c(u;%显示figure中的第四个图像(第二行第一个)imshow(uint8(x))%显示中值滤波的结果title(&#39,2); %figure中第一个图像的titlesubplot(3,3),窗口大小为9*9%均值滤波结果存储在y中 for i=1,2:j+(n-1));
%计算去噪图像的大小(h行数:w-n+1
c=f(i;1;);Users&#92,j; %f赋值给x%每个元素的值改为9*9窗口的灰度大小的中间值%即中值滤波;zhourui\
end endsubplot(3,'noise reduction by median filter'2)=s/ %将去噪图像v转为double型变量fa=ones(n;
e=c(1;),窗口大小为9*9%中值滤波结果存储在x中for i=1,2:j+(n-1)); %均值滤波的titlex=f;););
%将f的值赋给y%每个元素的值改为9*9窗口的灰度均值%即均值滤波;
%图像由rgb转为graysubplot(3; %图像去噪(高斯噪声)v=rgb2gray(k),;Desktop&#92:)];,wl为列数)n=9.jpg&#39,4).1);),j+(n-1)/2)=
y(i+(n-1)/
endend subplot(3,j:h-n+1
for j=1,1):i+(n-1);
%读入图像的具体位置;orginal image' %显示figure中的第二个(第一行第二个)imshow(v)
%将去噪后的图像显示在figure中的第二个title('2,元素均为1y=f:\ %变量a为一个n*n的矩阵,j+(n-1)&#47:w-n+1
a=f(i;gaussian&#39,w]=size(v),0,n);noise image'
%当前图像显示在figure中的第一个(总共可以同时显示6个)imshow(g)
%将原始图像显示在第一个(第一行第一个)title(&#39,k=imnoise(g; %显示figure中的第三个图像(第一行第三个)imshow(uint8(y)) %显示均值滤波的结果title('
%设定变量n=9f=double(v):h-n+1
for j=1;2;
mm=median(e);
x (i+(n-1)&#47:i+(n-1);
s=sum(sum(a)),,2,2;C;noise reduction by average filter&#39:n
e=[e; %figure中第二个图的title[h;(n*n)g=imread(&#39
主要是那个for循环不明白,能详细解释下吗?谢谢
均值滤波就是对图片上每个元素,以该元素为中心,取一个9*9的窗口,求这个窗口中所有元素的灰度均值作为该元素滤波后的值,即均值滤波。中值滤波也是对图片上每个元素,以该元素为中心,取一个9*9的窗口,把窗口内所有元素的灰度值排序取中间值作为该元素滤波后的值,即中值滤波。
提问者评价
其他类似问题
为您推荐:
matlab的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁哪位大神详细的解释一下matlab中的一段程序_百度知道
哪位大神详细的解释一下matlab中的一段程序
[0 x(p) 0]function s = getspline(x)N = length(x);s = spline([0 p N+1];p = findpeaks(x),1:N)
提问者采纳
s = spline([0 p N+1];%找到数组x中所有的极值点,1。函数的输入变量是x,输出是s,得到新的数组s首先:N);%得到输入数组x的长度p = findpeaks(x),s是和x一样size的数组N = length(x),[0 x(p) 0];%对这些所有的极大值点进行三次样条插值,这是一个函数,这里的极大值点就是比相邻的数都大的点
多谢了,还有一个问题就是spline里面的[0 p N+1]和[0 x(p) 0]具体是什么意思呀??在spline里面是什么角色?
[0,p,N+1]是插值点,[0 x(p) 0]是插值点对应的值,1:N是我们所需要得到的那些点的坐标。看看下面的例子,你可能更容易理解spline函数的使用。x = 0:10;
y = sin(x);xx = 0:.25:10;yy = spline(x,y,xx);plot(x,y,'o',xx,yy)
提问者评价
来自团队:
其他类似问题
为您推荐:
您可能关注的推广
matlab的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁用matlab做一元线性回归,求大神帮忙解释一下这个命令.
X和Y就是你要拟合的数据,上面的是MATLAB工具箱中的regress命令,为[b,bint,r,rint,stats]=regress(y,x,alpha).你这里alpha是缺省的此时默认是0.05  输出b为β的估计值,bint为b的置信区间,r为残差向量,rint为r的置信区间,stats为回归模型的检验统计量,有四个值,第一个是回归方程的决定系数R的平方(R是相关系数),第二个是F的统计量值,第三个是F统计量对应的概率值p,第4个是剩余的方差s的平方.
第三行是做什么的?
ones(9,1)是产生一个9行一列的矩阵,整个语句的意思将产生的全一矩阵与x进行拼接
X=[18 77 ]'
79 12197]'
X=[ones(8,1), X]
[b,bint,r,rint,stats]= regress(Y,X)
为什么我算出来stats太小。。是这组数据没有线性关系吗。。大神可否帮我试一下。。
这是我画的散点图,基本上看不到有线性关系
额。。。为什么我觉得挺好的。。大神可不可以让我看下运行结果。。我用1 2 3 4 5 和2 4 6 8 10两组数据stats为什么还是很小。。。
其实你仅仅要拟合出一条直线可以用cftool这个工具
谢谢啦,我后来用eviews了,算出来r有九点多,我觉得可能是哪里出问题了,还是谢谢啦
你是指可靠性程度90%多?
为您推荐:
其他类似问题
扫描下载二维码哪位大神详细的解释一下matlab中的一段程序function s = getspline(x)N = length(x);p = findpeaks(x);s = spline([0 p N+1],[0 x(p) 0],1:N);
首先,这是一个函数.函数的输入变量是x,输出是s,s是和x一样size的数组N = length(x);%得到输入数组x的长度p = findpeaks(x);%找到数组x中所有的极值点,这里的极大值点就是比相邻的数都大的点.s = spline([0 p N+1],[0 x(p) 0],1:N);%对这些所有的极大值点进行三次样条插值,得到新的数组s.spline就是三次样条插值函数
多谢了,还有一个问题就是spline里面的[0 p N+1]和[0 x(p) 0]具体是什么意思呀??在spline里面是什么角色?
[0,p,N+1]是插值点,
[0 x(p) 0]是插值点对应的值,
1:N是我们所需要得到的那些点的坐标。
看看下面的例子,你可能更容易理解spline函数的使用。
y = sin(x);
xx = 0:.25:10;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 感激不尽的意思 的文章

 

随机推荐