Processing math: 100%

20 de mayo de 2022

Funciones matemáticas con Lisp

Funciones matemáticas con Lisp

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!=123(n1)n

O bien en forma abreviada:

n!=ni=1i

Considerando también el factorial de cero como 0!=1, tenemos que se puede expresar de forma recursiva como:

n!={1(n<2)n(n1)!(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)n

Y 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)=cos1(1)=π

Y en el caso de la función exponencial, se tiene obviamente que:

e1=e

Por 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

Validate

No hay comentarios:

Publicar un comentario