誤差による被覆

  • 0-1の範囲の2倍して2等分(パイ生地を伸ばして折ること)を繰り返すと、誤差によって0に丸められて、50回くらい処理を繰り返すとどんな点も0に収束してしまう話
  • それをRで確かめてみた
  • 誤差影響の範囲が全体を覆ってしまうことの意味を考えた
  • 折り返しを周期関数と見立てて、折り返し処理を周期の細かさにすることで、処理回数を増やさない
  • メンバーが増えた
  • 処理を繰り返さない方の結果が「正しい」とすれば、処理を繰り返した場合の「誤差」の出現の具合は、「正しい」ものとの違いを見せればよい。それをやってみる
  • 52回繰り返しのときの図(k=1は初回、k=2は1回処理、…)

#x <- x^2
pieKone <- function(x,k){
	1/2-asin(cos(2^(k-1) * pi * x))/pi
}
for(i in 1:length(ks)){
	X[i,] <- pieKone(x,ks[i])
}
matplot(t(X),type="l")


pieKone.2 <- function(x){
	y <- 2*x
	y[which(x>0.5)] <- 2 - 2*x[which(x>0.5)]
	y
}
x <- seq(from = 0, to = 1, length = 1000)

ks <- 1:100
X <- X.2 <- matrix(0,length(ks),length(x))

X[1,] <- x
X.2[1,] <- x
for(i in 2:length(ks)){
	X[i,] <- pieKone(x,ks[i])
	X.2[i,] <- pieKone.2(X.2[i-1,])
}
matplot(t(X),type="l")
matplot(t(X.2),type="l")

#par(ask =TRUE)
for(i in 1:length(ks)){
	title = paste("k = ",i)
	plot(X[i,],X.2[i,],type="l",main = title)
	Sys.sleep(0.3)
}