Métodos Computacionais Para Geração de Sinais Aleatórios Aplicados a Sistemas De
FIS045 Métodos Computacionais em física Introdução Prof ...
Transcript of FIS045 Métodos Computacionais em física Introdução Prof ...
FIS045
Métodos Computacionais em físicaIntrodução
Prof. Gustavo Guerrero (sala 4120)
Universidade Federal de Minas Gerais
2014
Física Computacional
Introdução: a trindade fundamental
Natureza da ciência: Tudo emciência tém a ver com modelos;olhamos a natureza, a vida real,e tentamos fazer um modelodela. Usamos esses modelospara preveer futuros eventos navida real. Se esse modelo nãobate com as observações,trocamos de modelo. Repetimosin�nitamente.
Em física computacional omodelo é construido nocomputador. É delimitado por:
I leis da natureza,I condições iniciais e de
contorno,I in�uências externas.
Após a representação numéricadessas leis da natureza, Esseselementos são transmitidos aocomputador em forma de código(escrito em C++, Fortran ouPython).A trindade da �gura caracterizaa física computacional.
Física Computacional
Introdução
I Campos como a ciência de materiais, bioinformatica, químicacomputacional, física ou astrofísica fortaleceram-se com odesenvolvimento da modelagem computacional.
I Esses campos reconhecem a importância das simulações comoum método para ganhar conhecimento em diferentes sistemasestudados. Especialmente em áreas onde respostas analíticasnão podem ser atingidas devido à complexidade do problema,ou quando os experimentos são difíceis ou tém altos costos (ej.astrofísica).
I Física computacioal é hoje em dia tão importante quanto afísica teórica ou a física experimental.
Física Computacional
Introdução: simulações cientí�ca
Física Computacional
Introdução: simulações cientí�ca
"Visualization Night"competition: US department of energy.
I Blood FlowI Magnitude-8 EarthquakeI Stellar MagnetismI Active Galactic Nuclei MagnetismI Supernova Shockwave MagnetismI Laser-Plasma AcceleratorI Early Galaxy RadiationI Carbon-Capturing TurbinesI Overhead Threat Protection SystemI Wind-Farm Turbulence
Física Computacional
Introdução: linguagens
Nível de uma linguagem deprogramação
I alto nível: C++, Fortran,Pascalmenos e�cientes no uso dememoria, rápida, precisacompilar baixa di�culdadepara programar
I baixo nível: linguagem demaquina, assemblye�cientes no uso dememoria, rápida, nãoprecisa compilar, altadi�culdade para programar
I super alto nível: Python,IDL, matlab, pylab.ine�cientes no uso dememoria, lenta, nãoprecisa compilar, fácil deprogramar.
Física Computacional
Introdução: objetivos
Mas a velocidade não é tudo na hora de escolher. Cada linguagemtems seus pontos positivos e negativos. Ej. matlab ou pythonpossuem livrarias que permitem analisar e visualizar resultados comfacilidade. Por outro lado, entender detalhes numéricos comoestabilidade, precisão e aplicabilidade precisam do conhecimentodos métodos numéricos. Nesse sentido, as linguagens C++ eFortran são apropriadas.Assim como na vida, na física computacional ser poliglota é umagrande vantagem.
I Melhor compreensão da física aprendida em outros cursos,I motivar o descobrimento da física desde o ponto de vista do
pesquisador,I Aprender novas areas da física e os métodos numéricos para
seu estudo.
Física Computacional
Introdução: O que vamos precisar
Para conseguir programar é necessario conhecer um sistemaoperacional. De preferencia Linux (any �avor is good).
I Editor de texto: Vim (recomendado), Emacs, PicoI Precisamos conhecer os comandos fundamentais da shell: ln,
cp, mv, cat, grep (grep é muito necessário)I Compiladores: C++ , Fortran. Os compiladores livres g++ e
gfortran da GNU são su�cientemente bons para atingir osobjetivos do curso. Intel disponibiliza os compiladores icc eifortran para estudantes universitarios.
I Software de visualização: gnuplot, python-mathplotlib, idl,matlab, etc.
I Muita dedicação (com a recompensa de que um código bemescrito e produzindo resultados é altamente satisfatorio)
Física Computacional
Introdução: Projetos a serem avaliados
Os projetos podem ser realizados em grupos de máximo 3 alunos,onde todos devem contribuir à programação de um código e aescrita de um relatorio. Cada projeto vale 20% da nota �nal. Paracada relatorio serão sorteados alguns grupos para fazer umaavaliação oral do trabalho. A lingagem escolhida é livre mas serãoconsiderados como pontos para a evaluação: originalidade naformulação do problema, e�ciencia do código e visualização deresultados.
1. Equação de Poisson usando decomposição LU e solverstridiagonais.
2. Equação de Schroedinger para dois eletrons.
3. Modelo do sistema solar resolvendo equações diferenciaisordinarias.
4. Transições de fase em sistemas magnéticos.
5. TBD
Física Computacional
Introdução: Programa e bibliogra�a
Visite a pagina do curso
I http://www.�sica.ufmg.br/ guerrero/�s045.html
Física Computacional
Maos na obra
I Olá mundo em C++, Fortran e Python
Física Computacional
Declaração de variaveis inteiras e reais
Física Computacional
Variaveis inteiras
C++: short int, int, long int, long long intFortran: INTEGER(2), INTEGER(4)O comando sizeof(type) retorna o número de bits de uma variável.um desses bits é usado para guardar o sinal da variável, os restantespara o seu valor, que pode ir de 0 a 2#de bits − 1 = 2.147.483.647O computador representa um número em sistema binario, porexemplo o número 417 é representado em sistema decimal assim:
417 = 4× 102 + 1× 101 + 7× 100 . (1)
Em sistema binario
(417)10 = an2n + an−12
n−1 + ...+ a020 , (2)
(417)10 = (110100001)2(110100001)2 = 1× 28 + 1× 27 + 0× 26 + 1× 25 + 0× 24 + 0× 23
+ 0× 22 + 0× 21 + 1× 20
Física Computacional
Variaveis inteiras
Como temos em total 31 bits:
417)10 = (00000000000000000000000110100001)2 (3)
Física Computacional
Variaveis inteiras, hands on
I Escreva um código que escreva um numero qualquer em formadecimal. Usaremos os operadores modulo(%, MOD) e divisão(/).
I Escreva um código que calcule 2N × 2N , 2N × (2N − 1) e2N − 1.
Física Computacional
Variaveis reaisC++: �oat, double, long double,Fortran: REAL(4), REAL(8)Se quisermos escrever o numero 9.90625 na notação de bits
9.90625 = 0.990625× 101 (4)
x = ±r × 10n , com 1/10 < r < 1 .
Em representação binaria
x = ±q × 2m , com 1/2 < q < 1 . (5)
Para a máquina, o número é representado como:
x = (−1)s ×mantissa× 2exponent , (6)
onde s é o bit do sinal, o exponente da a magnitude do número e amantisa é o numero mesmo.
mantissa = (0.a−1a−2...a−n)n = a−12−1+a−22
−2+ ...+an2n (7)
Física Computacional
Variaveis reais
Para um real de 4 bytes de memoria (32 bits), 8 bits são reservadospara o exponente, 1 bit para o sinal, e 23 bits para a mantissa. Istoimplica uma precisão de 1/223 = 10−7. O intervalo do exponentevai de 2−128 = 2.9× 10−39 a 2127 = 3.4× 1038 (o numero 128bem do fato que temos 8 bits).Se representamos a mantisa como q = (1.f )2 com 1 < q < 2,conhecendo que o bit principal esta nessa posição, podemos ganharum extra bit e ter uma mantisa de 24 bits.
(1.a−1a−2...a−n)n = 1× 20 + a−12−1 + a−22
−2 + ...+ an2−23 (8)
Física Computacional
Variaveis reais
Exemplo: Expresse o seguinte número binario em notação decimal:
(10111110111101000000000000000000)2 (9)
O primeiro bit: 1 é o sinal (0 = positivo, 1 = negativo). Os 8digitos seguintes, 01111101 são o exponente que resulta em 125. Jáque −128 < m ≤ 127, o exponente será 125− 127 = −2, ou sejateremos 2−2. Finalmente, considerando também a mantissa, temos:
−2−2(1× 20 + 12−1 + 1× 2−2 + 1× 2−3 + 0× 2−4 + 1× 2−5)
(10111110111101000000000000000000)2 = (−0.4765625)10 (10)
Física Computacional
Variaveis reais hands on
Para entender possíveis erros associados a representação denúmeros reais vamos escrever um programa que calcule e−x quando0 < x < 100.
I usando a expansão
e−x =∞∑n=0
(−1)nxn
n!(11)
O limite de termos da expansão é de�nido usando uma variável global de truncamento (usando
#de�ne em C++ e REAL(4), PARAMETER, PUBLIC em Fortran). O termo (−1)n pode ser
calculado usando uma função macro em C++: #de�ne PHASE(a) (1 - 2 * (abs(a) % 2)). Quem
trabalhe em C++ deve criar também uma função para calcular o factorial.
I e outro usando equação recursiva
e−x =∞∑n=0
Sn , (12)
sn = −sn−1x
n
Física Computacional
Caracteristicas adicionais de C++ e Fortran
Operadores
Física Computacional
Pointers e arrays em C++
Pointers
I int idade de�ne uma variável inteira com nome idade.Determina um endereço na memoria onde o valor da variávelidade é armazenado
I &idade é o endereço de memoria onde a varíavel idade estalocalizada
I int* pointer de�ne uma varável inteira que é um apontadore reserva na memora um endereço onde essa variável éarmazenada
Veja os exemplos
Física Computacional
Macros em C++
Em C é possível de�nir Macros. São constantes globais:
Em C++ o uso desse tipo de macros não é recomendado,recomenda-se a declaração de variáveis constantes:const int ONE = 1const double PI = 3.14159265359
Física Computacional
Macros em C++
Macros de funções globais em C
Em C++ se utiliza as funções inline:
Física Computacional
Exercicios sugeridos
Quem realizar um (1) ou dois (2) dos exercicios propostos a seguir,pode ganhar até 12% da nota �nal:exercicios cap 2, livro do Morten: 2.1, 2.9, 2.10, 2.11
Física Computacional