04: データの収集と加工(南方振動指数の計算2) http://www.data.kishou.go.jp/shindan/sougou/html/sum_2.3.html より 月平均標準偏差の計算,南方振動指数(SOI)の計算 月平均標準偏差(MSD)の計算 標準化されたタヒチとダーウィンの気圧差の二乗和を求め、 次に二乗和をサンプル数で割って月平均標準偏差MSDを求める。 ただし、各月における1981年~2010年の平均値を使うこと。 サンプルコードは以下の通り。 !------------------------------------ ! Monthly mean standard deviation (MSD) ! 正規化したタヒチとダーウィンの気圧の差の二乗和を、 ! データ数(icount2)で割り、さらに平方根を取る。 !------------------------------------ MSD=0; icount2=0 do j=DOループの制御 if(ここに1981年~2010年のみで以下の計算を行うという条件を書く)then do i=DOループの制御 MSD=MSD+ !差の二乗和の計算 icount2=!データ数のカウント enddo endif enddo MSD=sqrt(MSD/real(icount2)) write(*,*)" " write(*,*)"MSD=",MSD write(*,*)"icount2=",icount2 南方振動指数(SOI)の計算 ついに最終局面。 SOI= (標準化タヒチ海面気圧 ー 標準化ダーウィン海面気圧)/ 月平均標準偏差(MSD)------(5) !------------------------------------ ! Final stage! Cal SOI ! 正規化したタヒチとダーウィンの気圧の差を、 ! MSDで割ることでSOIを得る。 !------------------------------------ do j=1,72 do i=1,12 SOI(i,j)= !埋めてください enddo enddo !------------------------------------------- ! Timeseries SOI will be used later ! to investigate the relationship ! between SOI and SST@Nino monitoring areas !------------------------------------------- decim=1./24.!(365/12/2/365) decim2=decim*2 open(15,file="SOItimeseries.txt") do j=1,72 do i=1,12 k=i+(j-1)*12 SOI2(k)=SOI(i,j) date=real(iyear(j))+decim+decim2*(i-1) !write(*,200) iyear(j),i,k,SOI2(k) write(15,200) date,SOI2(k) enddo enddo 200 format(2f12.4) close(15) !<-- caution: should be closed ! otherwise whole data cannot be saved ! !----------------------------------- ! Output !----------------------------------- write(*,*)" " write(*,*)"Southern Oscillation Index" open(20,file="./SOI.txt") do j=1,72 write(20,100) iyear(j),(SOI(i,j),i=1,12) write(*,110) iyear(j),(SOI(i,j),i=1,12) 110 format(i4,12f6.1) enddo close(20) stop !<---- we need to add it ALWAYS! end (答え合わせ) NOAAによる南方振動指数 |