24

FIS045 Métodos Computacionais em física Introdução Prof

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 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

Page 2: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 3: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 4: FIS045 Métodos Computacionais em física Introdução Prof

Introdução: simulações cientí�ca

Física Computacional

Page 5: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 6: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 7: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 8: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 9: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 10: FIS045 Métodos Computacionais em física Introdução Prof

Introdução: Programa e bibliogra�a

Visite a pagina do curso

I http://www.�sica.ufmg.br/ guerrero/�s045.html

Física Computacional

Page 11: FIS045 Métodos Computacionais em física Introdução Prof

Maos na obra

I Olá mundo em C++, Fortran e Python

Física Computacional

Page 12: FIS045 Métodos Computacionais em física Introdução Prof

Declaração de variaveis inteiras e reais

Física Computacional

Page 13: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 14: FIS045 Métodos Computacionais em física Introdução Prof

Variaveis inteiras

Como temos em total 31 bits:

417)10 = (00000000000000000000000110100001)2 (3)

Física Computacional

Page 15: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 16: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 17: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 18: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 19: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 20: FIS045 Métodos Computacionais em física Introdução Prof

Caracteristicas adicionais de C++ e Fortran

Operadores

Física Computacional

Page 21: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 22: FIS045 Métodos Computacionais em física Introdução Prof

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

Page 23: FIS045 Métodos Computacionais em física Introdução Prof

Macros em C++

Macros de funções globais em C

Em C++ se utiliza as funções inline:

Física Computacional

Page 24: FIS045 Métodos Computacionais em física Introdução Prof

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