Capítulo 10. Equações Diferenciais Parcias -...

Preview:

Citation preview

214

Grupo: Marcelo Ricardo P. Pinto; Ricardo Rocha; Marcelo A. Carrasqueira; Felipe Aguiar; Danilo C. Pereira; Juliana de Miranda; Mariana Garcia.

Capítulo 10. Equações Diferenciais Parcias 10.1. Equações Diferenciais Parcias Elípticas

10.1.1. Introdução

As equações diferenciais se classificam em ordinárias e parciais.

No curso de análise numérica já foram tratados métodos numéricos para a

resolução das ordinárias.

Este trabalho tratará de métodos, numéricos, para solucionar equações

diferenciais parciais de dois tipos: elípticas e parabólicas.

Uma equação diferencial parcial (E.D.P.) é uma equação que contém uma

função incógnita de duas ou mais variáveis e suas derivadas parciais em relação a

essas variáveis.

A ordem de uma E.D.P. é a ordem da mais alta derivada presente.

Uma solução de uma E.D.P. é qualquer função que satisfaça à equação

identicamente.

Os tipos de E.D.P. que trataremos aqui são de segunda ordem, assim

resolvemos destacar também sua forma geral:

Au

xx y B

ux y

x y Cu

yx y D

ux

x y Euy

x y Fu x y G x y∂∂

∂∂ ∂

∂∂

∂∂

∂∂

2

2

2 2

2( , ) ( , ) ( , ) ( , ) ( , ) ( , ) ( , )+ + + + + =

Definindo ∆=B2-4AC temos:

215

• Se ∆<0 a equação será chamada de elíptica;

• Se ∆=0 a equação será chamada de parabólica;

• Se ∆>0 a equação será chamada de hiperbólica.

Um tipo especial de E.D.P. elíptica é a Equação de Poisson:

∇ =2u x y( , ) ∂∂

∂∂

2

2

2

2

ux

x yu

yx y f x y( , ) ( , ) ( , )+ = ,

e um tipo especial de E.D.P. parabólica é a Equação do Calor:

∂∂

α∂∂

ut

x tu

xx t( , ) ( , )= 2

2

2 .

Essas duas equações serão os nossos objetos de estudo.

10.1.2. Motivação

Em muitas aplicações de Física, Biologia, Química, Engenharia e outros,

mais especificamente na formulações de modelos matemáticos, as equações

diferencias são de grande importância, resolvendo a maioria dos problemas.

Ao contrário com que acontece com as equações diferenciais ordinárias,

não existem métodos de resoluções para as equações diferenciais parciais (com

exceção dos métodos numéricos), cada equação é um caso particular.

Os métodos numéricos são eficientes, de fácil entendimento e sendo de

iteração são facilmente programáveis.

10.1.3. Modelo

Primeiramente trataremos com as equações parciais diferenciais elípticas, e

como citado acima vamos considerar a Equação de Poisson.

216

10.1.4. Metodologia

Vamos considerar a equação de Poisson:

∇ =2u x y( , ) ∂∂

∂∂

2

2

2

2

ux

x yu

yx 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 são contínuas em seus domínios e que a solução a

encontrar será única.

O método usado é uma adaptação do método da diferença 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 retângulo R e desenhando linhas verticais e horizontais

através de pontos com coordenadas (xi,yj), onde:

xi = a + ih para i = 0,1,...,n

yj = c + jk para j = 0,1,...,m

217

As linhas x = xi e y = yj são chamadas linhas da grade e suas interseções

são os pontos malhas da grade. Para cada ponto malha do interior da grade

usaremos a série de Taylor na variável x sobre xi para gerar a fórmula da diferença

central :

∂∂

∂∂

ε2

21 1

2

2 4

4

2

12u

xx y

u x y u x y u x y

hh u

xyi j

i j i j i ji j( )

( ) ( ) ( )( , ),,

, , ,=− +

−+ − (2)

onde ε ∈ (xi-1,xi+1);

E a série de Taylor na variável y sobre yj para gerar a fórmula da diferença

central :

∂∂

∂∂

η2

21 1

2

2 4

4

2

12u

yx y

u x y u x y u x y

hk u

yxi j

i j i j i ji j( )

( ) ( ) ( )( , ),,

, , ,=− +

−+ − (3)

onde η ∈ (yj-1,yj+1).

Usando essas fórmulas na Eq. (1), podemos expressar a equação de Poisson

nos pontos (xi,yj) como:

u x y u x y u x y

h

u x y u x y u x y

ki j i j i j i j i j i j( ) ( ) ( ) ( , ) ( , ) ( , ), , ,+ − + −− +

+− +

=1 12

1 12

2 2

= + +f x yh u

xy

k ux

x yi j i j i j( , ) ( , ) ( , )2 4

4

2 4

412 12∂∂

