Vous êtes sur la page 1sur 28

Instituto de Fsica Armando Dias Tavares

Departamento de Fsica Aplicada e Termodinmica

Fsica Computacional A
DFAT/

FiscompFA

Equaes Algbricas e Transcendentais


Professor: Anibal Leonardo Pereira

ltima atualizao: fevereiro 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. 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

equao de duas variveis

Um caso particular, muito comum e importante, a equao polinomial.


A equao que possu a varivel sob um sinal de radiciao chamada de equao irracional. Ento,

3x 22x1=0
x 90.5x=8 x

equao algbrica polinomial


equao algbrica irracional

ou simplesmente: equao polinomial


ou equao irracional

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

Equaes algbricas de 10 e 20 graus, algumas equaes de 30 e 40 graus e algumas equaes transcendentes tm


suas razes calculadas exatamente por meios analticos. Entretanto, para os polinmios de grau superior a quatro e a
grande maioria das equaes transcendentes as razes s podem ser obtidas por meios de mtodos computacionais.
A utilizao de mtodos computacionais (mtodos numricos) possibilita a obteno de valores aproximados das
razes.
O grau de aproximao da raiz deve ser especificada quando se faz a determinao das razes pelo mtodo
numrico.

O procedimento para o clculo da raiz, utilizando mtodo numrico iterativo, deve:


1. isolar a raiz
achar o intervalo

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

Observe que para o grfico ao lado a desigualdade


f a f b0 satisfeita. Isto ns diz que existe
pelo menos uma raiz neste intervalo.
Na realidade, a funo mostrada possui 3 razes, R1, R2
e R3, no intervalo [a,b].

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

Para uma dada funo f x , uma raiz ser definida


e nica se a derivada f ' x existir e preservar o sinal
dentro do intervalo (a,b).
O sinal da derivada pode ser positivo f ' x 0 ou
ento negativo f ' x 0 , no importa. O que
relevante que a derivada no troque de sinal no
intervalo. Isto garante que a raiz nica neste intervalo.

4. Primeira Aproximao de uma Raiz


Os mtodos numricos iterativos necessitam de uma primeira aproximao da raiz para ento proceder
determinao da raiz da equao. Para obter a primeira aproximao da raiz um procedimento comum traar o
grfico da funo, para verificar em que pontos o grfico corta o eixo das abcissas.

Por exemplo: a construo do grfico da funo


f x =x 33x1 permite, como primeira
aproximao, escolher o valor zero (0.0), porque
este valor aparentar estar prximo da raiz da
funo.
Utilizando-se esta escala no se pode obter um
valor muito preciso para a raiz, mas isto no
relevante. O fato relevante que, este mtodo, nos
d a possibilidade de obter um valor para a
primeira aproximao.

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

O programa inversao gera a tabela de valores


da funo mostrada abaixo:

-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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

!----------------------------------------------!define intervalo [a1, a2] ; incremento r


!----------------------------------------------a1 = -10.0
a2 = 10.0
r = 1
!----------------------------------------------!aloca o vetor
!----------------------------------------------N=(a2-a1)/r
allocate( y(N) )

-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

!----------------------------------------------!gera os valores da funo para obter os sinais


!----------------------------------------------do i=1,N +1
x = a1 + (i-1)*r
y(i) = x**3 + 3*x -1
print"(t3,f5.1,tr2,f9.1)", x, y(i)
end do
end program inversao

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.

5. Soluo de Equao No Linear


Conforme evidenciado, a soluo da equao chamada de zero ou raiz da equao. Equaes no lineares no
possuem soluo analticas exceto em alguns poucos casos, portanto o mtodo computacional a nica forma de se
obter as razes da equao para a maioria dos casos. Por exemplo, polinmios tem soluo analtica at ordem
quatro, mas no existe solues analticas para ordens maiores que quatro.
Alguns dos mtodos existentes para encontrar as razes (zeros) de uma equao so:

mtodo das tentativas (fora bruta)


bisseo
falsa posio (mtodo das cordas)
mtodo de Newton-Raphson
mtodo da secante
substituio sucessiva
mtodo de Bairstow

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:

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

A figura mostra um seguimento de uma funo

f x =0 (linha que passa pelo eixo do x).

A raiz (ou zero da funo) o valor de x que identifica o ponto


curva passa pelo eixo dos x, ou seja, o valor de x que faz f(x) = 0).

da curva que est sobre o eixo do x ( quando a

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

f x cruza o eixo x (troca

2.

calcule quantas iteraes (ou passos) so necessrias para alcanar a tolerncia desejada

3.

estime a raiz

4.

agora verifique em qual intervalo a raiz se encontra

5.

x m da equao

f x como sendo o ponto mdio do intervalo

se f a f b0

se f a f x m 0 ento a raiz est entre

ento a raiz est entre a e

01
02
03
00

de sinal dentro do

xm =

ab
2

x m : ento faa: a 1= x m e b1= x m

x m e b : ento faa: a 1= x m e b1=b

repita os passos 3 e 4 at a iterao desejada. Ao final a raiz calculada por

Esta Folha contm


06 Atividades

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

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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:

-2 a 0.5 e tolerncia 0.0001

intervalo:

0 a 1.5 e tolerncia 0.0001

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

entre 0 e 1 com tolerncia de 0.0001

2.

f x =xsin x 0.1=0

com tolerncia de 0.001

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}

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais


meio_intr

{meio do intervalo} numrico

{ status e causas de erro}


ifail 0
se(func(a)*func(b)>0) ento
{valor 0 - raiz pode ser encontrada}
ifail 1 {valor 1 - raiz no est dentro do intervalo a-b}
retorna
fim se
se(tol < 0) ento
ifail 2
retorna
fim se

{tolerncia invlida - tolerncia<0}

se(a > b) ento


ifail 3
{3
retorna
fim se

intervalo invlido - a>b}

{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

{ceiling n => funo teto}

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

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


Escreva o mdulo m_procedimentos_011 e salve-o no arquivo m_procedimentos_011.f03
Escreva o mdulo m_funcoes_002 e salve-o no arquivo m_funcoes_002 .f03
Gere os arquivos de dados solicitados
Escreva os scripts
Gere os grficos solicitados
No deixe de atualizar o cabealho de forma adequada.
________________________________________________________________________________________
arquivo: fxxa1.f03

program bissecao_prog
!
!------------------------------------------------------------------------! Propsito: Calcula a raiz de uma equao pelo mtodo da bisseo
!------------------------------------------------------------------------! Arquivo:fxxa1.f03
!
Autor: Anibal L. Pereira
03/02/2009

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

!Revises: Anibal L. Pereira


20/02/2011
!
!------------------------------------------------------------------------use m_procedimentos_011
use m_funcoes_002
implicit none
real:: a,b,tol,zero, & ! ponto inicial, ponto final, tolerncia e raiz
p,
& ! valor do ponto
d
! incremento
integer::falha,
& ! status retornado pela sub-rotina
i=0
! contador
integer,parameter::np = 100
! quantidade de pontos para criar a tabela da funo
real,dimension(np,np)::txy
! tabela da funo (x,f(x))
!--------------------------------------------------! Entrada do intervalo e tolerncia
!--------------------------------------------------print*, "=============================================="
print*, "Entre Ponto Inicial, Ponto Final e Tolerncia "
print*, "=============================================="
read*, a, b, tol
!----------------------------------------------------------!---a funo fun1 est disponvel no mdulo m_funcoes_002
!----------------------------------------------------------call bissecao(fun1,a,b,tol,zero,falha)
select case (falha)
case (0)
print*,"No intervalo",a,"at",b,"o zero da funo ", zero
case(1)
print*,"Raiz no esta dentro do intervalo a-b"
stop
case(2)
print*,"Tolerncia invalida: tolerncia < 0"
stop
case(3)
print*,"Intervalo invalido a > b"
stop
end select
!--------------------------------------------------------------------------!--- gera a tabela da funo com np pontos e salva num arquivo de dados
!--------------------------------------------------------------------------open(unit=30, file="tabela_bissecao_01.dados", status="replace", action="write")
d = (b - a)/np
p = a - d
do while(i<np)
i = i +1
p = p + d
txy(i,1) = p
txy(i,2)= fun1(p)
write(unit=30, fmt=*) txy(i,1), txy(i,2)
end do
close(unit=30)

!--------------------------------------------------------------------------!--- salva num arquivo as informaes


!--------------------------------------------------------------------------open(unit=40, file="bissecao_01.dados", status="replace", action="write")
!--- escreve no arquivo: bissecao_01.dados --------------------------------write(unit=40, fmt="(a)") "Mtodo da Bisseo: f(x)=x**3-3*x**2-x+3"
write(unit=40, fmt="(a,f11.2,a,f11.2)") "intervalo:", a, " at ", b
write(unit=40, fmt="(a,f11.3)") "raiz = ", zero
close(unit=40)
!--- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
!--- complete o programa para fazer as outras tarefas solicitadas
!--- ////////////////////////////////////////////////////////////

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

end program bissecao_prog

Nmero de iteraes necessrias para obter um intervalo de tamanho especificado

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

tamanho especificado (por exemplo: tol) obtida assim:

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

k=ceiling( log( tol /(b - a)/log 0.5 ) )

_______________________________________________________________________________________
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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

tolerncia invlida tolerncia<0

intervalo invlido

a>b

!--- clculo da raiz ---------------------------------a1=a


b1=b
num_int=ceiling(log(tol/(b1-a1))/log(0.5))
do i=1,num_int
if(func(a1)*func(b1)==0) then
if(func(a1)==0)then
zero = a1
return
else
zero = b1
return
end if
end if
meio_intr=(a1+b1)/2.0
if(func(a1)*func(meio_intr)<0)then
b1=meio_intr
else
a1=meio_intr
end if
end do
zero=(a1+b1)/2.0
end subroutine bissecao
end module m_procedimentos_011

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

#----------------------------------------------------------------------------# Propsito: mostrar o grfico da funo x**3-3*x**2-x+3 no intervalo -2 a 4


#----------------------------------------------------------------------------# script: bissecao_01.plt
#
Autor: Anibal L. Pereira 31/01/2009
#Revises:
#----------------------------------------------------------------------------reset
set pointsize 1.2
set title "Funo x**3-3*x**2-x+3"
set xlabel "x "
set ylabel "f(x) "
set xzeroaxis lt -1
f(x)= x**3-3*x**2-x+3
plot [-2:4] [-5:5] f(x)
set terminal gif
set output "bissecao_00.gif"
replot
set output
set terminal wxt

_______________________________________________________________________________________
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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

o que permite escrever

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais


4.

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

cuja razes so: 0.5 e -0.5 est feita no exemplo.

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

Acrescente as funes indicadas (

f 5 x = x22

f6

e
x

2x

f 6 x =e e

) no mdulo m_funcoes_003 para poder calcular os zeros delas.

Alm destas duas funes encontre tambm as razes das seguintes funes:

1.
2.

f x =x 3x x3

com tolerncia de 0.0001


x

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

com tolerncia de 0.0001


com tolerncia de 0.001

x0

Faa as modificaes necessrias no programa e nos mdulos para realizar todas as tarefas solicitadas

O texto que segue mostra a documentao externa do programa.


A documentao externa apresentada aqui no est completa. Procede-se assim para que o texto apresentado
no fique muito longo. Quando for escrever a sua documentao externa ela deve ser completa.
Documentao externa do programa: newton_raphson_prog
1) Atividade: fxxa2
2) Programa: newton_raphson_prog

