| | | |

Matemática numérica II

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

6.3 Equação da onda

Consideramos a equação da onda com condições iniciais dadas e condições de contorno de Dirichlet homogêneas

ut⁢t−α⁢ux⁢x=0, 0<t≤tf,a<x<b, (6.81)
u⁢(0,x)=f⁢(x),a≤x≤b, (6.82)
ut⁢(0,x)=g⁢(x),a≤x≤b, (6.83)
u⁢(t,a)=u⁢(t,b)=0, 0≤t≤tf, (6.84)

onde u=u⁢(t,x) é a incógnita com f, g e α>0 dadas.

Para a aplicação do Método das Diferenças Finitas (MDF), assumimos as discretizações: no tempo, t(k)=k⁢ht, j=0,1,…,nt, ht=tf/nt; no espaço xi=a+(i−1)⁢hx, i=1,2,…,nx+1, hx=(b−a)/nx. Então, assumindo a notação ui(k)≈u⁢(t(k),xi) usando a fórmula de diferenças finitas central D0,h22, obtemos a seguinte forma discreta da equação Eq. (6.81)

ui(k−1)−2⁢ui(k)+ui(k+1)ht2 (6.85)
−α⁢ui(k)−2⁢ui(k)+ui+1(k)hx2=0, (6.86)

para i=2,3,…,nx, j=1,2,…,nt−1. Denotando λ:=α⁢ht2/hx2, rearranjando os termos e aplicando as condições de contorno, obtemos

u2(k+1)=2⁢(1−λ)⁢u2(k)+λ⁢u3(k)−u2(k−1), (6.87)
ui(k+1)=λ⁢ui(k)+2⁢(1−λ)⁢ui(k)+λ⁢ui+1(k)−ui(k−1), (6.88)
unx(k+1)=λ⁢unx−1(k)+2⁢(1−λ)⁢unx(k)−unx(k−1), (6.89)

para i=2,3,…,nx, j=1,2,…,nt−1. Ou, equivalentemente, na forma matricial

𝒖~(k+1)=A⁢𝒖~(k)−𝒖~(k−1), (6.90)

para k=1,2,…,nt−1, onde 𝒖~(k)=(ui(k))i=2nx e A=[ai,j]i,j=1nx−1,nx−1 é a matriz tridiagonal de elementos

