| | | |

Matemática Numérica III

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

1.1 Matrizes bandas

A solução de um sistema linear em que a matriz dos coeficientes é uma matriz banda pode ser eficiente computada com um adequado formato de armazenamento. Uma matriz A é uma matriz banda quando seus elementos não nulos estão dispostos em apenas algumas de suas diagonais. A largura da banda é o número de diagonais não nulas d, incluindo a diagonal principal. A largura inferior l (superior u) é o número de diagonais não nulas abaixo (acima) da diagonal principal (d=l+u+1).

Exemplo 1.1.1.(Matriz tridiagonal)

Uma matriz tridiagonal é uma matriz banda com largura da banda d=3, largura inferior l=1 e largura superior u=1.

Para fixarmos as ideias, considere o seguinte sistema linear

a0,0x0+a0,1x1=b0 (1.1)
a1,0x0+a1,1x1+a1,2x2=b1 (1.2)
a2,0x0+a2,1x1+a2,2x2+a2,3x3=b2 (1.3)
a3,1x1+a3,2x2+a3,3x3+a3,4x4=b3 (1.4)
an1,n3xn3+an1,n2xn2+an1,n1xn1=bn1 (1.5)

ou seja, um sistema linear n×n cuja a matriz dos coeficientes é uma matriz banda com largura da banda d=3, largura inferior l=1 e largura superior u=2. A matriz dos coeficientes é dada por

A=[𝒂0,0a0,1000a1,0𝒂1,1a1,200a2,0a2,1𝒂2,2a2,300a3,1a3,2𝒂3,30000an1,n3an1,n2𝒂𝒏𝟏,𝒏𝟏]. (1.6)

Notemos que a matriz A pode ser armazenada de forma compacta como

Ab=[a0,1a1,2an3,n2an2,n1𝒂0,0𝒂1,1𝒂2,2𝒂𝒏𝟐,𝒏𝟐𝒂𝒏𝟏,𝒏𝟏a1,0a2,1a3,2an1,n2a2,0a3,1a4,2] (1.7)
Exemplo 1.1.2.(Equaçao de Poisson 1D)

Consideremos a equação de Poisson11endnote: 1Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. unidimensional e com condições de contorno de Dirichlet homogêneas

u′′(x)=f(x), (1.8)
u(0)=0, (1.9)
u(1)=0. (1.10)

para x(0,1). Assumindo a fonte f(x)=π2sen(πx), a solução analítica é dada por u(x)=sen(πx) (verifique!).

Vamos empregar o método de diferenças finitas para computar uma aproximação para a sua solução. Começamos assumindo uma malha uniforme de n nodos xi=ih, com tamanho de malha h=1/(n1), i=0,1,,n1. Empregando a fórmula de diferenças central, encontramos o seguinte problema discreto associado

u0=0, (1.11)
1h2ui1+2h2ui1h2ui+1=f(xi), (1.12)
un1=0, (1.13)

para i=1,2,,n2. Este é um sistema linear A𝒖=h2𝒃 em que a matriz dos coeficientes é a matriz tridiagonal n×n

A=[1000012100012000002100001]. (1.14)

O vetor das incógnitas é 𝒖=(u0,u1,,un1) e o vetor dos termos constantes é h2𝒃=h2(f(x0),f(x1),,f(xn1)). Note que a matriz A pode ser armazenada de forma compacta como

Ab=[1000122211111] (1.15)

O Código 1 computa a solução de um sistema linear tridiagonal usando o método de eliminação gaussiana (verifique!).

Código 1: solve_tribanded.py
1def solve_tribanded(ab, b):
2 a = ta.copy()
3 x = b.copy()
4 # eliminação
5 for i in range(1,n):
6 w = a[2,i-1]/a[1,i-1]
7 a[1,i] -= w * a[0,i]
8 x[i] -= w * x[i-1]
9 # resolve
10 x[n-1] = x[n-1]/a[1,n-1]
11 for i in range(n-2,-1,-1):
12 x[i] = (x[i] - a[0,i+1]*x[i+1])/a[1,i]
13 return x
Exemplo 1.1.3.(Equação de Poisson 2D)

Consideramos o seguinte problema de Poisson22endnote: 2Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. 2D

Δu=f(x,y),(x,y)(0,π)2, (1.16)
u(0,y)=0,y[0,π], (1.17)
u(π,y)=0,y[0,π], (1.18)
u(x,0)=0,x[0,π], (1.19)
u(x,π)=0,x[0,π], (1.20)

