Sei sulla pagina 1di 22

Instituto de Fsica Armando Dias Tavares

Departamento de Fsica Aplicada e Termodinmica

Fsica Computacional A
DFAT/

FiscompFA

Integrao
Professor: Anibal Leonardo Pereira

ltima atualizao: junho 2011

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

Diego Chagas Garcia


Erick Azevedo Meirelles
Luciana Maria dos Santos Azevedo
Tatiana Gonalves Martins
Renato Nascente Jnior
Pblio Martins Romano M. Carreiro
Luiz Fernando Rosalba Telles Souza
Paulo Henrique Pfitzner
Filipe da Fonseca Cordovil
Magali dos Santos Leodato
Filipe da Fonseca Cordovil

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:

interpolao ascendente de Newton


interpolao descendente de Newton
interpolao diferenas divididas de Newton
interpolao de Lagrange

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

A expresso para a integrao pelo mtodo do trapzio :

I = f x dx=
a

ba
[ f a f b]E
2

DFAT/Folha Atividades/FiscompFA Integrao

onde

ba
[ f a f b] a regra do trapzio
2

e a grandeza E representa o erro existente no valor calculado da integral.

A representao grfica do processo de integrao utilizando uma


interpolao linear mostrado na figura ao lado.

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:

I =A retngulo Atringulo . Ento:


1
I = f aba f b f aba
2

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

DFAT/Folha Atividades/FiscompFA Integrao

h=

onde

x x 0
ba
. Na figura temos: h= N
.
N
N
I=

Ao abrir a equao ela pode ser escrita assim:

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

Atente ao fato do intervalo h (incremento ou passo) ser constante.


Por este motivo os pontos esto afastados um dos outros por h e eles sero localizao, em relao ao
primeiro ponto, por f i= f aih . Ento:
quando

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

Calcule a integral definida

I = x dx usando a regra do trapzio.


1.00

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

(observe que a contagem inicia com o valor zero)

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

DFAT/Folha Atividades/FiscompFA Integrao

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

Esta equao mostra que o erro proporcional a h 2 para um intervalo fixo [a , b] .


1.30

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

Calcule a integral definida

I = 1x 2 dx
0

A resposta exata da integral :

I = 1x 2 dx=x
0

Resolvendo pelo mtodo do trapzio:

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

DFAT/Folha Atividades/FiscompFA Integrao

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

O erro no valor da integral com

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 %

3. Mtodo de Simpson 1/3


O mtodo de Simpson 1/3 baseado na interpolao polinomial quadrtica ( polinmio de segundo grau)
A figura mostra que o intervalo [a , b] dividido em dois
intervalos (um nmero par de intervalos).
Ao usar os 3 pontos isto nos permite construir um polinmio
interpolador de segunda ordem.
Ao proceder assim somos capaz de derivar uma expresso para a
integral que conhecida como regra de Simpson 1/3

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

DFAT/Folha Atividades/FiscompFA Integrao

1. escrever a expresso de Taylor


f i para o ponto

progressiva: do ponto central

f i1= f i h f 'i

f i1

h 2 ' ' h3 ' ' ' h 4 4


fi fi
f i
2
6
24

2. escrever a expresso de Taylor


regressiva: do ponto central f

f i1= f i h f 'i

para o ponto f

i1

h2 ' ' h3 ' '' h 4 4


f f
f
2 i 6 i 24 i

3. adiciona-se estas duas expresses temos


f i1 f i 1=2 f i

h2 ' ' h4 4
fi
f i
2
24

4. subtrai-se 2 f i de ambos os lados da expresso resultante, temos


f i12 f i f i1=

h2 ' ' h4 4
f
f
2 i 24 i

5. truncando-se a srie, temos

f 'i ' =

f i 12 f i f i 1

esta a derivada segunda. Dela podemos obter a expresso:

h2

2 ''
h f i = f i12 f i f i1 que ser til na derivao da expresso da regra de Simpson 1/3

Agora, para a obteno da regra de Simpson 1/3 procede-se assim:


1. escreve-se a expanso de Taylor da curva que passa pelos pontos

xx i 2 ' ' xx i 3 ' ' ' x x i 4 4


f = f i xx i f
fi
fi
f i
2!
3!
4!
'
i

2. por convenincia, utiliza-se o ponto central. Ento integrando-se a funo


I=

x i h

x i h

x i h
x i h

I=

x i h

f x dx=

x i h

x x i2 ' ' x x i 3 ' ' ' xx i 4 4


f i x xi f
fi
fi
f i dx
2!
3!
4!
'
i

1
f x dx=2 h f i0 h 3 f 'i '
3

3. agora usando a derivada segunda aproximao central ( que obtivemos antes)


2 ''
h f i = f i12 f i f i1 podemos escrever:

