Métodos numéricos com Python: fundamentos da computação científica

Grande parte dos problemas modernos da computação depende de aproximações matemáticas.

Em diversas situações:

  • soluções analíticas são complexas;
  • equações não possuem solução exata;
  • cálculos seriam inviáveis manualmente.

É nesse contexto que entram os métodos numéricos.

Métodos numéricos são técnicas matemáticas utilizadas para resolver problemas através de aproximações computacionais.

Eles estão presentes em:

  • engenharia;
  • física;
  • machine learning;
  • gráficos computacionais;
  • modelagem científica;
  • simulações;
  • ciência de dados.

Neste artigo vamos explorar os principais conceitos e métodos utilizados em computação numérica utilizando Python.


O que é computação numérica?

Computação numérica é a área responsável por resolver problemas matemáticos utilizando algoritmos computacionais.

Em vez de trabalhar apenas com soluções exatas, métodos numéricos trabalham com:

  • aproximações;
  • estimativas;
  • convergência;
  • precisão.

Fluxo da computação numérica

flowchart LR
    Problema[Problema Matematico]
    Modelo[Modelo Numerico]
    Algoritmo[Algoritmo]
    Computador[Computacao]
    Resultado[Resultado Aproximado]

    Problema --> Modelo
    Modelo --> Algoritmo
    Algoritmo --> Computador
    Computador --> Resultado

Representação numérica em computadores

Computadores representam números utilizando bits.

Por isso, nem todos os valores reais conseguem ser armazenados exatamente.

Exemplo clássico

print(0.1 + 0.2)

Resultado:

0.30000000000000004

Erros numéricos

Métodos computacionais sempre possuem algum nível de erro.

Tipos comuns

TipoDescrição
Erro absolutoDiferença direta
Erro relativoDiferença proporcional
Erro de truncamentoAproximações matemáticas
Erro de arredondamentoLimitação computacional

Fluxo de erro numérico

flowchart TD
    Numero[Numero Real]
    Binario[Representacao Binaria]
    Aproximacao[Aproximacao]
    Resultado[Resultado Computacional]

    Numero --> Binario
    Binario --> Aproximacao
    Aproximacao --> Resultado

Python e computação científica

Python possui um ecossistema extremamente forte para computação numérica.

Bibliotecas principais

BibliotecaObjetivo
NumPyComputação numérica
SciPyMétodos científicos
MatplotlibVisualização
SymPyMatemática simbólica

Instalando bibliotecas

pip install numpy scipy matplotlib sympy

Vetores e matrizes

Grande parte da computação numérica depende de vetores e matrizes.

Exemplo com NumPy

import numpy as np

vetor = np.array([1,2,3])

Matrizes

matriz = np.array([
    [1,2],
    [3,4]
])

Álgebra linear

Álgebra linear é fundamental em:

  • machine learning;
  • gráficos computacionais;
  • física;
  • engenharia.

Fluxo da álgebra linear

flowchart LR
    Vetores[Vetores]
    Matrizes[Matrizes]
    Operacoes[Operacoes]
    Resultado[Resultado]

    Vetores --> Operacoes
    Matrizes --> Operacoes
    Operacoes --> Resultado

Sistemas lineares

Um dos problemas mais comuns da computação científica é resolver sistemas lineares.

Exemplo

$$ \begin{cases} 2x + y = 8 \ \newline x + 3y = 13 \end{cases} $$


Resolvendo sistemas com NumPy

A = np.array([
    [2,1],
    [1,3]
])

b = np.array([8,13])

x = np.linalg.solve(A, b)

print(x)

Métodos iterativos

Métodos iterativos trabalham através de aproximações sucessivas.

Exemplos

  • Jacobi;
  • Gauss-Seidel;
  • Newton-Raphson.

Método de Jacobi

O método de Jacobi utiliza aproximações sucessivas para resolver sistemas lineares.

Fluxo simplificado

flowchart TD
    Chute[Chute Inicial]
    Iteracao[Iteracao]
    Aproximacao[Aproximacao]
    Convergencia{Convergiu?}

    Chute --> Iteracao
    Iteracao --> Aproximacao
    Aproximacao --> Convergencia
    Convergencia -->|Nao| Iteracao

Método de Newton-Raphson