onde, Δ:=(2x2,2y2) é o operador laplaciano33endnote: 3Pierre-Simon Laplace, 1749 - 1827, matemático francês. Fonte: Wikipédia: Pierre-Simon Laplace.. Para fixarmos as ideias, vamos assumir

f(x,y)=sen(x)sen(y) (1.21)

Vamos empregar o método de diferenças finitas para computar uma aproximação para a sua solução. Começamos assumindo uma malha uniforme de n2 nodos

xi=(i1)h (1.22)
yj=(j1)h (1.23)

com tamanho de malha h=π/(n1), i=1,2,,n e j=1,2,,n. Empregando a fórmula de diferenças central, encontramos o seguinte problema discreto associado

ui,1=u1,j=0 (1.24)
1h2ui1,j1h2ui,j1+4h2ui,j
1h2ui+1,j1h2ui,j+1=f(xi,yj) (1.25)
ui,n=un,j=0 (1.26)

Este é um sistema linear n2×n2. Tomando em conta as condições de contorno, ele pode ser reduzido a um sistema (n2)2×(n2)2

Aw=b (1.27)

usando a enumeração das incógnitas

(i,j)k=i1+(j2)(n2), (1.28)

i.e.

ui,j=wk=i1+(j2)(n2) (1.29)

para i,j=2,,n2. Consulte a Figura 1.1 para uma representação da enumeração em relação a malha.

Refer to caption
Figura 1.1: Representação da enumeração das incógnitas referente ao problema de Poisson 2D. Exemplo 1.1.3.

Afim de obtermos uma matriz diagonal dominante, vamos ordenar as equações do sistema discreto como segue

  • j=2, i=2:

    4wkwk+1wk+n2=h2fi,j (1.30)
  • j=2, i=3,,n2:

    wk1+4wkwk+1wk+n2=h2fi,j (1.31)
  • j=2, i=n1:

    wk1+4wkwk+n2=h2fi,j (1.32)
  • j=3,,n2, i=2:

    wk(n2)+4wkwk+1wk+n2=h2fi,j (1.33)
  • j=3,,n2, i=3,,n2:

    wk1wk(n2)+4wkwk+1wk+n2=h2fi,j (1.34)
  • j=3,,n2, i=n1:

    wk1wk(n2)+4wkwk+n2=h2fi,j (1.35)
  • j=n1, i=2:

    wk(n2)+4wkwk+1=h2fi,j (1.36)
  • j=n1, i=3,,n2:

    wk1wk(n2)+4wkwk+1=h2fi,j (1.37)
  • j=n1, i=n1:

    wk1wk(n2)+4wk=h2fi,j (1.38)

Com isso, temos um sistema com matriz com 5 bandas, consulte a Figura 1.2.

Refer to caption
Figura 1.2: Matriz do sistema discreto construído no Exemplo 1.1.3.

O Código 2 implementa a montagem do sistema linear e sua solução usando a função solve_banded da biblioteca scipy.linalg. Verifique o código e compare a solução com a solução analítica u(x,y)=sen(x)sen(y).

Código 2: poisson2d.py
1import numpy as np
2from scipy.linalg import solve_banded
3
4
5# malha
6n = 11
7h = 1/(n-1)
8
9xx = np.linspace(0, 1, n)
10yy = np.linspace(0, 1, n)
11
12# fonte
13def f(x,y):
14 return 2 * np.pi**2 * np.sin(np.pi*x) * np.sin(np.pi*y)
15
16# sistema discreto
17u = l = n-2
18ab = np.zeros((u+l+1, (n-2)**2))
19b = np.empty((n-2)**2)
20
21# matrix banded index
22def ind(k,l):
23 return u + k - l, l
24
25for j in np.arange(2,n):
26 for i in np.arange(2,n):
27
28 # enumeração dos nodos computacionais
29 k = i-2 + (j-2)*(n-2)
30
31 # vetor b
32 b[k] = h**2 * f(xx[i-1], yy[j-1])
33
34 # matriz ab
35 ab[ind(k,k)] = 4.
36
37 if (j == 2):
38 if (i == 2):
39 ab[ind(k,k+1)] = -1.
40 ab[ind(k,k+n-2)] = -1.
41 elif (i <= n-2):
42 ab[ind(k,k-1)] = -1.
43 ab[ind(k,k+1)] = -1.
44 ab[ind(k,k+n-2)] = -1.
45 else: # i == n-1
46 ab[ind(k,k-1)] = -1.
47 ab[ind(k,k+n-2)] = -1.
48 elif (j <= n-2):
49 if (i == 2):
50 ab[ind(k,k-(n-2))] = -1.
51 ab[ind(k,k+1)] = -1.
52 ab[ind(k,k+n-2)] = -1.
53 elif (i <= n-2):
54 ab[ind(k,k-1)] = -1.
55 ab[ind(k,k-(n-2))] = -1.
56 ab[ind(k,k+1)] = -1.
57 ab[ind(k,k+n-2)] = -1.
58 else: # i == n-1
59 ab[ind(k,k-1)] = -1.
60 ab[ind(k,k-(n-2))] = -1.
61 ab[ind(k,k+n-2)] = -1.
62 else: # j == n-1
63 if (i == 2):
64 ab[ind(k,k-(n-2))] = -1.
65 ab[ind(k,k+1)] = -1.
66 elif (i <= n-2):
67 ab[ind(k,k-1)] = -1.
68 ab[ind(k,k-(n-2))] = -1.
69 ab[ind(k,k+1)] = -1.
70 else: # i == n-1
71 ab[ind(k,k-1)] = -1.
72 ab[ind(k,k-(n-2))] = -1.
73
74# resolve
75u = solve_banded((l,u), ab, b)

