• Nenhum resultado encontrado

fiscomp FA 08 2011 1

N/A
N/A
Protected

Academic year: 2021

Share "fiscomp FA 08 2011 1"

Copied!
22
0
0

Texto

(1)

Física Computacional A

DFAT/

FiscompFA

Integração

Professor: Anibal Leonardo Pereira última atualização: junho 2011

Estagiários:

2004/1 a 2005/2 Luciana Conceição Iecker Lima

2010/1 Magali dos Santos Leodato

2009/1 a 2010/2 Filipe da Fonseca Cordovil

Monitores:

2001/1 Diego Chagas Garcia

2002/2 Erick Azevedo Meirelles

2003/1 a 2003/2 Luciana Maria dos Santos Azevedo

2003/1 a 2003/2 Tatiana Gonçalves Martins

2003/1 a 2005/2 Renato Nascente Júnior

2004/1 a 2005/2 Públio Martins Romano M. Carreiro

2006/1 a 2007/2 Luiz Fernando Rosalba Telles Souza

2006/1 a 2007/2 Paulo Henrique Pfitzner

2008/1 a 2008/2 Filipe da Fonseca Cordovil

2008/1 a 2009/2 Magali dos Santos Leodato

2011/1 a Filipe da Fonseca Cordovil

1. Integração

O método de integração numérica é usado para integrar funções tanto sob a forma tabular quanto na forma

analítica.

Os métodos de integração numérica podem usar tanto a interpolação polinomial com espaçamento uniforme

quanto a interpolação polinomial com espaçamento desigual, portanto eles podem utilizar as fórmulas de:

interpolação ascendente de Newton

interpolação descendente de Newton

interpolação diferenças divididas de Newton

interpolação de Lagrange

Para a integração numérica, o método do trapézio é o mais simples por isto é sempre utilizado para introduzir os

conceitos de integração numérica enquanto a regra de Simpson 1/3 é utilizado para a determinação da integral

quando se utiliza uma calculadora (

cálculo manual

).

2. Método do Trapézio

Método do Trapézio é um método de integração que utiliza um polinômio interpolador linear.

A expressão para a integração pelo método do trapézio é :

I =

a b

f  x  dx=

b−a

(2)

onde

b−a

2

[

f a f  b]

é a regra do trapézio

e a grandeza

E

representa o erro existente no valor calculado da integral.

A representação gráfica do processo de integração utilizando uma

interpolação linear é mostrado na figura ao lado.

A área hachurada debaixo a linha de interpolação (

definida pela interpolação linear

) é igual ao valor da integral

calculada pelo método do trapézio, enquanto a área sob a curva é a integral exata da função. 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 retângulo com a área do triângulo que estão sob a curva:

I =A

retângulo

A

triângulo

. Então:

I = f

a

⋅

b−a

1

2

⋅

f

b

f

a

⋅

b−a

I =b−a⋅

[

f

a

1

2

⋅

f

b

f

a

]

=

b−a⋅

[

2f

a

f

b

f

a

2

]

I =

b−a

2

[

f

a

f

b

]

A equação pode ser estendida para vários intervalos, simplesmente adicionando-se cada uma das áreas sob a

curva. Então, para

N

intervalos iguais, cada um deles com um tamanho igual a

h

, a regra do trapézio pode

ser escrita assim:

I =

a b

f  x  dx=

h

2

[

f a2

i=1 N −1

f aih f b

]

E

(3)

onde

h=

b−a

N

. Na figura temos:

h=

x

N

x

0

N

.

Ao abrir a equação ela pode ser escrita assim:

I =

h

2

f

0

2f

1

2 f

2

⋯2 f

N −1

f

N

E

onde

f

0

=

f  a

,

f

1

=

f ah

,

f

2

=

f a2h 

,

f

3

=

f  a3h 

,

,

f

i

=

f aih

ou

f

0

=

f  x

0

,

f

1

=

f  x

0

h

,

f

2

=

f  x

0

2h 

,

f

3

=

f  x

0

3h

,

,

f

i

=

f  x

0

ih

Atente ao fato do intervalo

h

(

incremento ou passo

) ser constante.

Por este motivo os pontos estão afastados um dos outros por

h

e eles serão localização, em relação ao

primeiro ponto, por

f

i

=

f aih

. Então:

quando

i=0

f

0

=

f  a

ou

f

0

=

f  x

0

i=1

f

1

=

f ah

ou

f

1

=

f  x

0

h

i=2

f

2

=

f a2 h

ou

f

2

=

f  x

0

2 h

⋯⋯

i= N

f

N

=

f aN h

ou

f

N

=

f  x

0

N h

Exemplo 01:

Calcule a integral definida

I =

1.00 1.30

x dx

usando a regra do trapézio.

Fazendo

N =6

temos

h=

b−a

N

=

1.30−1.00

6

=0.05

então:

I =

h

2

[

f

0

2 f

1

2 f

2

2 f

3

2 f

4

2 f

5

f

6

]

(

observe que a contagem inicia com o valor zero

)

Podemos escrever:

i

x+ih

x

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

I =

0.05

2

[

12×1.02472×1.04882×1.07242×1.09542×1.11801.1402

]

I =0.025[12.04942.09762.14482.19082.2361.1402]=0.32147

(4)

O valor correto da integral é

0.32149

. Por isto o erro existente no valor calculado pela regra do trapézio é de

0.00002

.

Sem demostração:

O erro no valor da integral pelo método do trapézio para uma única área é obtido usando-se a fórmula:

E≃−

h

3

12

f

''



com ab

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 fórmula:

E≃−

1

12

b−a

3

N

3

i=1 N

f

' '

x

i

≃−

1

12

b−a h

2

f

' '



com ab

Esta equação mostra que o erro é proporcional a

h

2

para um intervalo fixo

[

a , b]

.

Para a integral

I =

1.00 1.30

x dx

temos :

f  x =

x

,

f

'

x =

1

2

x

1 2

e

f

' '

x =−

1

4

x

3 2

logo:

E≃−

1

12

b−a h

2

f

' '

≃0.0833×0.3×0.05

2

×

[

1

4

×1.01

1.5

]

≃0.000015853

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:

Calcule a integral definida

I =

0 1

1x

2

dx

A resposta exata da integral é:

I =

0 1

1x

2

dx=x−

x

3

3

=

2

3

≃0.66667

Resolvendo pelo método do trapézio:

N =1

,

a=0

,

b=1

,

h=

1−0

1

=1

I ≃

h

2

f

0

f

1

≃0.510≃

1

2

≃0.5

(5)

N =2

,

a=0

,

b=1

,

h=

1−0

2

=

1

2

I ≃

h

2

f

0

2 f

1

f

2

≃

1

4

12×

3

4

0≃

5

8

0.625

N =4

,

a=0

,

b=1

,

h=

1−0

4

=

1

4

I ≃

h

2

f

0

2 f

1

2 f

2

2 f

3

f

4

≃0.2511.8751.50.8750≃0.65625

No cálculo do erro usa-se a derivada segunda:

f  x =1− x

2

,

f

'

x =−2x

,

f

' '

x =−2

com

N =4

temos:

E≃−

1

12

b−a h

2

f

' '

≃−

1

12

×1×0.25

2

×−2≃0.0141≃0.01

O erro no valor da integral com

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. Método de Simpson 1/3

O método de Simpson 1/3 é baseado na interpolação polinomial quadrática (

polinômio de segundo grau

)

A figura mostra que o intervalo

[

a , b]

é dividido em dois

intervalos (

um número par de intervalos

).

Ao usar os 3 pontos isto nos permite construir um polinômio

interpolador de segunda ordem.

Ao proceder assim somos capaz de derivar uma expressão para a

integral que é conhecida como regra de Simpson 1/3

Antes de obter a fórmula de Simpson 1/3 faz-se a indicação dos passos necessários para a obtenção da derivada

