| | | |

Matemática numérica II

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

6.2 Equação do calor

Consideramos a equação do calor com condição inicial dada e condições de contorno de Dirichlet homogêneas

ut−α⁢ux⁢x=f⁢(t,x)⁢, 0<t≤tf,a<x<b, (6.43)
u⁢(0,x)=u0⁢(x),a<x<b, (6.44)
u⁢(t,a)=u⁢(t,b)=0, 0<t≤tf, (6.45)

onde u=u⁢(t,x) é a incógnita.

O problema (6.43)-(6.45) é um problema de valor inicial com condições de contorno. Uma das estratégias numéricas de solução é o chamado Método das Linhas, o qual trata separadamente as discretizações espacial e temporal. Aqui, vamos começar pela discretização espacial e, então, trataremos a discretização temporal.

1. Discretização Espacial.

Na discretização espacial, aplicamos o Método de Diferenças Finitas (MDF). Começamos considerando uma malha uniforme de nodos xi=a+(i−1)⁢hx, i=1,2,…,nx+1, com tamanho de malha hx=(b−a)/nx, sendo nx o número de subintervalos. Denotando ui⁢(t)≈u⁢(t,xi) e empregando a fórmula de diferenças finitas centrais D0,h22, temos que a Eq. (6.43) fica aproximada por

d⁢uid⁢t=αhx2⁢ui−1−2⁢αhx2⁢ui+αhx2⁢ui+1+f⁢(t,xi), (6.46)

para i=2,3,…,nx. Agora, das condições de contorno (6.45), temos u1=0 e un=0. Com isso, obtemos o seguinte sistema de equações diferenciais ordinárias

d⁢u2d⁢t=−2⁢αhx2⁢u2+αhx2⁢u3+f⁢(t,x2), (6.47)
d⁢uid⁢t=αhx2⁢ui−1−2⁢αhx2⁢ui+αhx2⁢ui+1+f⁢(t,xi), (6.48)
d⁢und⁢t=αhx2⁢un−2−2⁢αhx2⁢un−1+f⁢(t,xn−1), (6.49)

onde i=3,4,…,n−1 e com condições iniciais dadas por (6.44), i.e.

ui⁢(0)=u0⁢(xi), (6.50)

para i=2,3,…,n. Este sistema pode ser escrito na seguinte forma matricial

d⁢𝒖~d⁢t=A⁢𝒖~+f~, (6.51)

onde 𝒖~⁢(t)=(u2⁢(t),u3⁢(t),…,un⁢(t)), f~⁢(t)=(f⁢(t,x2),f⁢(t,x3),…,f⁢(t,xn)) e A é uma matriz (n−1)×(n−1) da forma

A=[−2⁢αh2αh2000⋯00αh2−2⁢αh2αh200⋯000αh2−2⁢αh2αh20⋯0000⋱⋱⋱⋯000000⋯αh2−2⁢αh2]. (6.52)

2. Discretização Temporal.

Para a discretização temporal vamos usar o esquema-θ. Consideramos os tempos discretos t(k)=k⁢ht, com passo no tempo ht=tf/nt, para k=0,1,2,…,nt. Denotando ui(k)≈u⁢(t(k),xi), o esquema consiste nas iterações

𝒖~(0)=𝒖~0 (6.53)
𝒖~(k+1)=𝒖~(k)+(1−θ)⁢ht⁢(A⁢𝒖~(k)+𝒇~(k))
+θ⁢ht⁢(A⁢𝒖~(k+1)+𝒇~(k+1)), (6.54)

para k=0,1,…,nt−1 e para um escolhido 0≤θ≤1. No caso, f não depende de u e a Eq. (6.54) é equivalente ao sistema linear

(I−θ⁢ht⁢A)⁢𝒖~(k+1)=[I+(1−θ)⁢ht⁢A]⁢𝒖~(k)+ht⁢𝒇~θ(k), (6.55)

com 𝒇~θ(k)=(1−θ)⁢𝒇~(k)+θ⁢𝒇~(k+1).

Observação 6.2.1.(Estabilidade e erro de truncamento)

Para θ=0 (Método de Euler Explícito) o esquema numérico condicionalmente estável [2, Cap. 12, Seç. 2] para