Autor: Anibal L. Pereira


Revises:

04/09/2010

3) Arquivo: fxxa2.f03
4) Propsitos: Encontrar os zeros de uma funo pelo mtodo de Newton-Raphson

Verso:

14

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

5) Identificao dos Dados:


Entrada: x, (funo a ser calculada)
Sada: f_valor
6) Subprogramas:
[mdulo

] 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-

O mtodo (sem demonstrao):


A equao a ser utilizada

x n1= x n

f x n
f ' xn

onde n especifica o ponto que est

sendo usado e n+1 o ponto seguinte


O mtodo inicia com uma raiz x 0 (arbitrria; por tentativa = sorte) para ento, por
meio da derivada no ponto em questo f ' x 0 obter o valor x 1 (que considerada ser a raiz da funo).
Pode-se ver na figura que x 1 no a raiz verdadeira da funo, por isto repete-se o processo (agora usando
x 1 como valor inicial) para encontrar um novo valor para a raiz x 2 (mais prxima da raiz verdadeira), que
tambm no a raiz verdadeira. Repete-se o processo vrias vezes, at se encontrar a raiz verdadeira. A questo
que este processo assinttico, isto , (s por sorte) chega a raiz verdadeira. Por este motivo define-se um critrio
de parada, isto , um critrio que permite dizer que as razes calculadas diferem muito pouco uma das outras.
Quando este critrio for satisfeito diz-se que a raiz da funo foi encontrada, com um erro mximo igual quele
especificado.
8) Comentrios e Observaes: nada a destacar
9) Pseudocdigo ou Fluxograma ou Diagrama NS:
Pseudocdigo das sub-rotinas
sub-rotina zero_f(x, tolerancia, N_maximo, f_raiz, func, dfdx)
declare x,
tolerancia,
N_maximo,
n,
f_raiz,
func,
dfdx,
iter,
x1

