
рдПрдХ рдмрд╛рд░ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдирд┐рдореЗрдЯреЗрдб рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╕рд╛рде, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдФрд░ рдЙрдирдХреЗ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдФрд░
animation
рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬрд┐рд╕реЗ рд╕реАрдЖрд░рдПрдПрди рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
install.packages("animation") library(animation)
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐
animation
рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ
ImageMagick рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд, рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдПрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
saveGIF({ # - , }, movie.name=..., interval=..., ani.width=..., ani.height=...)
рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЙрд╕ рд╕рдордп рдореИрдВ
рдбрд╛рдпрдирд╛рдорд┐рдХрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдХреИрдУрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдкрд╛рдареНрдпрдХреНрд░рдо
рдкрд░рд┐рдЪрдп рд▓реЗ рд░рд╣рд╛ рдерд╛, рдФрд░ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╡реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдЧрдгрд┐рддреАрдп рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдмрд╣реБрдд рд╡рд┐рдЪрд┐рддреНрд░ рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣
рдХреА рдХрдо рд╕реЗ рдХрдо
рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХ рдореИрдкрд┐рдВрдЧ рд▓реЗрдВ:
рдЗрд╕ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд┐рдЫрд▓реА рдЕрд╡рдзрд┐ рдореЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░
r
рдкрд░ рдЬрдирд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рдЬрдирди рджрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдпрд╣ рдлрдВрдХреНрд╢рди рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕реБрд╕реНрдд рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рд╣реА рд╢реЗрдбреНрдпреВрд▓ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЕрдкрдиреЗ
рджреНрд╡рд┐рднрд╛рдЬрдХ рдЖрд░реЗрдЦ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдЦреБрдж рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддреА рд╣реИрдВ: рдкреИрд░рд╛рдореАрдЯрд░
r
рдХреЛ рдмрджрд▓рдХрд░, рдХреЛрдИ
рд╕рдореАрдХрд░рдг рдХреЗ
рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХреЗ "рдЧрддрд┐рд╢реАрд▓рддрд╛" рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛
рд╣реИ ред рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░ рдореЗрдВ рд░рд╕рдж рдорд╛рдирдЪрд┐рддреНрд░рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
logistic.map <- function(r, x0, n, m){ x <- rep(x0, n) for(i in 1:(n-1)) { x[i+1] <- r * x[i] * (1 - x[i]) } return(x[(nm):n]) }
рд╣рдо рдПрдХ рджреНрд╡рд┐рднреБрдЬ рдЖрд░реЗрдЦ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЫрд╡рд┐ рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда nrows <- 6 r.len <- 1500; # Points of interest on the plot R <- matrix(c( seq(2.4, 4, length.out=r.len), seq(3.442420, 3.639398, length.out=r.len), seq(3.562297, 3.572910, length.out=r.len), seq(3.569792, 3.570244, length.out=r.len), seq(3.570005, 3.571369, length.out=r.len), seq(3.631992, 3.633301, length.out=r.len) ), nrow=nrows, byrow=T) X <- matrix(c( 0, 1, 0.8567335, 0.9140401, 0.8887529, 0.8936790, 0.8920580, 0.8925577, 0.8911242, 0.8927333, 0.9066966, 0.9083943 ), nrow=nrows, byrow=T) x0 <- 0.5 n <- 200 m <- 170 saveGIF({ for (i in 1:nrows){ r <- R[i,] x <- as.vector(sapply(r, logistic.map, x0, n, m)) r <- sort(rep(r, (m+1))) del_idx <- unlist(sapply(1:length(x), function(j) if (x[j] < X[i, 1] | x[j] > X[i, 2]) j)) if (length(del_idx > 0)){ x <- x[-del_idx] r <- r[-del_idx] } plot(x ~ r, col="gray66", pch=".", main="Bifurcation Diagram for the Logistic Map") } }, movie.name = "bifur.gif", interval=2.4, ani.width=600, ani.height=500)
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ:
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдореАрдХрд░рдг рдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЛрдЧреБрдиреА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░
рджреНрд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЭрд░рдирд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдлреНрд░реИрдХреНрдЪрд░ рд╕рдВрд░рдЪрдирд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдпрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреА рдШрдЯрдирд╛ рдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛рдж рдХрд░рдирд╛ рдЕрднреА рднреА рдЙрдЪрд┐рдд рд╣реИред рд╣рдо рджреЛ рд╕рдореАрдХрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
рдкрд╣рд▓рд╛ рд╕рдореАрдХрд░рдг
r
рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рдПрдХ рджреНрд╡рд┐рднрд╛рдЬрди рдмрд┐рдВрджреБ рд╕реЗ рдЕрдЧрд▓реЗ рддрдХ рдХреА рджреВрд░реА рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдПрдХ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдЦрд╛ n, рд╢рд╛рдЦрд╛ n + 1 рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреА рдХреИрд╕реЗ рд╣реИред рддреЛ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐
рд╕рдВрдЦреНрдпрд╛ 4.669201 ... рдХреЛ
рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ Feigenbaum рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛
рд╣реИ , рдЬреЛ рдХреНрд░рдорд┐рдХ рд╕реЗ рдирд┐рдпрддрд╛рддреНрдордХ рдЕрд░рд╛рдЬрдХрддрд╛ рддрдХ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рдВрдХреНрд░рдордг рдХреА рджрд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдХреЛрдИ рдХрдо рдкреНрд░рд╕рд┐рджреНрдз рд╡рд╕реНрддреБ
рд▓реЛрд░реЗрдВрдЬ рдЖрдХрд░реНрд╖рдг рдирд╣реАрдВ рд╣реИ ред рд╣реЛрдмреЗ рдкрд░ рднреА рдПрдХ
рдЕрд▓рдЧ рд▓реЗрдЦ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред рд╡рд╛рдпреБ рдзрд╛рд░рд╛рдУрдВ рдХреА рдЧрддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдбрд╡рд░реНрдб рд▓реЛрд░реЗрдиреНрдЬ рдиреЗ рддреАрди рд╕рд╛рдзрд╛рд░рдг рдЕрдВрддрд░ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЕрдм рд▓реЛрд░реЗрдВрдЯ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╣рдо рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ -
рдпреВрд▓рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП :
lorenz.solution <- function(sigma=10, r=28, beta=8/3, x=0.01, y=0.01, z=0.01, dt=0.001, n=30000){ sol <- array(0, dim=c(n,3)) t <- 0 for(i in 1:n){ x0 <- x; y0 <- y; z0 <- z x <- x0 + (y0 - x0) * sigma * dt y <- y0 + ((r - z0) * x0 - y0) * dt z <- z0 + (x0 * y0 - beta * z0) * dt t <- t + dt sol[i,] <- c(x, y, z) } return(sol) }
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рд╕рдорд╛рдзрд╛рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдкреИрд░рд╛рдореАрдЯрд░ рдЖрд░ рдХреЛ рдмрджрд▓рдХрд░, рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ
рдЕрдЬреАрдм рдЖрдХрд░реНрд╖рдг рд╣реИ ред
library(scatterplot3d) saveGIF({ for (r in 2:34){ sol <- lorenz.solution(r=r) s3d<-scatterplot3d(sol[,1], sol[,2], sol[,3], color="gray66", angle=15, box=F, grid=F, axis=F, pch=".", main=paste0("Lorenz Attractor with rho=", r)) } }, movie.name = "lorenz.gif", interval=.3, ani.width=500, ani.height=500)
рд▓реЛрд░реЗрдВрдЬ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рддрд░рд╣ рдХрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреЗрди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда chen.solution <- function(a=40, c=28, b=3, x=-0.1, y=0.5, z=-0.6, dt=0.001, n=30000){ sol <- array(0, dim=c(n,3)) t <- 0 for(i in 1:n){ x0 <- x; y0 <- y; z0 <- z x <- x0 + (y0 - x0) * a * dt y <- y0 + ((c - a) * x0 - x0 * z0 + c * y0) * dt z <- z0 + (x0 * y0 - b * z0) * dt t <- t + dt sol[i,] <- c(x, y, z) } return(sol) } saveGIF({ for (a in 32:45){ sol <- chen.solution(a=a) s3d<-scatterplot3d(sol[,1], sol[,2], sol[,3], color="gray66", angle=15, box=F, grid=F, axis=F, pch=".", main=paste0("Chen Attractor with a=", a)) } }, movie.name = "chen.gif", interval=.25, ani.width=500, ani.height=500)
рдЬрд┐рди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрдВрджреЛрд▓рди рд╣реЛрддрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП "рдПрдХ рд╕рд╛рде рдЦреАрдВрдЪрд╛" рдЬрд╛рддрд╛ рд╣реИ; рдпрд╣ рдЖрдВрджреЛрд▓рди рдЕрд░рд╛рдЬрдХ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ, рд╕рд╛рде рд╣реА рдпрд╣ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд┐рд░ рд╣реИред рдбреЗрд╡рд┐рдб рдлреЗрд▓реНрдбрдореИрди, рдЬреЛ рдкрд░рд┐рдЪрдп рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдХреИрдУрд╕ рдХреЛрд░реНрд╕ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЕрд░рд╛рдЬрдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЬрдмрдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрд┐рдВрджреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдРрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХреА рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреНрд╖рдг рдореЗрдВ рдореМрд╕рдо, рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдирд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд▓рд╡рд╛рдпреБ рдореЗрдВ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рдФрд░ рдХреЛрдИ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдирд╣реАрдВ рд╣реИред