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:

\begin{equation} n!=1\cdot2\cdot3\cdot\ldots\cdot(n-1)\cdot n \end{equation}

O bien en forma abreviada:

\begin{equation} n!=\prod\limits_{i=1}^{n}i \end{equation}

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

\begin{equation} n!=\begin{cases} 1 & (n < 2) \\ n\cdot(n-1)! & (n >= 2) \end{cases} \end{equation}

Para todo número n tal que \(n\in\left\{ 0,\mathbb{N}\right\}\)

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:

\begin{equation} e=\lim_{n \to \infty}(1 + \frac{1}{n})^{n} \end{equation}

Y también puede expresarse como el valor de la suma infinita

\begin{equation} e=\sum\limits_{n=0}^{\infty}\frac{1}{n!}=1+\frac{1}{1!}+\frac{1}{2!}+... \end{equation}

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 (\(e^{x}\)) respectivamente:

\begin{equation} \arccos(-1)=\cos^{-1}(-1)=\pi \end{equation}

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

\begin{equation} e^{1}=e \end{equation}

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