α⁢hth2≤12. (6.56)

Para θ=1 (Método de Euler Implícito) o esquema é incondicionalmente estável. Em ambos estes casos, o erro de truncamento é O⁢(ht+hx2). Escolhendo-se θ=12 (Método de Crank-Nicolson), o esquema numérico é incondicionalmente estável e com erro de truncamento O⁢(ht2+hx2).

Exemplo 6.2.1.

Consideramos o seguinte problema de calor

ut−ux⁢x=(π2−1)⁢e−t⁢sen⁡(π⁢x)⁢, 0<t≤1, 0≤x≤1, (6.57)
u⁢(0,x)=sen⁡(π⁢x)⁢, 0≤x≤1, (6.58)
u⁢(t⁢,0)=u⁢(t⁢,1)=0, 0≤t≤1, (6.59)

Este problema tem solução exata u⁢(t,x)=e−t⁢sen⁡(π⁢x). A Figura 6.4 mostra o gráfico de superfície u=u⁢(t,x) da solução numérica. Na Figura 6.5, temos a comparação entre a solução numérica e a solução exata (isolinhas).

Refer to caption
Figura 6.4: Solução aproximada do problema de calor do Exemplo 6.2.1.
Refer to caption
Figura 6.5: Comparação das soluções numérica e exata (isolinhas brancas) do Exemplo 6.2.1.
Código 21: calor.py
1import numpy as np
2import numpy.linalg as npla
3
4# params
5alpha = 1.
6theta = 0.5
7
8# malha temporal
9nt = 10
10ht = 1./nt
11tt = np.linspace(0., 1., nt+1)
12
13# malha espacial
14nx = 10
15h = 1./n
16xx = np.linspace(0., 1., n+1)
17
18# rhs
19def f(t, x):
20 return (np.pi**2-1)*np.exp(-t)*np.sin(np.pi*x)
21
22# auxiliares
23lbda = alpha/h**2
24
25# matriz difusão
26A = np.zeros(((nx-1), (nx-1)))
27A[0,0] = -2*lbda
28A[0,1] = lbda
29for i in range(1,nx-2):
30 A[i,i-1] = lbda
31 A[i,i] = -2*lbda
32 A[i,i+1] = lbda
33A[nx-2,nx-3] = lbda
34A[nx-2,nx-2] = -2*lbda
35
36# matrizes auxiliares
37Jth = np.identity(A.shape[0]) - theta*ht*A
38J1th = np.identity(A.shape[0]) + (1-theta)*ht*A
39
40# c.i.
41u0 = np.sin(np.pi * xx)
42
43# laço no tempo
44u = u0.copy()
45for k in range(nt):
46 print(f'{k+1}: t = {tt[k+1]:f}')
47 fth = (1-theta)*f(tt[k],xx[1:-1]) + theta*f(tt[k+1],xx[1:-1])
48 u[1:-1] = npla.solve(Jth, J1th@u0[1:-1]+ht*fth)
49 u0 = u.copy()

6.2.1 Exercícios

E. 6.2.1.

Considere o problema

ut−ux⁢x=0, 0<t≤1,−π<x<π, (6.60)
u⁢(0,x)=sen⁡(x),−π≤x≤π, (6.61)
u⁢(t,−π)=u⁢(t,π)=0, 0≤t≤1. (6.62)

Sua solução exata é u⁢(t,x)=e−t⁢sen⁡(x). Implemente o MDF com esquema-θ em uma malha uniforme de tamanho espacial hx e passo no tempo ht para obter uma solução numérica 𝒖hx,ht. Então, verifique a taxa de convergência do erro εhx,ht:=‖𝒖h−𝒖‖2 para os diferentes esquemas:

  1. a)

    Euler Explícito: θ=0.

  2. b)

    Euler Implícito: θ=1.

  3. c)

    Crank-Nicolson: θ=12.

E. 6.2.2.

Considere o problema

ut−α⁢ux⁢x=0, 0<t≤1,−π<x<π, (6.63)
u⁢(0,x)=sen⁡(α⁢x),−π≤x≤π, (6.64)
u⁢(t,−π)=u⁢(t,π)=0, 0≤t≤1. (6.65)

