| | | | |

5.1 Método de Diferenças Finitas

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

Consideramos o seguinte problema linear de valor de contorno (PVC)

u′′+α(x)u+β(x)u=f(x),a<x<b, (5.2a)
u(a)=g, (5.2b)
u(b)=h. (5.2c)

onde a incógnita é u=u(x) com dada fonte f=f(x) e dados parâmetros g e h.

A aproximação pelo Método de Diferenças Finitas (MDF) de (5.2a)-(5.2c) surge da substituição das derivadas por Fórmulas de Diferenças Finitas. De forma geral, o método pode ser dividido em três etapas: 1. discretização do domínio, 2. discretização das equações, 3. resolução do problema discreto.

1. Discretização do Domínio.

A discretização do domínio é seu particionamento em subintervalos (células computacionais) e pontos (nodos computacionais). Por simplicidade, vamos considerar apenas o caso de um particionamento uniforme. Particionamos o domínio D=[a,b] em n de subintervalos de tamanho de malha

h=ban, (5.3)

e os nodos da partição podem ser indexados da seguinte forma

xi=a+(i1)h, (5.4)

com i=1,2,3,,n+1.

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

Começando por (5.2a), em um nodo x=xi, i=2,3,,n, temos

u′′(xi)+α(xi)u(xi)+β(xi)u(xi)=f(xi). (5.5)

Podemos substituir a segunda derivada de u pela fórmula de diferenças finitas central de ordem h2

u′′(xi)=u(xih)2u(xi)+u(xi+h)h2D0,h22u(xi)+O(h2). (5.6)

A primeira derivada de u também pode ser substituída pela fórmula de diferenças finitas central de ordem h2

u(xi)=u(xi+h)u(xih)2hD0,h2u(xi)+O(h2). (5.7)

Agora, denotando uiu(xi), temos ui1u(xih) e ui+1u(xi+h). Substituindo as derivadas pelas fórmulas de diferenças finitas, temos de (5.5) que

(ui12ui+ui+1h2)+α(xi)(ui+1ui12h) (5.8)
+β(xi)ui+O(h2)=f(xi),

Rearranjando os termos e desconsiderando o termo do erro de truncamento, obtemos o seguinte sistema de equações lineares

(1h2αi2h)ui1+(βi2h2)ui (5.9)
+(1h2+αi2h)ui+1=fi,

onde, usamos a notação αi=α(xi), βi=β(xi) e fi=f(xi).

Observamos que este sistema consiste em n1 equações envolvendo as n+1 incógnitas ui, i=1,2,,n+1. Para fechá-lo, usamos as condições de contorno. De (5.2b), temos

u1=g (5.10)

e de (5.2c) temos

un+1=h, (5.11)

lembrando que u0u(x0) e unu(xn).

Por fim, as equações (5.9)-(5.11) formam o seguinte problema discretizado

u1=g, (5.12a)
(1h2αi2h)ui1+(βi2h2)ui
+(1h2+αi2h)ui+1=fi, (5.12b)
un+1=h, (5.12c)

para i=2,3,,n.

3. Resolução do Problema Discreto.

O problema discreto (5.1) consiste em um sistema linear de n+1 equações com n+1 incógnitas. Na forma matricial temos

(LABEL:cap_pvc_sec_mdf:eq:sis_mdf)A𝒖=𝒃 (5.13)

onde 𝒖=(u1,u2,,un+1) é o vetor das incógnitas, 𝒃=(g,f2,f3,,fn,h). A matriz dos coeficientes é A=[ai,j]i,j=1n+1,n+1 e seus elementos não nulos são

a1,1=1,
ai,i1=1h2αi2h, (5.14)
ai,i=βi2h2, (5.15)
ai,i+1=1h2+αi2h, (5.16)
an+1,n+1=1, (5.17)

para i=2,3,,n.

A resolução do problema discreto se resume, a resolver o sistema A𝒖=𝒃, o que pode ser feito por qualquer método numérico apropriado.

Exemplo 5.1.1.

Consideramos o seguinte PVC

u′′=π2sen(πx), 0<x<1, (5.18)
u(0)=0, (5.19)
u(1)=0. (5.20)
Refer to caption
Figura 5.1: Resultado referente ao Exemplo 5.1.1.

A solução analítica deste problema é u(x)=sen(πx). Usando o MDF como acima, encontramos o problema discreto

u1 =0, (5.21a)
1h2ui1+2h2ui1h2ui+1 =π2sen(πxi), (5.21b)
un+1 =0, (5.21c)

com tamanho de malha h=1/n e nodos xi=(i1)h indexados por i=1,2,,n+1.

Tabela 5.1: Resultados referentes ao Exemplo 5.1.1.
h u~uL2
1.0e1 1.8e2
5.0e2 6.5e3
2.5e2 2.3e3
1.0e3 5.8e4

Resolvendo este sistema com h=101 obtemos a solução numérica apresentada na Figura 5.1. Ainda, na Tabela 5.1 temos a comparação na norma L2 da solução numérica 𝒖~ com a solução analítica 𝒖=(u(xi))i=1n+1 para diferentes escolhas de h.

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

5.1.1 Exercícios

E. 5.1.1.

Considere o PVC

u′′=π2cos(πx), 0<x<1, (5.22)
u(0)=1, (5.23)
u(1)=1. (5.24)

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

Resposta.
h u~uL2
101 3.9e3
102 1.2e4
103 3.9e6
104 1.2e7
E. 5.1.2.

Considere o PVC

u′′=2,1<x<1, (5.25)
u(1)=0, (5.26)
u(1)=0. (5.27)

A solução analítica deste problema é u(x)=1x2. Use o MDF com n=20 subintervalos na malha e verifique o erro absoluto εabs:=𝒖~h𝒖. Por que o erro está próximo precisão de máquina? Justifique sua resposta.

Resposta.

εabs=3.1e14.

E. 5.1.3.

Considere o seguinte PVC

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

onde

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

Use uma aproximação adequada pelo método de diferenças finitas para obter o valor aproximado de u(0) com precisão de 2 dígitos significativos.

Resposta.

2,7e1

E. 5.1.4.

Considere o PVC

u′′=π2cos(πx), 0<x<1, (5.30)
u(0)=1, (5.31)
u(1)=0. (5.32)

A solução analítica deste problema é u(x)=cos(πx). Aplique o MDF para computar aproximações numéricas usando a:

  1. a)

    fórmula de diferenças finitas D,hu(x) no contorno x=1.

  2. b)

    fórmula de diferenças finitas D,h2u(x) no contorno x=1.

Quais das duas produz o resultado mais preciso? Justifique sua resposta.

Resposta.

b) resultado mais preciso.


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!