1 Introducción
La gran potencia de cálculo alcanzada por los ordenadores en las últimas décadas ha convertido a los mismos en poderosas herramientas al servicio de todas aquellas disciplinas que, como las matemáticas, requieren cálculos largos y complejos.
Julia es un lenguaje de programación especialmente orientado al cálculo numérico y el análisis de datos. Julia permite además realizar cálculos simbólicos y dispone de una gran biblioteca de paquetes con aplicaciones en muy diversas áreas de las Matemáticas como Cálculo, Álgebra, Geometría, Matemática Discreta o Estadística.
La ventaja de Julia frente a otros programas habituales de cálculo como Mathematica, MATLAB o Sage radica en su potencia de cálculo y su velocidad (equiparable al lenguaje C), lo que lo hace ideal para manejar grandes volúmenes de datos o realizar tareas que requieran largos y complejos cálculos. Además, es software libre por lo que resulta ideal para introducirlo en el aula como soporte computacional para los modelos matemáticos sin coste alguno.
En el siguiente enlace se explica el procedimiento de instalación de Julia.
Existen también varios entornos de desarrollo online que permiten ejecutar código en Julia sin necesidad de instalarlo en nuestro ordenador, como por ejemplo Replit, Cocalc o Codeanywhere.
El objetivo de esta práctica es introducir al alumno en la utilización de este lenguaje, enseñándole a realizar las operaciones básicas más habituales en Cálculo.
1.1 El REPL de Julia
Para arrancar el REPL^(REPL es el acrónimo de Read, Evaluate, Print and Loop, que describe el funcionamiento del compilador de Julia) de julia basta con abrir una terminal y teclear julia
.
> julia
prompt
__(_)_ | Documentation: https://docs.julialang.org
_ _ | (_) (_) |
(_) | |_ __ _ | Type "?" for help, "]?" for Pkg help.
_ _ _| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.7.3 (2022-05-06)
/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
_|__/ |
> julia
1.2 El gestor de paquetes de Julia
Julia viene con varios paquetes básicos preinstalados, como por ejemplo el paquete LinearAlgebra
que define funciones básicas del Álgebra Lineal, pero en estas prácticas utilizaremos otros muchos paquetes que añaden más funcionalidades que no vienen instalados por defecto y tendremos que instalarlos aparte. Julia tiene un potente gestor de paquetes que facilita la búsqueda, instalación, actualización y eliminación de paquetes.
Por defecto el gestor de paquetes utiliza el repositorio de paquetes oficial pero se pueden instalar paquetes de otros repositorios.
Para entrar en el modo de gestión de paquetes hay que teclear ]
. Esto produce un cambio en el prompt del REPL de Julia.
Los comandos más habituales son:
add p
: Instala el paquetep
en el entorno activo de Julia.update
: Actualiza los paquetes del entorno activo de Julia.status
: Muestra los paquetes instalados y sus versiones en el entorno activo de Julia.remove p
: Elimina el paquetep
del entorno activo de Julia.
Para instalar el paquete SymPy
para cálculo simbólico basta con teclear add Sympy
.
@v1.7) pkg> add SymPy
(`~/.julia/registries/General.toml`
Updating registry at ...
Resolving package versions`~/.julia/environments/v1.7/Project.toml`
Updating 24249f21] + SymPy v1.1.6
[`~/.julia/environments/v1.7/Manifest.toml`
Updating 3709ef60] + CommonEq v0.2.0
[38540f10] + CommonSolve v0.2.1
[438e738f] + PyCall v1.93.1
[24249f21] + SymPy v1.1.6 [
1.3 Operadores aritméticos.
El uso más simple de Julia es la realización de operaciones aritméticas como en una calculadora. En Julia se utilizan los siguientes operadores.
Operador | Descripción |
---|---|
x + y |
Suma |
x - y |
Resta |
x * y |
Producto |
x / y |
División |
x ÷ y |
Cociente división entera |
x % y |
Resto división entera |
x ^ y |
Potencia |
1.4 Operadores de comparación
Operador | Descripción |
---|---|
== |
Igualdad |
!= , ≠ |
Desigualdad |
< |
Menor que |
<= , ≤ |
Menor o igual que |
> |
Mayor que |
>= , ≥ |
Mayor o igual que |
1.5 Operadores booleanos
Operador | Descripción |
---|---|
!x |
Negación |
x && y |
Conjunción (y) |
x || y |
Disyunción (o) |
Existen también un montón de funciones predefinidas habituales en Cálculo.
1.6 Funciones de redondeo
Función | Descripción |
---|---|
round(x) |
Devuelve el entero más próximo a x |
round(x, digits = n) |
Devuelve al valor más próximo a x con n decimales |
floor(x) |
Redondea x al próximo entero menor |
ceil(x) |
Redondea x al próximo entero mayor |
trunc(x) |
Devuelve la parte entera de x |
> round(2.7)
julia3.0
> floor(2.7)
julia2.0
> floor(-2.7)
julia-3.0
> ceil(2.7)
julia3.0
> ceil(-2.7)
julia-2.0
> trunc(2.7)
julia2.0
> trunc(-2.7)
julia-2.0
> round(2.5)
julia2.0
> round(2.786, digits = 2)
julia2.79
1.7 Funciones de división
Función | Descripción |
---|---|
div(x,y) , x÷y |
Cociente de la división entera |
fld(x,y) |
Cociente de la división entera redondeado hacia abajo |
cld(x,y) |
Cociente de la división entera redondeado hacia arriba |
rem(x,y) , x%y |
Resto de la división entera. Se cumple x == div(x,y)*y + rem(x,y) |
mod(x,y) |
Módulo con respecto a y . Se cumple x == fld(x,y)*y + mod(x,y) |
gcd(x,y...) |
Máximo común divisor positivo de x , y ,… |
lcm(x,y...) |
Mínimo común múltiplo positivo de x , y ,… |
> div(5,3)
julia1
> cld(5,3)
julia2
> 5%3
julia2
> -5%3
julia-2
> mod(5,3)
julia2
> mod(-5,3)
julia1
> gcd(12,18)
julia6
> lcm(12,18)
julia36
1.8 Funciones para el signo y el valor absoluto
Función | Descripción |
---|---|
abs(x) |
Valor absoluto de x |
sign(x) |
Devuelve -1 si x es positivo, -1 si es negativo y 0 si es 0. |
> abs(2.5)
julia2.5
> abs(-2.5)
julia2.5
> sign(-2.5)
julia-1.0
> sign(0)
julia0
> sign(2.5)
julia1.0
1.9 Raíces, exponenciales y logaritmos
Función | Descripción |
---|---|
sqrt(x) , √x |
Raíz cuadrada de x |
cbrt(x) , ∛x |
Raíz cúbica de x |
exp(x) |
Exponencial de x |
log(x) |
Logaritmo neperiano de x |
log(b,x) |
Logaritmo en base b de x |
log2(x) |
Logaritmo en base 2 de x |
log10(x) |
Logaritmo en base 10 de x |
> sqrt(4)
julia2.0
> cbrt(27)
julia3.0
> exp(1)
julia2.718281828459045
> exp(-Inf)
julia0.0
> log(1)
julia0.0
> log(0)
julia-Inf
> log(-1)
julia: DomainError with -1.0:
ERRORreturn a complex result if called with a complex argument.
log will only ...
> log(-1+0im)
julia0.0 + 3.141592653589793im
> log2(2^3)
julia3.0
1.10 Funciones trigonométricas
Función | Descripción |
---|---|
hypot(x,y) |
Hipotenusa del triángulo rectángulo con catetos x e y |
sin(x) |
Seno del ángulo x en radianes |
sind(x) |
Seno del ángulo x en grados |
cos(x) |
Coseno del ángulo x en radianes |
cosd(x) |
Coseno del ángulo x en grados |
tan(x) |
Tangente del ángulo x en radianes |
tand(x) |
Tangente del ángulo x en grados |
sec(x) |
Secante del ángulo x en radianes |
csc(x) |
Cosecante del ángulo x en radianes |
cot(x) |
Cotangente del ángulo x en radianes |
> sin(π/2)
julia1.0
> cos(π/2)
julia6.123233995736766e-17
> cosd(90)
julia0.0
> tan(π/4)
julia0.9999999999999999
> tand(45)
julia1.0
> tan(π/2)
julia1.633123935319537e16
> tand(90)
juliaInf
> sin(π/4)^2 + cos(π/4)^2
julia1.0
1.11 Funciones trigonométricas inversas
Función | Descripción |
---|---|
asin(x) |
Arcoseno (inversa del seno) de x en radianes |
asind(x) |
Arcoseno (inversa del seno) de x en grados |
acos(x) |
Arcocoseno (inversa del coseno) de x en radianes |
acosd(x) |
Arcocoseno (inversa del coseno) de x en grados |
atan(x) |
Arcotangente (inversa de la tangente) de x en radianes |
atand(x) |
Arcotangente (inversa de la tangente) de x en grados |
asec(x) |
Arcosecante (inversa de la secante) de x en radianes |
acsc(x) |
Arcocosecante (inversa de la cosecante) de x en radianes |
acot(x) |
Arcocotangente (inversa de la cotangente) de x en radianes |
> asin(1)
julia1.5707963267948966
> asind(1)
julia90.0
> acos(-1)
julia3.141592653589793
> atan(1)
julia0.7853981633974483
> atand(tan(π/4))
julia45.0
1.12 Precedencia de operadores
A la hora de evaluar una expresión aritmética, Julia evalúa los operadores según el siguiente orden de prioridad (de mayor a menor prioridad).
Categoría | Operadores | Asociatividad |
---|---|---|
Funciones | exp , log , sin , etc. |
|
Exponenciación | ^ |
Derecha |
Unarios | + - √ |
Derecha |
Fracciones | // |
Izquierda |
Multiplicación | * / % & \ ÷ |
Izquierda |
Adición | + - | |
Izquierda |
Comparaciones | > < >= <= == != !== |
|
Asignaciones | = += -= *= /= //= ^= ÷= %= |= &= |
Derecha |
Cuando se quiera evaluar un operador con menor prioridad antes que otro con mayor prioridad, hay que utilizar paréntesis.
> 1 + 4 ^ 2 / 2 - 3
julia6.0
> (1 + 4 ^ 2) / 2 - 3
julia5.5
> (1 + 4) ^ 2 / 2 - 3
julia9.5
> 1 + 4 ^ 2 / (2 - 3)
julia-15.0
> (1 + 4 ^ 2) / (2 - 3)
julia-17.0
1.13 Definición de variables
Para definir variables se pueden utilizar cualquier carácter Unicode. Los nombres de las variables pueden contener más de una letra y, en tal caso, pueden usarse también números, pero siempre debe comenzar por una letra. Así, para Julia, la expresión xy
, no se interpreta como el producto de la variable \(x\) por la variable \(y\), sino como la variable \(xy\). Además, se distingue entre mayúsculas y minúsculas, así que no es lo mismo \(xy\) que \(xY\).