Vous êtes sur la page 1sur 28

214

Grupo: Marcelo Ricardo P. Pinto; Ricardo Rocha; Marcelo A. Carrasqueira; Felipe


Aguiar; Danilo C. Pereira; Juliana de Miranda; Mariana Garcia.


Captulo 10. Equaes Diferenciais
Parcias


10.1. Equaes Diferenciais Parcias Elpticas
10.1.1. Introduo
As equaes diferenciais se classificam em ordinrias e parciais.
No curso de anlise numrica j foram tratados mtodos numricos para a
resoluo das ordinrias.
Este trabalho tratar de mtodos, numricos, para solucionar equaes
diferenciais parciais de dois tipos: elpticas e parablicas.
Uma equao diferencial parcial (E.D.P.) uma equao que contm uma
funo incgnita de duas ou mais variveis e suas derivadas parciais em relao a
essas variveis.
A ordem de uma E.D.P. a ordem da mais alta derivada presente.
Uma soluo de uma E.D.P. qualquer funo que satisfaa equao
identicamente.
Os tipos de E.D.P. que trataremos aqui so de segunda ordem, assim
resolvemos destacar tambm sua forma geral:
A
u
x
x y B
u
x y
x y C
u
y
x y D
u
x
x y E
u
y
x y Fu x y G x y

2
2
2 2
2
( , ) ( , ) ( , ) ( , ) ( , ) ( , ) ( , ) + + + + + =
Definindo =B
2
-4AC temos:
215
Se <0 a equao ser chamada de elptica;
Se =0 a equao ser chamada de parablica;
Se >0 a equao ser chamada de hiperblica.
Um tipo especial de E.D.P. elptica a Equao de Poisson:
=
2
u x y ( , )

2
2
2
2
u
x
x y
u
y
x y f x y ( , ) ( , ) ( , ) + = ,
e um tipo especial de E.D.P. parablica a Equao do Calor:

u
t
x t
u
x
x t ( , ) ( , ) =
2
2
2
.
Essas duas equaes sero os nossos objetos de estudo.

10.1.2. Motivao
Em muitas aplicaes de Fsica, Biologia, Qumica, Engenharia e outros,
mais especificamente na formulaes de modelos matemticos, as equaes
diferencias so de grande importncia, resolvendo a maioria dos problemas.
Ao contrrio com que acontece com as equaes diferenciais ordinrias,
no existem mtodos de resolues para as equaes diferenciais parciais (com
exceo dos mtodos numricos), cada equao um caso particular.
Os mtodos numricos so eficientes, de fcil entendimento e sendo de
iterao so facilmente programveis.
10.1.3. Modelo
Primeiramente trataremos com as equaes parciais diferenciais elpticas, e
como citado acima vamos considerar a Equao de Poisson.
216
10.1.4. Metodologia
Vamos considerar a equao de Poisson:
=
2
u x y ( , )

2
2
2
2
u
x
x y
u
y
x y f x y ( , ) ( , ) ( , ) + = (1)
para (x,y) R e
u(x,y) = g(x,y) para (x,y) S
onde R = { (x,y) / a < x < b, c < y < d } e onde S denota o bordo de R.
Assumiremos que f e g so contnuas em seus domnios e que a soluo a
encontrar ser nica.
O mtodo usado uma adaptao do mtodo da diferena finita para
problemas de valores de borda. O primeiro passo encontrar inteiros n e m de
modo que h = (b-a)/n e k=(d-c)/m. Particionaremos o intervalo [a,b] em n partes
iguais de largura h e o intervalo [c,d] em m partes iguais de largura k (ver figura 1)
fornecendo uma grade no retngulo R e desenhando linhas verticais e horizontais
atravs de pontos com coordenadas (x
i
,y
j
), onde:
x
i
= a + ih para i = 0,1,...,n
y
j
= c + jk para j = 0,1,...,m


217

As linhas x = x
i
e y = y
j
so chamadas linhas da grade e suas intersees
so os pontos malhas da grade. Para cada ponto malha do interior da grade
usaremos a srie de Taylor na varivel x sobre x
i
para gerar a frmula da diferena
central :