O método de Newton é utilizado para encontrar raízes de funções.

Fórmula

$$ x_{n+1} = x_n - \frac{f(x_n)}{f’(x_n)} $$


Fluxo do método de Newton

flowchart TD
    Chute[Valor Inicial]
    Funcao[Funcao]
    Derivada[Derivada]
    NovoValor[Nova Aproximacao]

    Chute --> Funcao
    Funcao --> Derivada
    Derivada --> NovoValor

Exemplo em Python

import math

x = 1

for i in range(5):
    x = x - ((x**2 - 2)/(2*x))

print(x)

Interpolação

Interpolação busca estimar valores intermediários.

Aplicações

  • gráficos;
  • simulações;
  • modelagem;
  • processamento de sinais.

Interpolação linear

A interpolação linear utiliza uma reta entre dois pontos.

$$ f(x) = f(x_0) + \frac{f(x_1) - f(x_0)}{x_1 - x_0}(x - x_0) $$


Integração numérica

Nem sempre integrais possuem solução analítica simples.

Por isso, métodos numéricos são utilizados.

Métodos comuns

MétodoCaracterística
TrapéziosAproximação simples
SimpsonMaior precisão
Monte CarloProbabilístico

Método dos trapézios

$$ \int_a^b f(x),dx \approx \frac{h}{2}\bigl(f(a) + f(b)\bigr) $$


Fluxo da integração numérica

flowchart LR
    Funcao[Funcao]
    Divisao[Divisao Intervalo]
    Aproximacao[Aproximacao]
    Resultado[Integral Aproximada]

    Funcao --> Divisao
    Divisao --> Aproximacao
    Aproximacao --> Resultado

Derivação numérica

Também podemos aproximar derivadas.

Aproximação simples

$$ f’(x) \approx \frac{f(x + h) - f(x)}{h} $$


Equações diferenciais

Equações diferenciais aparecem em:

  • física;
  • engenharia;
  • biologia;
  • economia.

Método de Euler

O método de Euler é utilizado para aproximar soluções de equações diferenciais.

Fórmula

$$ y_{n+1} = y_n + h,f(x_n, y_n) $$


Fluxo do método de Euler

flowchart TD
    ValorInicial[Valor Inicial]
    Passo[Passo h]
    Aproximacao[Aproximacao]
    Resultado[Resultado]

    ValorInicial --> Passo
    Passo --> Aproximacao
    Aproximacao --> Resultado

Visualização de resultados

Visualização é extremamente importante em computação científica.

Exemplo com Matplotlib

import matplotlib.pyplot as plt

plt.plot([1,2,3],[1,4,9])
plt.show()

Simulações

Métodos numéricos são muito utilizados em simulações.

Áreas comuns

  • clima;
  • física;
  • engenharia;
  • IA;
  • modelagem científica.

Pipeline científico

flowchart LR
    Modelo[Modelo Matematico]
    Dados[Dados]
    Metodo[Metodo Numerico]
    Computacao[Computacao]
    Analise[Analise]

    Modelo --> Metodo
    Dados --> Metodo
    Metodo --> Computacao
    Computacao --> Analise

Computação numérica e machine learning

Grande parte do machine learning moderno depende diretamente de métodos numéricos.

Exemplos

  • gradiente descendente;
  • otimização;
  • álgebra linear;
  • derivadas;
  • funções de custo.

Conceitos importantes aprendidos

Projetos de computação numérica ajudam bastante no aprendizado de:

  • matemática aplicada;
  • álgebra linear;
  • otimização;
  • algoritmos científicos;
  • modelagem computacional.

Possíveis evoluções

Depois dos conceitos básicos, várias áreas podem ser exploradas.

Exemplos

  • machine learning;
  • computação paralela;
  • CUDA;
  • simulações físicas;
  • computação científica avançada.

Conclusão

Métodos numéricos são fundamentais para a computação moderna.

Grande parte das aplicações científicas, gráficas e de inteligência artificial depende de aproximações computacionais.

Mesmo estudos introdutórios ajudam bastante no entendimento de:

  • modelagem matemática;
  • algoritmos científicos;
  • precisão computacional;
  • otimização.

Além disso, computação numérica cria uma excelente base para áreas como ciência de dados, IA, engenharia e computação científica.


Referências