- 昨日の続き
- 実数解を持つ実係数関数の作り方についてはこちら
と表すこととし、
を実解を持つ多項式とすることとする
,
と表せたとする
- 保存量
は次を満足する
- 積分すると
- Rで保存量の等値線を描いてみる
- 状態推移させれば、等値線上を巡回する(ただし、離散的に位置をとると、誤差が生じて発散する。ただし、その誤差は、自然現象(生命現象)でも偶然項として起きえて、そのときは、等値線を乗り換えるはずだから、そちらの方が「自然」とも言えるが今はそのことは気にしないことにする)

mypoly2<-function(xs){
library(gtools)
n<-length(xs)
ret<-rep(0,n+1)
for(i in 1:n){
cmb<-combinations(n,length(xs)-i+1)
print(cmb)
for(j in 1:length(cmb[,1])){
tmp<-1
for(k in cmb[j,]){
tmp<-tmp*(-xs[k])
}
ret[i]<-ret[i]+tmp
}
}
ret[length(ret)]<-1
ret
}
k<-5
xs<-complex(real=rnorm(k),imaginary=rnorm(k))
xs[1:3]<-Re(xs[1:3])
ks<-mypoly2(xs)
ksRe<-Re(ks)
x<-rnorm(1)
print(sum(ks*x^(0:length(xs))))
print(sum(ksRe*x^(0:length(xs))))
tmp<-1
for(i in 1:length(xs)){
tmp<-tmp*(x-xs[i])
}
print(tmp)
x<-complex(real=rnorm(1),imaginary=rnorm(1))
print(sum(ks*x^(0:length(xs))))
print(sum(ksRe*x^(0:length(xs))))
print(sum(ksRe*Re(x)^(0:length(xs))))
tmp<-1
for(i in 1:length(xs)){
tmp<-tmp*(x-xs[i])
}
print(tmp)
for(i in 1:length(xs)){
x<-xs[i]
print(sum(ks*x^(0:length(xs))))
print(sum(ksRe*x^(0:length(xs))))
tmp<-1
for(i in 1:length(xs)){
tmp<-tmp*(x-xs[i])
}
print(tmp)
}
nx<-7
ny<-7
kx<-2
ky<-2
xs<-complex(real=rnorm(nx),imaginary=rnorm(nx))
ys<-complex(real=rnorm(ny),imaginary=rnorm(ny))
nrx<-nx
nry<-ny
xs[1:nrx]<-runif(nrx)*0.5+0.25
ys[1:nry]<-runif(nry)*0.5+0.25
Cx<-3
Cy<-3
fkx<-Re(mypoly2(xs))*Cx
fky<-Re(mypoly2(ys))*Cy
fkx2<-cbind((0:nx)-kx,fkx)
fky2<-cbind((0:ny)-ky,fky)
mypoly3<-function(x,k){
ret<-0
if(is.matrix(k)){
ret<-sum(k[,2]*x^k[,1])
}else{
ret<-sum(k*x^(0:(length(k)-1)))
}
ret
}
mypoly3integral<-function(x,k){
ret<-0
if(is.matrix(k)){
nonzero<-which(k[,1]!=-1)
zero<-which(k[,1]==-1)
ret<-sum(k[nonzero,2]*x^(k[nonzero,1]+1)/(k[nonzero,1]+1))
ret<-ret+k[zero,2]*log(x)
}else{
ret<-sum(k*x^(1:length(k))/(1:length(k)))
}
ret
}
minxr<-min(Re(xs[1:nrx]))
maxxr<-max(Re(xs[1:nrx]))
minyr<-min(Re(ys[1:nry]))
maxyr<-max(Re(ys[1:nry]))
kizami<-1/200
kizamiNum<-200
X<-seq(from=minxr*0.9,to=maxxr/0.9,length.out=kizamiNum)
Y<-seq(from=minyr*0.9,to=maxyr/0.9,length.out=kizamiNum)
XY<-expand.grid(X,Y)
V<-rep(0,length(XY[,1]))
for(i in 1:length(V)){
V[i]<-mypoly3integral(XY[i,1],fkx2)-mypoly3integral(XY[i,2],fky2)
}
V<-V-min(V)+1
image(X,Y,matrix(V,ncol=length(X)),col = topo.colors(50))
contour(X,Y,matrix(log(V),ncol=length(X)),nlevels=100,add=TRUE)
for(i in 1:nx){
abline(v=xs[i],col="white")
}
for(i in 1:ny){
abline(h=ys[i],col="white")
}