Lenguaje científico del Futuro
Clase 1: Instalación y Visión General

¿Cómo utilizar esta presentación?
- En Chrome: presionar F12, y después > "Consola"
- En IE: presionar F12, y después > "Consola"
- En FIREFOX: presionar Ctrl+Shift+k
Cada hoja tiene mis notas de presentación.
Abreviaciones Teclado
- ↓, PgDn, n, j Siguiente Hoja
- ↑, PgUp, p, k Anterior Hoja
- Esc Permite el uso de CTRL-f
Instructor


David Cardozo
david.cardozo@me.com
gd.cardozo684@uniandes.edu.co
O(exp \sqrt[3]{ \frac{64}{9} b ( \log b)^ 2 }
O(exp3√964b(logb)2

Ciencias Computacionales
- Usualmente los científicos no tienen un entrenamiento formal en ingeniería de software.
- Ingenieros de software raramente encuentran problemas que tengan requerimientos de rendimiento tan demandantes como en problemas científicos
- Solamente mediante el entendimiento de ambas partes del problema podemos producir soluciones adequadas.
ENTER
JULIA

¿Que es Julia?
- Un nuevo lenguaje de programación (publico desde 2012)
- Hecho en MIT, Julia Computing
- Enfocado en aplicaciones de computo científico
- Apunta a ser un lenguaje de alto nivel que también es rápido para simulaciones
- fácil de aprender y flexible como python
- con 2x la velocidad de C,C++ o FORTRAN
Razones para considerar Julia
- Escribes tus propios algoritmos.
- Necesitas escribir código que es muy rápido
- Te gustaría prototipar y optimizar dentro del mismo lenguaje
- Escribir al mismo tiempo código en C, Python y C++
- Tener acceso a los últimos algoritmos en diferenciación automática y optimización
- Usar letras griegas como nombres de variables
- Interés en el diseño de lenguajes de programación
Mis herramientas de trabajo en 2010
En un solo proyecto, estaba utilizando:
- Matlab para álgebra lineal
- R para estadística y visualización
- C para las cosas rápidas
- Ruby para unir las cosas

"systems languages"
estáticos
compilados
user types
rápidos
díficiles
"scripting languages"
dinámicos
interpretados
standard types
lentos
fáciles
El problema de los dos lenguajes
El problema de los dos lenguajes
Debido a esta diferenciación, se obtienen dos compromisos:
- Para conveniencia usar un lenguaje de script (Python, R, Matlab)
- Para hacer las cosas pesadas hacerlo en un system language (C, C++, Fortran)
La unificación Juliana
Julia
dinámico
compilado
user types y standard types
rápido
sencillo
Velocidad

dgromov@dgromov-Lenovo-B570:~/Documents/Julia$ julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.5.0 (2016-09-19 18:14 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | x86_64-linux-gnu
julia>
El poder de la línea de comandos (REPL)
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.5.0 (2016-09-19 18:14 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | x86_64-linux-gnu
julia> x = 10
10
julia> 2x
20
julia> 2*x
20
julia>
Asignacíon y evaluacíon
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.5.0 (2016-09-19 18:14 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | x86_64-linux-gnu
help?> linspace
search: linspace LinSpace
linspace(start, stop, n=50)
Construct a range of n linearly spaced elements from start to stop.
julia>
¿Dónde consigo ayuda?
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.5.0 (2016-09-19 18:14 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | x86_64-linux-gnu
julia> A_simétrica = randn(3,3) |> t -> t + t'
3×3 Array{Float64,2}:
-0.226926 0.361216 -0.212612
0.361216 -0.980483 0.0696489
-0.212612 0.0696489 -1.08299
julia> λ = eigmax(A_simétrica)
-0.05272142006674203
UTF-8 y la magia en Español
¿ Cómo hacer la lambda en la consola?
Instalación en Windows
Link:http://julialang.org/downloads/
cmd > Julia
Buscamos la opción *.exe y utilizamos la versión de 64bits.
Una introducción a Julia
By David Cardozo
Una introducción a Julia
Crash course en Julia en español.
- 937