trabalho calculo numerico

trabalho calculo numerico

UNIVERSIDADE FEDERAL DA BAHIA

INSTITUTO DE CIÊNCIAS AMBIENTAIS E DESENVOLVIMENTO SUSTENTÁVEL- (ICADS)

COLEGIADO DE FÍSICA

DISCIPLINA: CÁLCULO NUMÉRICO

Gustavo Xavier Antunes Petronilo

Trabalho Cálculo Numérico:

Método de Euler

Professor:

Kennedy Morais Fernandes

Barreiras-Ba, 14 de março de 2012.

Sumário

Resolução por método analítico 1

Problema 1:Misturas. 1.1

Problema 2: Lançamento Vertical 1.2

Problema 3: Lei Stefan-Boltzmann 1.3

Aproximação por métodos numéricos 2

Implementação 3

Resultados, tabelas, gráficos 4

Conclusão 6

Resolução por método analítico

Problema 1: Misturas

Considere um tanque, no instante t=0, contém Qo=50 lb de sal dissolvido em 100 gal (cerca de 455 l). Suponha que água contendo ¼ lb (cerca de 113 g) de sal por galão entrando no tanque a uma taxa de de 3 galões por minuto e que o liquido, bem misturado, está saindo do a mesma taxa. Vamos supor que o sal não é criado nem destruído no tanque. Portanto, as variações na quantidade de sal devem-se ,apenas, ao fluxo de entrada e saída no tanque.

Então temos que:

= taxa de entrada – taxa de saída

A taxa de entrada é a concentração vezes a taxa de fluxo de entrada,

(¾)

A taxa de saída é a concentração de sal do tanque vezes o fluxo de saída,

3Q(t)/100

Assim a equação diferencial que governa esse processo é

= -

Logo, o fator integrante é e3t/100 e a solução geral é

Q(t) = 25+ce-3t/100

Onde c é uma constante arbitrária. Para satisfazer a condição inicial precisamos escolher c = Qo-25. Portanto a solução do problema de valor inicial é

Q(t) = 25+25e-0.03t

Problema 2: Lançamento Vertical

Considere o movimento a uma dimensão que se obtém quando se arremessa um objeto na vertical para cima num instante inicial com uma velocidade v0. A força (aceleração) é constante (não depende da posição, velocidade ou tempo) e neste caso existe resolução analítica da 2ª Lei de Newton. A posição em função do tempo é dada por:

y(t) = y + vo t + at2

Consideraremos y0=0 e v0=25 m/s. A aceleração da gravidade é constante e igual a 9,8m/s2.

y(t) = 25t – 4,9t2

Problema 3: Lei Stefan-Boltzmann

A transferência de calor de um corpo para um ambiente que o rodeia por radiação, segundo a lei de Stefan-Boltzmann, é descrita pela equação diferencial

= -a(u4-T4) (i)

Onde u(t) é a temperatura absoluta do corpo no instante t, T é a temperatura absoluta do ambiente e a é uma constante que depende dos parâmetros físicos do corpo. No entanto, se u é muito maior que T, então as soluções da EQ.(i) podem ser bem aproximadas pelas soluções da equação mais simples

= -au4 (ii)

Supondo que um corpo com a temperatura inicial de 2000K está imerso em um meio ambiente à temperatura de 300°K e que a= 2,0*10-12K-3s-1, a solução da equação é

u(t) = 2000/(1+0,048t)1/3

Aproximação por método numérico

Problema 1: Misturas

Sendo Q(t) = f(to,Qo) e Qo= 0, to =0 pelo método de Euler temos:

Qi= Qi-1 + h . f(to,Qo)

Problema 2: Lançamento Vertical.

Sendo to e vo conhecidos podemos calcular:

= f(vo,to),

Passando para o método analítico temos:

yi = yi-1 + h . v(t)

Problema 3: Lei Stefan-Boltzmann

Sendo u(t) = f(to,uo) e uo= 0, to =0 pelo método de Euler temos:

ui= ui-1 + h . f(to,uo)

Implementação

Problema 1: Misturas

Algoritmo 1:

função dq(t)

real t

dq = ¾ - 3Q/100

Retorna dq(t)

fim função

Algoritmo 2: programa principal

Real qo,h,t,to,q,tf,dq,q_exato

Inteiro i,n

Leia tf

to←0

qo←50

n←(tf-to)/h

t←to

q ←qo

Imprima i,t,q

Para(i←1, i≤n,i=i+1) faça

q←q+h*dq(t)

t←t+h

Imprima i,t,q

Fim

Fortran:

program misturas

implicit none

real qo,h,t,to,q,tf,dq,q_exato

integer i,n,resultados

resultados = 200

open(unit = resultados, file ='resultados_misturas.txt')

print*,"Digite a diferen‡a em minutos"

read*, tf

qo=50

to=0

h=0.001

n=(tf-to)/h

t=to

q=qo

write(resultados,*)i,t,q,q_exato(t)

write(*,*)i,t,q,q_exato(t)

do i=1,n,1

q=q+h*dq(t)

t=t+h

write(resultados,*)i,t,q,q_exato(t)