ε∂∂

para cada i = 1,2,...,(n-1) e j = 1,2,...,(m-1).

218

E as condições de bordo como:

u(x0,yj) = g(x0,yj), para cada j = 0,1,...,m;

u(xn,yj) = g(xn,yj), para cada j = 0,1,...,m;

u(xi,y0) = g(xi,y0) , para cada i = 0,1,...,n-1;

u(xi,ym)= g(xi,ym) , para cada i = 0,1,...,n-1;

Dessa forma, a equação diferencial, com o resultado do método da

diferença central, com erro local de truncamento de ordem O(h2 + k2), pode ser

escrita como : 2 12

1 1

2

1 12h

kw w w

hk

w w h f x yi 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

w0,j = g(x0,yj) para cada j = 0,1,...,m

wn,j = g(xn,yj) para cada j = 0,1,...,m (5)

wi,0 = g(xi,yj) para cada i = 1,2,...,n-1

wi,m = g(xi,ym) para cada i = 1,2,...,n-1

onde wi,j aproxima u(xi,yj).

A equação típica em (4) envolve aproximações para u(x,y) nos pontos (xi-

1,yj), (xi,yj), (xi+1,yj), (xi,yj-1) e (xi,yj+1).

Reproduzindo uma porção de grades onde esses pontos estão situados (ver

figura 1), mostraremos que cada equação envolve aproximações na estrela formada

na região sobre (xi,yj).

219

Se usarmos as informações sobre as condições de bordo sempre que o

sistema dado por (4) for apropriado, isto é, todos os pontos (xi,yj) são adjacentes

aos pontos malhas do bordo, temos um sistema (n-1)(m-1) de equações lineares em

(n-1)(m-1) incógnitas, onde as incógnitas são as aproximações wi,j para u(xi,yj) no

interior dos pontos malhas.

O sistema linear envolvendo essas incógnitas é expresso por matriz

calculando mais eficientemente se uma reelaboração dos pontos malhas interiores

for feita. Uma recomendação de reelaboração desses pontos é dado por:

Pl = (xi,yj) e wl = wi,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 Equação de Diferença-Finita de

Poisson

Para aproximar a solução da equação de Poisson

∂∂

∂∂

2

2

2

2

ux

uy

f x y+ = ( , ) a x b c y d≤ ≤ ≤ ≤,

220

Sejam as condições 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 são os extremos a,b,c,d ; os inteiros m,n ; a tolerância TOL ; e o número

máximos de iterações Lfront.

As saídas aproximadas w i j, para u x yi i( , ) para cada i=1,...,n-1 e j=1,...,m-1 ou uma

mensagem que diz que o número de iterações foi excedido.

Passo 1) Faça h=(b-a)/n

k=(d-c)/m

Passo 2) Para i=1,...,n-1 faça x a ihi = + (os passos 2 e 3 constrõem

os pontos de malha)

Passo 3) Para j=1,...,m-1 faça y c jki = +

Passo 4) Para i=1,...,n-1

para j=1,...,m-1 faça w i j, = 0

Passo 5) Faça

r h kq rl

== =

=

2 2

2 11

/( )

Passo 6) Enquanto I ≤ Lfront faça o passo 7 ao 20.

(Esses passos executam as iterações de Gauss-Seidel)

Passo 7) Faça

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

= − + + + +

= −

=

− − − −

21 1 1 1 1 2 2 1

1 1

1 1

, , , /, ,

,

,

Passo 8) Para i = 2,...,n-2 Faça

( ) ( )( )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

= − + + + +

− >

− − − + − −

21 1 1 1 1 2

1

, , /, , ,

,

então faça norm w zi m= −−, 1

faça w zi m, − =1

Passo 9) Faça

( ) ( ) ( )( )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

= − + + + +

− >

− − − − − − − −

− −

21 1 1 1 2 1 1 2

1 1

, , , /, ,

,

então faça

faça

norm w zn m= −− −1 1,

w zn m− − =1 1,

Passo 10) Para j = m-2,...,2 faça o passo 11 ao 13

Passo 11) Faça ( ) ( )( )z h f x y g a y rw rw w qj j j j j= − + + + ++ −2

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

se w z normj1, − > então faça norm w zj= −1,

faça w zj1, =

222

Passo 12) Para i=2,...,n-2 faça

z h f x y w rw w rw qi j i j i j i j i j= − + + + +− + + −( ( , ) ) /, , , ,

21 1 1 1

se w zi j, − >norm então faça norm w zi j= −,

faça w zi j, =

Passo 13) Faça

z=( ( , ) ( , ) ) /, , ,− + + + +− − − + − −h f x y g b y w rw rw qn j j n j n j n j2

1 2 1 1 1 1

Passo 14) Faça 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 norm1 1, − > então faça norm w z= −1 1,

