fork download
  1. #lang racket
  2.  
  3. (require plot/no-gui)
  4.  
  5. (define enumerate
  6. (case-lambda
  7. ((seq) (enumerate seq 0))
  8. ((seq start) (map (lambda (x y)
  9. (cons x y))
  10. (range start (+ (length seq) start))
  11. seq))))
  12.  
  13. (define seq
  14. (case-lambda
  15. ((a b d x0 y0)
  16. (define s
  17. (stream-cons (vector x0 y0)
  18. (stream-map (match-lambda
  19. ((vector x y)
  20. (vector (+ (* a x) (* b y)
  21. (/ d (add1 (expt x 2))))
  22. (- x))))
  23. s)))
  24. s)
  25. ((a)
  26. (seq a 0.9 15 1 0))))
  27.  
  28. (define (transpose pos ksx ksy)
  29. (match-let (((vector x y) pos))
  30. (let ((coef (/ 1 (sqrt 2))))
  31. (vector (* coef (+ x y) ksx)
  32. (* coef (+ (- x) y) ksy)))))
  33.  
  34. (define (chaos a ksx ksy)
  35. (stream-map (lambda (pos)
  36. (transpose pos ksx ksy))
  37. (seq a)))
  38.  
  39. (define *data*
  40. '((-0.15 0.96 1.04)
  41. (-0.32 0.92 1.08)
  42. (-0.70 0.81 1.16)
  43. (-1.09 0.67 1.24)
  44. (-1.47 0.51 1.32)
  45. (-1.66 0.41 1.35)))
  46.  
  47. (module+ main
  48. (parameterize ((plot-x-label #f)
  49. (plot-y-label #f))
  50. (for-each (match-lambda
  51. (`(,i ,a ,ksx ,ksy)
  52. (plot-file
  53. (points
  54. (stream->list
  55. (stream-take
  56. (chaos a ksx ksy)
  57. 60000)))
  58. (format "./chaos~a.png" i))))
  59. (enumerate *data*))))
  60.  
Success #stdin #stdout 0.3s 57904KB
stdin
Standard input is empty
stdout
Standard output is empty