6
$\begingroup$

I was wondering how one would go about nesting multiple functions of, say, two variables. The problem comes from trying to implement the Chirikov standard map without using "for" cycles. I found a demonstration project that did it, but I couldn't figure out the code. I would appreciate any kind of help, thanks.

Just for the sake of information, the Chirikov standard map can be defined as

$$\begin{aligned} y' &= y + \varepsilon \sin(x) \\ x' &= x + y' \end{aligned}$$

$\endgroup$
8
$\begingroup$

There are more compact ways, but I wrote the following snippet so that you can easily see what's going on:

With[{ε = 1/10}, 
      NestList[Apply[Function[{y, x}, {y + ε Sin[x], 
               x + y + ε Sin[x]}], #] &, N[{2, 3}, 20], 10]]

{{2.0000000000000000000, 3.0000000000000000000},
 {2.0141120008059867222, 5.0141120008059867222},
 {1.9186294124134132492, 6.9327414132193999714},
 {1.9791127093468275926, 8.911854122566227564},
 {2.0281854013777844485, 10.940039523944012013},
 {1.9283395672481502054, 12.868379091192162218},
 {1.9580834052997931408, 14.826462496491955359},
 {2.0352528281815771916, 16.861715324673532550},
 {1.9438238102007648290, 18.805539134874297379},
 {1.939423552755534905, 20.744962687629832284},
 {2.034201057221580261, 22.779163744851412546}}

That gives a list of iterates. If you need only the last one, replace NestList[] with Nest[]. If you want to visualize these iterates as points, use either ListPlot[] or ListLinePlot[]:

With[{ε = 1/50}, 
     ListPlot[NestList[Apply[Function[{y, x}, {y + ε Sin[x], 
              x + y + ε Sin[x]}], #] &, N[{1, -1}, 20], 10]]]

plot of iterates

$\endgroup$
  • $\begingroup$ Perfect! Thanks! $\endgroup$ – Andy Jun 3 '12 at 12:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.