DFAT/Folha Atividades/FiscompFA Integrao

x i h

I=

x i h

1
f x dx=2 h f i h f i12 f i f i1
3

4. Truncando a srie, chegamos a expresso desejada


x i h

I=

x i h

1
f x dx= h f i14 f i f i1
3

Porque a srie foi truncada a expresso correta :

1
I = h f i14 f i f i1 E
3

O erro (sem demostrao) dado avaliado pela expresso:

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

Simpson 1/3 sempre utiliza um nmero par de intervalos


ou ento um nmero impar de pontos

A regra de Simpson 1/3 chamada assim por causa do

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

DFAT/Folha Atividades/FiscompFA Integrao

O erro (sem demostrao) calculada por:


observe que para um intervalo fixo [a , b]

ba 4 4
h f
180

o erro proporcional a

h4 .

Exemplo 03:
1

Calcule a integral definida

I =
0

1
dx
1x 2
1

A resposta exata da integral :

I=

1
1

dx=tan1 x0= 0.7853


2
4
1x

Resolvendo pelo mtodo do Simpson 1/3 :

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

Calcule a integral definida

I =
2

1
dx
x1
3

A resposta exata da integral :

I =
2

3
1
4
dx=ln x12=ln
=0.287682072
x1
3

Resolvendo pelo mtodo do Simpson 1/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

DFAT/Folha Atividades/FiscompFA Integrao

O erro igual a :

E=0.2876820720.2876831=0.0000010270.000001

4. Mtodo de Simpson 3/8


O mtodo de Simpson 3/8 derivado da integrao de um polinmio interpolador de grau trs.

Considere a funo

f x mostrada na figura ao lado

Um polinmio interpolador linear seria assim

Um polinmio interpolador de segundo grau assim


Observe o intervalo

[a , b] dividido em 2 partes

Nmero par de intervalos

O polinmio interpolador de terceiro grau assim.


Observe o intervalo

Para um intervalo [a , b] dividido em trs partes pode-se escrever:

[a , b] dividido em 3 partes

10

DFAT/Folha Atividades/FiscompFA Integrao

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

O erro calculado pela expresso E

E o erro.

3 5 4
ab
h f x onde x =
.
80
2

A frmula de Simpson 3/8 aplicvel a trs intervalos ou a mltiplos de trs intervalos.


Quando o nmero de intervalos impar, mas no mltiplo de trs, precede-se assim:

1. utiliza-se Simpson 3/8


aos 3 primeiros intervalos ou aos 3 ltimos intervalos
2. aplica-se Simpson 1/3
ao intervalos restantes (que sero par)
Porque a ordem do erro para Simpson 1/3

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

Esta Folha contm 03 atividade exemplo com ajustes e/ou acrscimos


01 atividades para serem feitas
04 Atividades

00 atividades para serem ajustadas e/ou acrescidas

Seu professor de laboratrio (e/ou teoria) poder alterar esta relao !

Cdigo da folha de atividades


Acesse a Home Page da disciplina, entre no link Datas-e-Atividades, para obter o cdigo da
folha de atividades. Toda atividade tem que ter o "xx" substitudo pelo cdigo indicado.
Exemplos: cdigo 02 fxxa3.f03 f02a3.f03

11

DFAT/Folha Atividades/FiscompFA Integrao

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.

O clculo da rea pode ser feita utilizando-se trapzios elementares


traados sob a curva e depois somando-se todos os trapzios para
obter a rea total.
Este procedimento fornece o valor de uma integral definida.
Figura obtida de: http://pt.wikipedia.org/wiki/Integral em 10/01/2010)
A regra do trapzio para o clculo de uma integral definida :
b

f x dx 2x
a

N 1

f a f b 2 f x i

onde so utilizados N intervalos e

i=1

x=

ba
N

xi =ai x

x 2 dx =72

Para verificar a correo do programa, calcule:

usando N=10, depois N=100 e depois N=1000

Modifique o programa para salvar um arquivo de dados (int_trapezio_001.dados) contendo o seguinte:

uma linha onde feita a identificao da funo

na linha seguinte escreva: a, b, N, int

Obtenha os valores das seguintes integrais:


b

a
b

dx
1
x
f 2 x dx= 2 2 = arctan
c
c
a c x

fazendo c = 2, calcule a integral para os limites a= 1 e b = 3

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

calcule a integral para: c = 2, k = 3, a = 0.5 e b = 1.3

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

DFAT/Folha Atividades/FiscompFA Integrao

Escreva o programa int_trapezio e salve-o no arquivo fxxa1.f03


Escreva o mdulo m_procedimentos_018 e salve-o no arquivo m_procedimentos_018.f03
Escreva o mdulo m_funcoes_006 e salve-o no arquivo m_funcoes_006.f03
No deixe de atualizar o cabealho de forma adequada.
Voc pode copiar e colar os cdigos fontes, mas no deixe de ajustar a diagramao dos

