Created
July 16, 2012 05:27
-
-
Save yamasushi/3120796 to your computer and use it in GitHub Desktop.
Gumowski-mira写像の点列生成(gnuplotで描画する)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env gosh | |
(use gauche.generator) | |
(use gauche.parseopt) | |
(use srfi-27) ; 乱数 | |
(use srfi-1) ; list | |
(define (make-gm-generator a m x0 y0) | |
(define (f x) | |
(let1 xx (* x x) | |
(+ (* m x) (/ (* 2 (- 1 m) xx) (+ 1 xx) ) ) | |
)) | |
(define (make-gm-map a m) | |
;; | |
(lambda(xn yn fxn) | |
(let* [( xn1 (+ yn (* a (- 1 (* 0.05 yn yn) ) yn) fxn ) ) | |
( fxn1 (f xn1) ) | |
( yn1 (- fxn1 xn))] | |
(values xn1 yn1 fxn1) | |
))) | |
(let1 gm-map (make-gm-map a m) | |
(generate | |
(lambda (yield) | |
(let loop [(xn x0) (yn y0) (fxn (f x0) ) ] | |
(receive (xn1 yn1 fxn1) (gm-map xn yn fxn) | |
(yield (cons xn yn) ) | |
(loop xn1 yn1 fxn1) | |
) ) ) ) ) ) | |
(define (main args) | |
(let-args (cdr args) | |
[[ ndrop "ndrop=i"] | |
[ ntake "ntake=i"] | |
[ ntraj "ntraj=i"] | |
[ par-a "a=n"] | |
[ par-m "m=n"] | |
. args | |
] | |
(let* [(make-g (lambda() | |
(gconcatenate | |
(apply gmap | |
($ list->generator $ list $*) | |
(list-tabulate | |
ntraj | |
(lambda (i) | |
(gtake | |
(gmap cons | |
(gdrop | |
(make-gm-generator | |
par-a par-m | |
(- (random-real) 0.5 ) | |
(- (random-real) 0.5 ) ) | |
ndrop) | |
(grange) ) ntake ) | |
) ) ) ) ) )] | |
(let1 frame | |
(let* [(g (make-g)) | |
(p0 (g))] | |
(generator-fold | |
(lambda (p minmax) | |
;#?= minmax | |
;#?= (cadr minmax) | |
`( | |
( ,(min (caar minmax) (caar p) ) . ,(min (cdar minmax) (cdar p) ) ) | |
. | |
( ,(max (cadr minmax) (caar p) ) . ,(max (cddr minmax) (cdar p) ) ) ) ) | |
`(,(car p0) . ,(car p0) ) g)) | |
;#?= frame | |
(format #t "~a ~a 0\n" (caar frame) (cdar frame) ) | |
(format #t "~a ~a 0\n" (cadr frame) (cddr frame) ) | |
) | |
;; | |
(do-generator (p (make-g) ) | |
(format #t "~a ~a ~a\n" (caar p) (cdar p) (cdr p) ) | |
) ) ) ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment