Académique Documents
Professionnel Documents
Culture Documents
Centro de Cincias
Departamento de Fsica
Mtodos Numricos para Fsica
Diferenas Finitas.
Matricula: 343913
Diferencas Finitas.
Matrcula: 343913
SUMARIO
Sum
ario
1 Introduc
ao
2 Corda Vibrante.
2.1 O Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
7
3 Conclus
ao
4 Ap
endices
4.1 Programa em C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
5 Refer
encias Bibliogr
aficas
11
1 Introduc
ao
Introduc
ao
(4)
i = 0, 1, ..., Nx
j = 0, 1, ..., Nt
(5)
(6)
(7)
(8)
2T
2T
= 2
uji+1 + uji1 + 2uji 1 2
uij1
h (x)
h (x)
(9)
1 Introduc
ao
A molecula computacional e uma traducao grafica da Equacao 09, pois ela estabelece a
relacao de dependencia existente entre o valor no ponto (i, j + 1) e seus vizinhos. Note que
no caso do metodo explcito o ponto (i, j + 1) depende apenas dos pontos (i 1, j), (i, j),
(i + 1, j) e (i, j - 1) todos do nvel anterior da a palavra explcito. O ponto uij1 pode ser
facilmente determinado determinando novamente uma aproximacao em diferencas finitas,
logo
u(xi , t0 + ) u(xi , t0 )
u(x, t)
=
t
2
(
)
u(x, 0)
u(xi , t0 ) = u(xi , t0 + ) 2
t
t=t0
(10)
(11)
u1i
2T
2T
j
j
j
u
+
u
+
2u
1
uj+1
=
i1
i
i
h2 (x) i+1
h2 (x)
(
)
(
)
2T
2T
0
0
0
=
u + ui1 + ui 1 2
2h2 (x) i+1
h (x)
uj+1
=
i
(12)
(13)
Assim, podemos facilmente resolver o problema para uma corda vibrante com densidade variavel sem muitas flutacoes nos resultados usando uma tecnica de estabilidade
numerica. Diz-se que um metodo computacional e estavel, se este nao propaga erros durante sua execucao. Para a utilizacao de alguns metodos computacionais e necessario fazer
uma analise para que nao haja nenhum erro grave. No caso do metodo das diferencas
finitas, o problema pode ser instavel se nao escolhermos convenientemente os valores de
2
. Por isso, usaremos uma solucao da forma:
h2
e100(x0,5)
(14)
Fazendo com que a onda em seu primeiro instante inicie na metade do intervalo e dividase em duas em sentidos opostos, analisaremos a solucao usando a densidade da corda
variavel, em primeira analise, percebe-se que a amplitude da onda varia de acordo com a
posicao, ou seja, um aumento linear na massa da corda, o que diminui aumenta a tensao,
diminuindo portanto a amplitude da onda.
2 Corda Vibrante.
Corda Vibrante.
(15)
u
x
e sen() = tg() =
u
x
(16)
Fy = T
u
u
2 u
2u
+
T
+
x
+
...
T
x
x x
x x
x2 x
x2
(18)
2u
2u
=
T
x
t2
x2
(19)
(20)
2 Corda Vibrante.
Diferencas Finitas
Como mencionado anteriormente discretizamos a Equacao (20), resolvendo-a por diferencas
finitas
uj+1
i
= (x)
uji+1
uji1
2uji
1 (x) uij1
T
chute inicial no meio da corda, tomando t = 0.0001(s) e h = at , onde a = ( (x) )(s)
u(x, 0) =
100(x0,5)2
e
0
se x = 0;
se 0 < x < 1;
se x = 0.
Figura 2: Resultados para a posicao em diferentes instantes de tempo, a amplitude depende da densidade, tornando-se cada vez menor a medida que o eixo x aumenta.
Inicialmente a onda parte de x = 0, 5L (curva vermelha), e a partir dai dividi-se em
duas, cada uma para um lado, e em um segundo instante (curva verde) temos que a
curva da direita diminui a medida que x aumenta, pois a densidade depende da posicao.
Podemos perceber claramente o decaimento da amplitude da onda na curva lilas, onde a
curva da esquerda sofre inversao de fase, pois a corda esta fixa, e a curva da direita que
ainda nao inverteu a fase, mostra-se com amplitude muito pequena, ou seja, a velocidade
de propagacao da onda e muito menor que inicialmente.
2.1
O Algoritmo
2.1
O Algoritmo
3 Conclus
ao
Conclus
ao
Nos descrevemos em detalhes o algoritmo para estudar uma Corda Vibrante usando
o Diferencas Finitas, apresentou-se graficos mostrando os resultados obtidos numericamente, analisando o comportamento com a evolucao do eixo x.
Uma descricao em detalhes da implementacao do algoritmo foi discutida na Secao 2.1,
como tambem uma previa da discretizacao em Diferencas Finitas aplicada para resolucao
desse problema em uma linguagem de programacao. O algoritmo completo e apresentado
no Apendice, todo o programa esta escrito em Linguagem C++.
O resultado obtido esta de acordo com o previsto teoricamente pela equacao abaixo,
onde a e a velocidade de propagacao da corda, T a tensao e a densidade linear da corda
T
(x)
20 x
= 0 +
L
a =
4 Ap
endices
4
4.1
Ap
endices
Programa em C++
#i n c l u d e <c s t d l i b >
#i n c l u d e <i o s t r e a m >
#i n c l u d e <f s t r e a m >
#i n c l u d e <sstream>
#i n c l u d e <iomanip>
#i n c l u d e <math . h>
#i n c l u d e <s t r i n g >
#i n c l u d e <v e c t o r >
#i n c l u d e <u n i s t d . h>
u s i n g namespace s t d ;
dou ble x0 = 0 . 0 , x f = 1 . 0 ;
dou ble t 0 = 0 . 0 , t f = 0 . 0 1 , t ;
dou ble Tensao = 1 0 . 0 ;
dou ble mu0 = 0 . 0 0 1 ;
dou ble c = s q r t ( Tensao /mu0 ) ;
dou ble d e l t a = 0 . 0 0 0 1 , h = c d e l t a ;
i n t Nx =( i n t ) ( ( x f x0 ) / h ) ;
i n t c o n t a d o r = 0 , p a s s o S a l v a r =20;
v e c t o r <double> x , u , u0 , u1 , e p s i l o n ;
void i t e r a r (){
f o r ( i n t i =1; i <Nx ; i ++){
u [ i ] = e p s i l o n [ i ] ( u0 [ i +1]+u0 [ i 1]) + 2 . 0 u0 [ i ] ( 1 . 0 e p s i l o n [ i ] )
u1 [ i ] ; //u ( x , t+d ) baseado em u ( x , t ) e u ( x , td )
}
f o r ( i n t i = 1 ; i < Nx ; i ++){
u1 [ i ] = u0 [ i ] ;
u0 [ i ] = u [ i ] ;
}
t = t+d e l t a ;
}
void i n i t (){
x . r e s i z e (Nx+1);
u . r e s i z e (Nx+1);
u0 . r e s i z e (Nx+1);
u1 . r e s i z e (Nx+1);
x [ 0 ] = x0 ;
4.1
Programa em C++
10
x [ Nx ] = x f ;
u[0] = 0.0;
u [ Nx ] = 0 . 0 ;
u1 [ 0 ] = 0 . 0 ;
u1 [ Nx ] = 0 . 0 ;
u0 [ 0 ] = 0 . 0 ;
u0 [ Nx ] = 0 . 0 ;
f o r ( i n t i = 1 ; i < Nx ; i ++){
x [ i ] = x0 + i h ;
u1 [ i ] = exp ( 100.0 ( x [ i ] 0 . 5 ) ( x [ i ] 0 . 5 ) ) ;
// p u l s o i n i c i a l u ( x , t o )
}
e p s i l o n . r e s i z e (Nx+1);
f o r ( i n t i =0; i<=Nx ; i ++){
e p s i l o n [ i ] = d e l t a d e l t a Tensao / ( hh (mu0+2mu0x [ i ] / x f ) ) ;
}
f o r ( i n t i =1; i < Nx ; i ++){
u0 [ i ] = 0 . 5 e p s i l o n [ i ] ( u1 [ i +1] + u1 [ i 1] ) + u1 [ i ](1 e p s i l o n [ i ] ) ;
// usa o p u l s o i n i c i a l para c a l c u l a r u ( x , t o+h )
}
iterar ();
}
void i d l e ( void ) {
c o n t a d o r = c o n t a d o r +1;
iterar ();
i f ( c o n t a d o r%p a s s o S a l v a r ==0){
s a l v a r ( contador ) ;
}
}
i n t main ( v o i d ){
init ();
salvar (0);
w h i l e ( t<=t f ){
idle ();
}
return 0;
}
5 Refer
encias Bibliogr
aficas
11
Refer
encias Bibliogr
aficas
1. DEVRIES, Paul L., A First Course in Computational Physics. 1a Edicao - 1994.
John Wiley & Sons, INC. Canada.