1.1.1 Exercícios

E. 1.1.1.

Considere o seguinte problema de Poisson44endnote: 4Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. unidimensional e com condições de contorno de Dirichlet não-homogêneas

u′′(x)=f(x), (1.39)
u(0)=1, (1.40)
u(1)=1. (1.41)

para x(0,1). Assumindo a fonte f(x)=π2cos(πx). Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para a segunda derivada e uma malha uniforme.

Dica: u(x)=cos(πx)

E. 1.1.2.

Considere o seguinte problema de Poisson55endnote: 5Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. unidimensional

u′′(x)=f(x), (1.42)
u(0)=1, (1.43)
u(1)=0. (1.44)

para x(0,1). Assumindo a fonte f(x)=π2cos(πx). Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para a segunda derivada e uma malha uniforme. Na condição de contorno de Neumann, use uma fórmula de diferenças finitas para trás.

Dica: u(x)=cos(πx)

E. 1.1.3.

Considere o seguinte problema de valor de contorno

u′′(x)+u(x)=f(x), (1.45)
u(0)=0, (1.46)
u(1)=0. (1.47)

para x(0,1). Assumindo a fonte f(x)=π2sen(πx)+πcos(x). Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme.

Dica: u(x)=sin(πx)

E. 1.1.4.

Considere o seguinte problema de valor de contorno

u′′(x)+au(x)=f(x), (1.48)
u(0)=0, (1.49)
u(1)=0. (1.50)

para x(0,1). Assumindo a fonte f(x)=sen(πx), aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme. Faça simulações e estude os resultados para:

  • a=1

  • a=0.1

  • a=1

E. 1.1.5.

Considere o seguinte problema de Poisson66endnote: 6Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. 2D com condições de contorno de Dirichlet

Δu=0,(x,y)(0,1)2, (1.51)
u(0,y)=0,y[0,1], (1.52)
u(1,y)=0,y[0,1], (1.53)
u(x,0)=sen(πx),x[0,1], (1.54)
u(x,1)=sen(πx),x[0,1]. (1.55)

Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme.

Dica: u(x,y)=sen(πx)cos(πy)

E. 1.1.6.

Considere o seguinte problema de Poisson77endnote: 7Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. 2D com condições de contorno de Dirichlet

Δu=8(y22x+2x2),(x,y)(0,1)2, (1.56)
u(0,y)=0,y[0,1], (1.57)
u(1,y)=0,y[0,1], (1.58)
u(x,0)=0,x[0,1], (1.59)
u(x,1)=8x(1x),x[0,1]. (1.60)

Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme.

Dica: u(x,y)=8(xx2)y2

E. 1.1.7.

Considere o seguinte problema de Poisson88endnote: 8Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. 2D com condições de contorno

Δu=8(y22x+2x2),(x,y)(0,1)2, (1.61)
u(0,y)=0,y[0,1], (1.62)
u(1,y)=0,y[0,1], (1.63)
u(x,0)=0,x[0,1], (1.64)
ux(x,1)=8(1x),x[0,1]. (1.65)

Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme. Na condição de Neumann, use uma fórmula de diferenças finitas para trás.

Dica: u(x,y)=8(xx2)y2


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.

Matemática Numérica III

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

1.1 Matrizes bandas

