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:

;; 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

(/ (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