绘制混沌地图

绘制混沌地图

我想使用 PGF/Tikz 绘制满足以下递归的点:

\begin{align}
  q_{n+1}&=q_n+p_{n+1} \\
  p_{n+1}&=p_n+K\sin(q_n)
\end{align}

$p$ 和 $q$ 总是以 $2\pi$ 为模。

我想针对 K 的某些值在二维($p\times q$)中绘制它,并且针对 K 的所有值(介于 0$ 和 1$ 之间)在三维中绘制它。

我知道它看起来应该有点像这里:http://www.scholarpedia.org/article/Chirikov_standard_map 但我不知道该怎么做。

答案1

运行xelatexlatex->dvips->ps2pdf

\documentclass[border=5mm]{standalone}
\usepackage{pstricks}
\makeatletter
\define@key[psset]{}{K}[0.5]{\def\psk@K{#1 }}
\define@key[psset]{}{rDot}[0.5pt]{\pst@getlength{#1}\psk@rDot}
\psset{K=0.5,rDot=0.1pt}
\def\psChirikov{\pst@object{psChirikov}}
\def\psChirikov@i{%
  \begin@OpenObj
  \addto@pscode{
    /K \psk@K def
    /h 10 def
    0 1 h {
      /P ED
      0 1 h {
        /Q ED
        P h div TwoPi mul /p0 ED
        Q h div TwoPi mul /q0 ED
        0 1 100 {
          /i ED
          q0 TwoPi div 360 mul sin K mul p0 add /p1 ED
          p1 TwoPi gt { /p1 p1 TwoPi sub def } if
          p1 0 lt { /p1 p1 TwoPi add def } if         
          q0 p1 add /q1 ED
          q1 TwoPi gt { /q1 q1 TwoPi sub def } if
          q1 0 lt { /q1 q1 TwoPi add def } if
          q0 TwoPi div \pst@number\psxunit mul
          p0 TwoPi div \pst@number\psyunit mul
          \psk@rDot\space 0 360 arc \pst@usecolor\pslinecolor fill stroke
          /p0 p1 def /q0 q1 def
        } for
      } for
    } for
  }
  \end@OpenObj
  \ignorespaces
}
\makeatother
\begin{document}
\psset{unit=5,rDot=0.3pt}
\begin{pspicture}(0,0)(1,1)
\psChirikov
\end{pspicture}

\begin{pspicture}(0,0)(1,1)
\psChirikov[K=0.1,linecolor=red]
\end{pspicture}

\begin{pspicture}(0,0)(1,1)
\psChirikov[K=0.9,linecolor=blue]
\end{pspicture}

\begin{pspicture}(0,0)(1,1)
\psChirikov[K=5,linecolor=cyan]
\end{pspicture}
\end{document}

在此处输入图片描述

在此处输入图片描述

运行它pdflatex也是可能的:

\documentclass[border=5mm]{standalone}
\usepackage{pstricks}
\usepackage{auto-pst-pdf}
\makeatletter
...

进而pdflatex --shell-escape <file>

3D 图像宽度 K 作为 z 坐标也是可能的,但我认为使用上述计算没有任何实际意义。下一个图像的 dK=0.1 和 kMax=1,水平方向 30° 和垂直方向 10° 观看

在此处输入图片描述

答案2

TikZMetapost 的速度会比或快得多pgfplots。以前的答案(参见编辑历史)用于lualatex简单地将 包含在文档中luamplib(以及lualatexTikZ降低速度)。以下示例显示了如何使用pdflatex包使用metapost gmp,尽管必须使用 编译文件--shell-escape

\documentclass[border=5]{standalone}
\usepackage[shellescape,latex]{gmp}
\def\ChirikovMap#1#2#3#4#5{%
\begin{mpost}
beginfig(0)
  K := #1; h := #2; r := #3; u := #4;
  Z := 2 * 3.141592;
  pickup pencircle scaled r;
    for P = 0 upto h:
    for Q = 0 upto h:
      p0 := P / h * Z; q0 := Q / h * Z;
      for i = 0 upto 100:
        p1 := p0 + K * sind(q0 / Z * 360);
        if p1 > Z: p1 := p1 - floor(p1 / Z) * Z; fi
        if p1 < 0: p1 := (floor(abs(p1) / Z) + 1) * Z + p1; fi
        q1 := q0 + p1;
        if q1 > Z: q1 := q1 - floor(q1 / Z) * Z; fi
        if q1 < 0: q1 := (floor(abs(q1) / Z) + 1) * Z + q1; fi
        drawdot (q0 / Z * u, p0 / Z * u) withcolor #5;
        p0 := p1; q0 := q1;
      endfor
    endfor
  endfor
endfig;
\end{mpost}}
\begin{document}
\ChirikovMap{0.5}{10}{.25pt}{2cm}{red}
\ChirikovMap{0.971635}{10}{.25pt}{2cm}{0.5[green,black]}
\ChirikovMap{5}{10}{.25pt}{2cm}{blue}
\end{document}

在此处输入图片描述

相关内容