Académique Documents
Professionnel Documents
Culture Documents
Fsica Computacional A
DFAT/
FiscompFA
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. Introduo
Chama-se equao algbrica uma relao matemtica que envolve apenas as operaes algbricas de adio,
subtrao, multiplicao, diviso, potenciao inteira e radiciao dos termos.
Exemplos de equaes algbricas:
3x 22x1=0
x 90.5x=8 x
x y =6
3x 22x1=0
x 90.5x=8 x
A equao transcendente uma equao que contm alguma funo no redutvel a uma frao entre
polinmios. As equaes transcendentes mais comuns envolvem as funes: exponencial, trigonomtrica e
logartmica. Exemplos:
3
2x 7x=e
xa sin x=b
4xlog x =4
Classifica-se a equao como sendo uma equao linear se ela envolve apenas adies ou produtos de
constantes e variveis do primeiro grau. Ento:
3x 22x1=0
x 90.5x=8 x
x y =6
equao no linear
equao no linear
equao linear
(neste caso de duas variveis)
2. Raiz da Funo
O nmero R para o qual uma funo f x zero [isto , f(R)=0] chamado de raiz da funo
zero da funo f x
[raiz ou zero da funo].
f x ou
f x =0
[a,b] , o menor possvel, que contenha uma e somente uma raiz da equao
2. refinar o clculo
melhorar o valor da raiz obtida, at que o grau de exatido especificado seja alcanado
3. Isolamento da Raiz
O isolamento da raiz de uma equao baseia-se num teorema que estabelece que uma funo contnua f x
que assume valores com sinais opostos nos extremos do intervalo [a,b] conter, no mnimo, uma raiz da equao
f x =0 .
Ento, quando f a f b0 , o nmero R contido no intervalo (a,b) tal que
funo.
f R=0
a raiz da
Outro mtodo (de fcil aplicao, quando se utiliza um computador) para a pesquisa do valor da primeira
aproximao da raiz o mtodo da fora bruta, aquele que leva em conta a inverso do sinal nos valores da abcissa
da funo. Ento:
program inversao
!
!-------------------------------------------------!Propsito: procura inverso do sinal na funo
!-------------------------------------------------!Arquivo: prog_inver.f03
! Autor: Anibal L. Pereira 03/09/2010
!-------------------------------------------------implicit none
real:: x,
& ! ordenada
a1, a2, & ! intervalo [a1,a2]
r
! incremento na sequncia
integer::i,
& ! contador
N
! nmero de intervalos
real,allocatable,dimension(:)::y !valores da funo
-10.0
-9.0
-8.0
-7.0
-6.0
-5.0
-4.0
-3.0
-1031.0
-757.0
-537.0
-365.0
-235.0
-141.0
-77.0
-37.0
-2.0
-1.0
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
-15.0
-5.0
-1.0
3.0
13.0
35.0
75.0
139.0
233.0
363.0
535.0
755.0
1029.0
Na sada produzida pelo programa, a primeira coluna mostra os valores de X enquanto os valores Y esto na
segunda coluna.
Observe que, no mtodo da fora bruta, a inverso do sinal na ordenada ocorre quando as abcissas x=0.0 e
x=1.0, o que permite dizer que a raiz se encontra no intervalo [0, 1]. Ento a raiz est dentro deste intervalo. O
valor mdio deste intervalo to bom quanto qualquer outro, por isto pode-se usar o valor 0.5 como primeira
aproximao da raiz da funo.
O primeiro mtodo nos fornece o valor 0 enquanto o segundo mtodo o valor 0.5. So valores prximos e
qualquer um deles pode ser utilizado como primeira aproximao.
6. Mtodo da Bisseo
Em muitos problemas de Fsica (e engenharia) necessrio encontrar um valor, R, que faz com que uma funo
f x seja zero, ou seja, f(R) = 0. Este valor R a raiz ou zero da funo. Um dos mtodos que pode ser
utilizado para encontrar a raiz de uma funo o mtodo da bisseo.
O mtodo da bisseo pode ser sinteticamente apresentado assim:
O mtodo:
1.
escolha os pontos extremos do intervalo a-b para serem as razes da equao tal que
em outras palavras, isto garante que a funo
intervalo a-b) como se pode ver na figura
2.
calcule quantas iteraes (ou passos) so necessrias para alcanar a tolerncia desejada
3.
estime a raiz
4.
5.
x m da equao
se f a f b0
01
02
03
00
de sinal dentro do
xm =
ab
2
f a f b0
raiz=
a1b1
2
atividades exemplos
atividade exemplo com ajustes e/ou acrscimos
atividades para serem feitas
atividades para serem ajustadas e/ou acrescidas
Atividade 01
Entregar em meio magntico:
1.
programa:
bissecao_prog
fxxa1.f03
2.
mdulos:
m_procedimentos_011.f03
m_funcoes_002.f03
3.
scripts:
bissecao.plt
4.
arquivos:
tabela_bissecao_01.dados
tabela_bissecao_02.dados
tabela_bissecao_03.dados
tabela_bissecao_04.dados
tabela_bissecao_05.dados
bissecao_01.dados
bissecao_02.dados
bissecao_03.dados
bissecao_04.dados
bissecao_05.dados
Exemplo/Acrscimo/Ajuste:
O programa encontra o zero de uma funo utilizando o mtodo da bisseo.
O programa encontra as razes da funo
f x =x 3x x3
No intervalo 0 a 2.5 com tolerncia de 0.0001, o valor x = 1.0 pode ser facilmente identificado como uma raiz da equao.
Pode-se constatar a correo deste valor, simplesmente fazendo-se a substituio do valor na equao.
Observe que esta funo tem como razes: -1.0, 1.0 e 3.0
Execute o programa entrando com os seguintes valores:
intervalo:
intervalo:
intervalo: 1.5 a 4
e tolerncia 0.0001
Ao procedendo desta forma voc ser capaz de encontra as trs razes da equao.
FAZER:
Encontre as razes das seguintes funes:
x
2x
1.
f x =19 x0.5 x 1e e
2.
f x =xsin x 0.1=0
3.
f x =0.5 e 3 sin x
4.
f x = x2 x
5.
f x =ln 1x x =0
0x1
x0
Faa as modificaes necessrias no programa e nos mdulos para realizar todas as tarefas solicitadas
Pseudocdigo da sub-rotina:
sub-rotina bissecao(func,a,b,tol,zero,ifail)
declare func,
{PROCEDIMENTO MUDO}
a, b, tol,
{inteno ENTRADA; intervalo [a,b]; tolerncia=tol}
zero,
{inteno SADA ; zero da funo}
ifail,
{inteno SADA ; indicador de zero}
a1, b1,
{copia local dos limites iniciais}
i,
{contador}
num_int,
{nmero de iteraes}
{clculo da raiz}
a1
b1
a
b
num_int teto(ln(tol/(b1-a1))/ln(0.5))
para i de 1 ate num_int faa
se(func(a1)*func(b1)=0) ento
se(func(a1)=0)ento
zero a1
retorna
seno
zero b1
retorna
fim se
fim se
meio_intr (a1+b1)/2
se(func(a1)*func(meio_intr)<0)ento
b1 meio_intr
seno
a1 meio_intr
fim se
fim para
zero=(a1+b1)/2.0
fim sub-rotina
program bissecao_prog
!
!------------------------------------------------------------------------! Propsito: Calcula a raiz de uma equao pelo mtodo da bisseo
!------------------------------------------------------------------------! Arquivo:fxxa1.f03
!
Autor: Anibal L. Pereira
03/02/2009
Pega-se um intervalo (por exemplo: =10 representado na figura acima pelo seguimento de reta) e divide-se o
intervalo sucessivamente ao meio. Aps k divises ( por exemplo: k = 4, mostrado na figura) o tamanho do intervalo
10 10
= = =0.625 . Ento o nmero de iteraes (k) necessrias para dividir um intervalo (b-a) at um
2 k 2 4 16
tol
ba
2k
k ln 0.5ln
2k
tol
ba
ba
tol
2k
ln
tol
ba
tol
ba
ln 0.5
ou
1
tol
2
ba
0.5k
tol
ba
_______________________________________________________________________________________
arquivo: m_procedimentos_011.f03
module m_procedimentos_011
!------------------------------------------------------------------------------!Propsito: Guarda funes e sub-rotinas
!------------------------------------------------------------------------------! Arquivo: m_procedimentos_011.f03
!
Autor: Anibal L. Pereira 21/04/2010
!Revises:
!------------------------------------------------------------------------use m_funcoes_002
! funes do usurio
implicit none
!------------------------------------------------------------------------! Funes e Sub-rotinas
!------------------------------------------------------------------------public:: bissecao
! zero de funo pelo mtodo da bisseo
contains
!-----------------------------------------------------------------------------!------------------------ Funes e Sub-rotinas ------------------------------!-----------------------------------------------------------------------------!
!@@@@@@@@@
!-----------------------------------------------------------------------------subroutine bissecao(func,a,b,tol,zero,ifail)
!-----------------------------------------------------------------------------!Propsito:
! Calcula a integral da funo usando o mtodo da bisseo
!-----------------------------------------------------------------------------!Autor:
Anibal L. Pereira
30/01/2009
!Revises: Anibal L. Pereira
21/04/2010
10
!
!-----------------------------------------------------------------------------real,external::func
real,intent(in)::a,b,tol
real,intent(out)::zero
integer,intent(out)::ifail
! indicao do estado da subrotina
!------------------------------------------------------real::a1,b1
! copia local dos limites iniciais
integer:: i,
& ! contador
num_int
! nmero de iteraes
real::meio_intr
! meio do intervalo
!------------------------------------------------------!--- status e causas de erro --------------------------ifail=0
if(func(a)*func(b)>0) then
ifail=1
! ifail=1 raiz no est dentro do intervalo a-b
return
endif
if(tol < 0) then
ifail=2
! ifail=2
return
endif
if(a > b) then
ifail=3
! ifal=3
return
endif
intervalo invlido
a>b
_______________________________________________________________________________________
arquivo: m_funcoes_002.f03
module m_funcoes_002
!------------------------------------------------------------------------------!Propsito:
!
Guarda funes definidas pelo usurio
!------------------------------------------------------------------------------! Arquivo: m_funcoes_002.f03
!
Autor: Anibal L. Pereira
20/02/2011
!Revises:
!------------------------------------------------------------------------implicit none
!-------------------------------------------------------------------------
11
! Funes
!------------------------------------------------------------------------public:: fun1
!f(x) = x**3 - 3*x**2 - x + 3
contains
!-----------------------------------------------------------------------------real function fun1(x)
!-----------------------------------------------------------------------------!Propsito:
! Define funo: f(x)=x**3 - 3*x**2 - x + 3
!-----------------------------------------------------------------------------!Autor:
Anibal L. Pereira
03/02/2009
!Revises:
!-----------------------------------------------------------------------------real,intent(in)::x ! valor da abcissa
!------------------------------------fun1 = x**3 - (3.0 * x**2) - x + 3.0
end function fun1
end module m_funcoes_002
_______________________________________________________________________________________
arquivo: bissecao_01.plt
_______________________________________________________________________________________
arquivo: tabela_bissecao_01.plt
#----------------------------------------------------------------------------# Propsito: constri grfico usando a tabela gerada pelo programa fxxa1.f03
#----------------------------------------------------------------------------# script: tabela_bissecao_01.plt
#
Autor: Anibal L. Pereira 21/04/2010
#Revises:
#----------------------------------------------------------------------------reset
set pointsize 1.2
set title "Funo x**3-3*x**2-x+3 usando a tabela"
set xlabel "x "
set ylabel "f(x) "
set pointsize .4
set xzeroaxis lt -1
plot [-2:4] [-5:5] "tabela_bissecao_01.dados" w p lc 4 pt 7 ps 0.8
replot x**3-3*x**2-x+3 w l
set terminal gif
set output "tabela_bissecao_01.gif"
replot
set output
set terminal wxt
12
7. Mtodo de Newton-Raphson
Para utilizar o mtodo de Newton-Raphson necessrio um valor inicial (primeira aproximao para a raiz).
Utilize um dos mtodos citados para encontrar a primeira aproximao da raiz. Tomando o valor inicial da raiz,
faz-se a aproximao da funo pela sua tangente. Usando-se a tangente encontra-se o valor x da intercepo da
tangente com o eixo dos x. Este valor um valor melhor da raiz da funo que o valor inicial.
O mtodo pode ser repetido (iterado) quantas vezes for necessrio at se encontrara raiz com a preciso
desejada.
Observando a figura v-se que o mtodo inicia com o valor inicial da raiz x 0 (muitas vezes, quando no se
faz a busca de um primeiro valor, fornecesse o valor por pura tentativa - adivinhao) e a partir deste ponto traa-se
a tangente a curva. Isto permite achar o ponto x 1 onde a tangente corta o eixo dos x. Este valor uma
aproximao melhor para a raiz da equao que o valor inicial x 0 . A partir deste novo valor para a raiz repete-se
o mesmo procedimento at se encontrar o valor x 2 para a raiz, que melhor que x 1 . E assim por diante at a
resposta final.
Usando-se a definio da tangente (ou derivada da funo) em
f ' x =tan
f x i 0
=
,
x i x i1
x i1= xi
x= x 0
f xi
f 'x
Esta equao a frmula de Newton-Raphson para encontrar a raiz de uma funo do tipo f(x)=0.
Atividade 02
Entregar em meio magntico:
1.
programa:
newton_raphson_prog
fxxa2.f03
2.
mdulos:
m_procedimentos_012.f03
m_funcoes_003.f03
3.
scripts:
newton_raphson_00.plt
newton_raphson_01.plt
newton_raphson_02.plt
newton_raphson_03.plt
newton_raphson_04.plt
newton_raphson_05.plt
newton_raphson_06.plt
newton_raphson_07.plt
newton_raphson_08.plt
13
arquivos:
newton_raphson_00.gif
newton_raphson_01.gif
newton_raphson_02.gif
newton_raphson_03.gif
newton_raphson_04.gif
newton_raphson_05.gif
newton_raphson_06.gif
newton_raphson_07.gif
newton_raphson_08.gif
5.
Documentao externa:
Entregar em papel A4
Exemplo/Acrscimo/Ajuste:
O programa encontra o zero de uma funo utilizando o mtodo Newton-Raphson.
A atividade tambm exemplifica o uso de um procedimento mudo, isto o uso de uma funo como argumento de uma subrotina.
A funo
y=16x4
Observe que a preciso das respostas depende do valor inicial da raiz, mas no s dela.
Por se usar preciso simples, a resposta nem sempre muito acurada. Isto decorre do fato dos erros se acumularem
nos clculos do programa. Usando-se preciso dupla os erros sero bastante reduzidos.
FAZER:
f5
f 5 x = x22
f6
e
x
2x
f 6 x =e e
Alm destas duas funes encontre tambm as razes das seguintes funes:
1.
2.
f x =x 3x x3
2x
f x =19 x0.5 x 1e e
3.
f x =xsin x 0.1=0
4.
f x =0.5 e 3 sin x
5.
f x = x2 x
6.
f x =ln 1x x =0
0x1
x0
Faa as modificaes necessrias no programa e nos mdulos para realizar todas as tarefas solicitadas
04/09/2010
3) Arquivo: fxxa2.f03
4) Propsitos: Encontrar os zeros de uma funo pelo mtodo de Newton-Raphson
Verso:
14
] m_procedimentos_012
m_funcoes_003
[funo
] f4
[sub-rotina] zero_f
(m_procedimentos_012.f03)
(m_funcoes_003.f03)
7) Mtodo:
O mtodo de Newton-Raphson permite encontrar os zeros de funes ( achar as razes da equao do tipo f(x)=0).
Figura obtida em 10/01/2010 de:
Raphson
http://pt.wikipedia.org/wiki/Mtodo_de_Newton-
x n1= x n
f x n
f ' xn
15
fim sub-rotina
sub-rotina dfdx(x, func)
declare x,
{inteno ENTRADA; ponto da funo}
func,
{PROCEDIMENTO MUDO}
h,
{incremento}
desv,
{desvio entre as derivadas}
d_an,
{derivada anterior}
d_at,
{derivada atual}
tol=1.0E-4, {tolerncia}
i
{iterao} numrico
{calcula a derivada}
h 2
i 0
repita
i
h
i + 1
h/2
abs(d_an) abs(d_at)
d_at
d_an
d_at
{para se desvio for menor que tol ou se fez 100 iteraes}
se(desv < tol) ou (i 100) abandona
fim repita
fim sub-rotina
newton_raphson_00
newton_raphson
17/02/2011
Verso:
3) Arquivo: newton_raphson_00.plt
4) Propsitos: Constri o grfico da funo
f x =16 x 4
nada a destacar
7) Comentrios e Observaes:
A inteno permitir ver a curva da funo para se ter uma ideia dos zeros da funo
________________________________________________________________________________________
arquivo: fxxa2.f03
program zero_funcao_NR
!
!-------------------------------------------------------------------------! Propsito: calcula zero de funo f(x) = 0 pelo mtodo de Newton Raphson
16
_______________________________________________________________________________________
arquivo: m_procedimentos_012.f03
module m_procedimentos_012
!
!-------------------------------------------------------------------------------------------! Propsito: Contm funes e sub-rotinas
!-------------------------------------------------------------------------------------------! Arquivo: m_procedimentos_012.f03
!
Autor: Anibal L. Pereira
11/01/2010
!Revises: Anibal L. Pereira
04/09/2010
!
!-------------------------------------------------------------------------------------------!
[mdulos ] nenhum
!
[funes ] dfdx
!
:::calcula a derivada primeira da funo pelo mtodo da diferena progressiva
![sub-rotinas] zero_f
!
:::calcula o zero de uma funo pelo mtodo de Newton Raphson
!-------------------------------------------------------------------------------------------public :: zero_f, dfdx
contains
!-----------------------------------------------------------------------------!------------------------ Funes e Sub-rotinas ------------------------------!-----------------------------------------------------------------------------!
subroutine zero_f(x, tolerancia, N_maximo, f_raiz, func, dfdx)
!------------------------------------------------------------------! Propsito: calcula o zero de uma funo pelo mtodo Newton Raphson
!------------------------------------------------------------------!
Autor: Anibal L. Pereira 11/01/2010
!Revises: Anibal L. Pereira 04/09/2010
!
!------------------------------------------------------------------real, intent(in)::
x,
& ! ponto inicial: primeira aproximao
tolerancia
! tolerncia
integer, intent(in):: N_maximo
! nmero mximo de iteraes
real, intent(out) :: f_raiz
! valor da raiz
17
18
_______________________________________________________________________________________
arquivo: m_funcoes_003.f03
module m_funcoes_003
!
!------------------------------------------------------------------------! Propsito: Contm funes definidas pelo usurio
!------------------------------------------------------------------------! Arquivo: m_funcoes_003.f03
!
Autor: Anibal L. Pereira
05/01/2010
!Revises:
!------------------------------------------------------------------------!
[mdulos ] nenhum
!
[funes ] f1
(--) y = x**2
!
f2
(--)
!
f3
(--)
!
f4
(--) y = 16 * x**2 - 4
![sub-rotinas] nenhuma
!------------------------------------------------------------------------------------public :: f1, f4
contains
!-------------------------------------------------------------------!------------------------ Funes ----------------------------------!-------------------------------------------------------------------!
real function f1(x)
!------------------------------------------------------------------! Propsito: funo y = x**2
!------------------------------------------------------------------! Autor: Anibal L. Pereira 08/01/2010
!------------------------------------------------------------------implicit none
real, intent(in) :: x
!---------------------------! funo
!---------------------------f1 = x**2
end function f1
!
!------------------------------------------------------------------!------------------------------------------------------------------!
real function f4(x)
!------------------------------------------------------------------! Propsito: funo y = 16*x**2 - 4
!------------------------------------------------------------------! Autor: Anibal L. Pereira 11/01/2010
!------------------------------------------------------------------implicit none
real, intent(in) :: x
!---------------------------! funo
!---------------------------f4 = 16 * x**2 - 4.0
end function f4
!
end module m_funcoes_003
_______________________________________________________________________________________
arquivo: newton_raphson_00.plt
19
8. Diferena Finita
No mdulo fc_xx_rotinas_02 a funo dfdx (calcula a derivada primeira de uma funo) utilizou o mtodo de
diferenas finitas para calcular o valor da derivada.
Diferenas finitas um conceito que pode ser facilmente entendido com um exemplo.
A derivada de uma curva no ponto (x 1,y1) calculada utilizando-se a
expresso
y
x
dy
y
= lim
dx x 0 x
diferenas centradas
yi = y
1
2
1
2
1
= yi 1 y i 1
2
k y i =k 1 y i1 k1 y i .
0 y i= y i
y i= y i1 y i
2 y i= y i1 y i
3 y i= 2 y i1 2 y i
k
y i =k 1 y i k1 y i
k ssima ordem
As diferenas finitas, usualmente, so colocadas num quadro (ou tabela) e tem a seguinte forma:
20
xi
0 y i
yi
2 y i
3 y i
4 y i
5 yi
x0
y0
y0
2 y 0
3 y 0
4 y 0
5 y 0
x1
y1
y1
y1
y1
y1
x2
y2
y2
2 y 2
3 y 2
x3
y3
y3
y3
x4
y4
y4
x5
y5
xi
yi
yi
yi
yi
yi
yi
15
50
60
24
16
65
110
84
24
81
175
194
108
256
369
302
625
671
1296
y=x 4 , no intervalo 1 a 6 :
9. Mtodo da Corda
Mtodo da corda (mtodo da posio falsa; fase position method; regula falsi method)
O mtodo das cordas consiste em dividir o intervalo [a, c] de uma certa funo f x , que contm a raiz, por
uma corda passando por estes pontos.
Dado um intervalo [a,c] contendo a raiz, a funo linear (a corda) que passa pelos pontos a e c escrita assim:
y= f a
x=a
f c f a
xa que pode ser explicitada em x assim:
ca
ca
y f a
f c f a
21
a coordenada x ( x 1 ) onde a corda (funo linear) intercepta o eixo dos x obtida fazendo-se y=0, ento:
x 1=a
O valor
ca
f a
f c f a
x 1 o valor da raiz da equao, considerando a corda ( ou seja, uma funo linear).
O clculo da raiz, usando-se o mtodo das cordas, converge para a raiz exata. A aproximao x n1 uma
aproximao melhor que o valor x n . preciso estabelecer um critrio de parada para a procura do valor da raiz.
Considere que o mtodo fornea os seguintes valores para as aproximaes sucessivas da raiz:
xn
1.57057
2.03245
-0.46188
2.12435
-0.09190
2.14234
-0.01799
2.14676
-0.00442
2.14672
0.00004
A raiz ser igual a 2.14672 2.1467 se o erro admissvel na resposta ( x n x n1 ) for menor que
ento 2.14235 2.1 para um erro de 101 .
10
ou
22
Porque o processo pode cair num ponto de estagnao, isto , um ponto em que a diferena entre duas razes
consecutivas difere muito pouco uma da outra, comum utilizar-se um nmero mximo de iteraes, que permitir
parar o processo caso o ponto de estagnao seja encontrado (convergncia lenta demais o que faria o programa
ficar travo).
Atividade 03
Entregar em meio magntico:
1.
programa:
metodo_das_cordas
fxxa3.f03
2.
mdulos:
fc_constantes.f03
m_procedimentos_013.f03
m_funcoes_004.f03
3.
scripts:
corda_f01.plt
corda_f02.plt
corda_f03.plt
4.
arquivos:
grafico_corda_f01.gif
grafico_corda_f02.gif
grafico_corda_f03.gif
Exemplo:
O programa utiliza o mtodo das cordas (regula falsi) para encontrar o zero de uma funo.
1) utilize a funo
f x =tan x x0.5 no intervalo [a,c] = [0.1, 1.4] com uma tolerncia de 0.00001 e nmero
mximo de iterao igual a 20 e depois igual a 100
2) encontre o zero da funo
f x =e x sin x2
2 x sin x10
com: [a,c]=
[ ]
,
2
e tolerncia=
105
3
10
FAZER:
Construa o grfico das funes no entorno do intervalo indicado e entregue os arquivos .gif contendo os grficos
Pseudocdigo da sub-rotina
sub-rotina raiz_metodo_corda(a, c, tol, N_max, func, raiz)
declare a, c,
tol,
N_max,
raiz,
func,
i,
va, vc
aco, cco,
raiz_i,
rain_ant
23
i 0
repita
i i+1
se(i > N_max) ento
escreva "Limite iteraes: ", N_max," excedido; No foi possvel encontrar a raiz"
para
fim se
raiz_i aco - ya*( (cco-aco)/(yc-ya) )
{ retorna o valor da raiz quando tolerncia for satisfeita}
se(abs(raiz_ant - raiz_i) < tol) ento
raiz raiz_i
retorna
fim se
raiz_ant raiz_i
se((ya*func(raiz_i)) < 0) ento
{intervalo [a,raiz]}
cco raiz_i
yc func(raiz_i)
seno
{intervalo [raiz,c]}
aco raiz_i
ya func(raiz_i)
fim se
fim repita
fim sub-rotina
program metodo_das_cordas
!
!------------------------------------------------------------------------! Propsito: Calcula zero de uma funo utilizando o mtodo das cordas
!------------------------------------------------------------------------! Arquivo:fxxa3.f03
!
Autor: Anibal L. Pereira
04/09/2010
!Revises:
!------------------------------------------------------------------------use fc_constantes
use m_procedimentos_013
use m_funcoes_004
implicit none
real(kind=dp):: a, c,
& ! limites do intervalo utilizado
tol,
& ! tolerncia
raiz
! raiz
integer::
N_max
! nmero mximo de iteraes
!--------------------------------------------------! Entrada dos valores para o clculo
!--------------------------------------------------print*, "==================================================="
print*, "Entre com os valores limites do intervalo: [a,c] "
print*, "==================================================="
read*, a, c
print*
print*, "===================================================="
print*, "Entre com a tolerncia e nmero mximo de iteraes"
print*, "===================================================="
read*, tol, N_max
!---------------------------------------------------------
24
_______________________________________________________________________________________
arquivo: fc_constantes.f03
Utilize o mdulo existente:
_______________________________________________________________________________________
arquivo: m_procedimentos_013.f03
module m_procedimentos_013
!------------------------------------------------------------------------------!Propsito: Guarda funes e sub-rotinas
!------------------------------------------------------------------------------! Arquivo: m_procedimentos_013.f03
!
Autor: Anibal L. Pereira 04/09/2010
!Revises:
!------------------------------------------------------------------------implicit none
public:: raiz_metodo_corda ! calcula a raiz de uma funo usando o mtodo das cordas
contains
!------------------------------------------------------------------------------------------!---------------------------------- Funes e Sub-rotinas ---------------------------------!------------------------------------------------------------------------------------------!
subroutine raiz_metodo_corda(a, c, tol, N_max, func,raiz)
!-----------------------------------------------------------------------------!Propsito: calcula a raiz de uma funo utilizando o mtodo das cordas
!-----------------------------------------------------------------------------!Autor:
Anibal L. Pereira
04/09/2010
!Revises:
!-----------------------------------------------------------------------------use fc_constantes
implicit none
real(kind=dp),intent(in):: a, c,
& ! limites do intervalo
tol
! tolerncia
integer,intent(in)::
N_max
! nmero mximo de iteraes
real(kind=dp), external:: func
! funo muda
real(kind=dp),intent(out)::raiz
! raiz da funo no intervalo [a,c]
!
integer::i
! contador do loop
real(kind=dp)::ya, yc
! ordenadas de a e c
real(kind=dp)::aco, cco
! cpias dos limites do intervalo
real(kind=dp)::raiz_i,
& ! raiz da iterao atual
raiz_ant
! raiz da iterao anterior
!----------------------------------------------------------------! copia os argumentos de entrada para poder alter-los
!----------------------------------------------------------------aco=a
cco=c
!----------------------------------------------------------------! verifica se no existe raiz ou se podem ser mltiplas
!----------------------------------------------------------------ya = func(aco)
yc = func(cco)
25
_______________________________________________________________________________________
arquivo: m_funcoes_004.f03
module m_funcoes_004
!------------------------------------------------------------------------------!Propsito:
!
Guarda funes definidas pelo usurio
!------------------------------------------------------------------------------! Arquivo: m_funcoes_004.f03
!
Autor: Anibal L. Pereira
04/09/2010
!Revises:
!------------------------------------------------------------------------use fc_constantes
implicit none
26
_______________________________________________________________________________________
arquivo: grafico_corda_f01.plt
27
Atividade 04
Entregar em meio magntico:
1.
programa:
p04_1
fxxa4_1.f03
fxxa4_2.f03, . . . ,
2.
mdulos:
a serem especificados
3.
scripts:
a serem especificados
4.
arquivos:
a serem especificados
a serem especificados
Fazer:
1) Utilizando o mtodo da fora bruta, determine o intervalo (os intervalos; se existir mais de um) no qual a raiz da funo
pode ser encontrada:
1.
8x 312x 22 x 3=0
2.
3x 32x 2 x5=0
Escreva os programas, os scripts. Escreva e/ou identifique os mdulos utilizados. Gere os grficos e os arquivos
de dados necessrios.
Atividade 5
Entregar em meio magntico:
1.
programa:
p05_1
fxxa5_1.f03
fxxa5_2.f03, . . . ,
2.
mdulos:
a serem especificados
3.
scripts:
a serem especificados
4.
arquivos:
a serem especificados
a serem especificados
Fazer:
1) Utilizando os grficos das funes escolha um valor inicial para a raiz da funo.
1.
cos x x e x =0
2.
x log 10 x12.34=0
1x3
10 y10
4x4
10 y10
No deixe de desenhar o eixo zero do x nos grficos. Entregue os arquivos .gif contendo os grficos
28
Atividade 06
Entregar em meio magntico:
1.
programa:
p06_1
fxxa6_1.f03
fxxa6_2.f03, . . . ,
2.
mdulos:
a serem especificados
3.
scripts:
a serem especificados
4.
arquivos:
a serem especificados
a serem especificados
Fazer:
1) Utilizando os grficos das funes escolha um valor inicial para a raiz da funo.
1.
30 cos 1.2x9x1=0
2.
x 4 23x1=0
4x4
40 y40