Você está na página 1de 8

Universidade de São Paulo/Instituto

de Ciências Matemáticas e de
Computação

Relatório sobre o trabalho 1

Aluno: João Pedro Jardim Ciofi


nUSP: 11352272 Disciplina: SME0202 - Métodos Numéricos em Equações Diferenciais
Professor: Fabrício Simeoni de Souza

maio
2022
Sumário
1 O Problema 1

2 Discretizando o problema 1

3 Montando as equações 2

4 Montando o código 3

5 Análise de convergência 4
1 O Problema
Considere a equação de Helmholtz:

∂u2 ∂u2
+ − 10u = 0
∂x2 ∂y 2

definida no quadrado [−1, 1] × [−1, 1] com condições de fronteiras dadas por:

• u = 0 para y = 1 e −1 ≤ x ≤ 1

• u = 1 para y = −1 e −1 ≤ x ≤ 1
∂u
• = −0.5u para x = 1 e −1 ≤ y ≤ 1
∂x
∂u
• = 0.5u para x = −11 e −1 ≤ y ≤ 1
∂x
Implementar um código para este problema com ordem de convergência
2, e fazer a ánalise de convergência do método através de um gráfico com
pelo menos 5 malhas.

2 Discretizando o problema
Á partir dos dados, é possível notar que o problema pode ser resumido a
um quadrado 2 × 2, e suas condições de fronteira são de Dirichlet para a fron-
teira inferior e superior, e condição de Neumann para as fronteiras laterais.
Dessa forma, a discretização do problema consiste em dividir o quadrado em
um certo número de pontos igualmente distribuidos, dependendo do valor de
h. Dessa forma, sendo n o número de pontos totais, e m o número de pontos
nas fronteiras, o número de pontos total do quadrado será de:

m = 2/h + 1

n = m2
Dessa forma, dividindo o quadrado em n pontos, e chamando de U o vetor
dos pontos, tal que, U = U0 , U1 , U2 , · · · , Un−1 , e enumerando eles de baixo
pra cima e da esquerda para direita, em ordem crescente, obtemos o seguinte
problema (1)

1
3 Montando as equações
Depois de discretizado, basta encontrar como cada ponto do vetor U
se comporta no problema, dessa forma é possível calculá-los. Sabendo que
a fronteira superior e a inferior são condições de Dirichlet, e as fronteiras
laterais são de Neumann, obtemos as seguintes equações, todas com ordem
de erro O(h2 ):

• Ui = 1, para i ∈ (0, m) correspondendo a fronteira inferior

• Ui = 0 para i ∈ (n − m, n − 1) correspondendo a fronteira superior

• 1
h2
(Ui+2 (−h) + Ui+1 (4h) + Ui (−3h − h2 )) = 0 para Ui na fronteira es-
querda

• 1
h2
(Ui−2 (h) + Ui−1 (−4h) + Ui (3h + h2 )) = 0 para Ui na fronteira direita

• 1
h2
(Ui−1 + Ui+1 + Ui+m + Ui−m + Ui (−4 − 10h2 )) = 0 para os pontos
internos

Dessa forma é possível montar uma matriz, onde cada coluna representa os
índices de cada Ui , e cada linha representa a equação de cada Ui , dessa forma,
como n é o número de pontos do nosso problema, nossa matriz sera n × n
Seja, A esta matriz, então é possível encontar os valores de Ui resolvendo
um sistema tal que
AU = F
Sendo F um vetor de tamanho n, que representa o valor de cada equação,
ou seja, o valor que cada linha da matriz resulta, mais ainda, F representa
os valores que não dependem dos pontos Ui ’s

2
4 Montando o código
Montando as equações de cada Ui , e susbistuindo os valores que nós co-
nhecos, podemos montar a matriz A do problema. Feito isso nota-se que
ela se divide em 3 blocos de tamanho m × m cada, sendo um deles o bloco
identidade que chamarei de BI , um bloco similar a identidade porém com
a primeira e ultima posição da diagonal principal com valor 0 que chamarei
de BS , e um outro bloco diagonal em que seus valores da primeira e ultima
posição da diagonal principal −3h−h2 e 3h+h2 respectivamente, e os demais
valores da diagonal principal são iguais a −4 − 10h2 que chamarei de BP .
Dessa forma, percorrendo a diagonal principal de nossa matriz A, ela é
disposta da seguinte maneira:

• Sua primeira posição recebe um BI

• Em seguida, recebe m − 2 BP

• E por fim, o ultimo bloco da sua diagonal principal é um BI

• O primeiro BP recebe um BS à sua direita

• Os demais BP ’s recebem um BS à sua direita, e um BS à sua esquerda

Para resolver o sistema linear AU = F , utilizei uma função da biblioteca


numpy, da linguagem pythoy, escrita como numpy.linalg.solve(). Essa função
resolve o sistema e calcula todos os valores de Ui do nosso vetor, resolvendo
assim nosso problema.

3
5 Análise de convergência
Todas as equações utilizadas são métodos de diferenças finitas, com erro
de ordem O(h2 ), dessa forma é de se esperar que o erro do nosso problema
também seja de O(h2 ). Sendo assim, o erro local, dado pela diferença entre o
valor real de Ui e o valor da aproximação de Ui utilizando h, tem que tender
a 0 conforme h vai diminuindo à uma velocidade da ordem de O(h2 ).
Para verificar esse erro, resolvi o problema para h = 1/32, sendo nossa
malha de referência. Para comparação, resolvi o problema mais 5 vezes, para
5 diferentes valores de h, sendo eles:

• h = 1, sendo a malha mais grossa, com 9 pontos no total

• h = 1/2

• h = 1/4

• h = 1/8

• h = 1/16

Para verificar o erro entre a malha de refêrencia com as malhas mais grossas,
comparei 9 pontos em comum em cada malha, sendo assim obtive 5 vetores
de tamanho 9, onde cada posição representa a diferença entre um ponto da
malha de referencia e um ponto da outra malha. Para achar o erro total,
encontrei a norma de cada vetor, resultando em 5 valores, cada um represen-
tando o erro de truncamento da malha de referencia com a outra malha.
Para visualizar esse erro, obtém-se este gráfico logrítimo referente ao valor
de h e ao seu erro respectivo (2).
Analisando o gráfico é possível identificar claramente que quanto menor
o valor de h menor o valor do erro.

4
Figura 1: O problema

5
Figura 2:

Você também pode gostar