lenguaje racket
lunes, 28 de noviembre de 2011
Diagrama de Bifurcación
;Autor: José Manuel Gómez Soto
#lang racket
(require plot)
(define intervalo (lambda (a b inc)
(if (> a b)
'()
(cons a
(intervalo (+ a inc) b inc)))
))
(define mimap (lambda(f lista)
(if (null? lista) '()
(cons (f (car lista))
(mimap f (cdr lista))))))
(define orbita (lambda(f x0 n)
(if (= n 0) '()
(cons x0 (orbita f (f x0) (- n 1))))))
(define funcionlogistica (lambda(lam)
(lambda(x) (* 4 lam (* x (- 1 x))))))
(define diagramabifurcacion
(lambda (funcion a b inclambda incorbitas nitera color)
(plot (points (flatten (mimap (lambda(y)
(map (lambda(x1)
(vector y (last (orbita (lambda(x) ((funcion y) x)) x1 nitera)))) (intervalo a b incorbitas)))
(intervalo a b inclambda))) #:sym 'dot #:color color
) #:x-min a
#:x-max b #:y-min a #:y-max b)))
(diagramabifurcacion funcionlogistica 0.1 1.0 0.001 0.01 100 4)
Gráfica de la Telaraña (Cobweb)
;Autor: José Manuel Gómez Soto
#lang racket
(require plot)
(define orbita (lambda(f x0 n)
(if (= n 0) '()
(cons x0 (orbita f (f x0) (- n 1))))))
(define intercala1 (lambda(lista1 lista2)
(if (null? lista1)
'()
(cons (list (car lista1)
(car lista2))
(intercala1 (cdr lista1)
(cdr lista2)))
)))
(define join (lambda(lista1 lista2)
(if(null? lista1) lista2
(cons (car lista1)
(join (cdr lista1) lista2)))))
(define flatten (lambda(lista)
(if (null? lista) '()
(join (car lista)
(flatten (cdr lista))))
))
(define particion21r (lambda(lista n)
(cond ((null? lista) '())
((null? (cdr lista)) '())
(else (cons
(vector (car lista)
(if (= n 1) 0
(car (cdr lista))))
(particion21r (cdr lista) (+ n 1)))))))
(define puntosorbita (lambda(orbita)
(particion21r
(flatten (intercala1 orbita orbita)
) 1)))
(define telarania (lambda(x0 nitera
funcion x1 x2 coloridenti colorfuncio colororbita)
(plot
(list (lines (puntosorbita (orbita funcion x0 nitera)) #:color colororbita)
(function funcion x1 x2 #:color colorfuncio)
(function (lambda(x) x) x1 x2 #:color coloridenti) (axes)))))
(define funcionlogistica (lambda(lam)
(lambda(x) (* 4 lam (* x (- 1 x))))))
(telarania 0.2 200 (funcionlogistica 0.76) 0 1 0 3 4)
El juego del Caos
;Autor: José Manuel Gómez Soto
#lang racket
(require plot)
(define longitud (lambda(lista)
(if (null? lista) 0
(+ 1 (longitud (rest lista))))))
(define mimap (lambda(f lista)
(if (null? lista) '()
(cons (f (car lista))
(mimap f (cdr lista))))))
(define sumapuntos (lambda (p1 p2)
(list (+ (car p1) (car p2)) (+ (car (cdr p1)) (car (cdr p2))))))
(define dividepunto (lambda (p1 divisor)
(list (/ (car p1) divisor) (/ (car (cdr p1)) divisor))))
(define orbitapuntos (lambda(f p1 n)
(if (= n 0) '()
(cons p1 (orbitapuntos f (f p1) (- n 1))))))
(define juegocaos (lambda(figura npuntos divisor)
(orbitapuntos (lambda(p)
(dividepunto (sumapuntos p
(elemento (random (longitud figura)) figura)) divisor))
(list (* (random 10) 0.1) (* (random 10) 0.1))
npuntos
)))
(define elemento (lambda(pos lista)
(if (= pos 0) (car lista)
(elemento (- pos 1) (rest lista))
)
))
(define figura (list (list 0 0) (list 5 10) (list 10 0)))
(plot (points (map list->vector (juegocaos figura 100000 2)) #:sym 'dot)
#:x-min 0 #:x-max 10 #:y-min 0 #:y-max 10)
Suscribirse a:
Entradas (Atom)