2
2
1 1
2
2 4
4
2
12
u
x
x y
u x y u x y u x y
h
h u
x
y
i j
i j i j i j
i j
( )
( ) ( ) ( )
( , ),
,
, , ,
=
+

+
(2)
onde (x
i-1
,x
i+1
);
E a srie de Taylor na varivel y sobre y
j
para gerar a frmula da diferena
central :


2
2
1 1
2
2 4
4
2
12
u
y
x y
u x y u x y u x y
h
k u
y
x
i j
i j i j i j
i j
( )
( ) ( ) ( )
( , ),
,
, , ,
=
+

+
(3)
onde (y
j-1
,y
j+1
).
Usando essas frmulas na Eq. (1), podemos expressar a equao de Poisson
nos pontos (x
i
,y
j
) como:
u x y u x y u x y
h
u x y u x y u x y
k
i j i j i j i j i j i j
( ) ( ) ( ) ( , ) ( , ) ( , )
, , , + +
+
+
+
=
1 1
2
1 1
2
2 2

= + + f x y
h u
x
y
k u
x
x y
i j i j i j
( , ) ( , ) ( , )
2 4
4
2 4
4
12 12


para cada i = 1,2,...,(n-1) e j = 1,2,...,(m-1).
218
E as condies de bordo como:
u(x
0
,y
j
) = g(x
0
,y
j
), para cada j = 0,1,...,m;
u(x
n
,y
j
) = g(x
n
,y
j
), para cada j = 0,1,...,m;
u(x
i
,y
0
) = g(x
i
,y
0
) , para cada i = 0,1,...,n-1;
u(x
i
,y
m
)= g(x
i
,y
m
) , para cada i = 0,1,...,n-1;
Dessa forma, a equao diferencial, com o resultado do mtodo da
diferena central, com erro local de truncamento de ordem O(h
2
+ k
2
), pode ser
escrita como : 2 1
2
1 1
2
1 1
2
h
k
w w w
h
k
w w h f x y
i j i j i j i j i j i j
|
\

|
.
| +

(
+
|
\

|
.
| + =
+ + , , , , ,
( ) ( ) ( , )
(4)
para cada i = 1,2,...,n-1 e j = 1,2,...,m-1 e
w
0,j
= g(x
0
,y
j
) para cada j = 0,1,...,m
w
n,j
= g(x
n
,y
j
) para cada j = 0,1,...,m (5)
w
i,0
= g(x
i
,y
j
) para cada i = 1,2,...,n-1
w
i,m
= g(x
i
,y
m
) para cada i = 1,2,...,n-1
onde w
i,j
aproxima u(x
i
,y
j
).
A equao tpica em (4) envolve aproximaes para u(x,y) nos pontos (x
i-
1
,y
j
), (x
i
,y
j
), (x
i+1
,y
j
), (x
i
,y
j-1
) e (x
i
,y
j+1
).
Reproduzindo uma poro de grades onde esses pontos esto situados (ver
figura 1), mostraremos que cada equao envolve aproximaes na estrela formada
na regio sobre (x
i
,y
j
).
219


Se usarmos as informaes sobre as condies de bordo sempre que o
sistema dado por (4) for apropriado, isto , todos os pontos (x
i
,y
j
) so adjacentes
aos pontos malhas do bordo, temos um sistema (n-1)(m-1) de equaes lineares em
(n-1)(m-1) incgnitas, onde as incgnitas so as aproximaes w
i,j
para u(x
i
,y
j
) no
interior dos pontos malhas.
O sistema linear envolvendo essas incgnitas expresso por matriz
calculando mais eficientemente se uma reelaborao dos pontos malhas interiores
for feita. Uma recomendao de reelaborao desses pontos dado por:
P
l
= (x
i
,y
j
) e w
l
= w
i,j
,
onde l = i + (m-1-j)(n-1), para cada i = 1,2,...,n-1 e j = 1,2,...,m-1. Esta tabela de pontos
malhas consecutivamente deixa certo e levanta o sistema mais baixo.
10.1.5. Algoritmo de Equao de Diferena-Finita de
Poisson
Para aproximar a soluo da equao de Poisson

2
2
2
2
u
x
u
y
f x y + = ( , ) a x b c y d ,
220
Sejam as condies de fronteira:
u(x,y)=g(x,y) se x=a ou x=b e c y d
e
u(x,y)=g(x,y) se y=c ou y=d e a x b
As entradas so os extremos a,b,c,d ; os inteiros m,n ; a tolerncia TOL ; e o nmero
mximos de iteraes Lfront.
As sadas aproximadas w
i j ,
para u x y
i i
( , ) para cada i=1,...,n-1 e j=1,...,m-1 ou uma
mensagem que diz que o nmero de iteraes foi excedido.

Passo 1) Faa h=(b-a)/n
k=(d-c)/m
Passo 2) Para i=1,...,n-1 faa x a ih
i
= + (os passos 2 e 3 constrem
os pontos de malha)
Passo 3) Para j=1,...,m-1 faa y c jk
i
= +
Passo 4) Para i=1,...,n-1
para j=1,...,m-1 faa w
i j ,
= 0
Passo 5) Faa
r h k
q r
l
=
= =
=
2 2
2 1
1
/
( )

