Julia. Conhecimento

Ode para Julia



É muito difícil transmitir todo o entusiasmo que acompanhou o lançamento dos primeiros programas e a correção dos primeiros erros usando essa linguagem. É simples e bonito como Python , um pouco como Fortran , trabalho conveniente com matrizes e gráficos, além da capacidade de executar otimização e paralelização feroz, mesmo para manequins como eu meus colegas de classe. Você pode trabalhar em diferentes níveis de abstração: da programação de alto nível com digitação dinâmica, você pode ir até os comandos do assembler, ou seja, aqui você tem acessibilidade do Python e velocidade de execução dos contadores do Fortran. Não consigo me livrar da sensação de que Mathcad , Scilab e até, Deus me perdoe, C ++ estão começando a desbotar em meu coração.


Aprendi sobre o idioma encontrando acidentalmente uma publicação khabroviana e, como um aluno impressionável deveria, comecei a procurar orientação, de preferência em russo. Como a linguagem está em constante evolução há seis anos, as fontes de informação já escassas se tornaram obsoletas e a empolgação começou a diminuir. Porém, com o início de um novo curso de laboratório sobre modelagem de fenômenos físicos, com a livre escolha de uma linguagem de programação, ainda havia uma motivação para começar a conhecer Julia. Além disso, em agosto, o idioma "add up 1.0" .


O material apresentado abaixo foi planejado como uma introdução ao idioma em que todos os trabalhos de laboratório foram escritos e um manual de treinamento foi coletado.


Julia é uma linguagem de programação de digitação dinâmica de alto nível e alto desempenho para cálculos matemáticos. A sintaxe é semelhante à família matlab, a linguagem é escrita em C , C ++ e Scheme , é possível chamar bibliotecas Sysh


Instalação


Sob o spoiler

No site oficial, você pode encontrar notícias, tutoriais em vídeo e baixar a distribuição. Após a instalação, você pode começar a trabalhar, mas tudo acontecerá no modo intérprete.
No site https://juliacomputing.com , estão disponíveis produtos baseados neste idioma:


  • JuliaDB - por trabalhar com análises de banco de dados e análises de séries temporais com base no rico ecossistema de Julia, bem como com simultaneidade e escalabilidade incorporadas.
  • JuliaBOX - Inicie o Julia sem instalar a partir do seu navegador nos laptops Jupyter. Popular em universidades e entre usuários novatos. Para o trabalho completo, você precisa solicitar uma assinatura paga. No modo livre, algumas opções serão limitadas e você precisa esperar na fila para acessar os núcleos de processamento
  • JuliaRun - Execute aplicativos Julia em uma nuvem pública ou privada. Implantação de produção escalável para análise em tempo real e simulações paralelas em larga escala.
  • JuliaFin - Para trabalhos na área de finanças. Inclui todas as ferramentas necessárias para backtesting e negociação: Excel, Bloomberg, modelagem de contratos e JuliaDB.
  • JuliaPro - Versão gratuita para cientistas e pesquisadores de dados. Instale no Windows, Mac ou Linux. Uma licença comercial estendida está disponível.

Escolha a última opção. No momento da redação deste artigo, a versão 0.6.4.1 estava disponível. Após o registro, o download gratuito estará disponível. Os usuários do Windows 7 / Windows Server 2012 também devem instalar:



Após o download do fixador, é melhor fornecer uma restrição ao acesso à Internet e somente atualizar, caso contrário, todos descobrirão qual é a sua cópia inválida do Windows. Esta atualização é necessária para evitar problemas com o sistema de controle de versão git ; caso contrário, não será possível baixar pacotes adicionais e, sem eles, será difícil.


Bem, tudo finalmente se acalmou, agora à nossa disposição:


  • Prompt de comando do JuliaPRO - todas as habilidades de Yulina diretamente do intérprete.
  • Juno é um IDE bonito, com uma janela para gráficos e um espaço de trabalho onde você pode ver o conteúdo de todos os objetos
  • Jupyter - inicia o núcleo de computação no console e você pode executar o código diretamente no navegador. (Além de Julia, Python também está presente)

Vamos ver o que esta calculadora pode fazer ... Suporte Unicode - você pode usar o alfabeto cirílico, hieróglifos e chamar pi da letra grega. E você não pode especificar explicitamente a multiplicação entre o número e a variável (nessa ordem e sem espaço):


x = 5+8 2x - 3x + 2x^2 Out: 325 