ai,j={ai,i−1=λ,1<i≤nx−1,ai,i=2⁢(1−λ),1≤i≤nx−1,ai,i+1=λ,1≤i<nx−1. (6.91)

Para a inicialização, a Eq. (6.90) requer que conhecemos 𝒖~(0) e 𝒖~(1). A primeira, vem diretamente da condição inicial Eq. (6.82), i.e.

𝒖~(0)=f⁢(𝒙~), (6.92)

onde 𝒙~=(xi)i=2nx. Agora, aplicando a fórmula de diferenças finitas progressiva D+,h, temos da condição inicial Eq. (6.83)

𝒖~(1)−𝒖~(0)ht=g⁢(𝒙~) (6.93)

ou, equivalentemente,

𝒖~(1)=𝒖~(0)+ht⁢g⁢(𝒙~). (6.94)

De tudo isso, temos que a solução numérica da equação da onda pode ser computada com a seguinte iteração

𝒖~(0)=f⁢(𝒙~), (6.95)
𝒖~(1)=𝒖~(0)+ht⁢g⁢(𝒙~), (6.96)
𝒖~(k+1)=A⁢𝒖~(k)−𝒖~(k−1), (6.97)

para k=1,2,…,nt−1, com 𝒖(k)=(0,𝒖~⁢,0).

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

Pode-se mostrar a seguinte condição de estabilidade [3, p. 487]

α⁢hthx≤1. (6.98)

Com isso e para f e g suficientemente suaves, o esquema numérica (6.95)-(6.97) tem erro de truncamento O⁢(ht2+hx2).

Exemplo 6.3.1.

Consideramos o seguinte problema

ut⁢t−ux⁢x=0, 0<t≤2, 0<x<1, (6.99)
u⁢(0,x)=0, 0≤x≤1, (6.100)
ut⁢(0,x)=π⁢sen⁡(π⁢x)⁢, 0≤x≤1, (6.101)
u⁢(t⁢,0)=u⁢(t⁢,1)=0, 0≤t≤2. (6.102)

Sua solução exata é u⁢(t,x)=sen⁡(π⁢t)⁢sen⁡(π⁢x). A Figura 6.6 contém gráficos de comparação entra as soluções numérica e exata. Para a solução numérica, tomamos nt=40 (ht=0.05) e nx=10 (hx=0.1).

Refer to caption
Refer to caption
Figura 6.6: Gráficos comparativos das soluções numérica e exata do problema de onda do Exemplo 6.3.1.
1import numpy as np
2from numpy import pi, sin, cos
3
4# params
5nt = 40
6ht = 2./nt
7tt = np.linspace(0., 2., nt+1)
8
9nx = 10
10hx = 1./nx
11xx = np.linspace(0., 1., nx+1)
12
13# c.i.s
14def f(x):
15 return np.zeros_like(x)
16
17def g(x):
18 return pi*sin(pi*x)
19
20# axiliares
21lbda = ht**2/hx**2
22
23A = np.zeros(((nx-1), (nx-1)))
24A[0,0] = 2*(1. - lbda)
25A[0,1] = lbda
26for i in range(1,nx-2):
27 A[i,i-1] = lbda
28 A[i,i] = 2*(1 - lbda)
29 A[i,i+1] = lbda
30A[nx-2,nx-3] = lbda
31A[nx-2,nx-2] = 2*(1 - lbda)
32
33# laço no tempo
34## c.i.s
35u0 = f(xx)
36
37u1 = u0.copy()
38u1[1:-1] = u0[1:-1] + ht*g(xx[1:-1])
39
40u = u1.copy()
41for k in range(1,nt):
42
43 print(f'{k+1}: t = {tt[k+1]:f}')
44
45 u[1:-1] = A@u1[1:-1] - u0[1:-1]
46
47 u0 = u1.copy()
48 u1 = u.copy()

6.3.1 Exercício

E. 6.3.1.

Considere o problema

ut⁢t−ux⁢x=0, 0<t≤1.5, 0<x<1, (6.103)
u⁢(0,x)=0, 0≤x≤1, (6.104)
ut⁢(0,x)=π⁢sen⁡(π⁢x)⁢, 0≤x≤1, (6.105)
u⁢(t⁢,0)=u⁢(t⁢,1)=0, 0≤t≤1.5. (6.106)

Sua solução exata é u⁢(t,x)=sen⁡(π⁢t)⁢sen⁡(π⁢x). Faça testes numéricos para determinar os passos ht e hx para os quais o esquema numérico (6.95)-(6.97) compute o valor de u⁢(1.5,0.5) com 5 dígitos significativos corretos.


ht=2.5⁢e−3, hx=1.e−2

E. 6.3.2.

Considere o problema

ut⁢t−ux⁢x=e−t⁢(2+x−x2)⁢, 0<t≤1, 0<x<1, (6.107)
u⁢(0,x)=x−x2⁢, 0≤x≤1, (6.108)
ut⁢(0,x)=x2−x⁢, 0≤x≤1, (6.109)
u⁢(t⁢,0)=u⁢(t⁢,1)=0, 0≤t≤1. (6.110)

Sua solução exata é u⁢(t,x)=e−t⁢(x−x2). Implemente um esquema numérico semelhante ao (6.95)-(6.97) para computar soluções numéricas desse problema.

E. 6.3.3.

Considere o problema

ut⁢t−ux⁢x=e−t⁢(2+x−x2)⁢, 0<t≤1, 0<x<1, (6.111)
u⁢(0,x)=x−x2⁢, 0≤x≤1, (6.112)
ut⁢(0,x)=x2−x⁢, 0≤x≤1, (6.113)
ux⁢(t⁢,0)=e−t⁢, 0≤t≤1, (6.114)
u⁢(t⁢,1)=0, 0≤t≤1. (6.115)

Sua solução exata é u⁢(t,x)=e−t⁢(x−x2). Implemente um esquema numérico semelhante ao (6.95)-(6.97) para computar soluções numéricas desse problema.

E. 6.3.4.

Considere o problema

ut⁢t−ux⁢x=0, 0<t≤2, 0<x<1, (6.116)
u⁢(0,x)=0, 0≤x≤1, (6.117)
ut⁢(0,x)=π⁢sen⁡(π⁢x)⁢, 0≤x≤1, (6.118)
u⁢(t⁢,0)=u⁢(t⁢,1)=0, 0≤t≤2. (6.119)

Sua solução exata é u⁢(t,x)=sen⁡(π⁢t)⁢sen⁡(π⁢x). Baseado em (6.95)-(6.97), desenvolva um novo esquema numérico substituindo o passo (6.96) por um esquema numérico de mais alta ordem.


Dica: use, por exemplo, um método de R-K-2.

E. 6.3.5.

Considere o problema

ut⁢t−α⁢ux⁢x=0, 0<t≤1, 0<x<1, (6.120)
u⁢(0,x)=x⁢(1−x)⁢, 0≤x≤1, (6.121)
ut⁢(0,x)=0, 0≤x≤1, (6.122)
u⁢(t⁢,0)=u⁢(t⁢,1)=0, 0≤t≤2. (6.123)

Use o esquema numérico (6.95)-(6.97) para fazer testes numéricos para α=1.,0.5,0.1,0.01. É necessário ajustar os parâmetros ht e hx ao variar o parâmetro α? Justifique sua resposta.


Dica: consulte a Observação 6.3.1.


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
| | | |