Cálculo Numérico
Universidade Federal do Pará
Matrizes provenientes de EDPs são grandes e esparsas. Métodos diretos seriam caros e destruiriam a esparsidade (preenchimento).
Métodos iterativos partem de \(\mathbf{x}^{(0)}\) e geram aproximações sucessivas, custando \(O(n)\) por iteração para matrizes esparsas.
Decompõe-se \(A = D + L + U\) (diagonal, estritamente inferior e superior). Isola-se \(x_i\) na \(i\)-ésima equação:
\[x_i^{(k+1)} = \frac{1}{a_{ii}}\!\left(b_i - \sum_{j\neq i} a_{ij}\,x_j^{(k)}\right)\]
Usa imediatamente os valores já atualizados na mesma iteração — converge mais rápido que Jacobi:
\[x_i^{(k+1)} = \frac{1}{a_{ii}}\!\left(b_i - \sum_{j<i} a_{ij}\,x_j^{(k+1)} - \sum_{j>i} a_{ij}\,x_j^{(k)}\right)\]
Condição suficiente: \(A\) diagonalmente dominante por linhas:
\[|a_{ii}| > \sum_{j\neq i} |a_{ij}|\]
Condição necessária e suficiente: raio espectral da matriz de iteração
\[\rho(M) < 1\]
A sobre-relaxação sucessiva (SOR) acelera Gauss-Seidel com um fator \(\omega \in (1,2)\):
\[x_i^{(k+1)} = (1-\omega)\,x_i^{(k)} + \omega\, x_i^{\text{GS}}\]
O número de condição mede a amplificação de erros em \(A\mathbf{x}=\mathbf{b}\):
\[\kappa(A) = \|A\|\,\|A^{-1}\| \;\geq\; 1\]
Important
\(\kappa(A)\gg 1\) indica sistema mal condicionado: a solução é sensível a perturbações em \(A\) e \(\mathbf{b}\), independentemente do método.
import numpy as np
from scipy.sparse import csr_matrix
from scipy.sparse.linalg import spsolve, cg
# Matriz esparsa (formato comprimido)
A = csr_matrix([[4., -1., 0.], [-1., 4., -1.], [0., -1., 4.]])
b = np.array([1., 5., 0.])
x_dir = spsolve(A, b) # direto esparso
x_it, info = cg(A, b, rtol=1e-10) # gradiente conjugado (SPD)