En R y en Python existen paquetes librerías que permiten trabajar con funciones matemáticas de forma simbólica.
Un ejemplo en R es la librería Ryacas y un ejemplo en Python en Sympy.
Ejemplo: consideremos la función \(f(x)=x^5+x^2\) \(x \in \mathbb{R}\) y supongamos que se desea hallar su integral.
Para la derivada se puede usar el siguiente código:
library(Ryacas)
##
## Attaching package: 'Ryacas'
## The following object is masked from 'package:purrr':
##
## simplify
## The following object is masked from 'package:stats':
##
## integrate
## The following objects are masked from 'package:base':
##
## %*%, diag, diag<-, lower.tri, upper.tri
yac_str("D(x)x^5+x^2")
## [1] "5*x^4+2*x"
Para la integral indefinida se puede usar:
## [1] "x^6/6+x^3/3"
Estas tres funciones se pueden graficar así:
Representación de funciones univariadas Grafique las siguientes funciones:
la función \(f(x)\) es convexa, suave y continua
El resultado es una función \(f(x)\) creciente continua y convexa
El resultado de la función \(f(x)=x \cos(\alpha x)\) es periodica, continua y suave.
La función \(|x|\) es continua y convexa
el resultado es una función \(f(x)\) racional discontinua.
## [1] "2*x"
## [1] "Deriv(x)xcos(x)"
Las funciones son continuas, suaves y \(f(x)=x^2\) es convexa
la función es discontinua en x=0
Especifique cuales de estas funciones:
Adicionalmente escoja una de las funciones anteriores, obtenga su primera y segunda derivada, y grafique las tres curvas en el mismo plano.
Sea \(f(x_1, x_2)=x^2_1+x^2_1\). Las curvas de nivel de esta función se pueden obtener con el siguiente código:
# Particionamiento del rango de cada variable
x1 <- seq(-1, 1, length.out = 50)
x2 <- seq(-1, 1, length.out = 50)
# Dataframe con las combinaciones de ambas variables a evaluar:
X <- expand.grid(x1,x2)
# Función f(x1,x2)=x1^2+x2^2
f1 <- function(x1,x2){
return(x1^2+x2^2)
}
# Evaluación de la función:
z <- f1(X[,1],X[,2])
# Expresión del resultado como matriz para graficar:
Z <- matrix(z, ncol = 50, nrow = 50)
Curvas de nivel de la función:
Sugerencia: probar la función filled.contour().
La representación 3D se puede obtener con la función persp():
persp(x1, x2, Z,d = 2, theta = 15)
Sugerecia: probar la librería plotly.
Escoja una de las siguientes funciones y represente sus curvas de nivel y su gráfica :
# Particionamiento del rango de cada variable
x1 <- seq(-2.048, 2.048, length.out = 50)
x2 <- seq(-2.048, 2.048, length.out = 50)
# Dataframe con las combinaciones de ambas variables a evaluar:
X <- expand.grid(x1,x2)
# Función f(x1,x2)=x1^2+x2^2
f1 <- function(x1,x2){
return((100*(x2-x1^2)^2)+((1-x1)^2))
}
# Evaluación de la función:
z <- f1(X[,1],X[,2])
# Expresión del resultado como matriz para graficar:
Z <- matrix(z, ncol = 50, nrow = 50)
Curvas de nivel de la función:
persp(x1, x2, Z,d = 2, theta = 15)
Función de Rastrigin: \(f(x_1,x_2)=20+\sum_{i=1}^{2}{x_i^2-10 \cos(2 \pi x_i)}\), \(x_i \in [-5.12,5.12]\), \(i=1,2\).. Alcanza su valor mínimo en \(x_1=0\) y \(x_2=0\).
Función de Schwefel: \(f(x_1,x_2)=\sum_{i=1}^{2}{x_i \sin(\sqrt{|x_i|})}\), \(x_i \in [-500,500]\), \(i=1,2\). Alcanza su valor mínimo en \(x_1=420.9687\) y \(x_2=420.9687\).
Función de Griewank: \(f(x_1,x_2)=\sum_{i=1}^{2}{\frac{x_i^2}{4000}}-\prod_{i=1}^{2}{\cos(\frac{x_i}{\sqrt{i}})}+1\), \(x_i \in [-600,600]\), \(i=1,2\). Alcanza su valor mínimo en \(x_1=0\) y \(x_2=0\).
Función Goldstein-Price: \(f(x_1,x_2)=[1+(x_1+x_2+1)^2(19-14x_1+3x_1^2-14x_2+6x_1x_2+3x_2^2)]\) \(\times [30+(2x_1-3x_2)^2(18-32x_1+12x_1^2+48x_2-36x_1x_2+27x_2^2)]\), \(x_i \in [-2,2]\), \(i=1,2\). Alcanza su valor mínimo en \(x_1=0\) y \(x_2=-1\).
Función de las seis jorobas de camello (six-hump camel back): \(f(x_1,x_2)=(4-2.1x_1^2+x_1^{4/3})x_1^2+x_1x_2+(-4+4x_2^2)x_2^2\), \(x_1 \in [-3,3]\) y \(x_2 \in [-2,2]\). Alcanza su valor mínimo en \(x_1=-0.0898\) y \(x_2=0.7126\) y también en \(x_1=0.0898\) y \(x_2=0.7126\).