Passo 6) Enquanto I Lfront faa o passo 7 ao 20.
(Esses passos executam as iteraes de Gauss-Seidel)
Passo 7) Faa
221

( ) ( ) ( ) ( ) z h f x y g a y rg x d rw w q
norm z w
w z
m m m m
m
m
= + + + +
=
=

2
1 1 1 1 1 2 2 1
1 1
1 1
, , , /
, ,
,
,

Passo 8) Para i = 2,...,n-2 Faa

( ) ( ) ( ) z h f x y rg x d w w rw q
se
w z norm
i m i i m i m i m
i m
= + + + +
>
+

2
1 1 1 1 1 2
1
, , /
, , ,
,

ento faa norm w z
i m
=
, 1

faa w z
i m ,
=
1

Passo 9) Faa

( ) ( ) ( ) ( ) z h f x y g b y rg x d w rw q
se
w z norm
n m m n n m n m
n m
= + + + +
>


2
1 1 1 1 2 1 1 2
1 1
, , , /
, ,
,

ento faa
faa
norm w z
n m
=
1 1 ,
w z
n m
=
1 1 ,

Passo 10) Para j = m-2,...,2 faa o passo 11 ao 13
Passo 11) Faa ( ) ( ) ( )
z h f x y g a y rw rw w q
j j j j j
= + + + +
+
2
1 1 1 1 1 2
, , /
, , ,

se w z norm
j 1,
> ento faa norm w z
j
=
1,

faa w z
j 1,
=

222
Passo 12) Para i=2,...,n-2 faa

z h f x y w rw w rw q
i j i j i j i j i j
= + + + +
+ +
( ( , ) ) /
, , , ,
2
1 1 1 1

se w z
i j ,
>norm ento faa norm w z
i j
=
,

faa w z
i j ,
=
Passo 13) Faa
z=( ( , ) ( , ) ) /
, , ,
+ + + +
+
h f x y g b y w rw rw q
n j j n j n j n j
2
1 2 1 1 1 1

Passo 14) Faa z h f x y g a y rg x c rw w q = + + + + ( ( , ) ( , ) ( , ) ) /
, ,
2
1 1 1 1 1 2 2 1

se w z norm
1 1 ,
> ento faa norm w z =
1 1 ,

faa w z
1 1 ,
=
Passo 15) Para i=2,...,n-2 faa
z h f x y g x c w rw w q
i i i i
= + + + +
+
( ( , ) ( , ) ) /
, , ,
2
1 1 1 1 2 1 1

se w z norm
i,1
> ento faa norm w z
i
=
,1

faa w z
i ,1
=
Passo 16) Faa
z h f x y g b y rg x c w rw q
n n n n
= + + + +

( ( , ) ( , ) ( , ) )
, ,
2
1 1 1 1 2 1 1 2

se w z norm
n
>
1 1 ,
ento faa norm w z
n
=
1 1 ,

faa w z
n
=
1 1 ,