{inteno ENTRADA; ponto inicial: primeira aproximao}


{inteno ENTRADA; tolerncia}
{inteno ENTRADA; nmero mximo de iteraes}
{nmero linhas da matriz}
{valor da raiz}
{PROCEDIMENTO MUDO}
{PROCEDIMENTO MUDO}
{nmero da iterao}
{ordenada: cpia para poder altera o valor} numrico

{calcula iterativamente a raiz}


x1 x
iter 0
repita
iter iter + 1
se( (abs( func(x1) ) tolerancia ) ou (iter > N_maximo) ) abandona
x1 x1 - (func(x1) / dfdx(x1,func) )
f_raiz x1
fim repita

15

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

d_at ( func(x+h)-func(x) )/h


{primeira iterao}
se(i = 1) ento
d_an d_at
pula
{segue para a prxima iterao}
fim se
{calcula a diferena entre as derivadas}
desv
dfdx

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

Documentao externa gnuplot [script]


1) Atividade: fxxa2
2) [gnuplot: script]

newton_raphson_00

newton_raphson

Autor: Anibal L. Pereira


Revises:

17/02/2011

Verso:

3) Arquivo: newton_raphson_00.plt
4) Propsitos: Constri o grfico da funo

f x =16 x 4

5) Identificao dos Dados:


Entrada: f x =16 x 24
Sada:
grfico na tela do micro com x variando entre -1 e 1 e y variando entre -5 e 14
6) Mtodo:

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

!-------------------------------------------------------------------------! Arquivo: fxxa2.f03


