geoer 发表于 2007-1-19 10:53

MATLAB新手训练题

本帖最后由 ChaChing 于 2010-8-18 21:21 编辑

将如下矩阵51*8绘制成附件所示的图形:
说明:矩阵中的每一列对应图形中的一条曲线。讲点题外话吧,上面这个图在石油勘探领域称为地震剖面图,实际生产中,水平轴代表偏移距,纵轴代表时间。野外采集到的地震信号,还需要经过一系列的算法处理,才能最终得到反映地下真实地质信息的成果剖面。
    M=   [ 9864      11296      12728      12472      11688      11112      10168         8984
            7044         8012         9464      10072      11400      13136      12808      12048
            3990         4292         5132         6132         8848      12168      12368      11960
            1560         1429         1410         2292         5244         8928         9504         9360
         121.38      22.75         -637      -192.38         1878         4668         5464         5560
            -475      -136.88       -892.5         -878       -353.5          713         1620         2008
            -703       167.38      -90.625      -208.25      -1201      -1967      -1009         -281
            -1049       74.313          649          797      -1059      -3046      -2066      -1021.5
            -1721         -861       432.25         1082       -681.5      -2858      -1891         -661
            -2512      -2406         -939      91.25         -768      -2118      -1238      -60.625
            -2914      -3756      -2864      -1948      -1596      -1546       -877.5      -20.516
            -2380      -3956      -4260      -4116      -2860      -1495      -1195       -862.5
         -688.5      -2448      -4116      -5236      -3828      -1816      -2004      -2260
             1849          541      -2092      -4468      -3702      -1975      -2670      -3406
             4384         3972         1231      -1764      -2078      -1402      -2482      -3426
             5816         6360         4520         1997          757      122.5      -1078      -1886
             5260         6432         6228         5320         3846         2234         1259      904.5
             2450         3714         5324         6708         5888         4064         3618         3900
            -2046      -1146         1784         5316         5812         4596         4820         5716
            -6944      -6568      -3280         1389         3282         3178         3978         5240
          -10680       -10624      -8056      -3790      -1078      -93.688      964.5         2190
          -11984       -11840       -10760      -8352      -5840      -4296      -3404      -2664
          -10352      -9712       -10312       -10624      -9320      -7988      -7620      -7708
         -6184      -4992      -6780      -9736       -10248      -9760       -10056       -11112
          -638.5      815.5      -1332      -5956      -8256      -8888      -9688       -11512
            4840         5932         4248         -513      -4032      -5560      -6516      -8592
            9040         9080         8336         4844         1091         -834      -1501      -3272
          11336         9928      10064         8624         5576         3834         3700         2714
          11752         9040         9576      10096         8344         7176         7496         7476
          10792         7464         7748         9448         9128         8608         9000         9768
            9008         6072         5672         7532         8400         8376         8352         9440
            6784         5160         4080         5324         7000         7276         6504         7388
            4144         4316         3026         3466         5616         6140         4700         5028
         986.5         2782         2007         2035         4456         5380         3798         3576
          -2688       7.2305       376.25          672         3218         4788         3868         3464
          -6516      -3886      -2146      -1043         1418         3730         4192         4164
          -9728      -7988      -5196      -3202      -1183         1615         3732         4536
      -11424       -10904      -7832      -5404      -4268      -1622         1741         3484
      -10944       -11432      -8984      -6888      -6984      -5324      -1713          584
         -8208      -9112      -8024      -6952      -8288      -8296      -5680      -3580
         -3904      -4572      -5068      -5348      -7552      -9368      -8696      -7636
            750          704      -1070      -2488      -4808      -7932      -9488      -9992
          4416         4952         2620          659       -976.5      -4324      -7576      -9640
          6148         6868         4828         3020         2572          206      -3540      -6572
          5720         6128         5044         3864         4576         4032         1129      -1840
          3662         3442         3578         3118         4432         5808         4712         2856
         956       164.63         1330         1336         2424         5032         5956         5908
      -1404      -2370       -717.5         -626         -451         2202         4588         6436
      -2814      -3436      -1981      -2072      -3002      -1445         1370         4576
      -3218      -3144      -2484      -2782      -4404      -4528      -2306         1325
      -2976      -2228      -2708      -3026      -4516      -6096      -5048      -1992]

happy 发表于 2007-1-21 15:20

能否介绍一下具体是如何实现的?

geoer 发表于 2007-1-22 11:01

思路上应该很明显,一个是line对象的使用,一个是patch的使用,还有一个就是为了显示数据的相对关系,实际上我们关心的就是它们的相对关系,需要对数据进行归一化处理。没谁做的话,我过几天贴代码,可以作为一个小的学习材料。

[ 本帖最后由 geoer 于 2007-1-22 11:05 编辑 ]

lxq 发表于 2007-1-23 11:01

作为新手 有点困难的

wyvern 发表于 2007-4-25 13:15

本帖最后由 ChaChing 于 2010-8-18 21:24 编辑

