Quadratura Numérica
LNCC - Laboratório Nacional de Computação Científica
Para calcular as integrais nas matrizes locais, usamos regras de quadratura numérica.
Princípio Geral¶
Uma regra de quadratura aproxima uma integral por uma soma ponderada:
∫K^g(x^)dx^≈q=1∑nqwqg(x^q) onde:
x^q são os pontos de quadratura (quadrature points)
wq são os pesos de quadratura (quadrature weights)
nq é o número de pontos de quadratura
Quadratura em 1D (Gauss-Legendre)¶
Para o intervalo [0,1], usamos pontos e pesos de Gauss-Legendre transformados.
Gauss-1 (ponto médio)¶
x^0=21,w0=1 Exata para polinômios de grau ≤1.
Gauss-2¶
x^0=21−63,x^1=21+63 w0=21,w1=21 Exata para polinômios de grau ≤3.
Gauss-3¶
x^0=21−1015,x^1=21,x^2=21+1015 w0=185,w1=94,w2=185 Exata para polinômios de grau ≤5.
Quadratura em Triângulos¶
Para o triângulo de referência K^={(x^,y^):x^,y^≥0,x^+y^≤1}.
Ordem 1 (centroide)¶
(x^0,y^0)=(31,31),w0=21 Exata para polinômios de grau ≤1.
Ordem 2 (3 pontos)¶
(x^i,y^i)=(61,61),(32,61),(61,32) wi=61,i=0,1,2 Exata para polinômios de grau ≤2.
Ordem 3 (4 pontos)¶
(x^0,y^0)=(31,31),w0=−329 (x^i,y^i)=(51,51),(53,51),(51,53),wi=9625 Exata para polinômios de grau ≤3.
Quadratura em Quadriláteros¶
Para o quadrado de referência K^=[0,1]×[0,1], usamos produto tensorial de regras 1D.
Gauss 2×2 (4 pontos)¶
Para Gauss-2 em cada direção:
x^i=21±63,y^j=21±63 Pontos:
(x^,y^)ij=(21−63,21−63),… Pesos:
wij=41 Exata para polinômios de grau ≤3 em cada variável.
Gauss 3×3 (9 pontos)¶
Para Gauss-3 em cada direção, obtemos 9 pontos. Exata para polinômios de grau ≤5 em cada variável.
Escolha da Ordem de Quadratura¶
Para integrar corretamente:
Matriz de rigidez: Para P1/Q1, o integrando tem grau 0 (gradientes constantes para P1) ou 1 (Q1). Para P2, grau 2.
Matriz de massa: Para P1, o integrando tem grau 2. Para P2, grau 4. Para Q1, grau 2 em cada variável.
Vetor de carga: Depende do grau de f e das funções de forma.
Regra prática: Use ordem de quadratura ≥ grau do integrando dividido por 2 (arredondado para cima).
Implementação no fempack¶
O módulo fempack.quadrature fornece:
gauss_legendre_interval(n): Pontos e pesos para intervalo
triangle_quadrature(order): Pontos e pesos para triângulo
quad_quadrature(n): Pontos e pesos para quadrilátero (produto tensorial)
Exemplo:
from fempack.quadrature import gauss_legendre_interval
points, weights = gauss_legendre_interval(2) # Gauss-2