| | | | |

6.2 Equação do Calor

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

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

utαuxx=f(t,x), 0<ttf,a<x<b, (6.22a)
u(0,x)=u0(x),a<x<b, (6.22b)
u(t,a)=u(t,b)=0, 0<ttf, (6.22c)

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

O problema (6.2) é 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+(i1)hx, i=1,2,,nx+1, com tamanho de malha hx=(ba)/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.22a) fica aproximada por

duidt=αhx2ui12αhx2ui+αhx2ui+1+f(t,xi), (6.23)

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

du2dt=2αhx2u2+αhx2u3+f(t,x2), (6.24a)
duidt=αhx2ui12αhx2ui+αhx2ui+1+f(t,xi), (6.24b)
dundt=αhx2un22αhx2un1+f(t,xn1), (6.24c)

onde i=3,4,,n1 e com condições iniciais dadas por (6.22b), i.e.

ui(0)=u0(xi), (6.25)

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

d𝒖~dt=A𝒖~+f~, (6.26)

onde 𝒖~(t)=(u2(t),u3(t),,un(t)), f~(t)=(f(t,x2),f(t,x3),,f(t,xn)) e A é uma matriz (n1)×(n1) da forma

A=[2αh2αh200000αh22αh2αh200000αh22αh2αh200000000000αh22αh2]. (6.27)

2. Discretização Temporal.

Para a discretização temporal vamos usar o esquema-θ. Consideramos os tempos discretos t(k)=kht, 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.28a)
𝒖~(k+1)=𝒖~(k)+(1θ)ht(A𝒖~(k)+𝒇~(k))
+θht(A𝒖~(k+1)+𝒇~(k+1)), (6.28b)

para k=0,1,,nt1 e para um escolhido 0θ1. No caso, f não depende de u e a Eq. (6.28b) é equivalente ao sistema linear

(IθhtA)𝒖~(k+1)=[I+(1θ)htA]𝒖~(k)+ht𝒇~θ(k), (6.29)

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

αhth212. (6.30)

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

utuxx=(π21)etsen(πx), 0<t1, 0x1, (6.31a)
u(0,x)=sen(πx), 0x1, (6.31b)
u(t,0)=u(t,1)=0, 0t1, (6.31c)

Este problema tem solução exata u(t,x)=etsen(π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# axiliares
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

utuxx=0, 0<t1,π<x<π, (6.32a)
u(0,x)=sen(x),πxπ, (6.32b)
u(t,π)=u(t,π)=0, 0t1. (6.32c)

Sua solução exata é u(t,x)=etsen(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αuxx=0, 0<t1,π<x<π, (6.33a)
u(0,x)=sen(αx),πxπ, (6.33b)
u(t,π)=u(t,π)=0, 0t1. (6.33c)

Sua solução exata é u(t,x)=eα2tsen(α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.30) 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

utuxx=(π241)etcos(π2x), 0<t1, 0<x<1, (6.34a)
u(0,x)=cos(π2x), 0x1, (6.34b)
u(t,0)=et, 0t1, (6.34c)
u(t,1)=0, 0t1. (6.34d)

Sua solução exata é u(t,x)=etcos(π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

utuxx=(π241)etcos(π2x), 0<t1, 0<x<1, (6.35a)
u(0,x)=cos(π2x), 0x1, (6.35b)
ux(t,0)=0, 0t1, (6.35c)
u(t,1)=0, 0t1. (6.35d)

Sua solução exata é u(t,x)=etcos(π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

utuxx=(π21)etsen(πx), 0<t1, 0x1, (6.36a)
u(0,x)=sen(πx), 0x1, (6.36b)
u(t,0)=u(t,1)=0, 0t1, (6.36c)

Sua solução exata u(t,x)=etsen(π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+uux=αuxx, 0<t1, 0<x<1, (6.37a)
u(0,x)=2απsen(πx)2+cos(πx), 0x1, (6.37b)
u(t,0)=u(t,1)=0, 0t1. (6.37c)

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

u(t,x)=2απeαπ2tsen(πx)2+eαπ2tcos(πx). (6.38)

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

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!