segunda usando a aproximação central (

ela já foi apresentada quando tratamos da derivada

). Ao recordamos os passos

necessários à obtenção da derivada segunda isto ajudará (

tornará mais fácil

) o processo de entendimento da obtenção

da expressão que permite calcular a integral por Simpson 1/3.

(6)

1.

escrever a expressão de Taylor

progressiva

: do ponto central

f

i

para o ponto

f

i1

f

i1

=

f

i

h f

i'

h

2

2

f

i ' '

h

3

6

f

i ' ' '

h

4

24

f

i 4

⋯

2.

escrever a expressão de Taylor

regressiva

: do ponto central

f

i

para o ponto

f

i−1

f

i−1

=

f

i

h f

i'

h

2

2

f

i ' '

h

3

6

f

i ' ''

h

4

24

f

i 4

⋯

3.

adiciona-se estas duas expressões temos

f

i1

f

i −1

=

2 f

i

h

2

2

f

i ' '

h

4

24

f

i 4 

⋯

4.

subtrai-se

2 f

i

de ambos os lados da expressão resultante, temos

f

i1

−2 f

i

f

i−1

=

h

2

2

f

i ' '

h

4

24

f

i 4 

⋯

5. truncando-se a série, temos

f

i' '

=

f

i 1

−2 f

i

f

i −1

h

2

esta é a derivada segunda. Dela podemos obter a expressão:

h

2

f

i ' '

=

f

i1

−2 f

i

f

i−1

que será útil na derivação da expressão da regra de Simpson 1/3

Agora, para a obtenção da regra de Simpson 1/3 procede-se assim:

1. escreve-se a expansão de Taylor da curva que passa pelos pontos

f = f

i



x−x

i

f

i'

x−x

i

2

2!

f

i ' '

x−x

i

3

3!

f

i ' ' '

x −x

i

4

4!

f

i 4

⋯

2.

por conveniência, utiliza-se o ponto central. Então integrando-se a função

I =

xihxih

f  x dx=

xihxih

[

f

i



x− x

i

f

i'

x− x

i

2

2!

f

i ' '

x− x

i

3

3!

f

i ' ' '

x−x

i

4

4!

f

i 4 

⋯

]

dx

I =

xihxih

f  x dx=2 h f

i

0

1

3

h

3

f

i' '

⋯

3.

agora usando a derivada segunda aproximação central (

que obtivemos antes

)

h

2

f

i ' '

(7)

I =

xihxih

f  x dx=2 h f

i

1

3

h f

i−1

2 f

i

f

i1

⋯

4. Truncando a série, chegamos a expressão desejada

I =

xihxih

f  x dx=

1

3

h f

i−1

4 f

i

f

i1

Porque a série foi truncada a expressão correta é:

I =

1

3

h  f

i−1

4 f

i

f

i1



E

O erro (

sem demostração

) é dado avaliado pela expressão:

E≃−

h

5

90

f

4

 x

.

A integração por Simpson 1/3 é bastante simples e pode ser obtida usando-se uma calculadora e sua acurácia e

boa o bastante para muitas aplicações.

Geralmente usa-se a regra de Simpson 1/3 para calcular a integral no lugar da integração pelo método do

trapézio.

Guarde esta expressão, pois ela é importante:

I =

h

3

f

i−1

4f

i

f

i1

Lembre-se

: Simpson 1/3 sempre utiliza um

número par de intervalos

ou então um

número impar de pontos

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

1

3

que aparece na expressão.

A regra de Simpson 1/3 estendida é obtida pela aplicação repetida da regra de Simpson 1/3 em um intervalo que

foi dividido em um

número par de intervalos

.

Chamando o

número total de intervalos

de

N

(

observe que N tem que ser par

) a regra de Simpson 1/3 fica assim:

I =

h

3

[

f a4

i=1 i impar N −1

f aih2

i=2 i par N − 2

f aih f b

]

E

onde

h=

b−a

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 expressão ela fica similar a:

I =

a b

f  x  dx =

=

h

3

