- 円周上の分布
- 直線上の分布の特性関数・フーリエ変換は容易に円周上に拡張できる(周期性の制約を入れる)
- 円周上に定義されている分布
- トーラス上の分布、円柱上の分布
- 2つの独立な円周上のvon Mises分布を使って、トーラス上の"von Mises 分布"を描いてみる
- ソースは任意次元の2つの球面の掛け合わせになっている
d1 <- 2
d2 <- 2
r1 <- 1
r2 <- 0.3
mu1 <- c(1,rep(0,d1-1))
mu2 <- c(1,rep(0,d2-1))
k1 <- 1.2
k2 <- 1.8
n <- 1000
out1 <- RvonMisesFisher(n,mu1,k1)
out2 <- RvonMisesFisher(n,mu2,k2)
torus.coords <- function(x1,x2){
r1 <- sqrt(apply(x1^2,1,sum))
r2 <- sqrt(apply(x2^2,1,sum))
X <- matrix(0,length(x1[,1]),length(x1[1,])+length(x2[1,])-1)
X[,1:length(x1[1,])] <- x1
X <- X * (1+x2[,1])
X[,(length(x1[1,])+1):length(X[1,])] <- x2[,2:length(x2[1,])]
X
}
x1 <- out1[[1]]*r1
x2 <- out2[[1]]*r2
theta <- pi/2
M <- matrix(c(cos(theta),sin(theta),-sin(theta),cos(theta)),byrow=TRUE,2,2)
x2 <- x2 %*% M
my.torus <- torus.coords(x1,x2)
rg <- range(my.torus)
my.torus <- rbind(my.torus,rep(rg[1],length(my.torus[1,])))
my.torus <- rbind(my.torus,rep(rg[2],length(my.torus[1,])))
library(rgl)
plot3d(my.torus)
-
- 3次元球と円とのトーラスは4次元。それの3次元分を描図
d1 <- 3
d2 <- 2
r1 <- 1
r2 <- 0.2
mu1 <- c(1,rep(0,d1-1))
mu2 <- c(1,rep(0,d2-1))
k1 <- 3
k2 <- 1
n <- 5000
out1 <- RvonMisesFisher(n,mu1,k1)
out2 <- RvonMisesFisher(n,mu2,k2)
torus.coords <- function(x1,x2){
r1 <- sqrt(apply(x1^2,1,sum))
r2 <- sqrt(apply(x2^2,1,sum))
X <- matrix(0,length(x1[,1]),length(x1[1,])+length(x2[1,])-1)
X[,1:length(x1[1,])] <- x1
X <- X * (1+x2[,1])
X[,(length(x1[1,])+1):length(X[1,])] <- x2[,2:length(x2[1,])]
X
}
x1 <- out1[[1]]*r1
x2 <- out2[[1]]*r2
theta <- pi/1
M <- matrix(c(cos(theta),sin(theta),-sin(theta),cos(theta)),byrow=TRUE,2,2)
x2 <- x2 %*% M
my.torus <- torus.coords(x1,x2)
rg <- range(my.torus)
my.torus <- rbind(my.torus,rep(rg[1],length(my.torus[1,])))
my.torus <- rbind(my.torus,rep(rg[2],length(my.torus[1,])))
library(rgl)
plot3d(my.torus)