Ajude a manter o site livre, gratuito e sem propagandas. Colabore!
Vamos fazer a introdução do método de elementos finitos pela aplicação no seguinte problema de valor de contorno (problema forte): encontrar tal que
| (1.63) | |||
| (1.64) |
onde é uma função dada (fonte).
A derivação de um método de elementos finitos inicia-se da formulação fraca444Uma representação integral da equação diferencial. do problema em um espaço de funções apropriado. No caso do problema (1.63)-(1.64), tomamos o espaço
| (1.65) |
Ou seja, é tal que , i.e. e , bem como satisfaz as condições de contorno do problema.
A formulação fraca é obtida multiplicando-se a equação diferencial (1.63) por uma função teste (arbitrária) e integrando-se por partes, i.e.
| (1.66) | |||
| (1.67) |
Donde, das condições de contorno das funções de teste , temos
| (1.69) |
Desta forma, o problema fraco associado a (1.63)-(1.64) lê-se: encontrar tal que
| (1.70) |
onde
| (1.71) | |||
| (1.72) |
são chamadas de forma bilinear e forma linear, respectivamente. A formulação fraca construida aqui é chamada de formulação de Galerkin555Boris Galerkin, 1871 - 1945, engenheiro e matemático soviético. Fonte: Wikipédia., em que o espaço da solução é igual ao espaço das funções teste.
Uma formulação de elementos finitos é um aproximação do problema fraco (1.70) em um espaço de dimensão finita. Aqui, vamos usar o espaço das funções afins por partes em que satisfazem as condições de contorno, i.e.
| (1.73) |
Então, substituindo o espaço pelo subespaço em (1.70), obtemos o seguinte problema de elementos finitos: encontrar tal que
| (1.74) |
Observemos que o problema (1.74) é equivalente a: encontrar tal que
| (1.75) |
para todo , onde é a -ésima função base de . Então, como , temos
| (1.76) |
onde , , são as incógnitas a determinar. I.e., ao computarmos , , temos obtido a solução do problema de elementos finitos (1.74).
Agora, da forma bilinear (1.71), temos
| (1.77) | |||
| (1.78) |
Daí, o problema (1.74) é equivalente a resolvermos o seguinte sistema de equações lineares
| (1.79) |
onde é a matriz de rigidez com
| (1.80) |
é o vetor das incógnitas e é o vetor de carga com
| (1.81) |
Consideramos o problema (1.63)-(1.64) com e , i.e.
| (1.82) | |||
| (1.83) |
Neste caso, a solução analítica pode ser facilmente obtida por integração. Vamos computar uma aproximação de elementos finitos no espaço das funções afins por partes construído numa malha uniforme de células no intervalo . Para tanto, consideramos o problema fraco associado: encontrar tal que
| (1.84) |
onde
| (1.85) |
Então, a formulação de elementos finitos associada, lê-se: encontrar tal que
| (1.86) |
A Figura 1.5 apresenta o esboço dos gráficos da solução analítica e da sua aproximação de elementos finitos (computada pelo Código 4). Verifique!
Em revisão
Existem dois tipos de estimativas do erro . Estimativas a priori, são aquelas em que o erro é dado em relação da solução , enquanto que nas estimativas a posteriori o erro é expresso em relação a solução de elementos finitos .
Escrevendo para qualquer e usando a ortogonalidade de Galerkin (Teorema 1.2.1), temos
| (1.90) | ||||
| (1.91) | ||||
| (1.92) | ||||
| (1.93) | ||||
| (1.94) |
∎
A Figura 1.6 apresenta o esboço da evolução do erro da solução de elementos finitos do problema (1.82)-(1.83) para malhas uniformes com células.
Com o FEniCS, a computação do problema de elementos finitos pode ser feita com o seguinte código:
from __future__ import print_function, division
from fenics import *
import numpy as np
import matplotlib.pyplot as plt
def boundary(x,on_boundary):
return on_boundary
def solver(n):
# malha
mesh = IntervalMesh(n,0,1)
# espaco
V = FunctionSpace(mesh, ’P’, 1)
bc = DirichletBC(V,Constant(0.0),boundary)
#MEF problem
u = TrialFunction(V)
v = TestFunction(V)
f = Constant(1.0)
a = u.dx(0)*v.dx(0)*dx
L = f*v*dx
#computa a sol
u = Function(V)
solve(a == L, u, bc)
return u, mesh
#sol analitica
ua = Expression(’-x[0]*x[0]/2+x[0]/2’,
degree=2)
lerrors=[]
for n in [2,4,8,16,32,64,128]:
u, mesh = solver(n)
e = errornorm(u,ua,norm_type=’H10’,mesh=mesh)
lerrors.append(e)
plt.plot([2,4,8,16,32,64,128],lerrors)
plt.xscale(’log’,basex=2)
#plt.yscale(’log’,base=2)
plt.xlabel(r"$n$")
plt.ylabel(r"$|\!|(u-u_h)’|\!|_{L^2(I)}$")
plt.xlim((2,128))
plt.xticks([2,4,8,16,32,64,128],[2,4,8,16,32,64,128])
plt.grid(’on’)
plt.show()
Em revisão
Aqui, vamos obter uma estimativa a posteriori para o erro da solução de elementos finitos do problema (1.63)-(1.64).
A solução de elementos finitos satisfaz
| (1.98) |
onde é chamado de elemento residual e é dado por
| (1.99) |
Tomando e usando a ortogonalidade de Galerkin (Teorema 1.2.1) temos
| (1.100) |
Então, aplicando integração por partes
| (1.101) |
Daí, observando que nos extremos dos intervalos e que , temos
| (1.102) |
Agora, usando as desigualdades de Cauchy-Schwarz e a estimativa padrão de interpolação (1.25), obtemos
| (1.103) | ||||
| (1.104) | ||||
| (1.105) | ||||
| (1.106) |
donde segue o resultado desejado. ∎
No caso da solução de elementos finitos no espaço das funções lineares por partes, temos . Logo, o elemento residual se resume em .
Em revisão
Obtenha uma aproximação por elementos finitos lineares por partes da solução de
| (1.107) | |||
| (1.108) |
Código FENiCS.
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.