!
Autor: Anibal L. Pereira
11/01/2010
!Revises: Anibal L. Pereira
04/09/2010
!
!-------------------------------------------------------------------------use m_procedimentos_012
use m_funcoes_003
implicit none
real::x,
& ! valor inicial da raiz
tolerancia=1.0E-6, & ! desvio do zero verdadeiro
f_valor
! zero da funo
integer::N_maximo=200
! nmero mximo de iteraes
!-------------------------------------------------------------! entra raiz inicial
!-------------------------------------------------------------print*
print*,"Entre com valor inicial para a raiz"
read*, x
!-------------------------------------------------------------! calcula o valor da raiz da funo f4
!-------------------------------------------------------------call zero_f(x, tolerancia, N_maximo, f_valor, f4, dfdx)
!-------------------------------------------------------------! mostra valor na tela do micro
!-------------------------------------------------------------print*
print*,"A raiz da funo vale ", f_valor
end program zero_funcao_NR

_______________________________________________________________________________________
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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais


real, external :: func,
& ! procedimentos mudo: funo
dfdx
! procedimentos mudo: funo
!--- variveis locais
integer:: iter
! nmero da iterao
real:: x1
! ordenada: cpia para poder altera o valor
!------------------------------------------------------------------! calcula iterativamente a raiz
!------------------------------------------------------------------x1 = x
iter = 0
do
iter = iter + 1
if( (abs( func(x1) ) <= tolerancia ) .or. (iter > N_maximo) ) exit
x1 = x1 - (func(x1) / dfdx(x1,func) )
f_raiz = x1
end do
end subroutine zero_f
!
!-----------------------------------------------------------------------------!-----------------------------------------------------------------------------!
real function dfdx(x, func)
!------------------------------------------------------------------! Propsito: calcula a derivada primeira da funo pelo mtodo da
!
diferena progressiva
!------------------------------------------------------------------!
Autor: Anibal L. Pereira 11/01/2010
!Revises: Anibal L. Pereira 04/09/2010
!
!------------------------------------------------------------------real, intent(in):: x
! ponto da funo
real, external :: func
! funo muda
!--- variveis e constantes locais
real:: h,
& ! incremento
desv,
& ! desvio entre as derivadas
d_an,
& ! derivada anterior
d_at,
& ! derivada atual
tol=1.0E-4
! tolerncia
integer:: i
! iterao
!------------------------------------------------------------------! calcula a derivada
!------------------------------------------------------------------h=2.0
i = 0
do
i = i +1
h = h/2
d_at = ( func(x+h)-func(x) )/h
!-----------------------------------------------------------! primeira iterao
!-----------------------------------------------------------if(i == 1) then
d_an = d_at
cycle
!segue para a prxima iterao
end if
!-----------------------------------------------------------! calcula a diferena entre as derivadas
!-----------------------------------------------------------desv = abs(d_an) - abs(d_at)
dfdx = d_at
d_an = d_at
!-----------------------------------------------------------!--- para se desvio for menor que tol ou se fez 100 iteraes
!-----------------------------------------------------------if( (desv < tol) .or. (i >= 100) ) exit
end do
!
end function dfdx
!
end module m_procedimentos_012

17

18

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

_______________________________________________________________________________________
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

#----------------------------------------------------------# Propsito: mostrar o grfico da funo 16*x**2 - 4


#----------------------------------------------------------# script: newton_raphson_00.plt
#
Autor: Anibal L. Pereira 17/02/2011
#Revises:
#----------------------------------------------------------reset

19

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais


set pointsize 1.2
set title "Funo 16*x**2 - 4"
set xlabel "x "
set ylabel "f(x) "
set xzeroaxis
plot [-1:1] [-5:14] 16*x**2 - 4

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

que, visivelmente, apresenta erro grande quando o

intervalo x grande. A expresso que leva ao verdadeiro valor


da derivada

dy
y
= lim
dx x 0 x

Chama-se diferena finita aos deltas, isto : o y e o x .


Diferenas finitas so amplamente utilizadas em clculo. As
diferenas finitas podem ser dos seguintes tipos:

diferenas ascendentes ou progressivas


yi =y i 1 yi

diferenas descendentes ou regressivas


yi = yi yi 1

diferenas centradas
yi = y

1
2

1
2

1
= yi 1 y i 1
2

