| | | | |

5.3 Método de Volumes Finitos

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

O Método de Volumes Finitos (MVF) é um método de discretização apropriado para problemas conservativos. Consideramos o seguinte problema linear de valor de contorno (PVC)

uxx=f(x),a<x<b, (5.70a)
u(a)=0, (5.70b)
u(b)=0. (5.70c)

onde a incógnita é u=u(x) com dada fonte f=f(x). A Eq. (5.3) pode ser reescrita na forma conservativa

div(𝑭)=f, (5.71)

onde 𝑭=ux

1. Discretização Espacial.

Assumimos uma malha do domínio [a,b] da forma

a=x12<x1<x32<<xi12<xi<xi+12<<xn<xn+12=b, (5.72)

onde h=(ba)/n, xi12=a+(i1)h, h=h+=h/2, i=1,2,,n. Também denotamos Ki=(xi12,xi+12) a i-ésima célula da malha.

2. Discretização das Equações.

No MVF, as incógnitas ui, i=1,2,,n, são as aproximações para o valor médio de u nas células Ki, i.e.

ui=1|Ki|abu(x)𝑑x. (5.73)

O problema discreto para ui é obtido tomando a média da Eq.  na célula Ki, donde temos

1hxi12xi+12uxx𝑑x=1hKif𝑑x, (5.74a)
1h[ux(xi+12)+ux(xi12)]=1hKif𝑑x (5.74b)

Por fórmula de diferenças finitas central, temos

ux(xi+12)=uiui1h+O(h) (5.75)

e

ux(xi12)=ui+1uih+O(h) (5.76)

Com isso, obtemos as equações

1h(ui+1uih+uiui1h)=1hKif𝑑x, (5.77)

Rearranjando os termos e aproximando a integral de f pela regra do ponto médio, obtemos

1h2ui1+2h2ui1h2ui+1=fi, (5.78)

onde fi:=f(xi) e i=2,3,,n1.

Na célula K1, tomamos a aproximação

ux(x12) =u1u12h/2+O(h), (5.79a)
==u1h/2+O(h). (5.79b)

Aplicando na Eq. (5.74b), obtemos

1h(u2u1h+u1h/2)=1hKif𝑑x, (5.80)

Analogamente, integrando na célula Kn de fronteira, obtemos

1h(unh/2+unun1h)=1hKif𝑑x. (5.81)

Por fim, obtemos o problema discreto

3h2u11h2u2=f1, (5.82a)
1h2ui1+2h2ui1h2ui+1=fi, (5.82b)
1h2un1+3h2un=fn, (5.82c)

para i=2,3,,n1.

3. Resolução do Problema Discreto.

A resolução do problema discreto se resume a computar a solução do sistema linear (5.3). Sua forma matricial é A𝒖=𝒃, onde a matriz de coeficientes A=[ai,j]i,j=1n,n tem elementos da diagonal são

a1,1=3h2, (5.83a)
ai,i=2h2, 2in1, (5.83b)
an,n=3h2, (5.83c)

e os demais ai,j para ij

ai,j={1h2,j=i1ouj=i+1,0,noutros casos (5.84)

O vetor dos termos constantes é 𝒃=(bi=fi)i=1n, fi=f(xi) e o vetor das incógnitas é u=(ui)i=1n, sendo ui a aproximação do valor médio de u na célula Ki, i=1,2,,n.

Exemplo 5.3.1.

Consideramos o seguinte PVC

u′′=π2sen(πx), 0<x<1, (5.85)
u(0)=0, (5.86)
u(1)=0. (5.87)

A solução analítica deste problema é u(x)=sen(πx).

Refer to caption
Figura 5.3: Resultado referente ao Exemplo 5.3.1.

Resolvendo este sistema com h=101 obtemos a solução numérica apresentada na Figura 5.3.

Código 18: pvc_mvf.py
1import numpy as np
2
3# fonte
4def f(x):
5  return np.pi**2*np.sin(np.pi*x)
6
7# malha
8n = 10
9h = 1./n
10xx = np.linspace(h/2, 1.-h/2, n)
11
12# prob. discreto
13A = np.zeros((n,n))
14b = np.empty(n)
15
16# c.c. x = 0
17A[0,0] = 3./h**2
18A[0,1] = -1./h**2
19b[0] = f(xx[0])
20
21# pts internos
22for i in range(1,n-1):
23  A[i,i-1] = -1./h**2
24  A[i,i] = 2./h**2
25  A[i,i+1] = -1./h**2
26  b[i] = f(xx[i])
27
28# c.c. x = 1
29A[n-1,n-2] = -1./h**2
30A[n-1,n-1] = 3./h**2
31b[n-1] = f(xx[n-1])
32
33# resol prob disc
34u = npla.solve(A, b)
35
36xx = np.concatenate(([0.],xx,[1.]))
37u = np.concatenate(([0.],u,[0.]))

5.3.1 Exercícios

E. 5.3.1.

Considere o PVC

u′′=π2cos(πx), 0<x<1, (5.88)
u(0)=1, (5.89)
u(1)=1. (5.90)

A solução analítica deste problema é u(x)=cos(πx). Use o MVF para computar aproximações numéricas 𝒖~h com tamanhos de malha h=101, 102, 103, 104 e verifique o erro absoluto εh,abs:=𝒖~h𝒖.

E. 5.3.2.

Considere o PVC

u′′=2,1<x<1, (5.91)
u(1)=0, (5.92)
u(1)=0. (5.93)

A solução analítica deste problema é u(x)=1x2. Use o MVF com n=20 subintervalos na malha e verifique o erro absoluto εabs:=𝒖~h𝒖.

E. 5.3.3.

Considere o seguinte PVC

u′′+u=f(x),1<x<1, (5.94a)
u(1)=0, (5.94b)
u(1)=0, (5.94c)

onde

f(x)={1,x00,x>0 (5.95)

Use uma aproximação adequada pelo MVF para obter o valor aproximado de u(0) com precisão de 2 dígitos significativos.

Resposta.

7,2e1

E. 5.3.4.

Considere o PVC

u′′=π2cos(πx), 0<x<1, (5.96)
u(0)=1, (5.97)
u(1)=0. (5.98)

A solução analítica deste problema é u(x)=cos(πx). Aplique o MVF para computar uma aproximação numérica com erro absoluto de no máximo 103 na norma L2.


Envie seu comentário

As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Uso de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!