Você está na página 1de 10

FÍSICA COMPUTACIONAL 2

CAP. 6 – Solução de Equações Diferenciais Ordinárias (EDOs)

EDOs de 2ª Ordem

- EDO de Laplace  (V )  0   2V  0 - EDO de Poisson   (V )     2V    / 


d 2V d 2V 
em 1D  0 em 1D   
dx 2 dx 2 
- Mov. Harmônico Simples, Amortecido e Forçado - Circuito RLC (série)

d 2x dx d 2q dq 1
m 2  b  kx  f (t ) L 2  R  q  f (t )
dt dt dt dt C
- Difusão do Calor (estacionário)
PVI  necessitamos de valores iniciais como: x(t=0) = x0 e
d  dT  (dx/dt)0 = v0
k    f ( x) PVC  necessitamos das condições de contorno (fronteira) como
dx  dx  V(a) e V(b) = Dirichlet, V’(a) e V’(b) = Neumann ou Robin (mista)
FÍSICA COMPUTACIONAL 2
Solução Analítica
d 2 Exemplo
d2
x3
6.2 – Equação de Poisson 1D 2
  f ( x)  2
 x  ( x)    C1 x  C2
dx dx 6
1) Condições de Dirichlet
L3
(0) = 1 = a C1 e C2 são obtidos de a  C2  b    C1 L  a
(L) = n = b 6
C1  (b  a ) / L  L2 / 6
Usando a aproximação centrada da derivada 2ª temos
Equação das diferenças
 ( xi  x)  2 ( xi )   ( xi  x) i 1  2i  i 1  x 2 f ( xi )
  f ( xi ) ou
x 2
para

f1
f2
f3

fn
FÍSICA COMPUTACIONAL 2
d 2
6.2 - Equação de Poisson 1D 2
  f ( x)
dx
0 x 2x L x
Disctretização espacial xi  (i 1)x x1 x2 x3 xn
Usando 1 = a e 2 = b escrevemos os SEL na forma

Forma Compacta

K  d
com solução
  K 1d
sistema (n-2)(n-2)

O vetor solução é então   [a, 1 , 2 , 3 , , n  2 , b]T


completa
FÍSICA COMPUTACIONAL 2 EXEMPLO
d
2
1 = a
6.2 - Equação de Poisson 1D sistema (n-2)(n-2)  x
dx
2 n = b
clear
1) Definir C.C. a = ; b = ; n = a = ; b = ; n = ;
2) Definir: L = ; x = ; x = L = ; x = ; dx = ;
3) Definir: f = f =
4) Definir Matriz K e vetor d com zeros K = zeros( , ) ; d = zeros( , ) ;
5) Laço para i de 1 até n-2 for i = 1 : n-2
5.1) Ki,i = -2 K(i,i) = ;
5.2) Se i < n-2 if i < n-2
5.3) Ki+1, i = 1 e Ki, i+1 = 1 K(i+1,i) = ; K(i,i+1) = ;
Fim Se end Eliminação
d(i) = ; Gaussiana
5.4) di = -x2 * fi+1
Fim laço i end
6) Obter solução parcial:  = K-1d psi = inv(K) * d ; % ou = K \ d ;
7) Solução completa: 1 = a ; 2..n-1 =  ; n = b phi(1) = a ; phi(2:n-1) = psi ; phi(n) = b ;
C2 = a ; C1 = ;
8) Obter vals. da solução Analítica: anl phi_anl = -x.^3/6 + C1 * x + C2 ;
9) Gráfico das soluções figure(1);plot(x,phi_anl, x,phi, ‘ro’) ;
10) Cacular diferença entre soluções dif = phi_anl – phi ;
11) Gráfico das diferenças figure(2) ; plot(x,dif)
FÍSICA COMPUTACIONAL 2
d 2
6.2 - Equação de Poisson 1D 2
  f ( x)
dx
Forma alternativa C.C. de Dirichlet 1 = a e n = b

Usando que 1 = a e n = b escrevemos o SEL na forma sistema nn

i 1 1  a 1 0 0 . . . . 0   1   a 
1 2 1 0
 . . . 0   2   x 2 f 2 
i2 1  22  3  x 2 f 2 0 1 2 1 0 . . 0   3   x 2 f3 
    
i3 2  23  4  x 2 f3  . 0 1 2 1 . . 0   4   x f 4 
2


. . 0 . 0    
    
. . . 0    
i  n  1 n  2  2n 1  n  x 2 f n 1 . . . . 0 1 2 1  n 1   x 2 f n 1 
in n  b     
0 0 0 . . 0 0 1   n   b 
O vetor solução é então   [a, 2 , 3 , , n 1 , b]T   K 1d
completa
FÍSICA COMPUTACIONAL 2 EXEMPLO
d 2
6.2 - Equação de Poisson 1D Forma alternativa
2
 x