Sua solução exata é u⁢(t,x)=e−α2⁢t⁢sen⁡(α⁢x). Implemente o MDF com esquema-θ em uma malha uniforme. Faça testes numéricos para analisar a validade da condição de estabilidade (6.56) para os seguintes esquemas:

  1. a)

    Euler Explícito: θ=0.

  2. b)

    Euler Implícito: θ=1.

  3. c)

    Crank-Nicolson: θ=12.

E. 6.2.3.

Considere o problema

ut−ux⁢x=(π24−1)⁢e−t⁢cos⁡(π2⁢x)⁢, 0<t≤1, 0<x<1, (6.66)
u⁢(0,x)=cos⁡(π2⁢x)⁢, 0≤x≤1, (6.67)
u⁢(t⁢,0)=e−t⁢, 0≤t≤1, (6.68)
u⁢(t⁢,1)=0, 0≤t≤1. (6.69)

Sua solução exata é u⁢(t,x)=e−t⁢cos⁡(π⁢x/2). Implemente o MDF com esquema-θ em uma malha uniforme de tamanho espacial hx e passo no tempo ht para obter uma solução numérica 𝒖hx,ht. Então, verifique a taxa de convergência do erro εhx,ht:=‖𝒖h−𝒖‖2 para os diferentes esquemas:

  1. a)

    Euler Explícito: θ=0.

  2. b)

    Euler Implícito: θ=1.

  3. c)

    Crank-Nicolson: θ=12.

E. 6.2.4.

Considere o problema

ut−ux⁢x=(π24−1)⁢e−t⁢cos⁡(π2⁢x)⁢, 0<t≤1, 0<x<1, (6.70)
u⁢(0,x)=cos⁡(π2⁢x)⁢, 0≤x≤1, (6.71)
ux⁢(t⁢,0)=0, 0≤t≤1, (6.72)
u⁢(t⁢,1)=0, 0≤t≤1. (6.73)

Sua solução exata é u⁢(t,x)=e−t⁢cos⁡(π⁢x/2). Implemente o MDF com o Método de Crank-Nicolson em uma malha uniforme para obter uma solução numérica 𝒖hx,ht. Então, verifique a taxa de convergência do erro εhx,ht:=‖𝒖h−𝒖‖2 para os seguintes diferentes esquemas:

  1. a)

    empregando a diferença finita D+,hx na condição de contorno de Neumann.

  2. b)

    empregando a diferença finita D+,hx2 na condição de contorno de Neumann.

E. 6.2.5.

Considere o seguinte problema de calor

ut−ux⁢x=(π2−1)⁢e−t⁢sen⁡(π⁢x)⁢, 0<t≤1, 0≤x≤1, (6.74)
u⁢(0,x)=sen⁡(π⁢x)⁢, 0≤x≤1, (6.75)
u⁢(t⁢,0)=u⁢(t⁢,1)=0, 0≤t≤1, (6.76)

Sua solução exata u⁢(t,x)=e−t⁢sen⁡(π⁢x). Faça implementações numéricas do Método das Linhas com MDF na discretização espacial e empregando os seguintes métodos de Runge-Kutta para resolver o sistema de EDOs associado:

  1. a)

    Método do Ponto Médio.

  2. b)

    Método de R-K-4.

E. 6.2.6.(Equação de Burgers)

Considere o problema

ut+u⁢ux=α⁢ux⁢x⁢, 0<t≤1, 0<x<1, (6.77)
u⁢(0,x)=2⁢α⁢π⁢sen⁡(π⁢x)2+cos⁡(π⁢x)⁢, 0≤x≤1, (6.78)
u⁢(t⁢,0)=u⁢(t⁢,1)=0, 0≤t≤1. (6.79)

Sua solução analítica é [9]

u⁢(t,x)=2⁢α⁢π⁢e−α⁢π2⁢t⁢sen⁡(π⁢x)2+e−α⁢π2⁢t⁢cos⁡(π⁢x). (6.80)

Faça uma implementação numérica com MDF e com esquema-θ para resolver este problema. Teste os esquemas para α=1.,0.1,0.01,0.001.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
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.

Licença Creative Commons
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.

Pedro H A Konzen
| | | |