A solução de um sistema linear em que a matriz dos coeficientes é uma matriz banda pode ser eficiente computada com um adequado formato de armazenamento. Uma matriz A é uma matriz banda quando seus elementos não nulos estão dispostos em apenas algumas de suas diagonais. A largura da banda é o número de diagonais não nulas d, incluindo a diagonal principal. A largura inferior l (superior u) é o número de diagonais não nulas abaixo (acima) da diagonal principal (d=l+u+1).

Exemplo 1.1.1.(Matriz tridiagonal)

Uma matriz tridiagonal é uma matriz banda com largura da banda d=3, largura inferior l=1 e largura superior u=1.

Para fixarmos as ideias, considere o seguinte sistema linear

a0,0x0+a0,1x1=b0 (1.1)
a1,0x0+a1,1x1+a1,2x2=b1 (1.2)
a2,0x0+a2,1x1+a2,2x2+a2,3x3=b2 (1.3)
a3,1x1+a3,2x2+a3,3x3+a3,4x4=b3 (1.4)
an1,n3xn3+an1,n2xn2+an1,n1xn1=bn1 (1.5)

ou seja, um sistema linear n×n cuja a matriz dos coeficientes é uma matriz banda com largura da banda d=3, largura inferior l=1 e largura superior u=2. A matriz dos coeficientes é dada por

A=[𝒂0,0a0,1000a1,0𝒂1,1a1,200a2,0a2,1𝒂2,2a2,300a3,1a3,2𝒂3,30000an1,n3an1,n2𝒂𝒏𝟏,𝒏𝟏]. (1.6)

Notemos que a matriz A pode ser armazenada de forma compacta como

Ab=[a0,1a1,2an3,n2an2,n1𝒂0,0𝒂1,1𝒂2,2𝒂𝒏𝟐,𝒏𝟐𝒂𝒏𝟏,𝒏𝟏a1,0a2,1a3,2an1,n2a2,0a3,1a4,2] (1.7)
Exemplo 1.1.2.(Equaçao de Poisson 1D)

Consideremos a equação de Poisson11endnote: 1Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. unidimensional e com condições de contorno de Dirichlet homogêneas

u′′(x)=f(x), (1.8)
u(0)=0, (1.9)
u(1)=0. (1.10)

para x(0,1). Assumindo a fonte f(x)=π2sen(πx), a solução analítica é dada por u(x)=sen(πx) (verifique!).

Vamos empregar o método de diferenças finitas para computar uma aproximação para a sua solução. Começamos assumindo uma malha uniforme de n nodos xi=ih, com tamanho de malha h=1/(n1), i=0,1,,n1. Empregando a fórmula de diferenças central, encontramos o seguinte problema discreto associado

u0=0, (1.11)
1h2ui1+2h2ui1h2ui+1=f(xi), (1.12)
un1=0, (1.13)

para i=1,2,,n2. Este é um sistema linear A𝒖=h2𝒃 em que a matriz dos coeficientes é a matriz tridiagonal n×n

A=[1000012100012000002100001]. (1.14)

O vetor das incógnitas é 𝒖=(u0,u1,,un1) e o vetor dos termos constantes é h2𝒃=h2(f(x0),f(x1),,f(xn1)). Note que a matriz A pode ser armazenada de forma compacta como

Ab=[1000122211111] (1.15)

O Código 1 computa a solução de um sistema linear tridiagonal usando o método de eliminação gaussiana (verifique!).

Código 1: solve_tribanded.py
1def solve_tribanded(ab, b):
2 a = ta.copy()
3 x = b.copy()
4 # eliminação
5 for i in range(1,n):
6 w = a[2,i-1]/a[1,i-1]
7 a[1,i] -= w * a[0,i]
8 x[i] -= w * x[i-1]
9 # resolve
10 x[n-1] = x[n-1]/a[1,n-1]
11 for i in range(n-2,-1,-1):
12 x[i] = (x[i] - a[0,i+1]*x[i+1])/a[1,i]
13 return x
Exemplo 1.1.3.(Equação de Poisson 2D)

Consideramos o seguinte problema de Poisson22endnote: 2Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. 2D

Δu=f(x,y),(x,y)(0,π)2, (1.16)
u(0,y)=0,y[0,π], (1.17)
u(π,y)=0,y[0,π], (1.18)
u(x,0)=0,x[0,π], (1.19)
u(x,π)=0,x[0,π], (1.20)

onde, Δ:=(2x2,2y2) é o operador laplaciano33endnote: 3Pierre-Simon Laplace, 1749 - 1827, matemático francês. Fonte: Wikipédia: Pierre-Simon Laplace.. Para fixarmos as ideias, vamos assumir