sistema nn dx
clear
1) Definir C.C. a = ; b = ; n = a = ; b = ; n = ;
2) Definir: L = ; x = ; x = L = ; x = ; dx = ;
3) Definir: f = -x ; f =
4) Definir Matriz K e vetor d com zeros K = zeros( , ) ; d = zeros( , ) ;
5) Laço para i de 1 até n for i = 1 : n
5.1) Ki,i = -2 K(i,i) = ;
5.2) Se i < n if i < n
5.3) Ki+1, i = 1 e Ki, i+1 = 1 K(i+1,i) = ; K(i,i+1) = ;
Fim Se end
5.4) di = - x2 * fi d(i) =
Fim laço i end
6) Redefinir: d1 = ; dn = ; d(1) = a ; d(n) = b ;
7) Redefinir: K1,1 = Kn,n = 1 ; K1,2 =Kn,n-1 = 0 K(1,1)= 1; K(n,n)=1; K(1,2) = 0 ; K(n,n-1)= 0;
8) Obter solução parcial:  = K-1d phi = inv(K) * d ; % ou = K \ d ;
C2 = a ; C1 = ;
9) Obter vals. da solução Analítica: anl phi_anl = -x.^3/6 + C1 * x + C2 ;
10) Gráfico das soluções figure(1);plot(x,phi_anl, x, phi);
11) Cacular diferença entre soluções dif = phi_anl – phi ;
12) Gráfico das diferenças figure(2) ; plot(x,dif)
FÍSICA COMPUTACIONAL 2
Sistemas Tidiagonais
6.2.1 – Algoritmo de Thomas

Quando a matriz de coeficientes possui elementos


não nulos nas 3 diagonais como mostrado ao lado
podemos poupar memória e tempo de processa-
mento usando o Algoritmo de Thomas
(Elim. Gaussiana)
function [x]=TRID(a,b,c,d)
n=length(a);
c(1) = c(1)/b(1); A função ao lado TRID.m deve estar salva no
d(1) = d(1)/b(1); mesmo diretório (pasta) do script principal.
for i = 2:n
id = (b(i) - c(i-1)*a(i)) ; Abra um documento novo no editor do
c(i) = c(i)/id ; Octave copie e cole o conjunto de instruções
d(i) = (d(i) - a(i)*d(i-1))/id ; salvando com o nome TRID.m
end
% retrosubstituição Obs.:
x(n) = d(n) ; a  vetor c/ vals. da diag. Inferior (di)
for i= n-1:-1:1 b  vetor c/ vals. da diag. Principal (dp)
x(i) = d(i) - c(i)*x(i + 1) ; c  vetor c/ vals. da diag. Superior (ds)
end d  vetor de termos independentes (d)
FÍSICA COMPUTACIONAL 2
6.2.1 – Algoritmo de Thomas APLICAÇÃO sistema (n-2)(n-2)
di  diag. Inferior de K
clear
dp  diag. Principal de K
a = ; b = ; n = ;
ds  diag. Superior de K
L = ; x = ; dx = ;
d  vet. Termos independentes
f = x’;

tic Inicia contagem de tempo


di = ones(n-2,1); dp = -2*ones(n-2,1); ds = di; Define diagonais

d = -dx^2 *f(2:n-1) ; Define vetor term. independent


d(1) = d(1) – a ; d(n-2) = d(n-2) – b ; Insere cond. de contorno

psi = TRID(di,dp,du,d) ; Resolve o SEL c/ Alg. Thomas


toc Encerra contagem de tempo
phi(1) = a ; phi(2:n-1) = psi ; phi(n) = b ; Solução numérica completa
C2 = a ; C1 = ;
phi_anl = -x.^3/6 + C1 * x + C2 ;
figure(1);plot(x,phi_anl, x,phi, ‘ro’) ;
dif = phi_anl – phi ;
figure(2) ; plot(x,dif)
FÍSICA COMPUTACIONAL 2
Equação de Poisson 1D RESULTADOS sistema (n-2)(n-2)

n = 21  Elapsed time is 0.00122714 seconds n = 2001  Elapsed time is 0.424923 seconds n = 10001
t = 11 s
Memoria: 7 * 160 + 2900 = 4 kB Memoria: 7*16 kB + 32MB = 32,1 MB M = 0,8GB
K K
FÍSICA COMPUTACIONAL 2
Equação de Poisson 1D RESULTADOS Algoritmo de Thomas

n = 21  Elapsed time is 0. 00253797 seconds n = 2001  Elapsed time is 0.159814 seconds n = 10001
t = 1,2 s
Memoria: 10 * 160 = 1,6 kB Memoria: 10 * 16 kB = 0,16 MB M = 800 KB

Você também pode gostar