Quando se trabalha com equações diferenciais em problemas reais, geralmente não se possui formas analíticas de encontrar as soluções - às vezes soluções absolutas nem mesmo existem. Nesses momentos, fazem-se necessários os métodos numéricos de resolução, e um deles é o Método por Diferenças Finitas.
Este repositório foi feito com o propósito de estudar um pouco mais a fundo o estudado em aulas de Aplicações de Álgebra Linear de uma forma um pouco geral, e, ao menos em um primeiro momento, se propõe a encontrar soluções para E.D.O.s do tipo
Uma facilidade desse tipo de E.D.O. enunciada é que encontrar soluções analiticamente é possível, então analisar a relação da aproximação com o resultado real é bem simples.
Assim, suponhamos uma
Utilizando
Se observando mais perto:
Isto utilizando que a matriz
Onde o gráfico verde é a função
Este exemplo, para determinado
from math import sin, cos, exp, pi
import numpy as np
# coeficientes das discretizações
coefsU = {
(0,1): {-1: 1, 0: -2, 1: 1},
(2, n-3): {-2: -1, -1: 16, 0: -30, 1: 16, 2: -1},
(n-2,n-1): {-1: 1, 0: -2, 1: 1},
}
# coeficientes do h nas discretizações
coefsh = {
(0,1): 1,
(2, n-3): 12,
(n-2, n-1): 1
}
# condições de contorno
contorno = [exp(1), exp(1)]
# função
f = lambda x: (cos(x) - sin(x)**2)*exp(cos(x))
# intervalo
a = 0
b = 2*pi
# chama a função
A, c = matrizes_difFin(f, coefsU, coefsh, a, b, n, contorno)
u = np.linalg.inv(A)*np.matrix(c)