f(x,y)=sen(x)sen(y) (1.21)

Vamos empregar o método de diferenças finitas para computar uma aproximação para a sua solução. Começamos assumindo uma malha uniforme de n2 nodos

xi=(i1)h (1.22)
yj=(j1)h (1.23)

com tamanho de malha h=π/(n1), i=1,2,,n e j=1,2,,n. Empregando a fórmula de diferenças central, encontramos o seguinte problema discreto associado

ui,1=u1,j=0 (1.24)
1h2ui1,j1h2ui,j1+4h2ui,j
1h2ui+1,j1h2ui,j+1=f(xi,yj) (1.25)
ui,n=un,j=0 (1.26)

Este é um sistema linear n2×n2. Tomando em conta as condições de contorno, ele pode ser reduzido a um sistema (n2)2×(n2)2

Aw=b (1.27)

usando a enumeração das incógnitas

(i,j)k=i1+(j2)(n2), (1.28)

i.e.

ui,j=wk=i1+(j2)(n2) (1.29)

para i,j=2,,n2. Consulte a Figura 1.1 para uma representação da enumeração em relação a malha.

Refer to caption
Figura 1.1: Representação da enumeração das incógnitas referente ao problema de Poisson 2D. Exemplo 1.1.3.

Afim de obtermos uma matriz diagonal dominante, vamos ordenar as equações do sistema discreto como segue

  • j=2, i=2:

    4wkwk+1wk+n2=h2fi,j (1.30)
  • j=2, i=3,,n2:

    wk1+4wkwk+1wk+n2=h2fi,j (1.31)
  • j=2, i=n1:

    wk1+4wkwk+n2=h2fi,j (1.32)
  • j=3,,n2, i=2:

    wk(n2)+4wkwk+1wk+n2=h2fi,j (1.33)
  • j=3,,n2, i=3,,n2:

    wk1wk(n2)+4wkwk+1wk+n2=h2fi,j (1.34)
  • j=3,,n2, i=n1:

    wk1wk(n2)+4wkwk+n2=h2fi,j (1.35)
  • j=n1, i=2:

    wk(n2)+4wkwk+1=h2fi,j (1.36)
  • j=n1, i=3,,n2:

    wk1wk(n2)+4wkwk+1=h2fi,j (1.37)
  • j=n1, i=n1:

    wk1wk(n2)+4wk=h2fi,j (1.38)

Com isso, temos um sistema com matriz com 5 bandas, consulte a Figura 1.2.

Refer to caption
Figura 1.2: Matriz do sistema discreto construído no Exemplo 1.1.3.

O Código 2 implementa a montagem do sistema linear e sua solução usando a função solve_banded da biblioteca scipy.linalg. Verifique o código e compare a solução com a solução analítica u(x,y)=sen(x)sen(y).

Código 2: poisson2d.py
1import numpy as np
2from scipy.linalg import solve_banded
3
4
5# malha
6n = 11
7h = 1/(n-1)
8
9xx = np.linspace(0, 1, n)
10yy = np.linspace(0, 1, n)
11
12# fonte
13def f(x,y):
14 return 2 * np.pi**2 * np.sin(np.pi*x) * np.sin(np.pi*y)
15
16# sistema discreto
17u = l = n-2
18ab = np.zeros((u+l+1, (n-2)**2))
19b = np.empty((n-2)**2)
20
21# matrix banded index
22def ind(k,l):
23 return u + k - l, l
24
25for j in np.arange(2,n):
26 for i in np.arange(2,n):
27
28 # enumeração dos nodos computacionais
29 k = i-2 + (j-2)*(n-2)
30
31 # vetor b
32 b[k] = h**2 * f(xx[i-1], yy[j-1])
33
34 # matriz ab
35 ab[ind(k,k)] = 4.
36
37 if (j == 2):
38 if (i == 2):
39 ab[ind(k,k+1)] = -1.
40 ab[ind(k,k+n-2)] = -1.
41 elif (i <= n-2):
42 ab[ind(k,k-1)] = -1.
43 ab[ind(k,k+1)] = -1.
44 ab[ind(k,k+n-2)] = -1.
45 else: # i == n-1
46 ab[ind(k,k-1)] = -1.
47 ab[ind(k,k+n-2)] = -1.
48 elif (j <= n-2):
49 if (i == 2):
50 ab[ind(k,k-(n-2))] = -1.
51 ab[ind(k,k+1)] = -1.
52 ab[ind(k,k+n-2)] = -1.
53 elif (i <= n-2):
54 ab[ind(k,k-1)] = -1.
55 ab[ind(k,k-(n-2))] = -1.
56 ab[ind(k,k+1)] = -1.
57 ab[ind(k,k+n-2)] = -1.
58 else: # i == n-1
59 ab[ind(k,k-1)] = -1.
60 ab[ind(k,k-(n-2))] = -1.
61 ab[ind(k,k+n-2)] = -1.
62 else: # j == n-1
63 if (i == 2):
64 ab[ind(k,k-(n-2))] = -1.
65 ab[ind(k,k+1)] = -1.
66 elif (i <= n-2):
67 ab[ind(k,k-1)] = -1.
68 ab[ind(k,k-(n-2))] = -1.
69 ab[ind(k,k+1)] = -1.
70 else: # i == n-1
71 ab[ind(k,k-1)] = -1.
72 ab[ind(k,k-(n-2))] = -1.
73
74# resolve
75u = solve_banded((l,u), ab, b)