Passo 17) Se norm TOL ento faa passos 18 e 19
Passo 18) Para i=1,...,n-1
para j=1,...,m-1 imprima ( , , )
,
x y w
i j i j

223
Passo 19) Fim. (programa terminado com sucesso)
Passo 20) Faa i=i+1
Passo 21) Imprima (O nmero mximo de iteraes foi atingido)
Fim.

10.1.6. Fluxograma
Incio
Dados
Iniciais
Clculo de h e k
i = 1
Clculo de xi
i = n-1 i = i+1 No
j = 1
Yes
Clculo de yi
j = m-1 j = j+1 No
i = 1
Yes
j = 1
wi,j = 0
j = m-1 j = j+1 No
i = i+1

224
i = n-1 No
Clculo de r,q e i=1
Yes
Clculo de z,norm e
"w"
norm menor
ou igual TOL
i = i+1 No
Imprima os
resultados
Yes
FIM
i menor que
LFront
Nmero de iteraes
foi excedido
No
Yes


10.1.7. Exemplo
Considere a equao de Poisson
( ) ( )

2
2
2
2
u
x
x y
u
y
x y xe
y
, , , + = 0<x<2, 0<y<1,
com condies de contorno

( )
( )
u y
u x x
0 0
0
, ,
, ,
=
=

( )
( )
u y e
u x ex
y
2 2
1
, ,
, ,
=
=

0 1
0 2


y
x
,
.

usaremos o algoritmo para aproximar a soluo exata ( ) u x y xe
y
, = com n = 6 e m = 5.
O critrio de parada para o mtodo Gauss-Seidel no passo 17 requer

( ) ( )
w w
i j
l
i j
l
, ,
,
1 10
10

225
para cada i = 1,...,5, e j = 1,...,4; ento a soluo para a equao diferencial foi obtida de
modo preciso, e o procedimento de parada para l = 61. O resultado com os valores
corretos so apresentados na tabela abaixo:
j x
i
y
i
w
i,j
(61)
u(x
i,
y
i
) |u(x
i,
y
j
) - w
i,j
(61)
|
1 0,33330 0,20000 0,40726 0,40713 1,3 x 10
-4
2 0,33330 0,40000 0,49748 0,49727 2,08 x 10
-4
3 0,33330 0,60000 0,60760 0,60737 2,23 x 10
-4
4 0,33330 0,80000 0,74201 0,74185 1,6 x 10
-4
1 0,66670 0,20000 0,81452 0,81427 2,55 x 10
-4
2 0,66670 0,40000 0,99496 0,99455 4,08 x 10
-4
3 0,66670 0,60000 1,21520 1,21470 4,37 x 10
-4
4 0,66670 0,80000 1,48400 1,48370 3,15 x 10
-4
1 1,00000 0,20000 1,22180 1,22140 3,64 x 10
-4
2 1,00000 0,40000 1,49240 1,49180 5,8 x 10
-4
3 1,00000 0,60000 1,82270 1,82210 6,24 x 10
-4
4 1,00000 0,80000 2,22600 2,22550 4,51 x 10
-4
1 1,33330 0,20000 1,62900 1,62850 4,27 x 10
-4
2 1,33330 0,40000 1,98980 1,98910 6,79 x 10
-4
3 1,33330 0,60000 2,43020 2,42950 7,35 x 10
-4
4 1,33330 0,80000 2,96790 2,96740 5,4 x 10
-4
1 1,66670 0,20000 2,03600 2,03570 3,71 x 10
-4
2 1,66670 0,40000 2,48700 2,48640 5,84 x 10
-4
3 1,66670 0,60000 3,03750 3,03690 6,41 x 10
-4
4 1,66670 0,80000 3,70970 3,70920 4,89 x 10
-4

10.1.8. Implementao
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<complex.h>
float exemplo(float a1,int a2);
void main(void)
{
226
float m,n,r,q,l,a,b,c,d,i,j,w[4][4],LFront,norm,TOL;
float h,k,x[200],y[200],aux,aux1,aux2,aux3,aux4,aux5,z;
m=5;
n=6;
printf("entre com o valor de a: ");
scanf("%f",&a);
printf("entre com o valor de b: ");
scanf("%f",&b);
printf("entre com o valor de c: ");
scanf("%f",&c);
printf("entre com o valor de d: ");
scanf("%f",&d);
printf("entre com o valor de tolerncia: ");
scanf("%f",&TOL);
printf("entre com o m ximo de iteraes : ");
scanf("%f",&LFront);
h=(b-a)/n;
k=(d-c)/m;
for (i=1;i<=(n-1);i++) //passo 2
x[i]=a+(i*h);

for (j=1;j<=(m-1);j++) //passo 3
y[i]=c+(j*k);
227
for (i=1;i<=(n-1);i++) //passo 4
for (j=1;j<=(m-1);j++)
w[i][j]=0;
r=h*h/k*k; //passo 5
q=2*(1+r);
l=1;
while (l<=LFront) //passo 6
{
aux=exemplo(x[1],y[m-1]); // passo 7
aux1=exemplo(a,y[m-1]);
aux2=exemplo(x[1],d);
aux3=exemplo(x[1],y[m-2]);
aux4=exemplo(x[2],y[m-1]);
aux5=exemplo(x[1],y[m-1]);
z=(-(h*h)*aux + aux1 + r*aux2 + r*aux3 + aux4)/q;
norm=fabs(z-aux5);
aux5=z;
for (i=2;i<=n-2;i++) //passo 8
{
aux=exemplo(x[i],y[m-1]);
aux1=exemplo(x[i],d);
aux2=exemplo(x[i-1],y[m-1]);
aux3=exemplo(x[i+1],y[m-1]);
228
aux4=exemplo(x[i],y[m-2]);
aux5=exemplo(x[i],y[m-1]);
z=(-(h*h)*aux+ r*aux1 + aux2 + aux3 +r*aux4)/q;
if( abs(aux5-z) > norm)
norm=fabs(aux5-z);
aux5=z;
}
// fim de 8
{
aux=exemplo(x[n-1],y[m-1]);
aux1=exemplo(b,y[m-1]);
aux2=exemplo(x[n-1],d);
aux3=exemplo(x[n-2],y[m-1]);
aux4=exemplo(x[n-1],y[m-2]);
aux5=exemplo(x[n-1],y[m-1]); // passo 9
z=(-(h*h)*aux + aux1 +r*aux2 + aux3 + r*aux4)/q;
if( fabs(aux5-z) > norm)
norm=fabs(aux5-z);
aux5=z;
}
{
for(j=m-2;j<=2;j--) //passo 10
{
229
aux=exemplo(x[1],y[j]); // passo 11
aux1=exemplo(a,y[j]);
aux2=exemplo(x[1],y[j+1]);
aux3=exemplo(x[1],y[j-1]);
aux4=exemplo(x[2],y[j]);
aux5=exemplo(x[1],y[j]);
z=(-(h*h)*aux + aux1 +r*aux2 + r*aux3 + aux4)/q;
if( fabs(aux5-z) > norm)
norm=fabs(aux5-z);
aux5=z;
}
for(i=2;i<=n-2;i++)
{
aux=exemplo(x[i],y[j]); // passo 12
aux1=exemplo(x[i-1],y[j]);
aux2=exemplo(x[i],y[j+1]);
aux3=exemplo(x[i+1],y[j]);
aux4=exemplo(x[i],y[j-1]);
aux5=exemplo(x[i],y[j]);
z=(-(h*h)*aux + aux1 +r*aux2 + aux +r*aux4)/q;
if( fabs(aux5-z) > norm)
norm=fabs(aux5-z);
aux5=z;
230
}
//fim do 12
{
aux=exemplo(x[n-1],y[j]); // passo 13
aux1=exemplo(b,y[j]);
aux2=exemplo(x[n-2],y[j]);
aux3=exemplo(x[n-1],y[j+1]);
aux4=exemplo(x[n-1],y[j-1]);
aux5=exemplo(x[n-1],y[j]);
z=(-(h*h)*aux + aux1 + aux2 +r*aux3 +r*aux4)/q;
if( fabs(aux5-z) > norm)
norm=fabs(aux5-z);
aux5=z;
}
}
//fim do 10
{
aux=exemplo(x[1],y[1]); // passo 14
aux1=exemplo(a,y[1]);
aux2=exemplo(x[1],c);
aux3=exemplo(x[1],y[2]);
aux4=exemplo(x[2],y[1]);
aux5=exemplo(x[1],y[1]);
231
z=(-(h*h)*aux + aux1 + r*aux2 +r*aux3 + aux4)/q;
if( fabs(aux5-z) > norm)
norm=fabs(aux5-z);
aux5=z;
}
for(i=2;i<=n-2;i++)
{
aux=exemplo(x[i],y[1]); // passo 15
aux1=exemplo(x[i],c);
aux2=exemplo(x[i-1],y[1]);
aux3=exemplo(x[i],y[2]);
aux4=exemplo(x[i+1],y[1]);
aux5=exemplo(x[i],y[1]);
z=(-(h*h)*aux + aux1 +r*aux2 + aux3 +r*aux4)/q;
if( fabs(aux5-z) > norm)
norm=fabs(aux5-z);
aux5=z;
}
//fim do 15
{
aux=exemplo(x[n-1],y[1]); // passo 16
aux1=exemplo(b,y[1]);
aux2=exemplo(x[n-1],c);
232
aux3=exemplo(x[n-2],y[1]);
aux4=exemplo(x[n-1],y[2]);
aux5=exemplo(x[n-1],y[1]);
z=(-(h*h)*aux + aux1 +r*aux2 + aux3 +r*aux4)/q;
if( fabs(aux5-z) > norm)
norm=fabs(aux5-z);
aux5=z;
}
if(norm<=TOL) //passo 17
{
for(i=1;i<=(n-1);i++)
for(j=1;j<=(m-1);j++) //passos 18 e 19
{
printf("%f","os valores de x[i] y[j] e
aux5[i][j]:",x[i],y[j],aux5);
getch();
}
printf("Procedimento completado com sucesso!");
}
//fim do if norm
l=l+1; //passo 20
}
printf("Procedimento completado sem sucesso!");
233
}//fim do main
float exemplo(float a1,int a2)
{
float prod;

/* definicao da funcao */
prod=a1*(exp(a2));
return(prod);
}

10.2. Equaes Diferenciais Parciais Parablicas
10.2.1. Modelo
Cuidaremos, agora das equaes parciais diferenciais parablicas., considerando a
Equao de propagao do Calor.

10.2.2. Metodologia
Consideremos a Equao de propagao do Calor:

u
t
x t
u
x
x t ( , ) ( , ) =
2
2
2
(1)
0<x<1 , t>0
com condies iniciais
u(t,0) = 0
u(1,t) = 0, t>0 e u(x,0) = f(x), 0 x 1
234
Usaremos a aproximao da soluo do problema de diferena finita e o mtodo
similar usado em equaes diferenciais elpticas.
Primeiramente, selecionaremos duas malhas constantes, h e k, tal que m = 1/h seja
um inteiro. Os pontos dessa grade sero da forma (x
i
,t
j
), onde x
i
= ih para i= 0,1,...,m e t
j

= jk, para j = 0,1,... .
Obteremos o mtodo de diferena usando a srie de Taylor em t para formar o
quociente de diferena.


u
t
x t
u x t k u x t
k
k
t
u x
i j
i j i j
i j
( , )
( , ) ( , )
( , ) =
+

2
2
2
(2)
para algum
j
(t
j
,t
j+1
) e a srie de Taylor em x para formar o quociente de diferena:


2
2 2
2 4
4
2
12
u
x
x t
u x h t u x t u x h t
h
h u
x
t
i j
i j i j i j
i j
( )
( , ) ( ) ( , )
( , ),
,
, , ,
=
+ +
(3)
onde (x
i-1
,x
i+1
).
A equao diferencial parcial (1) implica que para todo ponto interior da grade
(x
i
,t
j
), com i = 1,2,...,m-1 e j = 1,2,..., teremos:

u
t
x t
u
x
x t
i j i j
( , ) ( , ) =
2
2
2
0
ento o mtodo da diferena usando quocientes de diferena (2) e (3) dado por:

w w
k
w w w
h
i j i j i j i j i j , , , , , + +

+
=
1 2 1 1
2
2
0 (4)
onde w
ij
aproxima u(x
i
,t
j
).
O erro local truncado da equao diferencial :


i j i j i j
k u
t
x
h u
x
t
,
( , ) ( , ) =
2 12
2
2
2
2 4
4
(5)
Resolvendo a eq. (--0 para w
i,j+1
) dados, teremos:
235
w
k
h
w
k
h
w w
i j i j i j i j , , , ,
( )
+ +
=
|
\

|
.
| + +
1
2
2
2
2 1 1
1
2
(6)
para cada i= 1,2,...,(m-1) e j = 1,2,... .
Assim a condio inicial u(x,0) = f(x), para 0x1, implica que w
i,0
=f(x
i
), para i
=
0,1,...,m, esse valor pode ser usado na eq. (6) para achar o valor de w
i,j
para i= 1,2,...,(m-
1). A condio inicial u(0,t) = 0 e u(1,t)= 0 implica que w
0,1
= w
m,1
= 0, ento todas as
entradas da forma w
i,1
pode ser determinada.
Se o procedimento reaplicado uma vez em todas as aproximaes w
i,j1
os
valores de w
i,2
, ...,w
i,m-1
podem ser obtidos de maneira similar.
Uma explicitao natural do mtodo da diferena na eq. (6) implica que a matriz
(m-1) por (m-1) associada com seus sistemas pode ser escrita na forma tridiagonal :
( )
( )
( )
A =

(
(
(
(
(
(
(
1 2 0 0
1 2
0
0
0 0 1 2









onde =
2
(k/h
2
).
Se tivermos:
w
(0)
= (f(x
1
), ... ,f(x
m-1
))
t

e
w
(j)
= (w
i,j
, ... , w
m-1,j
)
t
para cada j = 1,2,...
ento uma aproximao para a soluo dada por:
w
(j)
= Aw
(j-1)
, para cada j = 1,2,... .
236
Este mtodo conhecido como mtodo Avanado de Diferena. Se a soluo da
equao diferencial parcial tem quatro derivadas parciais contnuas em x e duas em t,
ento a eq. (5) implica que o mtodo de ordem O(k + h
2
).

10.2.3. Algoritmo
Para aproximar soluo de equaes parciais parablicas
( ) ( )

u
t
x t
u
x
x t , , , =
2
2
2
0 0 1 < < x , 0 < < t T,
sujeito as condies de contorno
( ) ( ) u t u t 0 1 0 , , , = = 0 < < t T,
e condies iniciais
( ) ( )
u x f x , , 0 = 0 1 x :
Entrada ponto final l; tempo mximo T; constante ; inteiros m3,N1.
Sada aproximaes w
i j ,
para ( ) u x t
i j
, para i = 1,...,m-1 e j = 1,...,N.
Passo 1) Faa h l m = ;
k T N = ;
=
2 2
k h .
Passo 2) Para i = 1,...,m-1 faa
( )
w f ih
i
= . (valores iniciais)
Passo 3) Faa l
1
1 2 = + ;
u l
1 1
= .
Passo 4) Para i = 2,...,m-2 faa l u
i 1 1
1 2 = + +

;
u l
i
=
1
.
237
Passo 5) Faa l u
m m
= + +
1 2
1 2 .
Passo 6) Para j = 1,...,N faa passos 7 - 11.
Passo 7) Faa t = jk;
z w l
1 1 1
= .
Passo 8) Para i = 2,...,m - 1 faa ( ) z w z l
i i i i
= +

1
.
Passo 9) Faa w z
m m
=
1 1
.
Passo 10) Para i = m - 2,...,1 faa w z u w
i i i i
=
+1
.
Passo 11) SADA(t);
Para i = 1,...,m - 1 faa x = ih; SADA ( ) x w
i
, .
Passo 12) FIM.
10.2.4. Fluxograma
Incio
Dados iniciais
Clculo de h,k e
i = 1
w
i
= f(ih)

Clculo de l
1
e u
1
i = m - 1
No
Yes
i = 2
Clculo de l
1
e u
1
i = m - 2 No
i = i + 1
i = i + 1
Yes
Clculo de l
m-1
j = 1
Clculo de t e z
1
i = 2

238
Clculo de z
i
i = m -1
No
i = i + 1
Yes
Clculo de w
m-1
i = m - 2
Clculo de w
i
i = 1 No i = i - 1
Yes
SADA (t)
i = 1
Clculo de x
SADA (x,w
i
)
i = m -1 No i = i + 1
Yes
j = N
Yes
FIM
No j = j + 1

10.2.5. Exemplo
Para h = 0.1 e k = 0.01, usado para aproximar a equao do calor
( ) ( )

u
t
x t
u
x
x t , , , =
2
2
2
0 0 1 < < x , 0 < t,
( ) ( ) u t u t 0 1 0 , , , = = 0 < t, e ( ) u x x , sen , 0 = 0 1 x ,
Os resultados de w
i ,50
at ( ) u x
i
, . 05 onde i = 0,1,...,10 esto listados na tabela
abaixo:
239

