Física Computacional

O que é Física Computacional?

Física + Computação

Física + Computação

Resolver problemas da Física

Física + Computação

Resolver problemas da Física

Utilizando métodos Computacionais

Física Computacional

Conceitos

Física Computacional

Conceitos

Ciência

Física Computacional

Conceitos

Ciência

Tecnologia

Física Computacional

Conceitos

Ciência

Tecnologia

Ferramentas

Física Computacional

Conceitos

Ciência

Tecnologia

Ferramentas

Física Computacional

Conceitos

EDVAC, 1945

Física Computacional

Conceitos

Realização de muitos cálculos por segundo

Física Computacional

Conceitos

Porém, atualmente é possível realizar quadrilhões de operações por segundo

Física Computacional

Conceitos

Paralelamente. (Grid Computing)

Física Computacional

Conceitos

Com isso, criam-se novas possibilidades:

Física Computacional

Conceitos

Com isso, criam-se novas possibilidades:

Simulação de fenômenos subatômicos, metereológicos, galáticos

Física Computacional

Conceitos

Com isso, criam-se novas possibilidades:

Simulação de fenômenos subatômicos, metereológicos, galáticos

Para criar essas simulações são necessários conhecimentos em Física e em Computação

Física Computacional

Conceitos

Com isso, criam-se novas possibilidades:

Simulação de fenômenos subatômicos, metereológicos, galáticos

O conhecimento em Computação é utilizado como ferramenta para os avanços tanto em Física teórica como experimental, ao mesmo tempo em que conceitos da Física são aplicados à Teoria da computação.

 

Física Computacional

Conceitos

Com isso, criam-se novas possibilidades:

Simulação de fenômenos subatômicos, metereológicos, galáticos

Ciência

Tecnologia

Ferramentas

Física Computacional

Conceitos

CERN, LHC

Física Computacional

Conceitos

CERN, LHC Servers

Física Computacional

Atualidades

Hoje a Física Computacional não se resume a apenas métodos computacionais para cálculos físicos

Física Computacional

Atualidades

A Física Computacional também faz uso de métodos Computacionais para criação de novas teorias e tecnologias

Física Computacional

Atualidades

Exemplos de novos métodos Computacionais na Física:

Física Computacional

Atualidades

Exemplos de novos métodos Computacionais na Física:

Reconhecimento de padrões para auxílio na formulação de novas Hipóteses   

Física Computacional

Atualidades

Exemplos de novos métodos Computacionais na Física:

Visão Computacional

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

class ode():

    def __init__(self, f, jac=None):
        self.stiff = 0
        self.f = f
        self.jac = jac
        self.f_params = ()
        self.jac_params = ()
        self._y = []

    @property
    def y(self):
        return self._y

    def set_initial_value(self, y, t=0.0):
        """Set initial conditions y(t) = y."""
        if isscalar(y):
            y = [y]
        n_prev = len(self._y)
        if not n_prev:
            self.set_integrator('')  # find first available integrator
        self._y = asarray(y, self._integrator.scalar)
        self.t = t
        self._integrator.reset(len(self._y), self.jac is not None)
        return self

    def set_integrator(self, name, **integrator_params):
       
        integrator = find_integrator(name)
        if integrator is None:
            # FIXME: this really should be raise an exception. Will that break
            # any code?
            warnings.warn('No integrator name match with %r or is not '
                'available.' % name)
        else:
            self._integrator = integrator(**integrator_params)
            if not len(self._y):
                self.t = 0.0
                self._y = array([0.0], self._integrator.scalar)
            self._integrator.reset(len(self._y), self.jac is not None)
        return self

    def integrate(self, t, step=0, relax=0):
        """Find y=y(t), set y as an initial condition, and return y."""
        if step and self._integrator.supports_step:
            mth = self._integrator.step
        elif relax and self._integrator.supports_run_relax:
            mth = self._integrator.run_relax
        else:
            mth = self._integrator.run

        try:
            self._y, self.t = mth(self.f, self.jac or (lambda: None),
                                self._y, self.t, t,
                                self.f_params, self.jac_params)
        except SystemError:
            # f2py issue with tuple returns, see ticket 1187.
            raise ValueError('Function to integrate must not return a tuple.')

        return self._y

    def successful(self):
        """Check if integration was successful."""
        try:
            self._integrator
        except AttributeError:
            self.set_integrator('')
        return self._integrator.success == 1

    def set_f_params(self, *args):
        """Set extra parameters for user-supplied function f."""
        self.f_params = args
        return self

    def set_jac_params(self, *args):
        """Set extra parameters for user-supplied function jac."""
        self.jac_params = args
        return self

    def set_solout(self, solout):
       
        if self._integrator.supports_solout:
            self._integrator.set_solout(solout)
        else:
            raise ValueError("selected integrator does not support solout,"
                            + " choose another one")

Equações Diferenciais Ordinárias

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

Transformada de Fourier

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

Transformada de Fourier (ex: .WAVE, .MP3)

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

Transformada de Fourier (ex: .WAVE, .MP3)

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

Transformada de Fourier (ex: .WAVE, .MP3)

def _raw_fft(a, n=None, axis=-1, init_function=fftpack.cffti,
             work_function=fftpack.cfftf, fft_cache = _fft_cache ):
    a = asarray(a)

    if n is None:
        n = a.shape[axis]

    if n < 1:
        raise ValueError("Invalid number of FFT data points (%d) specified." % n)

    try:
        wsave = fft_cache.setdefault(n, []).pop()
    except (IndexError):
        wsave = init_function(n)

    if a.shape[axis] != n:
        s = list(a.shape)
        if s[axis] > n:
            index = [slice(None)]*len(s)
            index[axis] = slice(0, n)
            a = a[index]
        else:
            index = [slice(None)]*len(s)
            index[axis] = slice(0, s[axis])
            s[axis] = n
            z = zeros(s, a.dtype.char)
            z[index] = a
            a = z

    if axis != -1:
        a = swapaxes(a, axis, -1)
    r = work_function(a, wsave)
    if axis != -1:
        r = swapaxes(r, axis, -1)

    fft_cache[n].append(wsave)

    return r

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

