PVC linear
Como usar diferenças finitas para resolver um PVC linear
Vamos lá?
Nesta aula vamos descobrir como as aproximações de diferenças finitas para derivadas são empregadas na resolução de um problema de valor de contorno.
- 1
- 2
Uma EDO é dita linear se...
Um problema de valor de contorno (PVC) é uma equação diferencial com condições adicionais prescritas não todas em um único ponto. Nesta aula, vamos considerar o problema de valor de contorno de segunda ordem
Queremos aproximações para os valores da função
Como temos
Vamos nos concentrar agora no caso mais simples de de equações lineares, ou seja, quando a equação em
Finalmente chegamos ao sistema linear
Este método para resolver um problema de valor de contorno é conhecido como método de diferenças finitas .
Resolução numérica no Octave
O Octave não tem uma função que resolve imediatamente um PVC. Devemos construir o sistema linear do método de diferenças finitas e resolvê-lo como um sistema linear regular. O bloco de código abaixo faz isso para o PVC
### Funções que definem a EDO no formato: ### y'' + p(x) y' + q(x) y = r(x) p = @(x) (3+x.^2) ./ x; q = @(x) 3*x; r = @(x) 0*x; ### Condições de contorno a = 1; # extremo esquerdo do intervalo de integração b = 3; # extremo direito do intervalo de integração alpha = 1; # valor de y no extremo esquerdo beta = 0.2; # valor de y no extremo direito
Passamos à definição da malha de diferenças finitas e do vetor y
que abrigará a solução numérica. Repare que o vetor y
já é inicializado com os valores da condição de contorno.
n = 20; # quantidade de subintervalos; x = linspace(a,b,n+1)'; # pontos da malha h = x(2) - x(1); # passo de discretização y = zeros(n+1,1); # vetor solução y(1) = alpha; # condição de contorno à esquerda y(end) = beta; # condição de contorno à direita
Por fim, construímos os vetores que representam as três diagonais da matriz do sistema linear e os usamos para motar a matriz A
. Para isso, usamos a função diag
que cria uma matriz com uma única diagonal, a partir de um vetor. O vetor independente v
é facilmente computado, mas não podemos esquecer de corrigir sua primeira e última componentes. Neste ponto, para relacionar o código do Octave com a teoria acima, lembre que todos os índices no Octave iniciam-se em
aa = 1 - h * p(x)/2; # subdiagonal inferior de A bb = -2 + h^2 * q(x); # diagonal principal de A cc = 1 + h * p(x)/2; # subdiagonal superior de A A = diag(aa(3:end-1),-1) + diag(bb(2:end-1)) + diag(cc(2:end-2),1); v = h.^2 * r(x(2:end-1)); v(1) = v(1) - aa(2) * y(1); v(end) = v(end) - cc(end-1) * y(end);
O sistema é resolvido com o operador \
e o resultado é atribuído ao miolo do vetor y
, uma vez que a condição de contorno já foi usada.
y(2:end-1) = A\v; plot(x,y,'o-')
1. No texto desta aula, foi apresentado um bloco de código para resolver no Octave um PVC linear. Converta-o em uma função do Octvave. Sua função deve ter o cabeçalho da forma:
function [x,y] = pvclinear(p,q,r,a,b,alfa,beta)
2. Resolva numericamente o PVC
3. Considere o problema de valor de contorno
- Esboce o gráfico de
para - Estime