Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Fsica Computacional A
DFAT/
FiscompFA
Integrao
Professor: Anibal Leonardo Pereira
Estagirios:
2004/1 a 2005/2 Luciana Conceio Iecker Lima
2010/1
Magali dos Santos Leodato
2009/1 a 2010/2 Filipe da Fonseca Cordovil
Monitores:
2001/1
2002/2
2003/1 a 2003/2
2003/1 a 2003/2
2003/1 a 2005/2
2004/1 a 2005/2
2006/1 a 2007/2
2006/1 a 2007/2
2008/1 a 2008/2
2008/1 a 2009/2
2011/1 a
1. Integrao
O mtodo de integrao numrica usado para integrar funes tanto sob a forma tabular quanto na forma
analtica.
Os mtodos de integrao numrica podem usar tanto a interpolao polinomial com espaamento uniforme
quanto a interpolao polinomial com espaamento desigual, portanto eles podem utilizar as frmulas de:
Para a integrao numrica, o mtodo do trapzio o mais simples por isto sempre utilizado para introduzir os
conceitos de integrao numrica enquanto a regra de Simpson 1/3 utilizado para a determinao da integral
quando se utiliza uma calculadora (clculo manual).
2. Mtodo do Trapzio
Mtodo do Trapzio um mtodo de integrao que utiliza um polinmio interpolador linear.
b
I = f x dx=
a
ba
[ f a f b]E
2
onde
ba
[ f a f b] a regra do trapzio
2
A rea hachurada debaixo a linha de interpolao ( definida pela interpolao linear) igual ao valor da integral
calculada pelo mtodo do trapzio, enquanto a rea sob a curva a integral exata da funo. O erro E no valor
da integral igual a rea branca entre a curva e a reta.
Porque a integral a rea sob a curva, ela pode ser calculada geometricamente pela
soma da rea do retngulo com a rea do tringulo que esto sob a curva:
2f f b f a
1
I =ba f a f b f a =ba a
2
2
I=
ba
[ f a f b ]
2
A equao pode ser estendida para vrios intervalos, simplesmente adicionando-se cada uma das reas sob a
curva. Ento, para N intervalos iguais, cada um deles com um tamanho igual a h , a regra do trapzio pode
ser escrita assim:
I = f x dx=
a
N 1
h
f a2 f aih f b E
2
i=1
h=
onde
x x 0
ba
. Na figura temos: h= N
.
N
N
I=
f 0= f a ,
onde
ou
f 0= f x 0 ,
h
f 2f 12 f 22 f
2 0
N 1
f 1= f ah ,
f 2= f a2h ,
f 3= f a3h , ,
f 1= f x 0 h ,
f 2= f x 02h ,
f 3= f x0 3h , ,
f i= f aih
f i= f x 0ih
i=0
i=1
i=2
i= N
f 0= f a
f 1= f ah
f 2= f a2 h
f N = f aN h
ou
ou
ou
f 0= f x 0
f 1= f x 0 h
f 2= f x 02 h
ou
f N = f x 0 N h
Exemplo 01:
1.30
Fazendo N =6 temos h=
I=
ba 1.301.00
=
=0.05 ento:
N
6
h
[ f 2 f 12 f 22 f 32 f 42 f 5 f 6 ]
2 0
Podemos escrever:
i
I=
x+ih
f(x)
0 1.00 + 0
1.00
1.0000
1 1.00 + 1x0.05
1.05
1.0247
2 1.00 + 2x0.05
1.10
1.0488
3 1.00 + 3x0.05
1.15
1.0724
4 1.00 + 4x0.05
1.20
1.0954
5 1.00 + 5x0.05
1.25
1.1180
6 1.00 + 6x0.05
1.30
1.1402
0.05
[ 121.024721.048821.072421.095421.11801.1402 ]
2
I =0.025[12.04942.09762.14482.19082.2361.1402]=0.32147
O valor correto da integral 0.32149 . Por isto o erro existente no valor calculado pela regra do trapzio de
0.00002 .
Sem demostrao:
O erro no valor da integral pelo mtodo do trapzio para uma nica rea obtido usando-se a frmula:
3
h
E f ''
12
com
ab
Para o erro estendido (aquele obtido pela soma das reas) o erro total obtido pela soma dos erros em cada uma
das reas, o que nos leva a frmula:
3 N
1 ba
1
E
f ' ' x i ba h 2 f ' '
3
12 N
12
i=1
com
ab
I = x dx temos :
Para a integral
1.00
logo:
1
f ' x = x 2 e
2
f x = x ,
1
f ' ' x = x 2
4
1
1
ba h2 f ' ' 0.08330.30.052 1.011.5 0.000015853
12
4
que ligeiramente menor que o valor 0.00002 obtido. Entretanto ao se fazer o arredondamento para 5 casas
decimais teremos o valor 0.0002 obtido anteriormente.
Exemplo 02:
1
I = 1x 2 dx
0
I = 1x 2 dx=x
0
N =1 ,
a=0 ,
b=1 ,
h=
10
=1
1
h
1
I f 0 f 1 0.510 0.5
2
2
x3 2
= 0.66667
3 3
N =2 ,
a=0 ,
b=1 ,
h=
10 1
=
2
2
h
1
3
5
I f 02 f 1 f 2 12 0 0.625
2
4
4
8
N =4 ,
a=0 ,
b=1 ,
h=
10 1
=
4
4
h
I f 02 f 1 2 f 22 f 3 f 4 0.2511.8751.50.87500.65625
2
No clculo do erro usa-se a derivada segunda:
com
N =4
temos: E
f x =1 x 2 ,
'
f x =2x ,
''
f x =2
1
1
2 ''
2
ba h f 10.25 20.01410.01
12
12
N =4 de 0.66667 0.65625=0.01042=0.01
Observe que, como esperado, o erro vai diminuindo quando o valor de h diminu (ou N cresce), para o
mesmo intervalo [a , b] .
N =1
erro de 25%
N =2
erro de 6.25 %
N =4
erro de 1.56 %
Antes de obter a frmula de Simpson 1/3 faz-se a indicao dos passos necessrios para a obteno da derivada
segunda usando a aproximao central ( ela j foi apresentada quando tratamos da derivada ). Ao recordamos os passos
necessrios obteno da derivada segunda isto ajudar ( tornar mais fcil) o processo de entendimento da obteno
da expresso que permite calcular a integral por Simpson 1/3.
Considere 3 pontos: x i1 , x i e x i1 . A partir deste 3 pontos podemos
f i1= f i h f 'i
f i1
f i1= f i h f 'i
para o ponto f
i1
h2 ' ' h4 4
fi
f i
2
24
h2 ' ' h4 4
f
f
2 i 24 i
f 'i ' =
f i 12 f i f i 1
h2
2 ''
h f i = f i12 f i f i1 que ser til na derivao da expresso da regra de Simpson 1/3
x i h
x i h
x i h
x i h
I=
x i h
f x dx=
x i h
1
f x dx=2 h f i0 h 3 f 'i '
3
x i h
I=
x i h
1
f x dx=2 h f i h f i12 f i f i1
3
I=
x i h
1
f x dx= h f i14 f i f i1
3
1
I = h f i14 f i f i1 E
3
h5 4
E
f x .
90
A integrao por Simpson 1/3 bastante simples e pode ser obtida usando-se uma calculadora e sua acurcia e
boa o bastante para muitas aplicaes.
Geralmente usa-se a regra de Simpson 1/3 para calcular a integral no lugar da integrao pelo mtodo do
trapzio.
Guarde esta expresso, pois ela importante:
Lembre-se:
h
I = f i14f i f i1
3
1
que aparece na expresso.
3
A regra de Simpson 1/3 estendida obtida pela aplicao repetida da regra de Simpson 1/3 em um intervalo que
foi dividido em um nmero par de intervalos.
Chamando o nmero total de intervalos de N (observe que N tem que ser par) a regra de Simpson 1/3 fica assim:
h
I = f a4
3
h=
onde
N 1
i=1
i impar
N 2
f aih2 f aih f b E
i=2
i par
ba
.
N
A primeira soma feita somente com os ndices impares ( observe o fator 4) enquanto a segunda soma envolve
apenas os ndices pares (observe o fator multiplicativo 2).
Quando se abre a expresso ela fica similar a:
b
I = f x dx =
a
h
= [ f 04 f 12 f 2 4 f 32 f 42 f
3
N 2
4 f N 1 f N ] E
ba 4 4
h f
180
o erro proporcional a
h4 .
Exemplo 03:
1
I =
0
1
dx
1x 2
1
I=
1
1
N =2 ,
a=0 ,
h=
b=1 ,
10 1
= =0.5
2
2
observe: N par
x 0=0.0 f 0=1.0
x 1=0.5 f 1=0.8
x 2 =1.0 f 2=0.5
h
0.5
I f 04 f 1 f 2
13.20.50.7833
3
3
N =4 ,
b=1 ,
a=0 ,
h=
10
=0.25
4
observe: N par
h
0.25
I f 04 f 12 f 2 4 f 3 f 4
10.940.80.640.50.785
3
3
Exemplo 04:
3
I =
2
1
dx
x1
3
I =
2
3
1
4
dx=ln x12=ln
=0.287682072
x1
3
N =4 ,
a=2 ,
b=3 ,
h=
32
=0.25
4
observe: N par
h
I f 04 f 12 f 2 4 f 3 f 4
3
0.25
I
0.3333340.30769232 0.285714240.26666670.250.2876831
3
O erro igual a :
E=0.2876820720.2876831=0.0000010270.000001
Considere a funo
[a , b] dividido em 2 partes
[a , b] dividido em 3 partes
10
3
I = f x dx= h [ f 0 3 f 13 f 2 f 3]E
8
a
onde:
h=
ba
,
3
f i= f aih e
E o erro.
3 5 4
ab
h f x onde x =
.
80
2
1 5 4
3 5 4
h f
e a mesma para Simpson 3/8 h f
no h
90
80
ganho significativo na acurcia da integral. Portanto, pode-se utilizar indistintamente as duas regras.
00 atividades exemplos
11
Atividade 01
Entregar em meio magntico:
1.
programa:
int_trapezio
fxxa1.f03
2.
mdulos:
mod_
m_procedimentos_018.f03
m_funcoes_006.f03
3.
arquivos:
int_trapezio_001.dados
mais os necessrios
Exemplo/Acrscimo/Ajuste:
A integral de uma funo a rea sob a curva.
f x dx 2x
a
N 1
f a f b 2 f x i
i=1
x=
ba
N
xi =ai x
x 2 dx =72
a
b
dx
1
x
f 2 x dx= 2 2 = arctan
c
c
a c x
a
b
e cx
f 3 x dx = e sin kx dx= 2 2 c sin kx k cos kx
c k
a
a
cx
Voc tem que acrescentar as funes indicadas ( f2 e f3 ) no mdulo m_funcoes_006 para poder calcular a integral. Quando
utilizar o programa especifique a funo desejadas no programa
OBSERVE que esta atividade implementa o procedimento usando um DO infinito (DO sem contagem) e
faz clculos com preciso simples
12
program int_trapezio
!
!---------------------------------------------------------------------! Propsito: calcula a integral definida entre a e b usando a regra
!
do trapzio
!---------------------------------------------------------------------! Arquivo: fxxa1.f03
!
Autor: Anibal L. Pereira
06/01/2010
!Revises: Anibal L. Pereira
20/02/2011
!---------------------------------------------------------------------use m_procedimentos_018
use m_funcoes_006
implicit none
real:: a, & ! limite inferior da integral
b, & ! limite superior de integral
int
! valor da integral
integer:: N ! nmero de intervalos
real, external :: func
!--- entra com os limites e a quantidade de intervalos ---------------print*
print*," Entre com o limite inferior e limite superior da integral"
read*, a, b
print*
print*," Entre com o nmero de intervalos"
read*, N
!--- calcula a integral
call trapezio(a, b, N, int, f1)
!--- mostra o resultado
print*
print*,"O valor da integral :", int
end program int_trapezio
_______________________________________________________________________________________
arquivo: m_procedimentos_018.f03
module m_procedimentos_018
!
!------------------------------------------------------------------------------------! Propsito: Conter funes e sub-rotinas
!------------------------------------------------------------------------------------! Arquivo: m_procedimentos_018.f03
!
Autor: Anibal L. Pereira
05/01/2010
!------------------------------------------------------------------------------------!
[mdulos ] nenhum
!
[funes ] nenhuma
![sub-rotinas] trapezio
!
:::calcula a integral definida entre a e b pelo mtodo do trapzio
!------------------------------------------------------------------------------------public :: trapezio
contains
subroutine trapezio(a, b, N, int, func)
!-------------------------------------------------------------------
13
-------------------------------------
_______________________________________________________________________________________
arquivo: m_funcoes_006.f03
module m_funcoes_006
!
!------------------------------------------------------------------------! Propsito: Contm funes definidas pelo usurio
!------------------------------------------------------------------------! Arquivo: m_funcoes_006.f03
!
Autor: Anibal L. Pereira
05/01/2010
!------------------------------------------------------------------------!
[mdulos ] nenhum
!
[funes ] f1
(-->) y = x**2
![sub-rotinas] nenhuma
!------------------------------------------------------------------------------------public :: f1
contains
real function f1(x)
!------------------------------------------------------------------! Propsito: funo y = x**2
!------------------------------------------------------------------! Autor: Anibal L. Pereira 08/01/2010
!------------------------------------------------------------------implicit none
real, intent(in) :: x
!--- funo muito simples. Est sendo usada para exemplificar o conceito
f1 = x **2
end function f1
end module m_funcoes_006
14
Atividade 02
Entregar em meio magntico:
1.
programa:
integ_trapezio_prog
fxxa2.f03
2.
mdulos:
fc_constantes.f03
m_procedimentos_019.f03
m_funcoes_007.f03
3.
arquivos:
int_trapezio_prog_001.dados
mais os necessrios
Exemplo/Acrscimo/Ajuste:
Esta atividade calcula a integral definida pelo mtodo do trapzio, porm utiliza preciso dupla.
6
x 2 dx =72
1x dx
(resposta Int=2.796)
10
dx
300x
1e x
(resposta Int=246.28)
30
2000 ln
140000
9.8t dt
1400002100t
(resposta Int=11074)
03/02/2009
Verso:
15
A rea sobre a curva (integral da funo) obtida somando-se as reas dos trapzios, ento:
x1
A1=
[ f x1 f x 0]
2
x2
A2=
[ f x 2 f x1]
2
xn
An=
[ f x n f xn1 ]
2
porque
x 1= x 2 == x n = x chega-se a expresso
Integral=A=
x
[ f x 0 f x n 2f x 12 f x 22 f x n1]
2
n1
x
I=
f x 0 f x n2 f xi
2
i=1
ou
8) Comentrios e Observaes:
9) Pseudocdigo ou Fluxograma ou Diagrama NS
________________________________________________________________________________________
arquivo: fxxa2.f03
program integ_trapezio_prog
!
!--------------------------------------------------------------------------! Propsito: Calcula a integral definida da funo especificada entre a e b
!
pelo mtodo do trapzio
!--------------------------------------------------------------------------! Arquivo:fxxa2.f03
!
Autor: Anibal L. Pereira
03/02/2009
!Revises:
!--------------------------------------------------------------------------use fc_constantes
use m_procedimentos_019
use m_funcoes_007
implicit none
real(kind=dp):: a,
&!valor inicial
b,
&!valor final
it
!integral
integer::n, & ! quantidade de intervalos
k
! indicador de ao
character(len=1)::menu="n"
do while(.true.)
print*
print*,"==================="
16
_______________________________________________________________________________________
arquivo: fc_constantes.f03
Utilize os mdulos existentes:
_______________________________________________________________________________________
arquivo: m_funcoes_007.f03
module m_funcoes_007
!
!------------------------------------------------------------------------! Propsito: Contm funes definidas pelo usurio
!------------------------------------------------------------------------! Arquivo: m_funcoes_007.f03
!
Autor: Anibal L. Pereira
20/02/2011
!------------------------------------------------------------------------!
[mdulos ] nenhum
!
[funes ] fun1
(-->) y = x**2
![sub-rotinas] nenhuma
!------------------------------------------------------------------------------------use fc_constantes
public ::
fun1
contains
real(kind=dp) function fun1(x)
!------------------------------------------------------------------! Propsito: funo y = x**2
!------------------------------------------------------------------! Autor: Anibal L. Pereira 20/02/2011
!------------------------------------------------------------------implicit none
real(kind=dp), intent(in) :: x
!--- funo muito simples. Est sendo usada para exemplificar o conceito
!--- de usar preciso dupla
17
fun1 = x**2
end function fun1
end module m_funcoes_007
_______________________________________________________________________________________
arquivo: m_procedimentos_019.f03
module m_procedimentos_019
!
!------------------------------------------------------------------------! Propsito: Conter funes e sub-rotinas
!------------------------------------------------------------------------! Arquivo: m_procedimentos_019.f03
!
Autor: Anibal L. Pereira
05/01/2010
!------------------------------------------------------------------------!
[mdulos ] nenhum
!
[funes ] nenhuma
![sub-rotinas] integ_trapezio
!
:::calcula a integral definida entre a e b pelo mtodo do trapzio
!
usando preciso dupla
!------------------------------------------------------------------------------------use fc_constantes
public :: integ_trapezio
contains
subroutine integ_trapezio(func,a,b,n,it)
!-----------------------------------------------------------------------------!Propsito:
! Calcula a integral da funo entre os pontos a e b utilizando n intervalos
! pelo mtodo do trapzio
!-----------------------------------------------------------------------------!Autor:
Anibal L. Pereira
04/02/2009
!Revises:
!-----------------------------------------------------------------------------real(kind=dp),external::func
real(kind=dp),intent(in)::a, b
integer,intent(in)::n
real(kind=dp),intent(out)::it
!--------------------------------------------real(kind=dp)::dx,
& !incremento
s1,
& !parte da soma
s2,
& !parte da soma
p
!ponto
integer:: i
! contador
!----------------------------------dx=(b-a)/n
s1=func(a)+func(b)
p=a
s2=0.0_dp
do i=1,n-1
p=p+dx
s2=s2+func(p)
end do
it=(dx/2.0_dp)*(s1+2_dp*(s2))
end subroutine integ_trapezio
end module m_procedimentos_019
18
Atividade 03
Entregar em meio magntico:
1.
programa:
simpson_prog
fxxa3.f03
2.
mdulos:
fc_constantes.f03
m_procedimentos_020.f03
m_funcoes_008.f03
3.
arquivos:
simpson_prog_001.dados
mais os necessrios
Exemplo/Acrscimo/Ajuste:
Esta atividade calcula a integral definida pelo mtodo de simpson 1/3
10
2 2
( ( ))
1+ x2
0
dx =4482.006
Use N =100
OBSERVAO:
a sub-rotina trata para que o nmero de pontos usado com simpson 1/3 seja sempre um nmero de pontos impar, o que
garante que o nmero de intervalos par
Modifique o programa para salvar um arquivo de dados (simpson_prog_001.dados) contendo o seguinte:
I = sin(x )dx
0
I =
0
I =
1
I =
0
1
dx
2+cos (x)
(resposta:1.8137)
log (1+ x)
dx
x
(resposta:0.6142)
1
dx
1+sin2 (x )
(resposta:1.1107)
19
3) Arquivo: fxxa2.f03
03/02/2009
Verso:
4) Propsitos: Obter o valor da integral definida de uma funo entre os pontos a e b usando o mtodo de simpson 1/3
5) Identificao dos Dados:
Entrada:
Sada:
6) Subprogramas:
[mdulo
]
[funo
]
[sub-rotina]
7) Mtodo:
O mtodo do trapzio utiliza uma linha reta para unir os 2 pontos consecutivos, da seu nome - trapzio. O mtodo de
Simpson 1/3 utiliza um polinmio de segunda ordem (equao quadrtica) para unir 2 pontos consecutivos. A construo
de um polinmio P 2 x necessita de 3 pontos x 0 , x1 , x 2 , o que leva a necessidade garantir um nmero de
intervalo par, pois somente assim existir um nmero impar de pontos.
O polinmio interpolador ascendente de Newton que gera uma curva quadrtica com os (n+1=3) pontos
x 0 , x1 , x 2 :
xx 0
1
P 2 x 0 = f x 0 sh= y 0s y 0 s s1 2 y 0 com a varivel local igual a s=
.
2
h
s=0,1 ,2
s=0 , x 00h= x 0=a
s=1 , x 0 1h= x1
s=2 , x 02h=x 2=b
s=2
1
I = f x dx = P 2 x dx = y 0 s y 0 s s1 2 y 0 dx
2
a
a
s=0
h
I = [ f 0 4f 1 f 2 ]
3
chegar-se a expresso
ou
h
I = [ f a4 f x 1 f b ]
3
Observe o 1/3 na expresso. Isto leva a denominao Simpson 1/3 para o mtodo. Repetindo-se o mtodo para vrios
pontos (NP garantido que NP impar) chega-se a frmula geral de Simpson 1/3:
b
I =
a
NP1
NP2
i ,impar
i , par
h
f x dx = f a f b4 f aih2 f aih
3
i=1
i=2
8) Comentrios e Observaes:
9) Pseudocdigo ou Fluxograma ou Diagrama NS
20
________________________________________________________________________________________
arquivo: fxxa3.f03
program simpson_prog
!
!--------------------------------------------------------------------------! Propsito: Calcula a integral definida da funo especificada entre a e b
!
pelo mtodo de simpson 1/3
!--------------------------------------------------------------------------! Arquivo:fxxa3.f03
!
Autor: Anibal L. Pereira
03/02/2009
!Revises:
!--------------------------------------------------------------------------use fc_constantes
use m_procedimentos_020
use m_funcoes_008
implicit none
real(kind=dp):: a,
&!valor inicial
b,
&!valor final
it
!integral
integer::n, & ! nmero de intervalos inicial
k
! indicador de ao
character(len=1)::menu="n"
do while(.true.)
print*
print*,"======================"
print*," Metodo de Simpson 1/3"
print*,"======================"
print*
!--------------------------------------------------! Entrada do valor inicial, final e intervalos
!--------------------------------------------------print*, "====================================================="
print*, "Entre ponto Inicial, Final e Quantidade de Intervalos"
print*, "====================================================="
read*, a, b, n
call simpson_1_3(fun4,a,b,n,it)
print"(a,i10,a,D15.7)","Com",n,"
do while(.true.)
print*,"-------------------------------------------"
print*,"s -- entre s para novo calculo da integral"
print*,"n -- entre n para sair"
print*,"--------------------------------------------"
read*, menu
if(menu == "s" .or. menu == "S") then
k=1
exit
elseif(menu == "n" .or. menu == "N") then
k=2
exit
end if
end do
if(k == 1) k=0
!repete o mtodo para nova raiz
if(k == 2) exit
end do
end program simpson_prog
_______________________________________________________________________________________
arquivo: fc_constantes.f03
Utilize os mdulos existentes:
_______________________________________________________________________________________
arquivo: m_funcoes_008.f03
21
module m_funcoes_008
!
!------------------------------------------------------------------------! Propsito: Contm funes definidas pelo usurio
!------------------------------------------------------------------------! Arquivo: m_funcoes_008.f03
!
Autor: Anibal L. Pereira
20/02/2011
!------------------------------------------------------------------------!
[mdulos ] nenhum
!
[funes ] fun4
(-->) f(x) = (1 + (x/2.0)**2)**2)*pi
![sub-rotinas] nenhuma
!------------------------------------------------------------------------------------use fc_constantes
public ::
fun4
contains
function fun4(x) result(y)
!-----------------------------------------------------------------------------!Propsito:
! Define funo: f(x) = (1 + (x/2.0)**2)**2)*pi
!-----------------------------------------------------------------------------!Autor:
Anibal L. Pereira
03/02/2009
!Revises:
!-----------------------------------------------------------------------------real(kind=dp),intent(in)::x ! valor da abcissa
!------------------------------------real(kind=dp)::y ! resultado
!-----------------y = ((1_dp + (x/2.0_dp)**2)**2)*pi_d
end function fun4
end module m_funcoes_008
_______________________________________________________________________________________
arquivo: m_procedimentos_020.f03
module m_procedimentos_020
!
!------------------------------------------------------------------------! Propsito: Conter funes e sub-rotinas
!------------------------------------------------------------------------! Arquivo: m_procedimentos_020.f03
!
Autor: Anibal L. Pereira
20/02/2011
!------------------------------------------------------------------------!
[mdulos ] nenhum
!
[funes ] nenhuma
![sub-rotinas] simpson_1_3
!
:::Calcula a integral da funo entre os pontos a e b utilizando n1 intervalos
!
pelo mtodo de simpson 1/3
!
!------------------------------------------------------------------------------------use fc_constantes
public :: integ_trapezio
contains
!-----------------------------------------------------------------------------subroutine simpson_1_3(func,a,b,n,simp)
!-----------------------------------------------------------------------------!Propsito:
! Calcula a integral da funo entre os pontos a e b utilizando n1 intervalos
! pelo mtodo de simpson 1/3
!-----------------------------------------------------------------------------!Autor:
Anibal L. Pereira
04/02/2009
!Revises:
!-----------------------------------------------------------------------------real(kind=dp),external::func
22
real(kind=dp),intent(in)::a, b
! ponto inicial e final
integer,intent(in)::n
! nmero sugerindo de intervalos (par ou impar)
real(kind=dp),intent(out)::simp
! valor da integral
!--------------------------------------------real(kind=dp)::h, & !tamanho do incremento
x
!ponto
integer:: n1, & ! nmeros de intervalos prximo de n, que ser sempre par
i
! contador
!---------------!-------------------------------------------------------------------! garante que o nmero de intervalos (n1) seja sempre par
! ou seja garante um nmeros impares de pontos
!
! se n par
===> n1 = n
! se n impar ===> n1 = n + 1
!-------------------------------------------------------------------n1=max(n,2)
n1=n1+modulo(n1,2)
h=(b-a)/n1
x=a
simp=func(x)
! simp=f(a)
do i=1,n1-1
x=a+i*h
! anda por cada um dos pontos de x(2) at x(n-1)
simp = simp + (3 -(-1)**i)*func(x) ! soma 4*f(x_impares) e 2*f(x_pares)
end do
x=b
simp = simp + func(x)
simp = h*(simp/3)
Atividade 04
Fazer:
Escrever um programa em Fortran 2003 e todas as unidades de programas necessrias para que o
programa calcule a integral de uma funo pelo mtodo de Simpson 3/8.