Todos os sinais necessários também estão em vigor: + =, * =, >> =, etc. (O sinal ">>" (deslocamento de bits para a direita). Sinais de comparação:>,> =, <, <=, == ,! =. Desigualdades podem ser combinadas em cadeias:


 y = 5 y += 2 4 <= y < 8 Out: true 

Números complexos disponíveis:


 (2-1im)*(4+3im) Out: 11 + 2im 

E funções para trabalhar com eles:


  • real (z) é a parte real,
  • imag (z) é a parte imaginária,
  • conj (z) é o conjugado complexo,
  • abs (z) - módulo
  • abs2 (z) é o quadrado do módulo,
  • ângulo (z) é o argumento de um número complexo.

Você pode usar números racionais usando "//" e as funções correspondentes:


  • num (x) - numerador,
  • den (x) - denominador,
  • float (x) - converte em decimal

 x = 4//6+5//7 Out: 29//21 float(x) Out: 1.380952380952381 

Julia tem a capacidade de controlar a representação interna de dados:


  • typeof (obj) - tipo de objeto
  • typemax (obj) é o número máximo desse tipo
  • typemin (obj) - mínimo
  • eps () - máquina zero
  • BigInt é um grande todo
  • BigFloat - grande ponto flutuante

 q = 3 typemax(q) Out: 9223372036854775807 typeof(q) Out: Int64 BigFloat(2.3^45/6) Out: 3.159376405019356000000000000000000000000000000000000000000000000000000000000e+15 

Funções


Kit de Recursos


  • abs (x) é o módulo de um número,
  • abs2 (x) é o quadrado do módulo,
  • sqrt (x) é a raiz quadrada,
  • cbrt (x) é a raiz cúbica,
  • exp (x) é o expoente do número,
  • log (x) é o logaritmo natural,
  • log10 (x) - logaritmo decimal,
  • log (b, x) é o logaritmo de x na base b.
    Assim como trigonométrico, hiperbólico, Airy, Bessel e muitos outros.

Funções personalizadas:


 function () #  end 

A função retorna o resultado da última expressão (usuário do Mathcad soluço).


 function cube(x) x^3 end cube(4) Out: 64 

Bem, ou indicamos explicitamente:


 function myabs(x) if x>=0 return x else return -x end end myabs(-12) Out: 12 

Os valores retornados podem ser coletados em uma tupla:


 function cubeandsquare(x) x^3,x^2 end a,b = cubeandsquare(3) print("a = $a, b = $b") Out: a = 27, b = 9 

As funções podem levar tuplas, valores padrão, palavras-chave. Se não houver colchetes após o nome da função, ela será considerada uma variável e poderá ser atribuída a outra variável ou transferida para a função como parâmetro. Julia também suporta um estilo funcional de escrever programas (Olá Lisp)


 function mysin(t;A=1,?=1,?=0) #   -     A*sin(?*t + ?) end x1 = mysin(pi) #   = 0 x2 = mysin(pi*0.5,A = 2) #      x3 = mysin(pi*0.5,? = 0.5) #      print("x1 = $x1, x2 = $x2, x3 = $x3") Out: x1 = 1.2246467991473532e-16, x2 = 2.0, x3 = 0.7071067811865475 

Matrizes


Como usuário do Scilab , eu nem percebi a substituição: você pode especificar um array usando a função:


  • Matriz {T} (undef, dims ...) - Uma matriz do tipo T e dimensão dims
  • zeros (T, dims ...) - Matriz de zeros
  • ones (T, dims ...) - ou unidades
    A indexação começa com um , em vez de $ - end , e todas as operações necessárias para matrizes são definidas (para executar, por exemplo, adição ou multiplicação por elementos, é necessário colocar um ponto na frente do operador).


(Agora está claro como inserir imagens, mas tudo bem ...)


Funções básicas:


  • det (A) - calcula determinante
  • A ' - transpõe a matriz
  • inv (A) - matriz invertida
  • length (A) - número de elementos
  • ndims (A) - número de dimensões
  • tamanho (A) - tupla de dimensões
  • tamanho (A, n) - dimensão em uma determinada direção
  • copy (A) - cria uma cópia da matriz
  • espaço interno (início, fim, etapa) ou
    linspace (start: step: end) - cria uma matriz unidimensional

 A = [1 2 3; 6 5 4; 7 8 9] Out: 3?3 Array{Int64,2}: 1 2 3 6 5 4 7 8 9 A[2,1] Out: 6 A[end] Out: 9 size(A) Out: (3, 3) 

Você pode selecionar partes da matriz especificando um intervalo de índices ao longo da dimensão com o sinal ":".


 m1 = rand(3,2) m2 = reshape(1:2:11, 3,2) Out: 3?2 Base.ReshapedArray{Int64,2,StepRange{Int64,Int64},Tuple{}}: 1 7 3 9 5 11 m3 = [m1 m2] #   (  ) Out: 3?4 Array{Float64,2}: 0.325649 0.701038 1.0 7.0 0.513579 0.620215 3.0 9.0 0.815242 0.805307 5.0 11.0 m5 = [m1; m2] #   (  ) Out: 6?2 Array{Float64,2}: 0.325649 0.701038 0.513579 0.620215 0.815242 0.805307 1.0 7.0 3.0 9.0 5.0 11.0 m3[:, 2:4] Out: 3?3 Array{Float64,2}: 0.701038 1.0 7.0 0.620215 3.0 9.0 0.805307 5.0 11.0 

Aqui usamos rand (), que retorna uma matriz de números aleatórios de uma determinada dimensão, e reformular (), que altera a dimensão da matriz para a especificada.


 for a in A #   a   A end 

ou


 for i in eachindex(A) #     i end 

ou


 for i = 1 : size(A,n) # n -      (..    ) #     i end 

Gráficos


Para usar gráficos, você precisa baixar um pacote do repositório para escolher:


  • Pkg.add ("Gráficos")
  • Pkg.add ("PyPlot")
  • Pkg.add ("Gadfly")
  • Pkg.add ("Winston")

Destes, o mais popular é o PyPlot Pythonic . Os módulos são conectados usando o comando, por exemplo:


 using PyPlot 

No entanto, vamos tentar o Gaston usando o Gnuplot (balanço separadamente).
Carregado pela equipe Gaston.jl


  Pkg.add("Gaston") 

E direto ao ponto:


 using Gaston t = 0:0.01:1 plot(t, sin.(2?*5*t)) 


 plot(t,sin.(2?*5*t),title="A sine wave",xlabel="Time (s)",ylabel="Amplitude",grid="on",linewidth=3,color="blue", yrange="[-1.1:1.1]",marker="ecircle",plotstyle="linespoints",linestyle="-.-") 


 plot!(t,cos.(2?*5*t),color="red",linewidth=2) #       


 x = y = -15:0.33:15 surf(x,y,(x,y)->sin.(sqrt.(x.*x+y.*y))./sqrt.(x.*x+y.*y),title="Sombrero",plotstyle="pm3d") 


 x = y = -15:0.33:15 surf(x,y,(x,y)->sin.(sqrt(x.*x+y.*y))./sqrt.(x.*x+y.*y), title="Edge view of a sombrero",plotstyle="pm3d",gpcom="set view 80,20") 


 R = [ x+y for x=0:5:120, y=0:5:120] G = [ x+y for x=0:5:120, y=120:-5:0] B = [ x+y for x=120:-5:0, y=0:5:120] Z = zeros(25,25,3) Z[:,:,1] = R Z[:,:,2] = G Z[:,:,3] = B imagesc(Z,title="RGB Image",clim=[10 200]) 


 histogram(rand(1000),bins=15,norm=1,title="Histogram",yrange="[0:1.6]") 


 y = 1:40 err = Gaston.ErrorCoords(rand(40)) plot(y,err=err,title="Example of error bars",plotstyle="errorbars") 


Você pode criar várias janelas gráficas (não funciona no Jupyter ) usando o comando h = figure () (basta inserir entre plotes). Para salvar o gráfico como um arquivo de imagem, use os comandos
set_filename ("name.png") # se não for especificado, será exibido
printfigure ("png") # salva em arquivo, PNG, PDF, SVG e GIF disponíveis
Mais informações sobre os pacotes Gaston


Conclusão


Existem muitos outros pacotes gráficos para todos os gostos e que cobrem quase todas as necessidades. Além disso, pacotes auxiliares estão sendo desenvolvidos com poder e principal. Aqui você tem computação quântica, bioinformática e aprendizado de máquina, além de muitos outros problemas prementes, como diferenciais e derivados .


Em geral, Julia é linda, inteligente e muito promissora, e é extremamente inadmissível deixá-la sem a devida atenção.

Source: https://habr.com/ru/post/pt423811/


All Articles