是学石油物探的,我正在学习这方面的相关内容,在毕业设计中需要这个程序,请楼主把程序发给我,万分感谢!
对了,我的邮箱是:yosol@126.com
谢谢
其实我也编了一个程序,但是只能显示波形图,现在能实现的程度达到正负振幅能用不同的颜色表示,但是对于色彩填充实现不了,我对patch的应用不是很了解,很想学习一下

ChaChing 发表于 2010-8-18 21:25

本帖最后由 ChaChing 于 2010-9-6 00:44 编辑

楼主答应的事, 好像忘记了!?:@)

yangjlyang 发表于 2010-8-19 14:49

会做这个训练题的相信应该不是新手了!

curb 发表于 2010-8-20 10:43

相当之看不懂

qibbxxt 发表于 2010-8-24 09:22

这是wigb函数吧,是物探专业的最基本的常用函数,我记得在很多网站上都可以下载到的,里面画图的部分是patch,对于初学者,有点难度,让他们读这个程序应该比让他们自己写收获大一些的

ChaChing 发表于 2011-3-5 21:04

本帖最后由 ChaChing 于 2011-3-5 21:08 编辑

乱逛感觉补齐较好些! 1F的那个图叫wiggle plot
所以google下, 搜了wigb, 列在下头有兴趣者自行试试 function wigb (a,scal,x,z,amx)
%WIGB: Plot seismic data using wiggles
%
%WIGB(a,scal,x,z,amx)
%
%IN    a: seismic data
%      scale: multiple data by scale
%      x: x-axis;
%      z: vertical axis (time or depth)
%         x and z are vectors with offset and time.
%
%         If only 'a' is enter, 'scal,x,z,amn,amx' are decided automatically;
%         otherwise, 'scal' is a scalar; 'x, z' are vectors for annotation in
%         offset and time, amx are the amplitude range.
%
% Author:
%         Xingong Li, Dec. 1995
% Changes:
%      Jun11,1997: add amx
%         May16,1997: updated for v5 - add 'zeros line' to background color
%         May17,1996: if scal ==0, plot without scaling
%         Aug6, 1996: if max(tr)==0, plot a line

if nargin == 0, nx=10;nz=10; a = rand(nz,nx)-0.5; end;
=size(a); trmx= max(abs(a));
if (nargin <= 4); amx=mean(trmx);end;
if (nargin <= 2); x=; z=; end;
if (nargin <= 1); scal =1; end;
if nx <= 1; disp(' ERR:PlotWig: nx has to be more than 1');return;end;

% take the average as dx
dx1 = abs(x(2:nx)-x(1:nx-1)); dx = median(dx1); dz=z(2)-z(1);
xmx=max(max(a)); xmn=min(min(a));

if scal == 0; scal=1; end;
a = a * dx /amx; a = a * scal;
fprintf(' PlotWig: data range [%f, %f], plotted max %f \n',xmn,xmx,amx);

% set display range
x1=min(x)-2.0*dx; x2=max(x)+2.0*dx; z1=min(z)-dz; z2=max(z)+dz;

set(gca,'NextPlot','add','Box','on','XLim', ,'YDir','reverse','YLim',);
fillcolor = ; linecolor = ; linewidth = 0.1;
z=z';         % input as row vector
zstart=z(1); zend=z(nz);

for i=1:nx,
   
if trmx(i) ~= 0;    % skip the zero traces
      tr=a(:,i);         % --- one scale for all section
          s = sign(tr) ;
          i1= find( s(1:nz-1) ~= s(2:nz) );      % zero crossing points
      npos = length(i1);

      %12/7/97
      zadd = i1 + tr(i1) ./ (tr(i1) - tr(i1+1)); %locations with 0 amplitudes
      aadd = zeros(size(zadd));

       = find(tr >0);
       = sort();         % indices of zero point plus positives
      aa = ; aa = aa(iz);

      % be careful at the ends
      if tr(1)>0,      a0=0; z0=1.00; else a0=0; z0=zadd(1); end;
      if tr(nz)>0, a1=0; z1=nz; else a1=0; z1=max(zadd); end;
                        
      zz = ; aa = ;
      zzz = zstart + zz*dz -dz;
      patch( aa+x(i) , zzz,fillcolor);
      line( 'Color',,'EraseMode','background',...
         'Xdata', x(i)+, 'Ydata',); % remove zero line

%'LineWidth',linewidth, ...
%12/7/97 'Xdata', x(i)+, 'Ydata',*dz);      % remove zero line

    line( 'Color',linecolor,'EraseMode','background','LineWidth',linewidth, ...
         'Xdata', tr+x(i), 'Ydata',z);      % negatives line

   else % zeros trace
      line( 'Color',linecolor,'EraseMode','background','LineWidth',linewidth, ...
         'Xdata', , 'Ydata',);
   end;
end;

attempter 发表于 2011-4-6 19:51

失去信心了
页: [1]
查看完整版本: MATLAB新手训练题