println("¡Hola Julia!")
¡Hola Julia!
Seminario de Innovación Docente
Universidade da Coruña
21 de julio de 2023
Julia un lenguaje de programación moderno creado en 2012 el MIT por el equipo del profesor Edelman, orientado a cálculo científico y el análisis de datos.
De los creadores de Julia:
We want a language that is:
- Open source.
- With the speed of C.
- Obvious, familiar mathematical notation like Matlab.
- As usable for general programming as Python.
- As easy for statistics as R.
- As natural for string processing as Perl.
- As powerful for linear algebra as Matlab.
- As good at gluing programs together as the shell.
- Dirt simple to learn, yet keeps the most serious hackers happy.
Prácticas en el Grado de Ingeniería Matemática
Curso 2022/2023
Curso 2023/2024
Curso 2024/2025
Lenguaje de alto nivel con una sintaxis fácil de aprender (similar a Python, R o Matlab).
Julia es un lenguaje muy veloz (equiparable a C o Fortran en muchas tareas).
Comparativa de Julia con otros lenguajes
La razón por la que Julia es tan rápido es por que usa despacho múltiple para precompilar distintas versiones de una misma función para cada posible tipo de dato de sus argumentos.
Tipo | Signo | Bits | Min | Max |
---|---|---|---|---|
Int8 | ✓ | 8 | \(-2^7\) | \(2^7-1\) |
UInt8 | 8 | \(0\) | \(2^8-1\) | |
Int16 | ✓ | 16 | \(-2^{15}\) | \(2^{15}-1\) |
UInt16 | 16 | \(0\) | \(2^{16}-1\) | |
Int32 | ✓ | 32 | \(-2^{31}\) | \(2^{31}-1\) |
UInt32 | 32 | \(0\) | \(2^{32}-1\) | |
Int64 | ✓ | 64 | \(-2^{63}\) | \(2^{63}-1\) |
UInt64 | 64 | \(0\) | \(2^{64}-1\) | |
Int128 | ✓ | 128 | \(-2^{127}\) | \(2^{127}-1\) |
UInt128 | 128 | \(0\) | \(2^{128}-1\) | |
Bool | N/A | 8 | false (0) | true (1) |
Tipo | Bits | Min | Max | ||
---|---|---|---|---|---|
Float16 | 16 | \(-6.55e4\) | \(6.55e4\) | ||
Float32 | 32 | \(-3.4028235e38\) | \(3.4028235e38\) | ||
Float64 | 64 | \(-1.7976931348623157e308\) | \(1.7976931348623157e308\) |
Tipo | Min positive | Epsilon |
---|---|---|
Float16 | \(6.104e-5\) | \(0.000977\) |
Float32 | \(1.1754944f-38\) | \(1.1920929f-7\) |
Float64 | \(2.2250738585072014e-308\) | \(2.220446049250313e-16\) |
BigInt
permite representar enteros de cualquier tamaño.BigFloat
permite representar reales de cualquier tamaño y precisión.El límite lo marca la memoria del ordenador.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412736
La constante im
está asociada al número complejo \(i=\sqrt{-1}\).
Siempre se promociona hacia el tipo más general.
Vectores
Matrices
Tuplas
Los tipos compuestos incluyen parámetros que determinan el tipo de sus elementos.
Es fácil definir nuevos operadores.
Julia admite múltiples formas de definir funciones.
Tradicional. Similar a otros lenguajes de programación.
En línea. Muy cómoda para definir funciones matemáticas.
Funciones anónimas. Se utilizan sobre todo en programación funcional, como argumentos de otras funciones.
Las funciones son objetos que pueden asignarse o pasarse como argumentos de otras funciones.
El operador punto .
permite aplicar una función u operador a los elementos de una colección (arrays, vectores, tuplas, etc.)
Julia permite caracteres Unicode lo que facilita la expresión de fórmulas matemáticas.
Para ello se utilizan códigos especiales (en muchos casos son los mismos que en \(\LaTeX\)), pulsando después la tecla de tabulación.
El operador ∘
permite componer funciones.
También puede realizarse con el operador de tubería |>
(similar a %>% en R).
El paquete Latexify
permite obtener el código \(\LaTeX\) para representar cualquier expresión matemática.
Quarto es un sistema de publicación de textos científicos y técnicos de alta calidad basado en Markdown y \(\LaTeX\) (similar a RMarkdown).
Julia es uno de los lenguajes de programación que admite.
Lenguaje de propósito general, pero especialmente diseñado para el cálculo científico y el análisis de datos.
El paquete Plots
permite la representación gráfica de funciones con diversos tipos de diagramas.
The WebIO Jupyter extension was not detected. See the WebIO Jupyter integration documentation for more information.
Existen dos paquetes para cálculo simbólico:
SymPy
: Basado en el paquete sympy
de Phthon. Muy maduro, pero lento.Symbolics
. Paquete puro en Julia muy rápido, pero no tan completo.SymPy
SymPy
SymPy
Symbolics
\[ \begin{equation} \cos\left( x \right) \end{equation} \]
\[ \begin{equation} \cos\left( x \right) \end{equation} \]
Es posible usar también la notación prima f'
sobrecargando el operador adjoin
.
SymPy
2×2 Matrix{Sym}:
y^2*exp(x*y) x*y*exp(x*y) + exp(x*y)
x*y*exp(x*y) + exp(x*y) x^2*exp(x*y)
Symbolics
\[ \begin{equation} \left[ \begin{array}{c} y e^{x y} \\ x e^{x y} \\ \end{array} \right] \end{equation} \]
\[ \begin{equation} \left[ \begin{array}{cc} y^{2} e^{x y} & x y e^{x y} + e^{x y} \\ x y e^{x y} + e^{x y} & x^{2} e^{x y} \\ \end{array} \right] \end{equation} \]
SymPy
\(y{\left(x \right)} = C_{1} e^{k x}\)
3-element Vector{ComplexF64}:
-2.5943130163548487 + 0.0im
0.29715650817742467 - 1.205625150602913im
0.29715650817742467 + 1.205625150602913im
10-element interpolate(::Vector{Float64}, BSpline(Linear())) with element type Float64:
0.0
0.6931471805599453
1.0986122886681098
1.3862943611198906
1.6094379124341003
1.791759469228055
1.9459101490553132
2.0794415416798357
2.1972245773362196
2.302585092994046
19-element interpolate(OffsetArray(::Vector{Float64}, 0:20), BSpline(Quadratic(Line(OnGrid())))) with element type Float64:
0.0
0.4054651081081644
0.6931471805599454
0.9162907318741551
1.0986122886681098
1.252762968495368
1.3862943611198908
1.504077396776274
1.6094379124341005
1.7047480922384253
1.791759469228055
1.8718021769015913
1.9459101490553135
2.0149030205422642
2.079441541679836
2.1400661634962708
2.1972245773362196
2.2512917986064953
2.302585092994046
3-element Vector{Float64}:
-3.141592653589793
0.0
3.141592653589793
u: 3-element Vector{Float64}:
3.0
2.0
1.0
using NLsolve
f(x, y) = [(x+3)*(y^3-7)+18, sin(y*exp(x)-1)]
f(x) = [(x[1]+3)*(x[2]^3-7)+18, sin(x[2]*exp(x[1])-1)]
nlsolve(f, [ 0.1, 1.2])
Results of Nonlinear Solver Algorithm
* Algorithm: Trust-region with dogleg and autoscaling
* Starting Point: [0.1, 1.2]
* Zero: [-7.775548712324193e-17, 0.9999999999999999]
* Inf-norm of residuals: 0.000000
* Iterations: 4
* Convergence: true
* |x - x'| < 0.0e+00: false
* |f(x)| < 1.0e-08: true
* Function Calls (f): 5
* Jacobian Calls (df/dx): 5
(0.7834305107121344070592643865269751743063670117483685034318247197232693913877173, 7.736858106873745132469365322882480666696649544982787019412483807349385217202092e-31)