1000, 975, 950, 925, 900, 850, 800, 700, 600, 500, 400, 300, 250, 200, 150, 100
- 多次元配列の扱い
- 連続したデータを配列にする
sampledata <- 1:30
dim(sampledata) <- c(5,3,2)
sampledata[,,1]
sampledata[,,2]
- 多次元配列の組み換え(引数の場所の変更)
str(sampledata)
sampledata <- aperm(sampledata, c(1,3,2))
str(sampledata)
sampledata[,1,]
sampledata[,2,]
- 多次元配列を単なる1次元の配列に戻す
c(sampledata)
- 温位のデータを作る
ncvar_gettheta <- function(nc){
levs <- c(1000, 975, 950, 925, 900, 850, 800, 700, 600, 500, 400, 300, 250, 200, 150, 100)
lon <- ncvar_get(nc, "longitude")
lat <- ncvar_get(nc, "latitude")
tim <- as.POSIXct(ncvar_get(nc, "time"),origin="1970-01-01",tz="Asia/Tokyo")
theta <- c()
validlevs <- c()
for( lev in levs ){
tmpdata <- c()
try( tmpdata <- c(tmpdata, ncvar_get(nc,paste("TMP_",lev,"mb",sep=""))) )
if( length(tmpdata) != 0 ){
theta <- c( theta, c(tmpdata * (1000/lev)^(2/7)))
validlevs <- c( validlevs, lev)
}
}
dim(theta) <- c(length(lon), length(lat), length(tim), length(theta)/length(lon)/length(lat)/length(tim) )
theta <- aperm(theta, c(1,2,4,3))
return( list(lon=lon, lat=lat, levs=validlevs, tim=tim, theta=theta))
}
次のようにしてこの関数を取り込める。
library(devtools)
source_url("https://www2.obirin.ac.jp/moriat/OpenData/ncvar_gettheta.R")
緯度高度断面の等値線図を描く。返り値がリストなので、$ をつけて各変数を参照する。
result <- ncvar_gettheta(nc)
filled.contour( result$lat, -result$lev, result$theta[1,,,1]
※ filled.contour では、x, y 座標の値は増えていく順(昇順)でなければならない。気圧レベルは下ほど値が大きいので、負号をつけて上下を逆転させている。
▼(ひらく)...
▲(とじる)...
Google Colaboratoryを参照のこと
(https://colab.research.google.com/drive/1mz7_XzDVadqZrEgyb-MnqFNvDDQZqW6y?usp=sharing)
- 一般の場合
&ref(): File not found: "00anim.png" at page "講義のページ/Seminar2022";
- 固有振動の場合(周期が長い方)
&ref(): File not found: "01anim.png" at page "講義のページ/Seminar2022";
- 固有振動の場合(周期が短い方)
&ref(): File not found: "02anim.png" at page "講義のページ/Seminar2022";
▼(ひらく)...
▲(とじる)...
波数と振動数が、それぞれ、 $ \pm {\Delta k \over 2}, \pm {\Delta \omega \over 2} $ だけずれた2つの波があったとする。
$ A \sin( (k + \Delta k/2) x - (\omega + \Delta \omega /2 )t ) $
$ A \sin( (k - \Delta k/2) x - (\omega - \Delta \omega /2 )t ) $
これらの波を足し合わせると、三角関数についての公式から、次のように変形できる。
$ A \sin( (k + \Delta k/2) x - (\omega + \Delta \omega /2 )t ) + A \sin( (k - \Delta k/2) x - (\omega - \Delta \omega /2 )t ) $
$ =2 A \sin( kx - \omega t ) \cos( \Delta k x - \Delta \omega t) $
$ \cos $ で表される部分が、振幅の変調をあたえるようになっており、その部分は群速度$ \frac{\Delta \omega }{\Delta k} $で移動する。