[

f

0

4 f

1

2 f

2

4 f

3

2 f

4

⋯2 f

N −2

4 f

N −1

f

N

]

E

(8)

O erro (

sem demostração

) é calculada por:

E≃−

b−a

180

h

4

f

4



observe que para um intervalo fixo

[

a , b]

o erro é proporcional a

h

4

.

Exemplo 03:

Calcule a integral definida

I =

0 1

1

1x

2

dx

A resposta exata da integral é:

I =

0 1

1

1x

2

dx=tan

−1

x

0 1

=

4

0.7853

Resolvendo pelo método do Simpson 1/3 :

N =2

,

a=0

,

b=1

,

h=

1−0

2

=

1

2

=0.5

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

I ≃

h

3

f

0

4 f

1

f

2

≃

0.5

3

13.20.5≃0.7833

N =4

,

a=0

,

b=1

,

h=

1−0

4

=0.25

observe: N → par

I ≃

h

3

f

0

4 f

1

2 f

2

4 f

3

f

4

≃

0.25

3

10.940.80.640.5≃0.785

Exemplo 04:

Calcule a integral definida

I =

2 3

1

x1

dx

A resposta exata da integral é:

I =

2 3

1

x1

dx=ln  x1

2 3

=

ln

4

3

=0.287682072

Resolvendo pelo método do Simpson 1/3 :

N =4

,

a=2

,

b=3

,

h=

3−2

4

=

0.25

observe: N → par

I ≃

h

3

f

0

4 f

1

2 f

2

4 f

3

f

4

I ≃

0.25

3

0.3333340.30769232 0.285714240.26666670.25≃0.2876831

(9)

O erro é igual a :

E=0.287682072−0.2876831=0.000001027≃0.000001

4. Método de Simpson 3/8

O método de Simpson 3/8 é derivado da integração de um polinômio interpolador de grau três.

Considere a função

f  x 

mostrada na figura ao lado

Um polinômio interpolador linear seria assim

Um polinômio interpolador de segundo grau assim

Observe o intervalo

[

a , b]

dividido em 2 partes

Número par de intervalos

O polinômio interpolador de terceiro grau assim.

Observe o intervalo

[

a , b]

dividido em 3 partes

(10)

I =

a b

f  x  dx=

3

8

h [ f

0

3 f

1

3 f

2

f

3

]

E

onde:

h=

b−a

3

,

f

i

=

f aih

e

E

é o erro.

O erro é calculado pela expressão

E≃−

3

80

h

5

f

4

x 

onde

x=

ab

2

.

A fórmula de Simpson 3/8 é aplicável a três intervalos ou a múltiplos de três intervalos.

Quando o número de intervalos é impar, mas não múltiplo de três, 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 serão par

)

Porque a ordem do erro para Simpson 1/3

1

90

h

5

f

4 

e a mesma para Simpson 3/8

3

80

h

5

f

4

não há

ganho significativo na acurácia da integral. Portanto, pode-se utilizar indistintamente as duas regras.

Esta Folha contém

04 Atividades

00 atividades exemplos

03 atividade exemplo com ajustes e/ou acréscimos

01 atividades para serem feitas

00 atividades para serem ajustadas e/ou acrescidas

Seu professor de laboratório (e/ou teoria) poderá alterar esta relação !

Código da folha de atividades

Acesse a Home Page da disciplina, entre no link Datas-e-Atividades, para obter o código da folha de atividades. Toda atividade tem que ter o "xx" substituído pelo código indicado. Exemplos: código 02 ► fxxa3.f03

f02a3.f03

(11)

Atividade 01

Entregar em meio magnético:

1. programa: int_trapezio fxxa1.f03

2. módulos: mod_ m_procedimentos_018.f03 m_funcoes_006.f03 3. arquivos: int_trapezio_001.dados

mais os necessários

Exemplo/Acréscimo/Ajuste:

A integral de uma função é a área sob a curva.

O cálculo da área pode ser feita utilizando-se trapézios elementares traçados sob a curva e depois somando-se todos os trapézios 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 trapézio para o cálculo de uma integral definida é :