As diferenas finitas de ascendentes de ordem mais elevadas obtida pela expresso:

k y i =k 1 y i1 k1 y i .

Diferenas finitas ascendentes:

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

diferena finita progressiva de ordem zero


primeira ordem
segunda ordem
terceira ordem

k ssima ordem

As diferenas finitas, usualmente, so colocadas num quadro (ou tabela) e tem a seguinte forma:

20

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

Tabela de diferenas finitas progressivas

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

Por exemplo, a tabela de diferenas finitas progressivas para a funo

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

Observe que o intervalo [a,c] foi dividido em dois intervalos: [a , x1 ] e [ x 1 , c ] . Se f a f x 10


ento a raiz est no intervalo [a , x1 ] , caso contrrio a raiz estar no outro intervalo [ x 1 , c ] .
Renomeando-se os extremos do intervalo que contm a raiz como a e c, podemos repetir o processo para achar
um novo valor da raiz.
Observe que ao repetir o processo obtm-se o valor x 2 (segunda iterao) que, obviamente, um valor mais
prximo da raiz exata que o anterior.

x 1, x 2, x 3, convergem para o valor exato da raiz. A equao a ser


ca
x=a
f a tomando-se o cuidado de usar o intervalo adequado.
f c f a

Pela figura pode-se ver que os valores


utilizada no clculo da raiz :

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

3) encontre a raiz da funo

f x =e x sin x2
2 x sin x10

com: [a,c]=[1,1.2] e tolerncia=

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

{inteno ENTRADA; limites do intervalo}


{inteno ENTRADA; tolerncia}
{inteno ENTRADA; nmero mximo de iteraes}
{inteno SADA ; raiz da funo no intervalo [a,c]}
{PROCEDIMENTO MUDO}
{contador}
{ordenadas de a e c; preciso dupla}
{cpias dos limites do intervalo; preciso dupla}
{raiz da iterao atual; preciso dupla}
{raiz da iterao anterior; preciso dupla} numrico

{cpia dos limites}


aco a
cco c
{verifica se no existe raiz ou se podem ser mltiplas}
ya func(aco)
yc func(cco)
se((ya*yc) > 0) ento
escreva "No existe raiz neste intervalo ou ento h um nmero par de razes"
para
fim se
{clculo da raiz: utilizando um loop infinito}
raiz_ant ya

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

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


Escreva os mdulos m_procedimentos_013 e m_funcoes_004 e salve-os nos respectivos arquivos
________________________________________________________________________________________
arquivo: fxxa3.f03

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

! calcula a raiz utilizando o mtodo das cordas


! para a funo fun1
!--------------------------------------------------------call raiz_metodo_corda(a, c, tol, N_max, fun1, raiz)
!--------------------------------------------------! Mostra raiz na tela do micro
!--------------------------------------------------print*
print*, "A raiz da equao fun1 : ", raiz
print*
end program metodo_das_cordas

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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

25

if((ya*yc) > 0.0) then


print*
print*,"No existe raiz neste intervalo ou ento h um nmero par de razes"
print*
stop
end if
!----------------------------------------------------------------! clculo da raiz: utilizando um loop infinito
!----------------------------------------------------------------raiz_ant=ya
i=0
do
!-- incrementa o contador do loop
i = i+1
!-----------------------------------------------! interrompe o loop: nmero iteraes excedida
!-----------------------------------------------if(i > N_max) then
print*
print"(a,i3,a)","O limite de iteraes: ", N_max," foi excedido"
print"(a)","No foi possvel encontrar a raiz"
print*
stop
end if
!-----------------------------------------! calcula o valor da raiz
!-----------------------------------------raiz_i = aco - ya*( (cco-aco)/(yc-ya) )
!---------------------------------------------------------! retorna o valor da raiz quando tolerncia for satisfeita
!---------------------------------------------------------if( abs(raiz_ant - raiz_i) < tol ) then
raiz = raiz_i
return
! retorna o valor da raiz
end if
!---------------------------------------------------------! coloca valor da raiz atual como raiz anterior
!---------------------------------------------------------raiz_ant=raiz_i
!--------------------------------------------------! troca os valores do intervalo para novo clculo
!--------------------------------------------------if((ya*func(raiz_i)) < 0.0)then
!---intervalo [a,raiz]
cco=raiz_i
yc = func(raiz_i)
else
!---intervalo [raiz,c]
aco=raiz_i
ya = func(raiz_i)
end if
end do
end subroutine raiz_metodo_corda
end module m_procedimentos_013