faça w z1 1, =

Passo 15) Para i=2,...,n-2 faça

z h f x y g x c w rw w qi i i i= − + + + +− +( ( , ) ( , ) ) /, , ,2

1 1 1 1 2 1 1

se w z normi ,1 − > então faça norm w zi= −,1

faça w zi ,1 =

Passo 16) Faça

z h f x y g b y rg x c w rw qn n n n= − + + + +− − − −( ( , ) ( , ) ( , ) ), ,2

1 1 1 1 2 1 1 2

se w z normn− − >1 1, então faça norm w zn= −−1 1,

faça w zn− =1 1,

Passo 17) Se norm � TOL então faça passos 18 e 19

Passo 18) Para i=1,...,n-1

para j=1,...,m-1 imprima ( , , ),x y wi j i j

223

Passo 19) Fim. (programa terminado com sucesso)

Passo 20) Faça i=i+1

Passo 21) Imprima (“O número máximo de iterações foi atingido”)

Fim.

10.1.6. Fluxograma

Início

DadosIniciais

Cálculo de h e k

i = 1

Cálculo de xi

i = n-1 i = i+1No

j = 1

Yes

Cálculo de yi

j = m-1 j = j+1No

i = 1

Yes

j = 1

wi,j = 0

j = m-1 j = j+1No

i = i+1

224

i = n-1 No

Cálculo de r,q e i=1

Yes

Cálculo de z,norm e"w"

norm é menorou igual TOL i = i+1No

Imprima osresultados

Yes

FIM

i menor queLFront

Número de iteraçõesfoi excedido

No

Yes

10.1.7. Exemplo

Considere a equação de Poisson

( ) ( )∂∂

∂∂

2

2

2

2

ux

x yu

yx y xey, , ,+ = 0<x<2, 0<y<1,

com condições de contorno

( )( )

u y

u x x

0 0

0

, ,

, ,

=

=

( )( )

u y e

u x ex

y2 2

1

, ,

, ,

=

=

0 10 2

≤ ≤≤ ≤

yx

,.

usaremos o algoritmo para aproximar a solução exata ( )u x y xey, = com n = 6 e m = 5.

O critério de parada para o método Gauss-Seidel no passo 17 requer

( ) ( )w wi jl

i jl

, , ,− ≤− −1 1010

225

para cada i = 1,...,5, e j = 1,...,4; então a solução para a equação diferencial foi obtida de

modo preciso, e o procedimento de parada para l = 61. O resultado com os valores

corretos são apresentados na tabela abaixo:

j xi yi wi,j(61) u(xi,yi) |u(xi,yj) - wi,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. Implementação

#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 tolerƒncia: ");

scanf("%f",&TOL);

printf("entre com o m ximo de itera‡äes : ");

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. Equações Diferenciais Parciais Parabólicas

10.2.1. Modelo

Cuidaremos, agora das equações parciais diferenciais parabólicas., considerando a

Equação de propagação do Calor.

10.2.2. Metodologia

Consideremos a Equação de propagação do Calor:

∂∂

α∂∂

ut

x tu

xx t( , ) ( , )= 2

2

2 (1)

0<x<1 , t>0

com condições iniciais

u(t,0) = 0

u(1,t) = 0, t>0 e u(x,0) = f(x), 0 ≤ x ≤ 1

234

Usaremos a aproximação da solução do problema de diferença finita e o método

similar usado em equações diferenciais elípticas.

Primeiramente, selecionaremos duas malhas constantes, h e k, tal que m = 1/h seja

um inteiro. Os pontos dessa grade serão da forma (xi,tj), onde xi = ih para i= 0,1,...,m e tj

= jk, para j = 0,1,... .

Obteremos o método de diferença usando a série de Taylor em t para formar o

quociente de diferença.

∂∂

∂∂

µut

x tu x t k u x t

kk

tu xi j

i j i ji j( , )

( , ) ( , )( , )=

+ −−

2

2

2 (2)

para algum µj ∈ (tj,tj+1) e a série de Taylor em x para formar o quociente de diferença:

∂∂

∂∂

ε2

2 2

2 4

4

2

12u

xx t

u x h t u x t u x h t

hh u

xti j

i j i j i ji j( )

( , ) ( ) ( , )( , ),,

, , ,=+ − + −

− (3)

onde ε ∈ (xi-1,xi+1).

A equação diferencial parcial (1) implica que para todo ponto interior da grade

(xi,tj), com i = 1,2,...,m-1 e j = 1,2,..., teremos:

∂∂

α∂∂

ut

x tu

xx ti j i j( , ) ( , )− =2

2

2 0

então o método da diferença usando quocientes de diferença (2) e (3) é dado por:

w w

k

w w w

hi j i j i j i j i j, , , , ,+ + −−

−− +

=1 2 1 12