a b

f  x  dx≃

x

2

[

f  a f b 2⋅

i=1 N −1

f  x

i

]

onde são utilizados N intervalos e

x=

b−a

N

e

x

i

=

ai  x

Para verificar a correção do programa, calcule:

0 6

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_001.dados) contendo o seguinte: • uma linha onde é feita a identificação da função

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

Obtenha os valores das seguintes integrais:

a b

f

2

x dx=

a b

dx

c

2

x

2

=

1

c

arctan

x

c

a b

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

a b

f

3

x dx=

a b

e

cx

sin kx dx=

e

cx

c

2

k

2

c sin kx− k cos kx 

a b

calcule a integral para: c = 2, k = 3, a = 0.5 e b = 1.3 Você tem que acrescentar as funções indicadas ( f2 e f3 ) no módulo m_funcoes_006 para poder calcular a integral. Quando utilizar o programa especifique a função desejadas no programa

OBSERVE

que esta atividade implementa o procedimento usando um DO infinito (DO sem contagem) e

faz cálculos com precisão simples

(12)

Escreva o programa

int_trapezio

e salve-o no arquivo

fxxa1.f03

Escreva o módulo

m_procedimentos_018

e salve-o no arquivo

m_procedimentos_018.f03

Escreva o módulo

m_funcoes_006

e salve-o no arquivo

m_funcoes_006.f03

Não deixe de atualizar o cabeçalho de forma adequada.

Você pode copiar e colar os códigos fontes,

mas não deixe de ajustar a diagramação dos

códigos fontes segundo o estilo de programação adotado na disciplina

________________________________________________________________________________________

arquivo: fxxa1.f03

◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

program int_trapezio ! !--- ! Propósito: calcula a integral definida entre a e b usando a regra ! do trapézio

!--- ! Arquivo: fxxa1.f03

! Autor: Anibal L. Pereira 06/01/2010 !Revisões: 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 ! número 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 número 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 ! !--- ! Propósito: Conter funções e sub-rotinas

!--- ! Arquivo: m_procedimentos_018.f03

! Autor: Anibal L. Pereira 05/01/2010

!--- ! [módulos ] nenhum

! [funções ] nenhuma ![sub-rotinas] trapezio

! :::calcula a integral definida entre a e b pelo método do trapézio !--- public :: trapezio

contains

subroutine trapezio(a, b, N, int, func)

(13)

! definida da função pelo método do trapézio

!--- ! Autor: Anibal L. Pereira 08/01/2010

!--- real, intent(in):: a, & ! limite inferior

b ! limite superior integer, intent(in):: N ! número de intervalos real, intent(out) :: int ! valor da integral real, external :: func ! função a ser integrada real:: x, & ! ordenada

dx ! incremento integer:: i ! contador

!--- cálculo do intervalo --- dx = (b - a) / N

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

!--- calcula o somatório --- i = 0

do

i = i + 1

x = a + i * dx ! pontos intermediários 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 ! !--- ! Propósito: Contém funções definidas pelo usuário

!--- ! Arquivo: m_funcoes_006.f03

! Autor: Anibal L. Pereira 05/01/2010

!--- ! [módulos ] nenhum ! [funções ] f1 (-->) y = x**2 ![sub-rotinas] nenhuma !--- public :: f1 contains real function f1(x) !--- ! Propósito: função y = x**2 !--- ! Autor: Anibal L. Pereira 08/01/2010

!--- implicit none

real, intent(in) :: x

!--- função muito simples. Está sendo usada para exemplificar o conceito f1 = x **2

end function f1

(14)

Atividade 02

Entregar em meio magnético:

1. programa: integ_trapezio_prog fxxa2.f03

2. módulos: fc_constantes.f03 m_procedimentos_019.f03 m_funcoes_007.f03 3. arquivos: int_trapezio_prog_001.dados mais os necessários

Exemplo/Acréscimo/Ajuste:

