R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 1 | # File: tdemo_chaos.py |
| 2 | # Author: Gregor Lingl |
| 3 | # Date: 2009-06-24 |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 4 | |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 5 | # A demonstration of chaos |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 6 | |
| 7 | from turtle import * |
| 8 | |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 9 | N = 80 |
| 10 | |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 11 | def f(x): |
| 12 | return 3.9*x*(1-x) |
| 13 | |
| 14 | def g(x): |
| 15 | return 3.9*(x-x**2) |
| 16 | |
| 17 | def h(x): |
| 18 | return 3.9*x-3.9*x*x |
| 19 | |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 20 | def jumpto(x, y): |
| 21 | penup(); goto(x,y) |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 22 | |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 23 | def line(x1, y1, x2, y2): |
| 24 | jumpto(x1, y1) |
| 25 | pendown() |
| 26 | goto(x2, y2) |
| 27 | |
| 28 | def coosys(): |
| 29 | line(-1, 0, N+1, 0) |
| 30 | line(0, -0.1, 0, 1.1) |
| 31 | |
Terry Jan Reedy | 1375538 | 2014-10-09 18:44:26 -0400 | [diff] [blame] | 32 | def plot(fun, start, color): |
| 33 | pencolor(color) |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 34 | x = start |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 35 | jumpto(0, x) |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 36 | pendown() |
| 37 | dot(5) |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 38 | for i in range(N): |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 39 | x=fun(x) |
| 40 | goto(i+1,x) |
| 41 | dot(5) |
| 42 | |
| 43 | def main(): |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 44 | reset() |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 45 | setworldcoordinates(-1.0,-0.1, N+1, 1.1) |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 46 | speed(0) |
| 47 | hideturtle() |
| 48 | coosys() |
| 49 | plot(f, 0.35, "blue") |
| 50 | plot(g, 0.35, "green") |
| 51 | plot(h, 0.35, "red") |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 52 | # Now zoom in: |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 53 | for s in range(100): |
R. David Murray | 1666f19 | 2009-06-25 17:29:39 +0000 | [diff] [blame] | 54 | setworldcoordinates(0.5*s,-0.1, N+1, 1.1) |
Martin v. Löwis | 8718459 | 2008-06-04 06:29:55 +0000 | [diff] [blame] | 55 | return "Done!" |
| 56 | |
| 57 | if __name__ == "__main__": |
| 58 | main() |
| 59 | mainloop() |