trabalho calculo numerico
TRANSCRIPT
UNIVERSIDADE FEDERAL DA BAHIAINSTITUTO 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: MisturasConsidere 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:
dQdt
= 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 é
dQdt
= 34 - 3Q
100
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 + 12at2
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-BoltzmannA 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
dudt
= -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
dudt
= -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:
dydt
= 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 principalReal qo,h,t,to,q,tf,dq,q_exatoInteiro i,nLeia tfto←0qo←50n←(tf-to)/ht←toq ←qo
Imprima i,t,q
Para(i←1, i≤n,i=i+1) façaq←q+h*dq(t)t←t+hImprima i,t,qFim
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 principalReal yo,vo,h,t,to,y,tf,v,y_exatoInteiro i,ntf ←5.1i←0n←(tf-to)/ht←toz ←zo
Imprima i,t,yPara(i←1, i≤ n, i=i+1) façay←y+h*v(t)t←t+hImprima i,t,yFim
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 tdu= -a*u**(4)Retorna du(t)
fim função
Algoritmo 2: programa principalreal a,uo,h,t,to,u,tf,du,u_exatoInteiro i,nLeia tfto←0uo←2000n←(tf-to)/ht←tou ←uo
Imprima i,t,qPara(i←1, i≤n,i=i+1) façau←u+h*du(t)t←t+hImprima i,t,uFim
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.00 exato
1
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ãoNeste 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.