Esta atividade calcula a integral definida pelo método do trapézio, porém utiliza precisão dupla. Para verificar a correção do programa, calcule:

0 6

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 identificação da função

• na linha seguinte escreva: a, b, N, int Obtenha os valores das seguintes integrais definidas:

0 2

1

x

dx

(resposta Int=2.796)

0 10

300⋅x

1e

x

dx

(resposta Int=246.28)

8 30

2000 ln

[

140000

140000−2100⋅t

]

−9.8⋅t

dt

(resposta Int=11074)

Acrescente as funções no módulo m_funcoes_006 para poder calcular as integrais

Escreva o programa

integ_trapezio_prog

e salve-o no arquivo

fxxa2.f03

Escreva o módulo

m_procedimentos_019

e salve-o no arquivo

m_procedimentos_019.f03

Escreva o módulo

m_funcoes_007

e salve-o no arquivo

m_funcoes_007.f03

Não deixe de atualizar o cabeçalho de forma adequada.

Documentação externa

PARCIAL

do programa: integ_trapezio_prog

1) Atividade: fxxa2

2) Programa: integ_trapezio_prog Autor: Anibal L. Pereira 03/02/2009 Versão: Revisões:

3) Arquivo: fxxa2.f03 4) Propósitos:

5) Identificação dos Dados: Entrada: Saída: 6) Subprogramas: [módulo ] [função ] [sub-rotina]

(15)

7) Método:

A área sobre a curva (integral da função) é obtida somando-se as áreas dos trapézios, então:

A1= x1 2 [f x1f x0] A2= x2 2 [f x2f  x1] ⋮ An= xn 2 [f xnf  xn−1]

porque

x

1

=

x

2

==

x

n

=

x

chega-se a expressão

Integral=A=

x

2

[

f  x

0



f  x

n

2⋅f  x

1



2⋅f  x

2

2⋅ f  x

n−1

]

ou

I =

x

2

[

f  x

0



f  x

n

2⋅

i=1 n−1

f  x

i

]

8) Comentários e Observações:

9) Pseudocódigo ou Fluxograma ou Diagrama NS

________________________________________________________________________________________

arquivo: fxxa2.f03

◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

program integ_trapezio_prog ! !--- ! Propósito: Calcula a integral definida da função especificada entre a e b ! pelo método do trapézio

!--- ! Arquivo:fxxa2.f03

! Autor: Anibal L. Pereira 03/02/2009 !Revisões: !--- 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 ação

character(len=1)::menu="n" do while(.true.)

print*

(16)

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 método para nova raiz if(k == 2) exit

end do

end program integ_trapezio_prog

_______________________________________________________________________________________

arquivo: fc_constantes.f03

◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄

Utilize os módulos existentes:

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

_______________________________________________________________________________________

arquivo: m_funcoes_007.f03

◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

module m_funcoes_007 ! !--- ! Propósito: Contém funções definidas pelo usuário

!--- ! Arquivo: m_funcoes_007.f03

! Autor: Anibal L. Pereira 20/02/2011

!--- ! [módulos ] nenhum ! [funções ] fun1 (-->) y = x**2 ![sub-rotinas] nenhuma !--- use fc_constantes public :: fun1 contains

real(kind=dp) function fun1(x)

!--- ! Propósito: função y = x**2

!--- ! Autor: Anibal L. Pereira 20/02/2011

!--- implicit none

real(kind=dp), intent(in) :: x

!--- função muito simples. Está sendo usada para exemplificar o conceito !--- de usar precisão dupla

(17)

end function fun1

end module m_funcoes_007

_______________________________________________________________________________________

arquivo: m_procedimentos_019.f03

◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

module m_procedimentos_019 ! !--- ! Propósito: Conter funções e sub-rotinas

!--- ! Arquivo: m_procedimentos_019.f03

! Autor: Anibal L. Pereira 05/01/2010

!--- ! [módulos ] nenhum

! [funções ] nenhuma ![sub-rotinas] integ_trapezio