Redes Neurais Artificiais (ML/AI problem)

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

Redes Neurais Artificiais (ML/AI problem)

import math
from numpy import random, array
from random import choice
import matplotlib.pyplot as plt

class Perceptron():
    
        """
    this is the thereshold to activate the unit 
    """
    def activation(self,x):
        return 1/(1 + math.exp(-x))

    def linear_combination(self, X):
        total = 0
        for i in xrange(len(self.weights)):
            total += self.weights[i] * X[i]
        return total
    
    def unit_output(self, X):
        return self.activation(self.linear_combination(X))

    def train(self, training_data, epochs):
        
        self.learning_rate = 0.5
        self.errors = []

        # initializing weights
        self.weights = random.rand(len(training_data[1][0]))
        
        for i in xrange(epochs):
            X, y = choice(training_data)
            # > calculate output with current weight
            output = self.unit_output(X)
            # > calculate error rate (t - o)
            error_rate = y - output
            self.errors.append(error_rate)
            print 'the X: ', X
            print 'output: ',output
            print 'correct target: ', y
            # > apply learning rule which will update weights
            self.weights += self.learning_rate * error_rate * X

    def predict(self,X):
        y = self.unit_output(X)
        return y
                

        training_data = [
                (array([0,0,1]), 0),
                (array([0,1,1]), 0),
                (array([1,0,1]), 0),
                (array([1,1,1]), 1),
                
        ]

p = Perceptron()

p.train(training_data, 2000)
print p.predict([1,0,1])
plt.plot(p.errors)
plt.ylabel('errors')
plt.xlabel('epochs')
plt.show()

Física Computacional

Atualidades

Além dos antigos (porém ainda usados) métodos:

Redes Neurais Artificiais (ML/AI problem)

Física Computacional

Ferramentas

Hoje em dia há diversas ferramentas de alta performance para lidar com o processamento de alto nível da Física Computacional

Física Computacional

Ferramentas

Linguagens

Física Computacional

Ferramentas

Linguagens

Ops/Structures

  • Antigamente vista como uma linguagem "lenta"

  • O Global Interpreter Lock(GiL) causa a lentidão 

  • hoje em dia há soluções para contornar o GiL e aumentar a performance do Python, utilizando paralelismo e concorrência

  • Velocidade de desenvolvimento incomparável

  • Framework do Python para Computação Científica

  • Performance excelente, pois faz chamadas diretas para funções em C e Fortran

  • Utilizado, principalmente, para distribuição de computações

  • Melhor ferramenta, atualmente, para computação distribuída. Está sendo usado pela NASA, Facebook, Twitter, Netflix e mais

  • Utilizado, principalmente, para distribuição de computações

  • Melhor ferramenta, atualmente, para computação distribuída. Está sendo usado pela NASA, Facebook, Twitter, Netflix e mais

points = spark.textFile(...).map(parsePoint).cache()
w = numpy.random.ranf(size = D) # current separating plane
for i in range(ITERATIONS):
    gradient = points.map(
        lambda p: (1 / (1 + exp(-p.y*(w.dot(p.x)))) - 1) * p.y * p.x
    ).reduce(lambda a, b: a + b)
    w -= gradient
print "Final separating plane: %s" % w
  • Utilizado, principalmente, para distribuição de computações

  • Melhor ferramenta, atualmente, para computação distribuída. Está sendo usado pela NASA, Facebook, Twitter, Netflix e mais

Física Computacional

Educação

Muitas Universidades já disponibilizam graduação em Física Computacional

Física Computacional

Educação

Muitas Universidades já disponibilizam graduação em Física Computacional

O curso aborda Física, Matemática, Linguística, Computação e Neurociência

Física Computacional

Educação

Muitas Universidades já disponibilizam graduação em Física Computacional

O Profissional pode trabalhar em modelagem computacional, criação de simulações, predições, implementação de novas tecnologias e muito mais. 

Física Computacional

Educação

Os profissionais da Física computacional, por possuírem uma formação de natureza interdisciplinar, muitas vezes participam de pesquisas envolvendo outras áreas do conhecimento além da Física e da Ciência da computação

Física Computacional

Educação

Alguns exemplos de áreas nas quais os Físicos Computacionais podem trabalhar:

Atuação em universidades e institutos de pesquisa científica básica ou aplicada nas áreas de física ou multidisciplinares

Física Computacional

Educação

Alguns exemplos de áreas nas quais os Físicos Computacionais podem trabalhar:

Atuação na indústria automobilística, aeronáutica e naval. A simulação computacional pode ajudar no desenvolvimento de veículos de melhor performance aerodinâmica, enérgica  e  ecológica

Física Computacional

Educação

Alguns exemplos de áreas nas quais os Físicos Computacionais podem trabalhar:

Atuação em empresas fabricantes de softwares e games. O conhecimento em Física pode levar um bom Engenheiro de Software a produzir softwares que simulem fenômenos físicos ou produzir games mais próximos da realidade.

Obrigado!

Universidade Salvador

Ciência da Computação

Física Aplicada à Computação

Membros: Lucas Santos, Rodrigo Araújo, Igor Cordeiro, Rafael de Andrade

Fontes

Made with Slides.com