O Jupyter é uma interface web para Julia, Python, R (daí o nome Ju[lia], py[thon], R) e muitas outras. Ela não é o Julia, isto é, o Julia não depende do Jupyter para funcionar. No entanto, usando o Jupyter, aulas e apresentações ficam mais práticas.
Cada célula do Jupyter pode ser executada com um ctrl+enter
, ou
um ctrl+shift
, sendo que o último move a seleção para a célula de
baixo.
Você pode adicionar novas células usando o +
no topo da página.
julia>
O Jupyter também serve como esse prompt e todo comando digitado aqui pode ser digitado lá.
JunoLab é o editor oficial de Julia. Você pode usar outros editores, mas o suporte à caracteres especiais é quase que exclusivo de um punhado. Em especial, o JunoLab é um dos melhores para isso.
O JunoLab é feito em cima do Atom. Você pode baixar o Atom e instalar os pacotes específicos, se preferir ter mais controle.
O Jupyter é utilizado para aulas, apresentações, workshops. A parte importante é a interatividade.
O editor é usado para fazer códigos sérios. Para desenvolver os exercícios, projetos, e futuros pacotes, é necessário criar arquivos e ter um ambiente adequado.
É bastante fácil encontrar ajuda para vários comandos de julia
na internet. Use e abuse do google. Entretanto, um bom guia rápido é esta página, uma via rápido para julia
.
In [6]:
using Random
Random.seed!(0) # Para controle pessoal. Ignorar
Out[6]:
In [7]:
2 + 3
Out[7]:
In [8]:
3 * 5
Out[8]:
In [9]:
7 ^ 3
Out[9]:
In [10]:
exp(2)
Out[10]:
In [11]:
sin(3.14159/4)
Out[11]:
In [12]:
pi
Out[12]:
In [13]:
sin(pi/4)
Out[13]:
In [14]:
round(1.2)
Out[14]:
In [15]:
abs(-3)
Out[15]:
In [16]:
x = 3
Out[16]:
In [17]:
x ^ 2
Out[17]:
In [18]:
y = 2x
Out[18]:
In [19]:
y - x
Out[19]:
In [20]:
1e-2 # 10⁻²
Out[20]:
In [21]:
1e3 # 10³
Out[21]:
In [22]:
0.1 + 0.2 - 0.3
Out[22]:
Para acessar alguns comandos é necessário chamarmos módulos ou pacotes do Julia. Muitas vezes é necessário instalar algum pacote adicional. Para tanto, usamos o comando using
.
Por exemplo para podermos acessar alguns comandos necessários para Álgebra Linear Numérica chamamos o pacote LinearAlgebra
e para usar comandos relacionados a números aleatórios o pacote Random
.
In [23]:
# Para usar comandos de Álgebra Linear
using LinearAlgebra
# Para usar comandos de aleatoriedade
using Random
In [24]:
rand(3)
Out[24]:
In [25]:
ones(3)
Out[25]:
In [26]:
zeros(3)
Out[26]:
In [27]:
rand(2,4)
Out[27]:
In [28]:
v = rand(3)
Out[28]:
In [29]:
A = rand(2, 3)
Out[29]:
In [30]:
A * v
Out[30]:
In [31]:
w = rand(2)
Out[31]:
In [32]:
A' * w
Out[32]:
In [33]:
B = rand(2, 3)
Out[33]:
In [34]:
A + B
Out[34]:
In [35]:
A * B'
Out[35]:
In [36]:
A' * B
Out[36]:
In [37]:
A = rand(3, 3)
b = rand(3)
x = A\b # Resolve o SL
Out[37]:
In [38]:
A * x - b # É pra ser zero (ou quase)
Out[38]:
In [39]:
norm(A*x-b) # norm = ‖ ⋅ ‖
Out[39]:
In [40]:
v = [1.0; 2.0; 3.0]
w = [2.0; -2.0; 2.0]
dot(v, w) # ⟨v,w⟩
Out[40]:
In [41]:
det(A)
Out[41]:
In [42]:
A^2 # A * A
Out[42]:
In [43]:
A .^ 2 # Cada elemento de A ao quadrado
Out[43]:
In [44]:
cos.(v) # Calcula o cosseno de cada elemento de v
Out[44]:
In [45]:
B = rand(3, 3)
Out[45]:
In [46]:
A .* B
Out[46]:
In [47]:
v
Out[47]:
In [48]:
v[1]
Out[48]:
In [49]:
v[2]
Out[49]:
In [50]:
A
Out[50]:
In [51]:
A[1,1]
Out[51]:
In [52]:
A[2,3]
Out[52]:
In [53]:
v[1:2]
Out[53]:
In [54]:
A[:,2]
Out[54]:
In [55]:
A[1,:]
Out[55]:
In [56]:
A[2,3] = 0.0
Out[56]:
In [57]:
A
Out[57]:
In [59]:
m, n = size(A)
Out[59]:
In [60]:
length(v)
Out[60]:
In [147]:
I*v
Out[147]:
In [152]:
[rand(3,3) zeros(3,2); rand(2,3) I]
Out[152]:
In [62]:
f(x) = x^2
f(2)
Out[62]:
In [63]:
f(-3)
Out[63]:
In [64]:
g(a,b) = exp(a + b)
Out[64]:
In [65]:
g(2,3)
Out[65]:
In [66]:
g(3,-3)
Out[66]:
In [67]:
h = x -> sin(x)
Out[67]:
In [68]:
h(2)
Out[68]:
In [69]:
function aprox_der(f, a, h)
(f(a+h) - f(a))/h
end
Out[69]:
In [70]:
aprox_der(h, pi/6, 1e-8)
Out[70]:
In [71]:
function aprox_der(f, a, h = 1e-8)
(f(a+h) - f(a))/h
end
Out[71]:
In [72]:
aprox_der(h, pi/6)
Out[72]:
In [73]:
aprox_der(x->x^2+3x+2, 2) # 2x + 3 com x = 2: 7
Out[73]:
In [ ]:
# Escreva aqui sua função
function minhafunc()
end
In [74]:
ones(3)
Out[74]:
In [75]:
[1.0 1.0 1.0]
Out[75]:
In [76]:
[1.0; 1.0; 1.0]
Out[76]:
In [77]:
[1.0, 1.0, 1.0]
Out[77]:
In [78]:
[1.0 1.0 1.0]'
Out[78]:
In [79]:
ones(3)'
Out[79]:
In [80]:
ones(3)''
Out[80]:
In [ ]:
# Exercício 1
In [ ]:
# Exercícios 2
In [ ]:
# Exercícios 3
In [ ]:
# Exercícios 4
In [ ]:
# Exercícios 5
In [81]:
collect(1:5)
Out[81]:
In [82]:
collect(1:2:5)
Out[82]:
In [83]:
collect(0.0:0.1:1.0)
Out[83]:
In [154]:
collect(range(0, 1, length=10))
Out[154]:
In [85]:
collect(10:-1:1)
Out[85]:
In [86]:
for i = 2.0:0.5:3.0
println(i^2) # Impressão e quebra linha
end
In [87]:
?println
Out[87]:
In [88]:
for i = 1:10
print(i)
end
In [89]:
for i = 1:10
println("i = $i")
end
In [156]:
using Printf
for i = 1:10
@printf("i = %03d\n", i) # Notação de C
end
In [157]:
x = rand(10)
y = zeros(10)
for i = 1:10
y[i] = x[i] * i
end
In [158]:
y ./ x
Out[158]:
In [93]:
for x in [0; pi/6; pi/4; pi/3; pi/2]
println("sin($x) = $(sin(x))")
end
In [94]:
for i = 3:3:20
print("$i ")
end
In [95]:
for i in 3:2:10
println("$i^2 = $(i^2)")
end
In [96]:
Float64[2; 3]
Out[96]:
In [165]:
for x in Any["a", 0, 3.14, exp(1), 3//4, im, ones(2), ones(2,2)]
println("x: $x Tipo: $(typeof(x))")
end
In [173]:
# Estes comandos vão dar erro
n = 6
v = ones(n)
v[n/2] = 2
v
In [169]:
n/2
Out[169]:
In [100]:
div(n,2)
Out[100]:
In [172]:
v[div(n,2)]
Out[172]:
In [101]:
round(Int, n/2)
Out[101]:
In [102]:
10 % 4 # Resto da divisão de 10 por 4
Out[102]:
Fatorial: $ n! = n(n-1)\dots2. 1 $
In [103]:
function fatorial(n)
resultado = 1
for i = 1:n
resultado = resultado * i
end
return resultado
end
Out[103]:
In [104]:
fatorial(4)
Out[104]:
In [105]:
fatorial(5)
Out[105]:
In [106]:
fatorial(0)
Out[106]:
In [107]:
fatorial(4.3)
Out[107]:
In [108]:
fatorial(-2)
Out[108]:
In [176]:
function fatorial2(n :: Int)
resultado = 1
for i = 1:n
resultado = resultado * i
end
return resultado
end
Out[176]:
In [177]:
fatorial2(4)
Out[177]:
In [179]:
fatorial2(3.4)
sinal: $ \mbox{sinal}(x) = \left\{\begin{array}{rl} 1, & x > 0 \\ -1, & x < 0 \\ 0, & x = 0. \end{array}\right.$
In [180]:
function sinal(x)
if x > 0
return 1
elseif x < 0
return -1
else
return 0
end
end
Out[180]:
In [112]:
sinal(3.2)
Out[112]:
In [113]:
sinal(-1.2)
Out[113]:
In [114]:
sinal(0.0)
Out[114]:
Bháskara: $ax^2 + bx + c = 0$ e $b^2 - 4ac \geq 0$ implicam em $x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a}. $
In [181]:
function bhaskara(a, b, c)
Δ = b^2 - 4 * a * c
if Δ < 0
@error("Nos reais não tem solução")
end
return (-b + sqrt(Δ)) / 2a, (-b - sqrt(Δ)) / 2a
end
Out[181]:
In [182]:
bhaskara(1, 0, -1)
Out[182]:
In [183]:
bhaskara(1, 0, 1)
In [118]:
bhaskara(1, 0, -1)
Out[118]:
In [119]:
bhaskara(0, 1, 1)
Out[119]:
MMC: $\mbox{mmc}(a, b)$ é o menor número natural que é múltiplo de $a$ e de $b$.
or -> ||
and -> &&
In [120]:
function mmc(a::Int, b::Int)
if a < 1 || b < 1
@error("Entrada deve ser de dois inteiros positivos")
end
x = 1
while a > 1 || b > 1
achou = false
for j = 2:max(a,b)
if a % j == 0 || b % j == 0
x = x * j
achou = true
end
if a % j == 0
a = div(a, j)
end
if b % j == 0
b = div(b, j)
end
if achou
break
end
end
end
return x
end
Out[120]:
In [121]:
mmc(2,3)
Out[121]:
In [122]:
mmc(5, 7)
Out[122]:
In [123]:
mmc(6, 8)
Out[123]:
In [124]:
mmc(12, 14)
Out[124]:
In [125]:
mmc(-1, 0)
In [126]:
mmc(2.0, 3.0)
A aula de arquivos deve ser feira fora do Jupyter para melhor entendimento. Use:
Dentro do terminal, use
include("arquivo.jl")
para incluir um arquivo e rodar todo seu conteúdo.
O arquivo precisa estar na mesma pasta. Se não estiver você tem duas opções:
cd
; ouinclude("~/Desktop/arquivo.jl")
. (~
em Linux quer dizer diretório pessoal padrão - em geral /home/fulano/
.O Julia não vem com tudo pré-instalado, assim como a maioria das linguagem de programação. Para encontrar um pacote que faça o que você quer, você pode buscar na lista http://pkg.julialang.org/ ou no Google.
Caso o pacote que você encontrou seja indexado, basta usar os comandos using Pkg, Pkg.add("Pacote")
. A indexação depende do criador do pacote. Os principais pacotes estão indexados. Por exemplo:
Plots
: comandos unificados de fazer gráficos.PyPlot
: para desenhar gráficos usando o matplotlib
. Bonito, mas lento e demorado de instalar.GR
: outro pacote para desenhar gráficos. Mais rápido, mas menos bonito.Primes
: pacote para trabalhar com números primos.Combinatorics
: pacote para funções de combinátoria.Se você estiver usando o Julia no terminal, então clicando em ] você abre o administrador de pacotes
julia> ]
(v1.2) pkg>
Utilizaremos os pacotes Plots
e PyPlot
para fazer nossos gráficos. Caso prefira o GR
, mude o comando pyplot
logo abaixo por gr
.
Para o help dos gráficos, veja Julia Plots.
In [185]:
using Pkg; Pkg.add("Plots") #Isso só necessário na primeira vez que instalamos
using Plots
pyplot(size=(400,300)) # ou gr()
Out[185]:
In [186]:
plot([1; 2; 3], [3; 1; 2]) # plot(x, y)
Out[186]:
In [192]:
x = range(0, 1, length=100) # 100 elementos igual. esp. de 0 a 1
y = x.^2
plot(x, y)
Out[192]:
In [200]:
scatter(x, 4 * x .* (1 .- x)) #note uso do .* e .-
Out[200]:
In [201]:
scatter(x, rand(100))
Out[201]:
In [202]:
f(x) = x * sin(x)
plot(f, 0, 4pi) # plot(f, a, b)
Out[202]:
In [204]:
# Definindo função inline
plot(x->exp(x) * x, -1, 1)
Out[204]:
In [205]:
plot!(x->exp(-x), -1, 1)
Out[205]:
In [206]:
xlims!(-0.5, 0.5)
Out[206]:
In [207]:
ylims!(0.5, 1.5)
Out[207]:
In [208]:
t = range(-2, 3, length=200)
x = cos.(t*pi*2) .* exp.(t)
y = sin.(t*pi*2) .* exp.(t)
plot(x, y)
Out[208]:
In [209]:
plot(sin, 0, 2pi, label="sin")
plot!(cos, 0, 2pi, label="cos", c = :magenta)
plot!(x->1, 0, 2pi, c=:red, l=:dash, label="")
plot!(x->-1, 0, 2pi, c=:red, l=:dash, label="")
ylims!(-1.2, 1.2)
Out[209]:
In [139]:
xticks!(0:pi/2:2pi)
Out[139]:
In [140]:
xticks!(0:pi/2:2pi, ["0", "\\pi /2", "\\pi", "3\\pi/2", "2\\pi"])
Out[140]:
In [210]:
x = range(0, 2*pi, length=100)
anim = Animation()
for i = 1:5:100
plot(x[1:i], sin.(x[1:i]))
frame(anim)
end
gif(anim, "exemplo.gif", fps=10)
Out[210]:
In [211]:
x = range(0, 2*pi, length=100)
anim = Animation()
for i = 1:3:100
plot(x[1:i], sin.(x[1:i]))
xlims!(x[1], x[end])
ylims!(-1, 1)
frame(anim)
end
gif(anim, "exemplo2.gif", fps=12)
Out[211]:
In [218]:
x = range(0, 2*pi, length=100)
anim = Animation()
for i = 1:3:100
plot(x, sin.(x), leg=false)
a = x[i]
scatter!([a], [sin(a)], c=:red)
plot!(x, sin(a) .+ cos(a) * (x .- a), c=:red, l=:dash)
xlims!(x[1], x[end])
ylims!(-2, 2)
frame(anim)
end
gif(anim, "exemplo3.gif", fps=12)
Out[218]: