miércoles, 17 de febrero de 2016

Método de Bisección (Función Bisect)

En matemáticas, el método de bisección es un algoritmo de búsqueda de raíces que trabaja dividiendo el intervalo a la mitad y seleccionando el subintervalo que tiene la raíz.
Método de bisección ´´Wikipedia´´.

Para utilizar este método en racket es importante crearlo como una función en un archivo independiente, y posteriormente guardar las funciones que se van a correr llamando el método en la misma carpeta.

Código:
;; solverbiseclib.rkt
;; f(x)=0 solver via bisection

(provide bisec)

(define (bisec-int f a b eps n)
 ; debe cumplir f(a)f(b)<0
 ; además a<b.
 (define c (/ (+ a b) 2))
 (printf "~a:[~a,~a]~n" n a b)
 (if (< (- b a) eps)
 c
 (if (< (* (f a) (f c)) 0)
 (bisec-int f a c eps (+ n 1))
 (bisec-int f c b eps (add1 n)))))

(define (bisec f a b eps)
 (cond
 ; excepciones típicas
 ((> (* (f a) (f b)) 0)
 "ERR: f(a)f(b)>0")
 ((>= a b) "ERR: a>=b")
 ((zero? (f a)) a)
 ((zero? (f b)) b)
 (else (bisec-int f a b eps 0))))


;;; EOF solverbisec.rkt

Una vez guardado este código en la misma carpeta o en la misma pagina de programación pegamos/guardamos:

;;;aplicacion1.rkt
(require plot)
(define(f t)(-(* 5 (log10 t))(* 3 t (exp (- t)))))
;;;Funcion auxiliar
(define (log10 x)
  (/ (log x)
     (log 10)))
(plot (list (tick-grid)
            (function f 0 10)
            (function (λ(t) 0))))

(bisec f 1 2.0 1e-10)





En este caso es la función a la que le estoy aplicando este método.
Y este es el resultado:


Con sus respectivas Iteraciones:

Al final el resultado que nos entregan las iteraciones: 


Se evalúa en la función:
Que nos da la comprobación: 
La cual es un numero cercano al cero. Y por lo tanto decimos que F(Result)=0

No hay comentarios:

Publicar un comentario