Introducción

R no solo sirve para estadística y análisis de datos. También permite realizar cálculos matemáticos, evaluar funciones, aproximar derivadas, trabajar con sumatorias y productorias, y calcular integrales.

En este documento veremos ejemplos de:

  1. Funciones matemáticas.
  2. Derivadas simbólicas y numéricas.
  3. Sumatorias.
  4. Productorias.
  5. Integrales definidas.
  6. Aplicación conjunta de estos conceptos.

1. Funciones matemáticas en R

Una función matemática puede escribirse, por ejemplo, como

\[ f(x)=x^3+2x^2-5x+1. \]

En R podemos definirla de la siguiente forma:

f <- function(x) {
  x^3 + 2*x^2 - 5*x + 1
}

f(2)
## [1] 7

También podemos evaluarla en varios valores simultáneamente:

x <- seq(-5, 5, by = 0.5)
y <- f(x)

head(data.frame(x, y))
##      x       y
## 1 -5.0 -49.000
## 2 -4.5 -27.125
## 3 -4.0 -11.000
## 4 -3.5   0.125
## 5 -3.0   7.000
## 6 -2.5  10.375

Y podemos visualizarla:

plot(
  x, y,
  type = "l",
  lwd = 2,
  main = "Función f(x) = x^3 + 2x^2 - 5x + 1",
  xlab = "x",
  ylab = "f(x)"
)
abline(h = 0, v = 0, lty = 2)

2. Derivadas

La derivada de una función representa su tasa de cambio instantánea.

Si

\[ f(x)=x^3+2x^2-5x+1, \]

entonces