_______________________________________________________________________________________
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

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

public:: fun1, & !f(x) = tan(x) - x - 0.5


fun2
!f(x) = exp(x) - sin(x) -2
contains
!------------------------------------------------------------------------------------------!----------------------------------------- Funes ----------------------------------------!------------------------------------------------------------------------------------------!
real(kind=dp) function fun1(x)
!------------------------------------------------------------------------!Propsito: Define funo: f(x)= tan(x) - x - 0.5
!------------------------------------------------------------------------!Autor:
Anibal L. Pereira
04/09/2010
!Revises:
!------------------------------------------------------------------------real(kind=dp),intent(in)::x ! valor da abcissa
!------------------------------------fun1 = tan(x) - x - 0.5
end function fun1
!
!------------------------------------------------------------------------------------------!------------------------------------------------------------------------------------------!
real(kind=dp) function fun2(x)
!------------------------------------------------------------------------!Propsito: Define funo: f(x)= exp(x) - sin(x) - 2
!------------------------------------------------------------------------!Autor:
Anibal L. Pereira
04/09/2010
!Revises:
!------------------------------------------------------------------------real(kind=dp),intent(in)::x ! valor da abcissa
!------------------------------------fun2 = exp(x) - sin(x) - 2
end function fun2
!
!------------------------------------------------------------------------------------------!------------------------------------------------------------------------------------------!
end module m_funcoes_004

_______________________________________________________________________________________
arquivo: grafico_corda_f01.plt

#--------------------------------------------------------------------------------# Propsito: mostrar o grfico da funo tan(x)-x-0.5


no intervalo -1.8 a 1.8
#--------------------------------------------------------------------------------# script: corda_f01.plt
#
Autor: Anibal L. Pereira 17/02/2011
#Revises:
#--------------------------------------------------------------------------------reset
set pointsize 1.2
set title "Funo tan(x) - x - 0.5 "
set xlabel "x "
set ylabel "f(x) "
set xzeroaxis lt -1
f(x)= tan(x) - x - 0.53
plot [-1.8:1.8] [-4:4] f(x)
set terminal gif
set output "grafico_corda_f01.gif"
replot
set output
set terminal wxt

27

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

2) Determine as razes das equaes 1 e 2 usando o mtodo das cordas


3) construir os grficos das funes 1 e 2 usando os intervalos: 2 x3 e 10 y10 , em ambas.
No deixe de desenhar o eixo zero do x nos grficos. Entregue os arquivos .gif contendo os grficos

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

2) Determine as razes das equaes 1 e 2 usando o mtodo de Newton-Raphson


3) Construir o grfico da funo 1 usando os intervalos:

1x3

10 y10

4) Construir o grfico da funo 2 usando os intervalos:

4x4

10 y10

No deixe de desenhar o eixo zero do x nos grficos. Entregue os arquivos .gif contendo os grficos

28

DFAT/Folha Atividades/FiscompFA Equaes Algbricas e Transcendentais

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

2) Determine as razes das equaes 1 e 2 usando o mtodo de da bisseo


3) Construir o grfico da funo 1
4) Construir o grfico da funo 2 usando os intervalos:
No deixe de desenhar o eixo zero do x nos grficos.

4x4

40 y40

Entregue os arquivos .gif contendo os grficos

Vous aimerez peut-être aussi