Método de Newton Passeio aleatório - FCUPjpp/ip/slides-08.pdf · Alguns algoritmos Passeio...

Post on 07-Oct-2018

222 views 0 download

Transcript of Método de Newton Passeio aleatório - FCUPjpp/ip/slides-08.pdf · Alguns algoritmos Passeio...

Alguns algoritmosPasseio aleatórioMétodo de Newton

Passeio aleatório

Algoritmo:começar no centro da janelaatirar moeda ao ar;

cara → virar 90 graus àesquerdacoroa → virar 90 graus à direita

dar 50 passos em frentese a tartaruga sair da janela,parar

Análise:

dificuldade: saber se se saiu dajanela

solução: diferir, encapsulandonuma função

create a window and a turtle

while the turtle is still in the window:generate a random number between 0 and 1if the number == 0 (heads):

turn leftelse:

turn rightmove the turtle forward 50

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Versão 1

(versão simplista de isInScreen: 90% de probabilidade de a tartarugaestar na janela)import randomimport turtle

def isInScreen(w,t):if random.random() > 0.1:

return Trueelse:

return False

wn = turtle.Screen()t = turtle.Turtle()t.shape(’turtle’)

while isInScreen(wn,t):coin = random.randrange(0,2)if coin == 0: # heads

t.left(90)else: # tails

t.right(90)

t.forward(50)

wn.exitonclick()João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

isInScreen corrigido

def isInScreen(w,t):leftBound = - w.window_width()/2rightBound = w.window_width()/2topBound = w.window_height()/2bottomBound = -w.window_height()/2

turtleX = t.xcor()turtleY = t.ycor()

stillIn = Trueif turtleX > rightBound or turtleX < leftBound:

stillIn = Falseif turtleY > topBound or turtleY < bottomBound:

stillIn = False

return stillIn

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Vantagens da implementação de isInScreen

simplifica o código no restante programa (relativamente a ter umacondição complexa no while);

isInScreen pode ser utilizada noutros contextos;

ao reutilizar esta função, temos mais confiança de que está correta (jáfoi testada);

este é um exemplo da decomposição funcional: divisão de um programaem partes.

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

Método de Newton (ou de Newton-Raphson):

permite encontrar raízes de funções reais de variável real, poraproximações sucessivas;

raíz: ponto onde a função é igual a zero,

x : f (x) = 0

aproximações sucessivas: encontramos sequências de valores que (sea função for “bem comportada”) tendem para o zero;

o método termina quando a aproximação é suficientemente boa.

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

Método de Newton: algoritmoDados:

1 função real de variável real f ;2 a sua derivada f ′;3 estimativa inicial x0;4 tolerância ε;

Aproximações sucessivas são obtidas com:

xn+1 = xn −f (xn)

f ′(xn)

O processo é repetido até que a aproximação seja suficientementeprecisa, i.e.:

|f (xn)| < ε

João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

Método de Newton: Python

def newton(f,d,x0,eps):f0 = f(x0)d0 = d(x0)while abs(f0) > eps:

x0 = x0 - f0/d0f0 = f(x0)d0 = d(x0)

return x0

if __name__ == "__main__":import mathdef f(x):

return math.sin(x)def d(x):

return math.cos(x)

x0 = 3.

root = newton(f,d,x0,1.e-12)print("solution:", root)

Nota: a referência à função é passada como parâmetro.João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Método de Newton

Método de Newton: Python

def newton(f,d,x0,eps):f0 = f(x0)d0 = d(x0)while abs(f0) > eps:

x0 = x0 - f0/d0f0 = f(x0)d0 = d(x0)

return x0

if __name__ == "__main__":import mathdef f(x):

return math.sin(x)def d(x):

return math.cos(x)

x0 = 3.

root = newton(f,d,x0,1.e-12)print("solution:", root)

Nota: a referência à função é passada como parâmetro.João Pedro PEDROSO Introdução à Programação - minor

Alguns algoritmosPasseio aleatórioMétodo de Newton

Próxima aula

Algoritmos

João Pedro PEDROSO Introdução à Programação - minor