\[ f'(x)=3x^2+4x-5. \]

2.1. Derivada simbólica con D()

R base incluye la función D() para derivar expresiones simbólicas sencillas.

expr <- expression(x^3 + 2*x^2 - 5*x + 1)

derivada <- D(expr, "x")
derivada
## 3 * x^2 + 2 * (2 * x) - 5

Podemos evaluar la derivada en un punto. Por ejemplo, para \(x=2\):

x <- 2
eval(derivada)
## [1] 15

Matemáticamente,

\[ f'(2)=3(2)^2+4(2)-5=15. \]

2.2. Segunda derivada

La segunda derivada se obtiene derivando nuevamente:

\[ f''(x)=6x+4. \]

segunda_derivada <- D(derivada, "x")
segunda_derivada
## 3 * (2 * x) + 2 * 2
x <- 2
eval(segunda_derivada)
## [1] 16

2.3. Derivada numérica

La definición de derivada es

\[ f'(x)=\lim_{h\to0}\frac{f(x+h)-f(x)}{h}. \]

Podemos aproximarla numéricamente usando un valor pequeño de \(h\):

derivada_numerica <- function(f, x, h = 1e-6) {
  (f(x + h) - f(x)) / h
}

derivada_numerica(f, 2)
## [1] 15.00001

Una aproximación generalmente más precisa es la diferencia central:

\[ f'(x)\approx \frac{f(x+h)-f(x-h)}{2h}. \]

derivada_central <- function(f, x, h = 1e-6) {
  (f(x + h) - f(x - h)) / (2*h)
}

derivada_central(f, 2)
## [1] 15

3. Sumatorias

Una sumatoria se representa matemáticamente como

\[ \sum_{i=1}^{n} a_i. \]

Por ejemplo,

\[ \sum_{i=1}^{10}i = 1+2+3+\cdots+10. \]

En R utilizamos sum():

sum(1:10)
## [1] 55

El resultado es:

\[ \sum_{i=1}^{10}i=55. \]

3.1. Suma de cuadrados

Consideremos

\[ \sum_{i=1}^{10}i^2. \]

i <- 1:10
sum(i^2)
## [1] 385

3.2. Sumatoria mediante un ciclo

También podríamos construir la sumatoria manualmente:

resultado <- 0

for (i in 1:10) {
  resultado <- resultado + i^2
}

resultado
## [1] 385

Aunque funciona, en R normalmente se prefiere la versión vectorizada:

sum((1:10)^2)
## [1] 385

3.3. Sumatoria de una función

Por ejemplo,

\[ S=\sum_{i=1}^{20}\frac{1}{i^2}. \]

i <- 1:20
S <- sum(1 / i^2)
S
## [1] 1.596163

Podemos comparar esta suma parcial con el resultado conocido

\[ \sum_{i=1}^{\infty}\frac{1}{i^2} = \frac{\pi^2}{6}. \]

pi^2 / 6
## [1] 1.644934

4. Productorias

Una productoria tiene la forma

\[ \prod_{i=1}^{n}a_i. \]

En R utilizamos prod().

Por ejemplo,

\[ \prod_{i=1}^{5} i = 1\cdot2\cdot3\cdot4\cdot5. \]

prod(1:5)
## [1] 120

Esto corresponde a

\[ 5! = 120. \]

R también tiene una función específica para factoriales:

factorial(5)
## [1] 120

4.1. Productoria de una expresión

Calculemos

\[ \prod_{i=1}^{5}(i+1). \]

i <- 1:5
prod(i + 1)
## [1] 720

Es decir,

\[ (1+1)(2+1)(3+1)(4+1)(5+1) = 2\cdot3\cdot4\cdot5\cdot6. \]

4.2. Productoria con ciclo

resultado_producto <- 1

for (i in 1:5) {
  resultado_producto <- resultado_producto * (i + 1)
}

resultado_producto
## [1] 720

5. Integrales

La integral definida de una función \(f(x)\) entre \(a\) y \(b\) es

\[ \int_a^b f(x)\,dx. \]

R puede calcular integrales numéricamente usando integrate().

Consideremos

\[ f(x)=x^2. \]

Queremos calcular

\[ \int_0^2x^2\,dx. \]

Sabemos analíticamente que

\[ \int x^2\,dx=\frac{x^3}{3}+C. \]

Por tanto,

\[ \int_0^2x^2\,dx = \left[\frac{x^3}{3}\right]_0^2 = \frac{8}{3}. \]

En R:

g <- function(x) {
  x^2
}

integrate(g, lower = 0, upper = 2)
## 2.666667 with absolute error < 3e-14

Para guardar solo el valor calculado:

resultado_integral <- integrate(g, lower = 0, upper = 2)$value
resultado_integral
## [1] 2.666667

5.1. Integral de seno

Calculemos

\[ \int_0^\pi \sin(x)\,dx. \]

Teóricamente,

\[ \int_0^\pi \sin(x)\,dx=2. \]

integrate(sin, lower = 0, upper = pi)
## 2 with absolute error < 2.2e-14

5.2. Integral impropia

R también permite trabajar con límites infinitos.

Por ejemplo,

\[ \int_0^\infty e^{-x}\,dx=1. \]

integrate(
  function(x) exp(-x),
  lower = 0,
  upper = Inf
)
## 1 with absolute error < 5.7e-05

6. Integrales indefinidas simbólicas

Una integral indefinida busca una función cuya derivada sea la función original:

\[ \int f(x)\,dx = F(x) + C, \]

donde

\[ F'(x)=f(x) \]

y \(C\) es una constante de integración.

Es importante distinguir entre dos casos:

  • integrate() en R base calcula integrales definidas numéricamente.
  • Para integrales indefinidas o simbólicas conviene usar un sistema de álgebra computacional. Una alternativa en R es el paquete caracas, que utiliza SymPy.

6.1. Instalación de caracas

La instalación solo necesita hacerse una vez:

install.packages("caracas")

Luego se carga el paquete:

library(caracas)

Nota: caracas puede requerir una instalación funcional de Python y SymPy.

6.2. Ejemplo: integral de una potencia

Consideremos

\[ \int x^2\,dx. \]

Matemáticamente,

\[ \int x^2\,dx = \frac{x^3}{3}+C. \]

En R, usando caracas:

library(caracas)

x <- symbol("x")

f <- x^2

F <- integrate(f, x)
F

El resultado simbólico representa

\[ \frac{x^3}{3}. \]

La constante de integración se agrega conceptualmente:

\[ \boxed{ \int x^2\,dx=\frac{x^3}{3}+C } \]

6.3. Integral de una función trigonométrica

Consideremos

\[ \int \sin(x)\,dx. \]

Sabemos que

\[ \frac{d}{dx}[-\cos(x)]=\sin(x), \]

por lo tanto

\[ \int\sin(x)\,dx=-\cos(x)+C. \]

En R:

x <- symbol("x")

f <- sin(x)

integrate(f, x)

6.4. Integral de la función exponencial

Para

\[ \int e^x\,dx, \]

la antiderivada es

\[ e^x+C. \]

En R:

x <- symbol("x")

f <- exp(x)

integrate(f, x)

6.5. Integral de un producto

Consideremos

\[ \int xe^x\,dx. \]

Mediante integración por partes,

\[ \int xe^x\,dx = xe^x-e^x+C, \]

o equivalentemente,

\[ \int xe^x\,dx = e^x(x-1)+C. \]

Con caracas:

x <- symbol("x")

f <- x * exp(x)

integrate(f, x)

6.6. Integral de una función racional

Consideremos

\[ \int \frac{1}{x}\,dx. \]

Su antiderivada es

\[ \ln|x|+C. \]