如何绘制分叉图

如何绘制分叉图

我正在尝试绘制一张如下所示的一般图片:

在此处输入图片描述

它不必看起来完全像这样,但看起来就像与此类似精神的一般分叉。

下面是我尝试的代码:

\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}

在此处输入图片描述

相关内容