! :::calcula a integral definida entre a e b pelo método do trapézio ! usando precisão dupla

!--- use fc_constantes public :: integ_trapezio contains subroutine integ_trapezio(func,a,b,n,it) !--- !Propósito:

! Calcula a integral da função entre os pontos a e b utilizando n intervalos ! pelo método do trapézio

!--- !Autor: Anibal L. Pereira 04/02/2009

!Revisões: !--- 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 magnético:

1. programa: simpson_prog fxxa3.f03

2. módulos: fc_constantes.f03 m_procedimentos_020.f03 m_funcoes_008.f03 3. arquivos: simpson_prog_001.dados mais os necessários

Exemplo/Acréscimo/Ajuste:

Esta atividade calcula a integral definida pelo método de simpson 1/3

O programa calcula a integral:

0 10

π⋅

(

1+

(

x

2

)

2

)

2

dx =4482.006

Use N =100 OBSERVAÇÃO:

a sub-rotina trata para que o número de pontos usado com simpson 1/3 seja sempre um número de pontos impar, o que garante que o número de intervalos é par

Modifique o programa para salvar um arquivo de dados (simpson_prog_001.dados) contendo o seguinte: • uma linha onde é feita a identificação da função

• na linha seguinte escreva: a, b, N, int Obtenha os valores das seguintes integrais definidas:

I=

0 π 2

sin(x )dx

para esta integral use a a regra do trapézio com N=2,4,8,25,50,100 e também a regra simpson1/3 com N=3,5,9,25

I=

0 π

1

2+cos(x)

dx

(resposta:1.8137)

I=

1 2

log(1+ x)

x

dx

(resposta:0.6142)

I=

0 π 2

1

1+sin

2

(

x )

dx

(resposta:1.1107)

Coloque as funções no módulo m_funcoes_008 para poder calcular as integrais

Escreva o programa

simpson_prog

e salve-o no arquivo

fxxa3.f03

Escreva o módulo

m_procedimentos020

e salve-o no arquivo

m_procedimentos_020.f03

Escreva o módulo

m_funcoes_008

e salve-o no arquivo

m_funcoes_008.f03

(19)

1) Atividade: fxxa2

2) Programa: simpson_prog Autor: Anibal L. Pereira 03/02/2009 Versão: Revisões:

3) Arquivo: fxxa2.f03

4) Propósitos: Obter o valor da integral definida de uma função entre os pontos a e b usando o método de simpson 1/3 5) Identificação dos Dados:

Entrada: Saída: 6) Subprogramas: [módulo ] [função ] [sub-rotina] 7) Método:

O método do trapézio utiliza uma linha reta para unir os 2 pontos consecutivos, daí seu nome - trapézio. O método de

Simpson 1/3 utiliza um polinômio de segunda ordem (equação quadrática) para unir 2 pontos consecutivos. A construção

de um polinômio

P

2

x 

necessita de 3 pontos

x

0

, x

1

, x

2

, o que leva a necessidade garantir um número de

intervalo par, pois somente assim existirá um número impar de pontos.

O polinômio interpolador ascendente de Newton que gera uma curva quadrática com os (n+1=3) pontos

x

0

, x

1

, x

2

é :

P

2

x

0

=

f  x

0

sh= y

0

s  y

0

1

2

s  s−1 

2

y

0

com a variável local igual a

s=

x−x

0

h

.

Agora como a variável local assume os valores 0, 1 e 2

s=0,1 ,2

s=0 ,

x

0

0⋅h= x

0

=

a

s=1 ,

x

0

1⋅h= x

1

s=2 ,

x

0

2⋅h=x

2

=

b

I =

a b

f  x dx =

a b

P

2

x dx =

s=0 s=2

y

0

s y

0

1

2

s  s−1

2

y

0

dx

chegar-se a expressão

I =

h

3

[

f

0

4⋅f

1

f

2

]

ou

I =

h

3

[

f a4⋅f  x

1



f b

]

Observe o 1/3 na expressão. Isto leva a denominação Simpson 1/3 para o método. Repetindo-se o método para vários