20α (4)

onde wij aproxima u(xi,tj).

O erro local truncado da equação diferencial é:

τ∂∂

µ α∂∂

εi j i j i j

k ut

xh u

xt, ( , ) ( , )= −

2 12

2

22

2 4

4 (5)

Resolvendo a eq. (--0 para wi,j+1) dados, teremos:

235

wk

hw

kh

w wi j i j i j i j, , , ,( )+ + −= −�

��

�� + +1

2

22

2 1 112α

α (6)

para cada i= 1,2,...,(m-1) e j = 1,2,... .

Assim a condição inicial u(x,0) = f(x), para 0≤x≤1, implica que wi,0=f(xi), para i

=

0,1,...,m, esse valor pode ser usado na eq. (6) para achar o valor de wi,j para i= 1,2,...,(m-

1). A condição inicial u(0,t) = 0 e u(1,t)= 0 implica que w0,1 = wm,1 = 0, então todas as

entradas da forma wi,1 pode ser determinada.

Se o procedimento é reaplicado uma vez em todas as aproximações wi,j1 os

valores de wi,2, ...,wi,m-1 podem ser obtidos de maneira similar.

Uma explicitação natural do método da diferença 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 01 2

00

0 0 1 2

λ λλ λ

λλ λ

� �

� � � �

� � � � �

� � � � �

� � � � �

� �

onde λ = α2(k/h2).

Se tivermos:

w(0) = (f(x1), ... ,f(xm-1))t

e

w(j) = (wi,j, ... , wm-1,j)t para cada j = 1,2,...

então uma aproximação para a solução é dada por:

w(j) = Aw(j-1), para cada j = 1,2,... .

236

Este método é conhecido como método Avançado de Diferença. Se a solução da

equação diferencial parcial tem quatro derivadas parciais contínuas em x e duas em t,

então a eq. (5) implica que o método é de ordem O(k + h2).

10.2.3. Algoritmo

Para aproximar solução de equações parciais parabólicas

( ) ( )∂∂

α∂∂

ut

x tu

xx t, , ,− =2

2

20 0 1< <x , 0 < <t T ,

sujeito as condições de contorno

( ) ( )u t u t0 1 0, , ,= = 0 < <t T ,

e condições iniciais

( ) ( )u x f x, ,0 = 0 1≤ ≤x :

Entrada ponto final l; tempo máximo T; constante α; inteiros m≥3,N≥1.

Saída aproximações w i j, para ( )u x ti j, para i = 1,...,m-1 e j = 1,...,N.

Passo 1) Faça h l m= ;

k T N= ;

λ α= 2 2k h .

Passo 2) Para i = 1,...,m-1 faça ( )w f ihi = . (valores iniciais)

Passo 3) Faça l1 1 2= + λ;

u l1 1= −λ .

Passo 4) Para i = 2,...,m-2 faça l u i1 11 2= + + −λ λ ;

u li = −λ 1 .

237

Passo 5) Faça l um m− −= + +1 21 2λ λ .

Passo 6) Para j = 1,...,N faça passos 7 - 11.

Passo 7) Faça t = jk;

z w l1 1 1= .

Passo 8) Para i = 2,...,m - 1 faça ( )z w z li i i i= + −λ 1 .

Passo 9) Faça w zm m− −=1 1 .

Passo 10) Para i = m - 2,...,1 faça w z u wi i i i= − +1.

Passo 11) SAÍDA(t);

Para i = 1,...,m - 1 faça x = ih; SAÍDA ( )x w i, .

Passo 12) FIM.

10.2.4. Fluxograma

Início

Dados iniciais

Cálculo de h,k e λ

i = 1

wi = f(ih)

Cálculo de l 1 e u1

i = m - 1

No

Yes

i = 2

Cálculo de l 1 e u1

i = m - 2 No

i = i + 1

i = i + 1

Yes

Cálculo de l m-1

j = 1

Cálculo de t e z 1

i = 2

238

Cálculo de zi

i = m -1

No

i = i + 1

Yes

Cálculo de wm-1

i = m - 2

Cálculo de wi

i = 1 No i = i - 1

Yes

SAÍDA (t)

i = 1

Cálculo de x

SAÍDA (x,wi)

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 equação do calor

( ) ( )∂∂

α∂∂

ut

x tu

xx t, , ,− =2

2

20 0 1< <x , 0 < t,

( ) ( )u t u t0 1 0, , ,= = 0 < t, e ( )u x x, sen ,0 = π 0 1≤ ≤x ,

Os resultados de w i ,50 até ( )u x i , .0 5 onde i = 0,1,...,10 estão 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. Implementação

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<complex.h>

float f(float a1);

void main(void)

{

//declaração de variáveis

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; /* definição da função */ exponencial = exp(a1); return(exponencial); }

Recommended