x
i
w
i , 50
u(x
i
, 0.5) | w
i , 50
- u(x
i
, 0.5) |
0 0 0 -
0,1 0,00289802 0,00222241 6,756 x 10
-4
0,2 0,00551236 0,00422728 1,285 x 10
-3
0,3 0,00758711 0,00581836 1,769 x 10
-3
0,4 0,00891918 0,00683989 2,079 x 10
-3
0,5 0,00937818 0,00719188 2,186 x 10
-3
0,6 0,00891918 0,00683989 2,079 x 10
-3
0,7 0,00758711 0,00581836 1,769 x 10
-3
0,8 0,00551236 0,00422728 1,285 x 10
-3
0,9 0,00289802 0,00222241 6,756 x 10
-4
1 0 0 -

10.2.6. Implementao
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<complex.h>
float f(float a1);
void main(void)
{
//declarao de variveis
float l[4],lfinal,T;
float i,j,t,u[4],w[4];
float lam,h,k,x,z[4];
//constantes
const A = 5 ;
const m=5;
const N=6;
//entrada de dados
printf("entre com o valor de l: ");
240
scanf("%f",&lfinal);
printf("entre com o tempo m ximo T: ");
scanf("%f",&T);
// PASSO 1
h=lfinal/m;
k=T/N;
lam = A*A*(k/h*h);
w[m]=0;

//PASSO 2
for (i=1;i<=(m-1);i++)
w[i]=f(i*h);

// passo 3-11 resolve um sistema linear tridimensional usando
// o algoritmo 6.7.)

//PASSO 3
l[1] = 1 + lam;
u[1] = -lam/(2*l[1]);

//PASSO 4
for (i=2;i<=(m-2);i++)
{
l[i] = 1+lam+((lam*u[i-1])/2);
u[i] = -lam/(2*l[i]);
}

//PASSO 5
l[m-1] = 1+lam+((lam*u[m-2])/2);

//PASSO 6
for (j=1;i<=N;j++) //passos 7-11
{
//PASSO 7
t = j*k;
z[1] = (((1-lam)*w[1])+((lam/2)*w[2]))/l[1];

//PASSO 8
for (i=2;i<=(m-1);i++)
z[i] = (((1-lam)*w[i])+((lam/2)*w[i+1]+w[i-1]+z[i-1]))/l[i];

//PASSO 9
w[m-1] = z[m-1];

//PASSO 10
for (i=(m-2);i<=1;i++)
241
w[i] = z[i]-u[i]*w[i]+1;

//PASSO 11
// OUTPUT
for(i=1;i<=(m-1);i++)
{
x = i*h;
printf("%f","os valores de x w[i]:",x,w[i]);
getch();
}
}
//PASSO 12
//STOP
printf("Procedimento completado !");

}//fim do main

float f(float a1)
{
float exponencial;

/* definio da funo */
exponencial = exp(a1);
return(exponencial);
}

Vous aimerez peut-être aussi