登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
潮位异常值的判定 1.首先利用matlab画出潮位随时间的变化,有图分析: 将上图放大不难看出,水位变化是有周期的,周期为11~13小时。纵观全图只有两个点不合规律,下面两个图就是把这两个异常值所在的区域放大所示,明显看出第394,第523,这两个点的数值为异常值。 2.利用FORTRAN编程找出异常值 剔除异常值思想:水位的变化是有周期的,并且周期大于十小时,故而我们可以用变率判别法。 变率判别法具体指的是:如果一个点此时刻潮位是增加的,并且上一个时刻潮位是减小的,那么下一个时刻必定也是增加的,或者是如果一个点此时刻潮位是减小的,并且上一个时刻潮位是增加的,那么下一个时刻必定也是减小的。我们可以通过观察数据可以发现,其周期必定大于四小时,所以这个方法是可行的。 我们首先读取数据,把二维数组转换成一维数组,其次利用变率判别法找出异常值。 编程如下: program work1 implicit none integer::i,j,k,d integer::b(744) !将数据文件有二维数组转化成一维数组 integer::p(743) !每隔一小时水位之差 integer::c(62,12) !读取文件数据 character(len=30)::a1,a2,a3,a4 !文件开头介绍 real::q(743) open(11,file='D:\work1.txt') open(10,file='D:\sjs_t_97aug_m(harmonic).TXT') read(10,'(a3)'),a1 read(10,'(a18)'),a2 read(10,'(a6,x,a6)'),a3 read(10,'(a2)'),a4 write(11,*),a1,a2,a3,a4 do i=1,62 read(10,'(11(I4,1x),I4)')c(i,1:12) end do !读取元数据 k=0 do i=1,62 do j=1,12 k=k+1 b(k)=c(i,j) end do end do write(11,*),b!把二维数组转化为一维数组 do i=1,743 p(i)=(b(i+1)-b(i)) end do !每隔一小时水位之差 do i=2,743 if(p(i-1)>0.and.p(i)<0.and.p(i+1)>0.or.p(i-1)<0.and.p(i)>0.and.p(i+1)<0)exit enddo print*,'异常值为第',i+1,'个' do while(i<741) do i=i+2,743 if(p(i-1)>0.and.p(i)<0.and.p(i+1)>0.or.p(i-1)<0.and.p(i)>0.and.p(i+1)<0)exit enddo print*,'异常值为第',i+1,'个' enddo endprogram !利用变率判别法 通过此方法,我们找出了第394、523个观测值为异常值。 3.对异常值进行插值处理 令异常点处的值等于前后两个正常值的均值,那么就修正了异常值。
|