Método das diferenças finitas
O método das diferenças finitas (MDF) é um método de resolução de equações diferenciais que se baseia na aproximação de derivadas por diferenças finitas. A fórmula de aproximação obtém-se da série de Taylor da função derivada.[1] Hoje, os MDFs são a abordagem dominante das soluções numéricas de equações diferenciais parciais.[2]
O operador de diferenças finitas para derivada pode ser obtido a partir da série de Taylor para as seguintes funções:
- f(x+h)=f(x)+f′(x)h+f″(x)h22+f‴(x)h36+o(h4){displaystyle f(x+h)=f(x)+f'(x)h+{frac {f''(x)h^{2}}{2}}+{frac {f'''(x)h^{3}}{6}}+o(h^{4}),}
- f(x−h)=f(x)−f′(x)h+f″(x)h22−f‴(x)h36+o(h4){displaystyle f(x-h)=f(x)-f'(x)h+{frac {f''(x)h^{2}}{2}}-{frac {f'''(x)h^{3}}{6}}+o(h^{4})}
Portanto, a derivada primeira pode ser escrita de três formas distintas como uma diferença-quociente mais um termo de erro, obtido ao desprezar-se termos de ordem superior :
f′(x)=f(x+h)−f(x)h+o(h){displaystyle f'(x)={frac {f(x+h)-f(x)}{h}}+o(h)} , que é conhecida como fórmula das diferenças progressivas, ou
f′(x)=f(x)−f(x−h)h+o(h){displaystyle f'(x)={frac {f(x)-f(x-h)}{h}}+o(h)} , que é conhecida como fórmula das diferenças regressivas, ou ainda
f′(x)=f(x+h)−f(x−h)2h+o(h2){displaystyle f'(x)={frac {f(x+h)-f(x-h)}{2h}}+o(h^{2})} , que é conhecida como fórmula das diferenças centradas.- Além disso, é possível obter derivadas de ordem superior. A derivada de segunda ordem é obtida a partir de
- f(x+h)+f(x−h)=2f(x)+f″(x)h2+o(h4){displaystyle f(x+h)+f(x-h)=2f(x)+f''(x)h^{2}+o(h^{4})}
e é dada por f″(x)=f(x+h)−2f(x)+f(x−h)h2+o(h2){displaystyle f''(x)={frac {f(x+h)-2f(x)+f(x-h)}{h^{2}}}+o(h^{2})}
Índice
1 Método das diferenças finitas para problemas lineares
1.1 Resolução de problemas de contorno
1.2 Resolução de problemas de valor inicial e o método de Euler
2 Método das diferenças finitas para problemas não lineares
2.1 Resolução de problemas de contorno não-lineares
3 Referências
4 Ver também
Método das diferenças finitas para problemas lineares |
A partir das aproximações por diferença-quociente para derivadas de qualquer ordem, é possível transformar equações diferenciais em problemas lineares. Para isso, é necessário ignorar o termo de erro e tornar h{displaystyle h} um número muito pequeno, mas grande o suficiente para que não cause instabilidades nas aproximações das derivadas.
Resolução de problemas de contorno |
Para uma equação diferencial do tipo y″(x)=f(x)y′(x)+g(x)y(x)+z(x){displaystyle y''(x)=f(x)y'(x)+g(x)y(x)+z(x)}, onde x{displaystyle x} varia de a{displaystyle a} até b{displaystyle b}, y(a)=α{displaystyle y(a)=alpha } e y(b)=β{displaystyle y(b)=beta }.
A equação é aproximada pelo método das diferenças finitas, com um erro de truncamento igual a o(h2){displaystyle o(h^{2})}, substituindo-se as derivadas pelas suas representações numéricas, que são dadas por:
y′(x)=y(x+h)−y(x−h)2h{displaystyle y'(x)={frac {y(x+h)-y(x-h)}{2h}}}
y″(x)=y(x+h)−2y(x)+y(x−h)h2{displaystyle y''(x)={frac {y(x+h)-2y(x)+y(x-h)}{h^{2}}}}
Como é possível perceber, necessita-se definir um valor para h{displaystyle h}. Este valor pode ser definido pela divisão do intervalo em que se está interessado para a resolução do problema em N{displaystyle N} intervalos menores. Assim, o valor de h{displaystyle h} é dado por: h=b−aN{displaystyle h={frac {b-a}{N}}}.
As extremidades destes subintervalos são dadas por x(i)=a+(i−1)h{displaystyle x(i)=a+(i-1)h}, para i=1,2,...,N{displaystyle i=1,2,...,N}.
Para a resolução do problema, o mesmo é escrito na forma y″(x)−f(x)y′(x)−g(x)y(x)=z(x){displaystyle y''(x)-f(x)y'(x)-g(x)y(x)=z(x)}, que após a substituição das derivadas, torna-se:
y(x(i)+h)−2y(x(i))+y(x(i)−h)h2−f(x(i))[y(x(i)+h)−y(x(i)−h)2h]−g(x(i))y(x(i))=z(x(i)){displaystyle {frac {y(x(i)+h)-2y(x(i))+y(x(i)-h)}{h^{2}}}-f(x(i))left[{frac {y(x(i)+h)-y(x(i)-h)}{2h}}right]-g(x(i))y(x(i))=z(x(i))} , para i=2,3,...,N{displaystyle i=2,3,...,N}.
Como x(i+1)=x(i)+h{displaystyle x(i+1)=x(i)+h} e x(i−1)=x(i)−h{displaystyle x(i-1)=x(i)-h}, aquela equação pode ser reescrita como
y(x(i+1))−2y(x(i))+y(x(i−1))h2−f(x(i))[y(x(i+1))−y(x(i−1))2h]−g(x(i))y(x(i))=z(x(i)){displaystyle {frac {y(x(i+1))-2y(x(i))+y(x(i-1))}{h^{2}}}-f(x(i))left[{frac {y(x(i+1))-y(x(i-1))}{2h}}right]-g(x(i))y(x(i))=z(x(i))}.
Isolando os termos y(x(i+1)){displaystyle y(x(i+1))}, y(x(i)){displaystyle y(x(i))} e y(x(i−1)){displaystyle y(x(i-1))} na fórmula acima, obtêm-se
y(x(i−1))[1h2+f(x(i))2h]+y(x(i))[−2h2−g(x(i))]+y(x(i+1))[1h2−f(x(i))2h]=z(x(i)){displaystyle y(x(i-1))left[{frac {1}{h^{2}}}+{frac {f(x(i))}{2h}}right]+y(x(i))left[{frac {-2}{h^{2}}}-g(x(i))right]+y(x(i+1))left[{frac {1}{h^{2}}}-{frac {f(x(i))}{2h}}right]=z(x(i))}
A partir desta equação é possível resolver o sistema linear a partir de uma matriz A{displaystyle A} de coeficientes que multiplica os valores de y{displaystyle y}, sendo que a solução deste sistema é dada por B{displaystyle B}. Esse sistema linear é representado a seguir.
A=[100⋯⋯⋯01h2+f(x(2))2h−2h−g(x(2))1h2−f(x(2))2h0⋯⋯00⋱⋱⋱⋮⋮00⋱⋱⋱1h2+f(x(N−1))2h−2h−g(x(N))1h2−f(x(N+1))2h00⋯⋯⋯⋯1]{displaystyle A={begin{bmatrix}1&0&0&cdots &cdots &cdots &0\{frac {1}{h^{2}}}+{frac {f(x(2))}{2h}}&{frac {-2}{h}}-g(x(2))&{frac {1}{h^{2}}}-{frac {f(x(2))}{2h}}&0&cdots &cdots &0\0&ddots &ddots &ddots &vdots &vdots &0\0&ddots &ddots &ddots &{frac {1}{h^{2}}}+{frac {f(x(N-1))}{2h}}&{frac {-2}{h}}-g(x(N))&{frac {1}{h^{2}}}-{frac {f(x(N+1))}{2h}}\0&0&cdots &cdots &cdots &cdots &1end{bmatrix}}}
B=[αz(x(2))z(x(3))⋮β]{displaystyle B={begin{bmatrix}alpha \z(x(2))\z(x(3))\vdots \beta end{bmatrix}}}
Onde a aproximação para y{displaystyle y} é dada pelos pontos que são solução do sistema Ay=B{displaystyle Ay=B}.
Resolução de problemas de valor inicial e o método de Euler |
A partir do método das diferenças finitas também é possível obter o método de Euler, que é usado para obter soluções de problemas de valor inicial bem-posto. Leonhard Euler (1707 - 1783) foi o primeiro matemático de sua época a apresentar o uso do método de diferenças finitas para encontrar aproximações de soluções de equações diferenciais. Entretanto, o método de Euler não é usado na prática, pois possui pouca precisão. Alternativamente a este, são utilizados com maior frequência o método de Euler modificado ou o método de Runge-Kutta para solução de problemas de valor inicial.
Para um dado problema de valor inicial bem posto
y′(t)=f(t,y){displaystyle y'(t)=f(t,y)}, a{displaystyle a} ≤ t{displaystyle t} ≤ b{displaystyle b} , y(a)=α{displaystyle y(a)=alpha } .
Divide-se o intervalo [a,b]{displaystyle [a,b]} em N{displaystyle N} subintervalos e define-se que t(i)=a+(i−1)h{displaystyle t(i)=a+(i-1)h}, para i=1,2,...,N{displaystyle i=1,2,...,N}. Onde h{displaystyle h} é o espaçamento da malha.
A partir disto, temos que h=(b−a)N=t(i+1)−t(i){displaystyle h={frac {(b-a)}{N}}=t(i+1)-t(i)}, para i=1,2,...,N{displaystyle i=1,2,...,N}.
Aproximando a equação diferencial pelo método das diferenças finitas, desprezando-se o termo de erro, temos
y(t(i+1))−y(t(i))h=f(t(i),y(i)){displaystyle {frac {y(t(i+1))-y(t(i))}{h}}=f(t(i),y(i))}
y(t(i+1))=y(t(i))+hf(t(i),y(i)){displaystyle y(t(i+1))=y(t(i))+hf(t(i),y(i))}, que é usada para i=1,2,3,...,N.{displaystyle i=1,2,3,...,N.}
A equação acima é conhecida como equação de diferença associada ao método de Euler.
O sistema linear é inicializado com y(1)=α{displaystyle y(1)=alpha } e é de fácil solução.
Método das diferenças finitas para problemas não lineares |
O método das diferenças finitas é análogo ao utilizado para problemas lineares. Entretanto, é utilizado um processo iterativo para a obtenção da solução do problema, que não é linear.
Resolução de problemas de contorno não-lineares |
Para um problema de contorno não-linear geral, dado por y″=f(x,y,y′){displaystyle y''=f(x,y,y')} com x{displaystyle x} variando de a{displaystyle a} até b{displaystyle b}, e sendo as condições de contorno y(a)=α{displaystyle y(a)=alpha } e y(b)=β{displaystyle y(b)=beta },
há garantia de solução única se as seguintes condições forem satisfeitas.
f{displaystyle f} e suas derivadas parciais em relação a y{displaystyle y} e y′{displaystyle y'} são contínuas em D={displaystyle D=} { (x,y,y′)|a{displaystyle (x,y,y')|a} ≤ x{displaystyle x} ≤ b,{displaystyle b,} - ∞{displaystyle infty } < y{displaystyle y} < ∞{displaystyle infty }, - ∞{displaystyle infty } < y′{displaystyle y'} < ∞{displaystyle infty } };
f(x,y,y′){displaystyle f(x,y,y')} > δ{displaystyle delta }, para um certo δ{displaystyle delta } > 0{displaystyle 0} ;
- Existem constantes P{displaystyle P} e Q{displaystyle Q} tais que: P{displaystyle P} é o valor máximo que o módulo da derivada parcial de f{displaystyle f} em relação a y{displaystyle y} atinge em D{displaystyle D} e Q{displaystyle Q} é o valor máximo que o módulo da derivada parcial de f{displaystyle f} em relação a y′{displaystyle y'} atinge em D{displaystyle D}.
Como no caso anterior, a aproximação para a equação é obtida quando os termos de erro são desprezados.
Assim, y″=f(x,y,y′){displaystyle y''=f(x,y,y')} torna-se y(x+h)−2y(x)+y(x−h)h2=f(x,y,y(x+h)−y(x−h)2h){displaystyle {frac {y(x+h)-2y(x)+y(x-h)}{h^{2}}}=f(x,y,{frac {y(x+h)-y(x-h)}{2h}})}, que com a mesma divisão em intervalos anterior, é dada por y(x(i+1))−2y(x(i))+y(x(i−1))h2=f(x(i),y(i),y(x(i+1))−y(x(i−1))2h){displaystyle {frac {y(x(i+1))-2y(x(i))+y(x(i-1))}{h^{2}}}=f(x(i),y(i),{frac {y(x(i+1))-y(x(i-1))}{2h}})}, para i=2,3,...,N{displaystyle i=2,3,...,N}.
As condições de contorno são y(1)=α{displaystyle y(1)=alpha } e y(N+1)=β{displaystyle y(N+1)=beta }.
A partir da equação −y(x(i+1))−2y(x(i))+y(x(i−1))h2+f(x(i),y(i),y(x(i+1))−y(x(i−1))2h)=0{displaystyle -{frac {y(x(i+1))-2y(x(i))+y(x(i-1))}{h^{2}}}+f(x(i),y(i),{frac {y(x(i+1))-y(x(i-1))}{2h}})=0}, para i=2,3,...,N{displaystyle i=2,3,...,N} e das condições de contorno, obtemos um sistema não linear que pode ser resolvido via Método de Newton para sistemas não-lineares. Sendo que o sistema terá solução única se h{displaystyle h} < 2/Q{displaystyle 2/Q}. Se a aproximação inicial utilizada no método de Newton for suficientemente próxima da solução e se a matriz Jacobiana do sistema for não-singular, o sistema converge para a solução exata.
Referências
↑ Richard L. Burden; J. Douglas Faires. Análise Numérica, Editora CENGAGE Learning, 8° ediçao. [S.l.: s.n.] A referência emprega parâmetros obsoletos|coautor=
(ajuda)
↑ Christian Grossmann; Hans-G. Roos; Martin Stynes (2007). Numerical Treatment of Partial Differential Equations. [S.l.]: Springer Science & Business Media. p. 23. ISBN 978-3-540-71584-9
Ver também |
- Mecânica dos fluidos
CFD (Computation Fluid Dynamics)- Diferenciação Numérica