pontos (NP –

garantido que

NP é impar

) chega-se a fórmula geral de Simpson 1/3:

I =

a b

f  x dx =

h

3

[

f a  f b4⋅

i=1 i ,impar NP−1

f aih2⋅

i=2 i , par NP−2

f aih

]

8) Comentários e Observações:

(20)

arquivo: fxxa3.f03

◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

program simpson_prog !

!--- ! Propósito: Calcula a integral definida da função especificada entre a e b ! pelo método de simpson 1/3

!--- ! Arquivo:fxxa3.f03

! Autor: Anibal L. Pereira 03/02/2009 !Revisões: !--- 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, & ! número de intervalos inicial k ! indicador de ação

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 método para nova raiz if(k == 2) exit

end do

end program simpson_prog

_______________________________________________________________________________________

arquivo: fc_constantes.f03

◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄

Utilize os módulos existentes:

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

_______________________________________________________________________________________

arquivo: m_funcoes_008.f03

◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄►◄

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

(21)

!

!--- ! Propósito: Contém funções definidas pelo usuário

!--- ! Arquivo: m_funcoes_008.f03

! Autor: Anibal L. Pereira 20/02/2011

!--- ! [módulos ] nenhum

! [funções ] fun4 (-->) f(x) = (1 + (x/2.0)**2)**2)*pi ![sub-rotinas] nenhuma

!--- use fc_constantes

public :: fun4 contains

function fun4(x) result(y)

!--- !Propósito:

! Define função: f(x) = (1 + (x/2.0)**2)**2)*pi

!--- !Autor: Anibal L. Pereira 03/02/2009

!Revisões:

!--- 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 ! !--- ! Propósito: Conter funções e sub-rotinas

!--- ! Arquivo: m_procedimentos_020.f03

! Autor: Anibal L. Pereira 20/02/2011

!--- ! [módulos ] nenhum

! [funções ] nenhuma ![sub-rotinas] simpson_1_3

! :::Calcula a integral da função entre os pontos a e b utilizando n1 intervalos ! pelo método de simpson 1/3

! !--- use fc_constantes public :: integ_trapezio contains !--- subroutine simpson_1_3(func,a,b,n,simp) !--- !Propósito:

! Calcula a integral da função entre os pontos a e b utilizando n1 intervalos ! pelo método de simpson 1/3

!--- !Autor: Anibal L. Pereira 04/02/2009

!Revisões:

!--- real(kind=dp),external::func

(22)

integer,intent(in)::n ! número 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, & ! números de intervalos próximo de n, que será sempre par i ! contador

!---

!--- ! garante que o número de intervalos (n1) seja sempre par

! ou seja garante um números 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) ! soma último ponto f(b) simp = h*(simp/3)

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 necessárias para que o

programa calcule a integral de uma função pelo método de Simpson 3/8.

Referências

Documentos relacionados

30 da Lei 9.656/1998, por sua vez, versa sobre a manutenção do titular na condição de beneficiário na hipótese de perda do vínculo empregatício, por rescisão

308 Convém, quanto a este ponto, tomar a sério a advertência de P. Häberle, Menschenwürde als Grundlage…, p. 823, recomendando um uso não inflacionário da

No sistema Implanta conclui-se que ele não apresenta todos os requisitos obrigatórios de um sistema de gerenciamento de documentos arquivísticos estabelecidos no e-ARQ Brasil

A rotina numérica é feita no software MATLAB, baseada no método de Newmark de integração numérica implícita e na geração das forças de excitação a partir do conhecido

No 8º dia após o último comprimido de DELLAX 20 e DELLAX 30 (ou seja, após os 7 dias da semana de intervalo), inicie a fita seguinte, mesmo que a hemorragia não tenha parado.

• Ponto 38: Antonio Jose Gomes esquina com a Francisco de Assis Andrade • Ponto 39: Antonio jose Gomes em frente ao terreno baldio de esquina • Ponto 40: Jose Bonifacio próximo

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam