viernes, 20 de septiembre de 2013

Ha aparecido un nuevo lenguage de programación dinámica para cosas numericos y estadísticos. julia, mire  http://julialang.org/
Parece muy interesante, con sintaxis parecido a matlab/octave pero velocidad de c!  Comenzamos a explorarlo aqui:

kjetil@kjetil-HP-Pavilion-dv4-Notebook-PC:~$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "help()" to list help topics
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.2.0
 _/ |\__'_|_|_|\__'_|  |
|__/                   |  x86_64-linux-gnu

julia> 2+2
4

julia> x=2
2

julia> y=4x^3-2x+1
29
Mire el sintaxis interesante, multiplicación con un número literal sin *.
Soporte muy directo de matrices, con notación natural:
julia> B = [1 0 0 ; 1 2 3 ; 0 3 5]
3x3 Array{Int64,2}:
 1  0  0
 1  2  3
 0  3  5

julia> rank(B)
3

julia> B * B^-1
3x3 Array{Float64,2}:
 1.0           0.0          0.0        
 0.0           1.0          8.88178e-16
 3.55271e-15  -3.55271e-15  1.0        

Pero se ve que la implementación hasta hoy falta en robustez:
julia> A = [1 2 3; 2 3 4;3 4 5]
3x3 Array{Int64,2}:
 1  2  3
 2  3  4
 3  4  5

julia> size(A)
(3,3)

julia> A^-1
3x3 Array{Float64,2}:
 -4.5036e15   9.0072e15   -4.5036e15
  9.0072e15  -1.80144e16   9.0072e15
 -4.5036e15   9.0072e15   -4.5036e15

julia> A^-1 * A
3x3 Array{Float64,2}:
  0.0  0.0  0.0
 -4.0  0.0  8.0
  2.0  0.0  0.0

julia> rank(A)
2
julia devuelve un inverso para A aun que no existe! Esperamos que se corrige esto . 
julia> whos()
A                             3x3 Array{Int64,2}
B                             3x3 Array{Int64,2}
Base                          Module
Core                          Module
Main                          Module
x                             Int64
y                             Int64

Observamos que whos() da la información que whos
da en matlab/octave. Pero, es una función, no un comando.  
julia> tri = [1 2 3; 0 4 5;0 0 6]
3x3 Array{Int64,2}:
 1  2  3
 0  4  5
 0  0  6

julia> tri'
3x3 Array{Int64,2}:
 1  0  0
 2  4  0
 3  5  6
Notación natural para la transpuesta, como en octave.

Finalizamos hoy con unos ejemplos de estadística:
julia> x = [ 1., 3.1, 2.2, 5, 4, 2, 6, 8, 7, 9, 7, 8, 6.9, 5]
14-element Array{Float64,1}:
 1.0
 3.1
 2.2
 5.0
 4.0
 2.0
 6.0
 8.0
 7.0
 9.0
 7.0
 8.0
 6.9
 5.0

julia> mean(x)
5.3

julia> std(x)
2.52373349806012

julia> median(x)
5.5

julia> quantile(x, [ .22,  .44, .89])
3-element Array{Float64,1}:
 2.974
 5.0  
 8.0  


No hay comentarios:

Publicar un comentario