cdigos fontes segundo o estilo de programao adotado na disciplina


________________________________________________________________________________________
arquivo: fxxa1.f03

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

DFAT/Folha Atividades/FiscompFA Integrao

13

! Propsito: recebe os limites e a funo para calcular a integral


!
definida da funo pelo mtodo do trapzio
!------------------------------------------------------------------! Autor: Anibal L. Pereira 08/01/2010
!------------------------------------------------------------------real, intent(in)::
a,
& ! limite inferior
b
! limite superior
integer, intent(in):: N
! nmero de intervalos
real, intent(out) :: int
! valor da integral
real, external :: func
! funo a ser integrada
real:: x,
& ! ordenada
dx
! incremento
integer:: i
! contador
!--- clculo do intervalo
dx = (b - a) / N

-------------------------------------

!-- calcula f(a) + f(b) --------------------------------------int = func(a) + func(b)


!--- calcula o somatrio --------------------------------------i = 0
do
i = i + 1
x = a + i * dx ! pontos intermedirios
int = int + 2.0 * func(x)
if(i == (N - 1)) exit
end do
!--- multiplica o resultado por metade do incremento ----------int = (dx / 2.0) * int
end subroutine trapezio
end module m_procedimentos_018

_______________________________________________________________________________________
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

DFAT/Folha Atividades/FiscompFA Integrao

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

Para verificar a correo do programa, calcule:

x 2 dx =72

usando N=10, depois N=100 e depois N=1000

Modifique o programa para salvar um arquivo de dados (int_trapezio_prog_001.dados) contendo o seguinte:

uma linha onde feita a identificao da funo

na linha seguinte escreva: a, b, N, int

Obtenha os valores das seguintes integrais definidas:


2

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)

Acrescente as funes no mdulo m_funcoes_006 para poder calcular as integrais

Escreva o programa integ_trapezio_prog e salve-o no arquivo fxxa2.f03


Escreva o mdulo m_procedimentos_019 e salve-o no arquivo m_procedimentos_019.f03
Escreva o mdulo m_funcoes_007 e salve-o no arquivo m_funcoes_007.f03
No deixe de atualizar o cabealho de forma adequada.
Documentao externa PARCIAL do programa: integ_trapezio_prog
1) Atividade: fxxa2
2) Programa: integ_trapezio_prog
3) Arquivo: fxxa2.f03
4) Propsitos:
5) Identificao dos Dados:
Entrada:
Sada:
6) Subprogramas:
[mdulo
]
[funo
]
[sub-rotina]

Autor: Anibal L. Pereira


Revises:

03/02/2009

Verso:

15

DFAT/Folha Atividades/FiscompFA Integrao


7) Mtodo:

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

DFAT/Folha Atividades/FiscompFA Integrao

print*," Metodo do trapezio"


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 integ_trapezio(fun1,a,b,n,it)
print"(a,i10,a,D12.3)","Com",n,"
intervalos a integral vale :",it
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 integ_trapezio_prog

_______________________________________________________________________________________
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

DFAT/Folha Atividades/FiscompFA Integrao

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

DFAT/Folha Atividades/FiscompFA Integrao

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

O programa calcula a integral:

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:

uma linha onde feita a identificao da funo

na linha seguinte escreva: a, b, N, int

Obtenha os valores das seguintes integrais definidas:

I = sin(x )dx
0

para esta integral use a a regra do trapzio com N=2,4,8,25,50,100


e tambm a regra simpson1/3 com N=3,5,9,25

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)

Coloque as funes no mdulo m_funcoes_008 para poder calcular as integrais

Escreva o programa simpson_prog e salve-o no arquivo fxxa3.f03


Escreva o mdulo m_procedimentos020 e salve-o no arquivo m_procedimentos_020.f03
Escreva o mdulo m_funcoes_008 e salve-o no arquivo m_funcoes_008.f03
No deixe de atualizar o cabealho de forma adequada.

19

DFAT/Folha Atividades/FiscompFA Integrao

Documentao externa PARCIAL do programa: simpson_prog


1) Atividade: fxxa2
2) Programa: simpson_prog

Autor: Anibal L. Pereira


Revises:

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

Agora como a varivel local assume os valores 0, 1 e 2

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

DFAT/Folha Atividades/FiscompFA Integrao

________________________________________________________________________________________
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,"

intervalos a integral vale :",it

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

DFAT/Folha Atividades/FiscompFA Integrao

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

DFAT/Folha Atividades/FiscompFA Integrao

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)

! soma ltimo ponto f(b)

end subroutine simpson_1_3


end module m_procedimentos_020

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.

Potrebbero piacerti anche