Funciones matemáticas con Lisp
1 Funciones Factoriales
El factorial de un número natural n se define como el producto de todos los números naturales hasta n:
n!=1⋅2⋅3⋅…⋅(n−1)⋅nO bien en forma abreviada:
n!=n∏i=1iConsiderando también el factorial de cero como 0!=1, tenemos que se puede expresar de forma recursiva como:
n!={1(n<2)n⋅(n−1)!(n>=2)
Para todo número n tal que n∈{0,N}
Partiendo de las definiciones anteriores, se pueden programar dos versiones de la función factorial.
1.1 Versión recursiva
Utilizando la última definición (3) tenemos:
(defun r-factorial (n) (if (< n 2) 1 (* n (r-factorial (- n 1)))))
1.2 Versión iterativa
Utilizando la segunda definición (2) tenemos:
(defun i-factorial (n) (do ((i 0 (+ i 1)) (p 1 (* p (+ i 1)))) ((>= i n) p)))
2 Cálculo aproximado de e
El valor de constante matemática e es un límite:
e=limn→∞(1+1n)nY también puede expresarse como el valor de la suma infinita
e=∞∑n=01n!=1+11!+12!+...Por lo tanto, puede calcularse su valor (aproximado) con un programa.
2.1 Versión factorial
Usando la versión factorial de la definición anterior (5) tenemos lo siguiente.
(defun approx-e (p) (labels ((fact (n) (do ((i 0 (+ i 1)) (p 1 (* p (+ i 1)))) ((>= i n) p)))) (do ((i 0 (+ i 1)) (s 1 (+ s (/ 1.0 (fact (+ i 1)))))) ((>= i p) s))))
3 Constantes Matemáticas π y e
Independientemente de la implementación a usar (Common-Lisp, Scheme, Racket, etc) y de que dichas constantes se encuentren definidas en las biliotecas o estándares respectivos. Los valores de las constantes π y e, siempre pueden ser obtenidos a partir de sus definiciones matemáticas por medio de las funciones inversa del coseno (arccos(x)) y exponencial (ex) respectivamente:
arccos(−1)=cos−1(−1)=πY en el caso de la función exponencial, se tiene obviamente que:
e1=ePor lo cual, sus valores se obtienen invocando las funciones correspondientes:
;; Valor de PI (acos -1) ;; ==> 3.1415927 ;; Valor de E (exp 1) ;; ==> 2.7182817
Created: 2022-05-20 vie 16:54
No hay comentarios:
Publicar un comentario