write(*,*)i,t,q,q_exato(t)

end do

close(resultados)

call system('pause')

end

!!!!!!!!!!!!!!!!!!!!!!!

function dq(t)

real dq,t

dq=(3/4.)-(50*3.)/100.

return

end

!!!!!!!!!!!!!!!!!!!!!!!

function q_exato(t)

real q_exato,t

q_exato= 25+(25*exp(-0.03*t))

return

end

Problema 2: Lançamento Vertical

Algoritmo 1:

função v(t)

real t

v←vo +9,8*t

Retorna v(t)

fim função

Algoritmo 2: programa principal

Real yo,vo,h,t,to,y,tf,v,y_exato

Inteiro i,n

tf ←5.1

i←0

n←(tf-to)/h

t←to

z ←zo

Imprima i,t,y

Para(i←1, i≤ n, i=i+1) faça

y←y+h*v(t)

t←t+h

Imprima i,t,y

Fim

Fortran:

program lancamento_vertical

implicit none

real yo,vo,h,t,to,y,tf,v,y_exato

integer i,n,resultados

resultados = 100

open(unit = resultados, file ='resultados_lancamento.txt')

tf=5.1

yo=0

vo=25

to=0

h=0.1

n=(tf-to)/h

t=to

y=yo

write(resultados,*)i,t,y,y_exato(t)

write(*,*)i,t,y,y_exato(t)

do i=1,n,1

y=y+h*v(t)

t=t+h

write(resultados,*)i,t,y,y_exato(t)

write(*,*)i,t,y,y_exato(t)

end do

close(resultados)

call system('pause')

end

!!!!!!!!!!!!!!!!!!!!!!!

function v(t)

real v,t,vo

vo=25

v=vo-9.8*t

return

end

!!!!!!!!!!!!!!!!!!!!!!!

function y_exato(t)

real y_exato,t

y_exato=25*t-4.9*t**2

return

end

Problema 3: Lei Stefan-Boltzmann

Algoritmo 1:

Função du(t)

real t

du= -a*u**(4)

Retorna du(t)

fim função

Algoritmo 2: programa principal

real a,uo,h,t,to,u,tf,du,u_exato

Inteiro i,n

Leia tf

to←0

uo←2000

n←(tf-to)/h

t←to

u ←uo

Imprima i,t,q

Para(i←1, i≤n,i=i+1) faça

u←u+h*du(t)

t←t+h

Imprima i,t,u

Fim

Fortran:

program lei_de_stefan_boltzmann

implicit none

real a,uo,h,t,to,u,tf,du,u_exato

integer i,n,resultados

resultados = 200

open(unit = resultados, file ='resultados_rad.txt')

print*,"Digite a diferen‡a em minutos"

read*, tf

uo=2000.

to=0

h=0.1

a=2.0e-12

n=(tf-to)/h

t=to

u=uo

write(resultados,*)i,t,u,u_exato(t)

write(*,*)i,t,u,u_exato(t)

do i=1,n,1

u=u+h*du(t)

t=t+h

write(resultados,*)i,t,u,u_exato(t)

write(*,*)i,t,u,u_exato(t)

end do

close(resultados)

call system('pause')

end

!!!!!!!!!!!!!!!!!!!!!!!

function du(t)

real du,t,a,u

a=2.0e-12

u=2000.

du= -a*u**(4)

return

end

!!!!!!!!!!!!!!!!!!!!!!!

function u_exato(t)

real u_exato,t

u_exato=2000./((1+0.048*t)**(1/3))

return

end

Resultados, tabelas e gráficos

Problema 1: Misturas

ti

h=0.1

h=0.01

h=0.001

exato

1.0

49.324993

49.250031

49.248505

49.334030

2.0

48.574986

48.500061

48.497761

49.261147

17.0

37.324871

37.258018

37.226833

40.057484

20.0

35.074848

35.000610

34.970844

38.761497

Problema 2: Lançamento Vertical

ti

h=0.1

h=0.01

h=0.001

exato

1.0

20.589998

20.149002

20.104942

20.100002

3.0

32.369995

31.047.029

30.923.361

30.900.002

4.0

23.560005

21.796059

21.620186

21.600021

5.0

4.9500227

2.9840016

2.5264883

2.5000548

Problema 3: Lei Stefan-Boltzmann

ti

h=0.1

h=0.05

h=0.01

exato

1.0

1968.0054

1967.9932

1968.0176

1968.9872

2.0

1936.0107

1935.9863

1936.0671

1939.8129

20.0

1360.4274

1359.8633

1360.3835

1598.2528

30.0

1040.1611

1039.7949

1040.5593

1485.5880

Conclusão

Neste trabalho usamos o método númerico de Euler para nos aproximarmos das soluções exatas das equações. Vimos que o método de Euler é bem estável, e quando fazemos o passo h tender a zero, seu valor se torna mais perto do exato. Muitas vezes precisamos de um h relativamente pequeno, como nos casos dos exemplos 1 e 3 que mesmo com o h= 0.01 ainda não se aproximaram o suficiente da solução exata, em outras como no caso 2 um h de apenas 0.01 já é o suficente para termos uma boas aproximação.

Comentários