Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Física Experimental IFC
License: MIT
Image: ubuntu2204
This notebook was created by João Marcello Pereira, and is licensed under Creative Commons BY-SA
Objetivo do tutorial
Este guia serve apenas para você aprender conceitos básicos da linguagem Julia para serem utilizados nos cálculos estatísticos e cálculos com incertezas de medição e propagação de incertezas. Para aprender mais sobre a linguagem baixe os arquivos em: https://bit.ly/tutorial-basico-python-julia-fisica . As versões mais atuais deste tutorial podem ser encontradas para download em https://bit.ly/fisica-experimental.
Linguagem Julia
Julia é uma linguagem de programação opensource com foco em computação científica que surgiu em 2012 com a proposta de ser fácil de aprender e rápida para processar dados. De acordo com o gráfico abaixo, temos um benchmark no qual foi rodado vários códigos matemáticos que são utilizados como testes de desempenho (quanto menor o tempo de execução melhor) no qual podemos observar o poder de processamento de Julia em relação a outras linguagens de computação científica.
A linguagem vem crescendo desde 2012 e nasceu com a proposta de ser concorrente das linguagens Python, R, MatLab e Fortran. Conforme gráfico da TIOBE (https://www.tiobe.com/tiobe-index/) Julia ocupa atualmente a 26º posição das linguagens mais populares.
Para saber mais sobre a linguagens recomendo a leitura dos seguintes artigos:
https://periodicos.ifpb.edu.br/index.php/principia/article/viewFile/1345/661
https://engenharia360.com/julia-linguagem-de-programacao-que-quer-substituir-python-r-e-matlab/
Parte I
A ideia deste tutorial não é fazer o aluno apredender a programar na linguagem Julia, mas sim ensiná-lo a operar comandos de cálculos estatísticas e de incerteza de medidas como uma calculadora avançada. Caso queira aprender Julia há um excelente material neste link: https://bit.ly/tutorial-basico-python-julia-fisica
Conhecimentos inicias da linguagem
Julia é case-sensitive, ou seja, variáveis com nomes maiúsculos e minúsculos são diferentes;
NÃO USE ACENTOS OU OUTROS RECURSOS SINTÁTICOS DA LÍNGUA PORTUGUESA PARA NOMES DE VARIÁVEIS. Apesar de funcionar no Jupyter, nem todos os interpretadores garantem a funcionalidade;
Julia é uma linguagem de tipagem dinâmica, logo o tipo de dado é definido quando o valor é atribuído a uma variável;
Não é necessário ponto e vírgula ao final de um comando. Se fizer isso, o resultado do cálculo será omitido;
A identação não é essencial na linguagem mas segui-la garante uma boa organização do código;
Nomes dos pacotes sempre começarão com letra maiúscula Ex: IJulia, Calculus, Interpolations, LinearAlgebra.
Conhecimentos inicias da interface Web Jupyter Notebook
O Jupyter é uma aplicação web derivado do IPython que significa JUlia, PYThon, and R . Resumidamente, é um ambiente computacional interativo que permite aos usuários criar "notebooks" que incluem: código, widgets interativos, gráficos, texto, equações, imagens, vídeo e outros. O Jupyter combina três componentes:
O Jupyter Notebook: um aplicativo web interativo para escrever e executar códigos de várias linguagens de programação.
Kernels: "Os kernels são processos específicos de linguagem de programação que funcionam independentemente e interagem com os aplicativos Jupyter e suas interfaces de usuário" (JUPYTER, 2017). Jupyter possui suporte para mais de 50 linguagens de programação (github.com/jupyter/jupyter/wiki/Jupyter-kernels), incluindo as mais populares em computação científica como Python, R, Julia e Scala. O
IJulia.jl
é kernel da linguagem Julia.Notebooks: são arquivos com extensão
ipynb
que contêm a estrutura do código no formato JSON. Cada notebook possui seu próprio kernel.
Caracteristicas:
Instalação fácil, já está presente no Anaconda (www.anaconda.com/download) e disponível para as plataformas Windows, Linux e MacOS.
Possui uma interface web avançada que permite combinar código-fonte, textos, fórmulas, figuras e multimídia em um único documento.
Pode ser executado em um computador local ou servidor remoto.
Suporta mais de 50 linguagens de programação, entre os quais R, Julia e Scala.
Permite compartilhar documentos.
Podemos executar e visualizar imagens, vídeos, textos LaTeX e Markdown, além de manipular os resultados em tempo real.
Documentos feitos em Jupyter Notebook podem ser exportados para diferentes formatos (PDF, HTML, reStructeredText, LaTeX, Slides, Markdown e outros)
Para aprender sobre interface Jupyter Notebook, acesse este vídeo: https://www.youtube.com/watch?v=dPb4acFiaYs
Comandos básicos
Matemática elementar
Trigonometria
Instalação de pacotes
Updating registry at `~/.julia/registries/General.toml`
Resolving package versions...
No Changes to `~/.julia/environments/v1.7/Project.toml`
No Changes to `~/.julia/environments/v1.7/Manifest.toml`
Resolving package versions...
No Changes to `~/.julia/environments/v1.7/Project.toml`
No Changes to `~/.julia/environments/v1.7/Manifest.toml`
Resolving package versions...
No Changes to `~/.julia/environments/v1.7/Project.toml`
No Changes to `~/.julia/environments/v1.7/Manifest.toml`
Resolving package versions...
No Changes to `~/.julia/environments/v1.7/Project.toml`
No Changes to `~/.julia/environments/v1.7/Manifest.toml`
Resolving package versions...
No Changes to `~/.julia/environments/v1.7/Project.toml`
No Changes to `~/.julia/environments/v1.7/Manifest.toml`
Resolving package versions...
No Changes to `~/.julia/environments/v1.7/Project.toml`
No Changes to `~/.julia/environments/v1.7/Manifest.toml`
Resolving package versions...
Updating `~/.julia/environments/v1.7/Project.toml`
[10745b16] + Statistics
No Changes to `~/.julia/environments/v1.7/Manifest.toml`
Resolving package versions...
No Changes to `~/.julia/environments/v1.7/Project.toml`
No Changes to `~/.julia/environments/v1.7/Manifest.toml`
Função
Basicamente, uma função em qualquer linguagem de programação, segue um conceito semelhante a uma função definida na matemática, no qual devemos substituir valores de uma variável em uma expressão algébrica e ela calcula o valor de saída. Dessa forma, podemos entender que uma função em uma linguagem de programação é como se fosse uma pequena "máquina" que recebe valores de entrada (chamados de argumentos), processa esses valores e devolve (return) um valor de saída.
Na linguagem Julia, uma função segue o seguinte esquema:
Exemplo 1
Criar uma função que calcule , sendo .
Exemplo 2
Criar uma função que calcule o volume de um bloco retangular de cimento. Medidas: largura = 5,0cm, comprimento = 12,0 cm e altura = 7,0 cm.
Cálculo com incertezas com dados não repetidos
Incerteza de medida com equipamentos analógicos e digitais
Quando se faz uma medida com algum equipamento de medida, sempre há uma incerteza associada à medida realizada conforme o tipo de equipamentos utilizado. Uma medida é definida como:
medida = () sendo:
-> medida realizada por um instrumento de medida
-> incerteza da escala ou de medição do instrumento de medida
A incerteza da escala ou de medição depende do equipamento e cada um pode apresentar uma maior ou menor incerteza. e quanto menor a incerteza melhor a medição. A incerteza depende da natureza tecnológica do instrumento.
De acordo com o equipamento, podemos observar que quanto menor a incerteza, melhor a precisão da medida. O GUM (Guia para a Expressão de Incerteza de Medição) informa que:
É geralmente suficiente fornecer a incerteza com até no máximo dois algarismos significativos, embora, em alguns casos, seja necessário reter algarismos adicionais para evitar erros de arredondamento nos cálculos subsequentes.
Equipamentos de medida analógicos
De acordo com PIACENTINI et al (2012) a incerteza de escala em equipamentos analógicos é dado por:
Para uma régua ou trena comum, a menor divisão de escala é de 1mm (0,01 cm), logo, a incerteza da escala de medição é: . A medida do comprimento do parafuso da figura medido com esta régua, apresenta medida definida como:
ParseError: KaTeX parse error: Expected 'EOF', got '_' at position 18: …ext{comprimento_̲parafuso} = (2,…
Equipamentos de medida não analógico:
De acordo com PIACENTINI et al (2012) a incerteza de escala em equipamentos não-analógicos é dado por:
Para um paquímetro, a incerteza da escala é
Propagação de incertezas
Quando obtemos medidas, é natural utilizá-las em alguma equação ou função. Sabendo que cada medida há uma incerteza de medida, a propagação de incerteza de uma função que relaciona várias grandezas , cada uma definida como , , ..., . A incerteza do cálculo realizado com esta função será dada pela raiz quadrada dos quadrados das derivadas parciais das grandezas mutiplicado pelo quadrado das incertezas:
Exemplo 3
Como calcular a área da base do bloco abaixo.
Exemplo 4
Criar uma função para calcular a área da base.
Cálculo com equações e sistemas lineares e não lineares
Exemplo 5
Calcular uma raiz da função , sendo , e
ArgumentError: The interval [a,b] is not a bracketing interval.
You need f(a) and f(b) to have different signs (f(a) * f(b) < 0).
Consider a different bracket or try fzero(f, c) with an initial guess c.
Stacktrace:
[1] assert_bracket
@ /ext/julia/depot/packages/Roots/neTBD/src/Bracketing/bracketing.jl:52 [inlined]
[2] init_state(::A42, F::Roots.Callable_Function{Val{1}, Val{false}, typeof(eq), Nothing}, x₀::Measurement{Float64}, x₁::Measurement{Float64}, fx₀::Measurement{Float64}, fx₁::Measurement{Float64}; c::Nothing, fc::Nothing)
@ Roots /ext/julia/depot/packages/Roots/neTBD/src/Bracketing/alefeld_potra_shi.jl:59
[3] init_state
@ /ext/julia/depot/packages/Roots/neTBD/src/Bracketing/alefeld_potra_shi.jl:49 [inlined]
[4] init_state(M::A42, F::Roots.Callable_Function{Val{1}, Val{false}, typeof(eq), Nothing}, x::Tuple{Measurement{Float64}, Measurement{Float64}})
@ Roots /ext/julia/depot/packages/Roots/neTBD/src/Bracketing/bracketing.jl:6
[5] #init#42
@ /ext/julia/depot/packages/Roots/neTBD/src/find_zero.jl:299 [inlined]
[6] init
@ /ext/julia/depot/packages/Roots/neTBD/src/find_zero.jl:289 [inlined]
[7] #solve#46
@ /ext/julia/depot/packages/Roots/neTBD/src/find_zero.jl:491 [inlined]
[8] find_zero(f::Function, x0::Tuple{Measurement{Float64}, Measurement{Float64}}, M::A42, p′::Nothing; p::Nothing, verbose::Bool, tracks::Roots.NullTracks, kwargs::@Kwargs{})
@ Roots /ext/julia/depot/packages/Roots/neTBD/src/find_zero.jl:220
[9] find_zero (repeats 2 times)
@ /ext/julia/depot/packages/Roots/neTBD/src/find_zero.jl:210 [inlined]
[10] find_zero(f::Function, x0::Tuple{Measurement{Float64}, Measurement{Float64}})
@ Roots /ext/julia/depot/packages/Roots/neTBD/src/find_zero.jl:243
[11] top-level scope
@ In[7]:4
Sistema de equações
Exemplo 6
Calcular o sistema linear formado por :
Cálculo diferencial e integral
Podemos definir a derivada em um ponto de uma função como sendo a taxa de variação instantânea de em relação a neste ponto. Geometricamente, a derivada de uma função em um ponto a fornece o coeficiente angular da reta tangente ao gráfico desta função no ponto .
A definição de integral de uma função no intervalo fechado é igual ao limite do somatório de cada um dos valores da função entre de 0 e n, multiplicados por
Integral indefinida:
Integral definida:
Tabela de derivadas e integrais
Exemplo 7
Dada a função sendo , calcular a derivada no ponto e a integral entre . Gráfico:
Importar arquivos de dados
Exemplo 8
Importar dos dados da aceleração g de Luzerna a partir de um arquivo CSV.
100×2 DataFrame
Row │ Tempo Aceleracao_g
│ Float64 Float64
─────┼─────────────────────────
1 │ 0.0471455 9.72004
2 │ 0.049651 9.72004
3 │ 0.0521566 9.72483
4 │ 0.0546622 9.73919
5 │ 0.0571466 9.76074
6 │ 0.0596055 9.76792
7 │ 0.0620603 9.73441
8 │ 0.0645153 9.70807
9 │ 0.0669702 9.72722
10 │ 0.0694255 9.74159
11 │ 0.0718806 9.73441
⋮ │ ⋮ ⋮
91 │ 0.268283 9.74877
92 │ 0.270737 9.72483
93 │ 0.273193 9.72483
94 │ 0.275647 9.74159
95 │ 0.278102 9.76074
96 │ 0.280557 9.76074
97 │ 0.283012 9.72722
98 │ 0.285468 9.70568
99 │ 0.287923 9.72962
100 │ 0.290378 9.75116
79 rows omitted
Cálculos estatísticos
Apresentação de referência: https://docs.google.com/presentation/d/1f1a3nfmnZo_kbTS421jrxrYnXLjTQx18q8gmW9fquYU/edit?usp=sharing
Histograma
O histograma é uma representação gráfica de uma distribuição de frequencia de dados por meio de retângulos. Para dados experimentais repetidos de uma grandeza física, o histograma tende, conforme o número de medições, a uma curva normal (formato de sino).
Média
A Média Aritmética de um conjunto de dados experimentais, é uma medida de tendência central, obtida somando todos os valores e dividindo o valor pelo número de dados desse conjunto. Indica o valor provável da medida.
Desvio Padrão
O desvio padrão é uma medida de dispersão de um conjunto de dados em torno de uma média. Quanto mais próximo de zero, melhor o dado do desvio padrão, ou seja, indica que os dados coletados do experimento estão mais uniforme possível.
Desvio da Média
Parte II
interpolação
Chapra e Canale (2008) definem a interpolação como a estimativa de valores entre pontos discretos bem conhecidos. A interpolação serve para determinar a correspondência -> y_{interp} entre dois pontos A(x1, y1) e B(x2, y2) conhecidos. Os resultados de medições experimentais fornecem, em geral, um conjunto de valores em pontos discreto. O processo de calcular os valores intermediários aos valores conhecidos é chamado interpolação. Os polinômios interpoladores de Lagrange formam uma classe específica de polinômios que podem ser usados para fazer o ajuste de um determinado conjunto de dados simplesmente a partir dos valores dos pontos (GILAT, 2008). A ideia da interpolação é determinar qual valor de correspondente entre e .
Exemplo 9
De acordo com o gráfico abaixo temos a variação das posições de um carro em função do tempo. Calcular a posição quando t = 3.5s
Referências Bibliográficas
CHAPRA, Steven C.; Canale. Raymond P. Métodos Numéricos para Engenharia, 5ª ed, McGraw Hill, 2008, ISBN: 978-85-86804-87-8.
GILAT, A.; Subramaniam, V. Métodos Numéricos para Engenheiros e Cientistas: Uma Introdução com Aplicações Usando o MATLAB. 1. ed. Bookman, 2008.
PIACENTINI, J.J. Introdução ao Laboratório de Física. Editora da UFSC, 2012.