我正在尝试绘制一张如下所示的一般图片:
它不必看起来完全像这样,但看起来就像与此类似精神的一般分叉。
下面是我尝试的代码:
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\usepackage{luacode}
\begin{luacode*}
function logistic()
local function map(r,x)
return r*x*(1-x)
end
for r = 2.5,4,0.005 do
x = 0.1
for i = 1, 200 do
x = map(r,x)
end
for i = 1, 250 do
x = map(r,x)
tex.sprint("("..r..","..x..")")
end
end
end
\end{luacode*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[tick label style={font=\tiny}]
\edef\logisticplot{\noexpand\addplot [color=black!10, mesh, only marks,
mark size = 0.05pt, opacity = 0.1] coordinates{ \directlua{logistic()} };}
\logisticplot
\end{axis}
\end{tikzpicture}
\end{document}
我在这个网站上找到了代码,但我不懂这种语言,所以我不知道为什么代码不起作用:http://texwelt.de/wissen/fragen/7097/wie-kann-man-einen-iterativen-plot-eleganter-schreiben
答案1
这里提供了一些研究、少量代码修改以及使用R
和实现knitr
的解决方案LaTeX
。
\documentclass{standalone}
\begin{document}
%Reference: \verb+http://www.magesblog.com/2012/03/logistic-map-feigenbaum-diagram.html+
<<echo=FALSE,out.width='6in'>>=
logistic.map <- function(r, x, N, M){
## r: bifurcation parameter
## x: initial value
## N: number of iteration
## M: number of iteration points to be returned
z <- 1:N
z[1] <- x
for(i in c(1:(N-1))){
z[i+1] <- r *z[i] * (1 - z[i])
}
## Return the last M iterations
z[c((N-M):N)]
}
## Set scanning range for bifurcation parameter r
my.r <- seq(2.5, 4, by=0.003)
Orbit <- sapply(my.r, logistic.map, x=0.1, N=1000, M=300)
Orbit <- as.vector(Orbit)
r <- sort(rep(my.r, 301))
plot(Orbit ~ r, pch=".")
@
\end{document}