fis045 métodos computacionais em física introdução prof
Post on 29-Oct-2021
3 Views
Preview:
TRANSCRIPT
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
top related