- こちらで単体とか複体とかをやっている
- ある意味では、これは「分割」の方法の幾何的表現
- そこに入れ子を作って、配列の時間発展則を考えたい
- 以下の話は、非常に興味深い
- 数学セミナーの2012年11月号に「分割数とフラクタル」という記事がある
- 分割数(こちら)
- オンライン整数列大辞典では数列IDがA000041で、こちら
- こちらで、分割数の初めの方の値「1,2,3,5,7,11,15,22」を入れて検索すれば得られる
- 分割数には母関数(母関数とは)があって
- 分割数には合同算術(合同式)があって
- 近似式もあるという
- この分割数の合同式が、フラクタルを導くという
- 数セミの記事で、「数が好きな小学生ならば'ゴハンデスヨ'と呼ばれるまで実行するだろう」という、手続きが以下
- 4=3+1=2+2=2+1+1=1+1+1+1
- 5=4+1=3+2=3+1+1=2+2+1=2+1+1+1=1+1+1+1+1
- このルールは、与えられた値nについて、i=n,n-1,...1まで順に考える。n=i+(n-i)としたら、n-iに関して同じく(再帰的に)考える。ただし、n-iの分割に関しては、i以下の数だけでできた分割であることを採用の条件とする、と、こういうルール
- 2013/08/26 別の書き方
my.seq.8 <-function(n,k){
ret <- 0
if(n==1 & k==1){
return(1)
}
for(i in 1:k){
a <- n-i
if(a==0){
ret <-ret+1
}else{
ret <- ret+my.seq.8(a,min(i,a))
}
}
ret
}
for(i in 1:20){
print(my.seq.8(i,i))
}
partitions1 <- function(n){
ret <- list()
cnt <- 1
if(n == 1){
ret[[1]] <- c(1)
}else{
for(i in n:1){
first <- i
second <- n-i
if(second == 0){
ret[[cnt]] <- c(first)
cnt <- cnt+1
}else{
tmp <- partitions1(second)$partitions
for(j in 1:length(tmp)){
if(max(tmp[[j]]) <= first){
ret[[cnt]] <- c(first,tmp[[j]])
cnt <- cnt+1
}
}
}
}
}
return(list(partitions = ret, n.partitions = length(ret)))
}
list.partitions <- list()
n.partitions <- c()
n <- 15
for(i in 1:n){
p.out <- partitions1(i)
list.partitions[[i]] <- p.out$partitions
n.partitions[i] <- p.out$n.partitions
}
n.partitions
> n.partitions
[1] 1 2 3 5 7 11 15 22 30 42 56 77 101 135 176 231 297 385