1.1.1 Exercícios

E. 1.1.1.

Considere o seguinte problema de Poisson44endnote: 4Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. unidimensional e com condições de contorno de Dirichlet não-homogêneas

u′′(x)=f(x), (1.39)
u(0)=1, (1.40)
u(1)=1. (1.41)

para x(0,1). Assumindo a fonte f(x)=π2cos(πx). Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para a segunda derivada e uma malha uniforme.

Dica: u(x)=cos(πx)

E. 1.1.2.

Considere o seguinte problema de Poisson55endnote: 5Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. unidimensional

u′′(x)=f(x), (1.42)
u(0)=1, (1.43)
u(1)=0. (1.44)

para x(0,1). Assumindo a fonte f(x)=π2cos(πx). Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para a segunda derivada e uma malha uniforme. Na condição de contorno de Neumann, use uma fórmula de diferenças finitas para trás.

Dica: u(x)=cos(πx)

E. 1.1.3.

Considere o seguinte problema de valor de contorno

u′′(x)+u(x)=f(x), (1.45)
u(0)=0, (1.46)
u(1)=0. (1.47)

para x(0,1). Assumindo a fonte f(x)=π2sen(πx)+πcos(x). Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme.

Dica: u(x)=sin(πx)

E. 1.1.4.

Considere o seguinte problema de valor de contorno

u′′(x)+au(x)=f(x), (1.48)
u(0)=0, (1.49)
u(1)=0. (1.50)

para x(0,1). Assumindo a fonte f(x)=sen(πx), aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme. Faça simulações e estude os resultados para:

  • a=1

  • a=0.1

  • a=1

E. 1.1.5.

Considere o seguinte problema de Poisson66endnote: 6Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. 2D com condições de contorno de Dirichlet

Δu=0,(x,y)(0,1)2, (1.51)
u(0,y)=0,y[0,1], (1.52)
u(1,y)=0,y[0,1], (1.53)
u(x,0)=sen(πx),x[0,1], (1.54)
u(x,1)=sen(πx),x[0,1]. (1.55)

Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme.

Dica: u(x,y)=sen(πx)cos(πy)

E. 1.1.6.

Considere o seguinte problema de Poisson77endnote: 7Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. 2D com condições de contorno de Dirichlet

Δu=8(y22x+2x2),(x,y)(0,1)2, (1.56)
u(0,y)=0,y[0,1], (1.57)
u(1,y)=0,y[0,1], (1.58)
u(x,0)=0,x[0,1], (1.59)
u(x,1)=8x(1x),x[0,1]. (1.60)

Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme.

Dica: u(x,y)=8(xx2)y2

E. 1.1.7.

Considere o seguinte problema de Poisson88endnote: 8Siméon Denis Poisson, 1781 - 1840, matemático francês. Fonte: Wikipédia:Siméon Denis Poisson. 2D com condições de contorno

Δu=8(y22x+2x2),(x,y)(0,1)2, (1.61)
u(0,y)=0,y[0,1], (1.62)
u(1,y)=0,y[0,1], (1.63)
u(x,0)=0,x[0,1], (1.64)
ux(x,1)=8(1x),x[0,1]. (1.65)

Aplique o método de diferenças finitas para computar uma aproximação para a solução do problema. Use diferenças finitas centrais para as derivadas e uma malha uniforme. Na condição de Neumann, use uma fórmula de diferenças finitas para trás.

Dica: u(x,y)=8(xx2)y2


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