• Nenhum resultado encontrado

Me todos Computacionais em Fı sica I

N/A
N/A
Protected

Academic year: 2021

Share "Me todos Computacionais em Fı sica I"

Copied!
26
0
0

Texto

(1)

Functions

M ´etodos Computacionais em F´ısica I

Jos ´e Helder Lopes

Instituto de F´ısica

Universidade Federal do Rio de Janeiro

Aula Remota Semestre Especial 2020-2

baseado nas aulas remotas da Profa. Sandra Amato para o

(2)

Functions

Estrutura de um Programa

Estrutura dos programas feitos at ´e agora

Entrada de

Dados

Soluc¸ ˜ao do

Problema

Impress ˜ao

do Resultado

Algoritmo de

Leitura

Algoritmo p/

o Problema

Algoritmos p/

o Problema

Algoritmo de

Sa´ıda

Quando os programas se tornam mais complexos ´e necess ´ario dividir

o algoritmo em partes, que ser ˜ao tratadas separadamente.

(3)

Functions

Estrutura de um Programa

Estrutura dos programas feitos at ´e agora

Entrada de

Dados

Soluc¸ ˜ao do

Problema

Impress ˜ao

do Resultado

Algoritmo de

Leitura

Algoritmo p/

o Problema

Algoritmos p/

o Problema

Algoritmo de

Sa´ıda

Quando os programas se tornam mais complexos ´e necess ´ario dividir

o algoritmo em partes, que ser ˜ao tratadas separadamente.

(4)

Functions

Modularizac¸ ˜ao do Programa

Como modularizar?

1- Dividir um problema complexo em

v ´arios problemas simples

,

dividindo o programa em partes que realizem

tarefas espec´ıficas

e

razoavelmente independentes.

2- Identificar e usar soluc¸ ˜oes j ´a existentes.

3- Identificar tarefas espec´ıficas que ser ˜ao usadas

frequentemente

ao

longo do programa e desenvolver uma soluc¸ ˜ao gen ´erica para

execut ´a-la.

4- lembrando que o c ´odigo deve ser:

m

leg´ıvel – coment ´arios, nomes de vari ´aveis bem escolhidos

m

sucinto – Simples, sem c ´alculos desnecess ´arios

m

eficiente

(5)

Functions

Modularizac¸ ˜ao do Programa

Como modularizar?

1- Dividir um problema complexo em

v ´arios problemas simples

,

dividindo o programa em partes que realizem

tarefas espec´ıficas

e

razoavelmente independentes.

2- Identificar e usar soluc¸ ˜oes j ´a existentes.

3- Identificar tarefas espec´ıficas que ser ˜ao usadas

frequentemente

ao

longo do programa e desenvolver uma soluc¸ ˜ao gen ´erica para

execut ´a-la.

4- lembrando que o c ´odigo deve ser:

m

leg´ıvel – coment ´arios, nomes de vari ´aveis bem escolhidos

m

sucinto – Simples, sem c ´alculos desnecess ´arios

m

eficiente

(6)

Modularizac¸ ˜ao do Programa

Como modularizar?

1- Dividir um problema complexo em

v ´arios problemas simples

,

dividindo o programa em partes que realizem

tarefas espec´ıficas

e

razoavelmente independentes.

2- Identificar e usar soluc¸ ˜oes j ´a existentes.

3- Identificar tarefas espec´ıficas que ser ˜ao usadas

frequentemente

ao

longo do programa e desenvolver uma soluc¸ ˜ao gen ´erica para

execut ´a-la.

4- lembrando que o c ´odigo deve ser, em ordem de relev ˆancia:

m

correto!

m

leg´ıvel

m

sucinto

(7)

Functions

Vantagens desse procedimento

m

simplifica a elaborac¸ ˜ao e manutenc¸ ˜ao do c ´odigo (erros)

m

permite escrever func¸ ˜oes gen ´ericas (uso diversificado)

m

facilita o trabalho em equipe, com diferentes grupos trabalhando

em cada m ´odulo independentemente.

m

Os erros s ˜ao mais facilmente detetados

(8)

Vantagens desse procedimento

m

simplifica a elaborac¸ ˜ao e manutenc¸ ˜ao do c ´odigo (erros)

m

permite escrever func¸ ˜oes gen ´ericas (uso diversificado)

m

facilita o trabalho em equipe, com diferentes grupos trabalhando

em cada m ´odulo independentemente.

m

Os erros s ˜ao mais facilmente detetados

(9)

Functions

Functions

Ü functionem Python ´e um bloco de comandos (statements) que podem ser executados em qualquer parte do programa.

Ü Pode-se enviar vari ´aveis para a func¸ ˜ao, e a func¸ ˜ao pode tamb ´em retornar algum objeto para o programa

Ü J ´a utilizamos v ´arias func¸ ˜oes: cos(a), sqrt(x), print ("O valor de x ´e ", x), etc.

(10)

Ü Suponha que queiramos calcular o fatorial de um certo n ´umero n A f ´ormula ´e dada por

n! = n Y

k =1 k

Ü Se quisermos calcular 5!, poder´ıamos fazer no programa: n = 5

f = 1

for k in range(1, n+1):

f = f * k # ou f *= k print ("O fatorial de %d ´e %d" %(n,f))

Ü Ao final do loop o valor de f ´e 5! = 120

Ü Se no nosso programa vamos calcular o fatorial diversas vezes, ter´ıamos que repetir esse bloco de comandos, o que al ´em de ser trabalhoso, polui visualmente e aumenta a chance de erros

Ü Vamos definir uma func¸ ˜ao que pode ser chamada pelo programa. A sintaxe ´e:

(11)

Functions def fatorial(n): f = 1 for k in range(1, n+1): f *= k return f n = 5 fat = fatorial(n) print ("%d! ´e %d" %(n,fat)) fat = fatorial(n+2) print ("%d! ´e %d" %(n+2,fat))

Ü A definic¸ ˜ao dafunc¸ ˜aocomec¸a com def nome da func¸˜ao(arg1, arg2, ...): e termina na linha anterior ao primeiro comando que est ´a na primeira coluna (nesse caso return f)

Ü A func¸ ˜ao s ´o ´e executada quando for chamada

Ü Ela s ´o pode se chamada ap ´os ser definida.

Ü Ao chegar na chamada da func¸ ˜ao (fat = fatorial(n)), a execuc¸ ˜ao do programa pula para as linhas de comando

def fatorial(n):

enviando para a func¸ ˜ao o valor de n

Ü ao encontrar o comando return f, a execuc¸ ˜ao do programa volta para o ponto de onde parou e atribui o valor de f `a vari ´avel fat

(12)

Entender o fluxo do programa ´efundamental. Se estiver com dificuldade, coloque seu programa no sitevisualizador de fluxo

(13)

Functions

Ü Qualquer vari ´avel criada dentro da func¸ ˜ao (local) s ´o ´e conhecida pela func¸ ˜ao. Neste exemplo, o programa n ˜ao tem acesso `as vari ´aveis f e k.

Ü Mas o contr ´ario n ˜ao ocorre. Uma vari ´avel criada fora e antes da chamada da func¸ ˜ao, ´e uma vari ´avel global e pode ser acessada pela func¸ ˜ao.

Mas n ˜ao ´e uma boa pr ´atica usar vari ´aveis globais

Ü Se temos vari ´aveis com mesmo nome dentro e fora da func¸ ˜ao, a vari ´avel local ´e usada.

Ü Na chamada da func¸ ˜ao, a vari ´avel n ˜ao precisa ter o mesmo nome usado dentro da func¸ ˜ao:

def fatorial(n): f = 1 for k in range(1, n+1): f *= k return f m = 5 fat = fatorial(m) fat = fatorial(7)

(14)

Exerc´ıcio

O que ser ´a impresso no seguinte programa: def add(A,B): C = A + B return C a = 3 b = 2 print (add(a, b)) print (add(2*a, b+1)*3)

(15)

Functions

Func¸ ˜

oes com mais de um argumento

Dadas as coordenadas cil´ındricas (r , θ, z) de um ponto, queremos calcular sua dist ˆancia `a origem

from math import * def dist(r,theta,z): x = r * cos(theta) y = r * sin(theta) d = sqrt(x**2+y**2+z**2) return d D = dist(2, 0.1, -1.5) print (D) D = dist(r=2, theta=0.1, z=-1.5) print (D) D = dist(z=-1.5, theta=0.1, r=2) print (D) D = dist(2, theta=0.1, z=-1.5) print (D)

#D = dist(r=2, theta=0.1, -1.5) #N˜ao pode #print (D)

Ü Podemos usar quantos argumentos quisermos, de v ´arios tipos

Ü Na chamada, podemos

m Passar apenas os valores, nesse caso, a ordem deve ser respeitada

m melhor: passar com os nomes das vari ´aveis, assim fica mais claro e podemos passar em qualquer ordem

m se um deles n ˜ao tiver o nome, este(s) deve(m) estar no in´ıcio e na ordem correta

(16)

Func¸ ˜

oes que retornam v ´arios valores

Al ´em de retornar diversos tipos (int, float, complex, lists, array,...), as func¸ ˜oes podem retornar tamb ´em mais de um valor

Ex: func¸ ˜ao que transforma coordenadas polares em cartesianas

from math import cos, sin, pi def cartesian(r,theta): x = r * cos(theta) y = r * sin (theta) posicao = [x,y] return posicao c = cartesian(r=2,theta=pi/4) print (c) # c ´e uma list

Poder´ıamos fazer diretamente return [x,y]

Ou

return array([x,y]) Nesse caso c ´e do tipo array

Ou podemos retornar vari ´aveis separadas: from math import *

def cartesian(r,theta): x = r * cos(theta) y = r * sin (theta) return x,y x1, y1 = cartesian(r=2,theta=pi/4) print (x1, y1)

(17)

Functions

Func¸ ˜

oes que n ˜ao retornam nada

m Podemos ter func¸ ˜oes que n ˜ao retornam nada.

m Neste caso, n ˜ao precisam ter o comando return

m e na sua chamada, a func¸ ˜ao n ˜ao ´e atribu´ıda a nenhuma vari ´avel def saudacao(codigo): if codigo == 10 : print("Bom dia! ") if codigo == 20 : print("Boa noite! ") saudacao(10)

(18)

Func¸ ˜

oes com par ˆametros default

m Os argumentos de func¸ ˜oes podem ter valores pr ´e-definidos (default).

m Neste caso, se eles n ˜ao forem passados como argumento, o valor default ser ´a usado.

>>> def minhafuncao(a, b, keya = True, keyb = 0): ... print (a, b, keya, keyb)

... >>> minhafuncao("Oi", [1,2]) Oi [1, 2] True 0 >>> minhafuncao("Oi", [1,2], False) Oi [1, 2] False 0 >>> minhafuncao("Oi", [1,2], keyb = 20) Oi [1, 2] True 20

>>> minhafuncao("Oi", keyb = 20, b = 10, keya = 30 ) Oi 10 30 20

(19)

Functions

Exemplo de Func¸ ˜

oes com par ˆametros default

Considere a func¸ ˜ao f (t; A, a, w ) = A e−at sin(ωt)

Vamos implement ´a-la com A, a, w com par ˆametros default >>> from math import pi, exp, sin

>>> def f(t, A=1, a=1, omega=2*pi): ... return A*exp(-a*t)*sin(omega*t) ...

>>> v1 = f(0.2)

>>> v1 = f(1, A=5, omega=pi, a=pi**2) >>> v1 = f(A=5, a=2, t= 0.01, omega=0.1) >>> v1 = f(0.2, 0.5, 1, 1)

(20)

Func¸ ˜

oes podem chamar outras func¸ ˜

oes

Ex: Func¸ ˜ao que calcula a ´area da coroa circular formada pelos c´ırculos de raio r1e r2, com r1<r2

from math import pi def areac(r1):

#Calcula area do circulo return pi*r1**2

def coroa(r1,r2):

"""Calcula area da coroa formada pelos circulos de raio r1 e r2 com r1 < r2

""" if r1>r2:

print "r1 deve ser menor que r2" return 0

else:

return areac(r2)-areac(r1)

(21)

Functions

String de documentac¸ ˜ao

func¸ ˜ao definida em outro arquivo

Ü

E muito ´util saber quantos e quais os par ˆametros de uma func¸ ˜ao

´

(assinatura), sem ter que olhar o seu c ´odigo

Ü

Para documentar, logo abaixo do comando def colocamos

coment ´ario entre tr ˆes aspas, podendo usar v ´arias linhas

Ü

Para imprimir essa documentac¸ ˜ao fazemos

print(nomeDaFunc

¸ao. doc )

Ü

Experimente com a func¸ ˜ao cos(x) da biblioteca math:

>>> from math import *

>>> print(cos.__doc__)

Return the cosine of x (measured in radians).

Ü

E comum tamb ´em termos func¸ ˜oes definidas em algum outro

´

arquivo. Se, p.ex., a func¸ ˜ao line estiver definida dentro do

arquivo funcoes.py, para us ´a-la fazemos:

(22)

def line(x0, y0, x1, y1): """

Calcula os coeficientes a e b da reta y = a*x + b que passa

por dois pontos (x0,y0) and (x1,y1).

return: coeficientes a, b (floats) da reta (y=a*x+b). Exemplo: >>> a, b = line(1, -1, 4, 3) >>> a 1.3333333333333333 >>> b -2.333333333333333 """ a = (y1 - y0)/float(x1 - x0) b = y0 - a*x0 return a, b

>>> from funcoes import line >>> print (line.__doc__)

(23)

Functions

Vari ´aveis - mais detalhes

Ü Pode-se fazer mais de uma atribuic¸ ˜ao em uma s ´o linha: >>> a, b, c = 2, 4, 3

Ü tipos das vari ´aveis s ˜ao autom ´aticos, mas podemos forc¸ar um tipo: >>> c = 20 >>> type(c) <class ’int’> >>> c=float(20) >>> type(c) <class ’float’>

Ü Podemos criar uma vari ´avel com o mesmo tipo de outra, com valor nulo (ou vazio no caso de string)

>>> d = type(c)() >>> d

0.0

>>> type(d) <class ’float’>

(24)

Exerc´ıcios

Ü

Os pr ´oximos exerc´ıcios solicitam que seja criada uma

determinada func¸ ˜ao em Python.

Ü

Antes de comec¸ar a implementar fac¸a o algoritmo.

Ü

As func¸ ˜oes devem estar no arquivo chamado

<nomeDaFunc

¸ao>.py

(onde <nomeDaFunc

¸ao>.py

´e

espec´ıfico de cada exerc´ıcio) que ir ´a conter tamb ´em o programa

principal com a chamada para a func¸ ˜ao, de forma a test ´a-la.

Ü

A func¸ ˜ao deve ter a documentac¸ ˜ao explicando o que s ˜ao os

argumentos e o que ela retorna.

(25)

Functions

Exerc´ıcios

Escreva uma func¸ ˜ao chamada

1

volCilindro(h,r) que, dados a altura (h) e o raio (r ) do cilindro,

retorne o seu Volume = πr

2

h

2

mediaPonderada(n1,n2,peso1=1,peso2=1) que, dados dois

n ´umeros n1 e n2, calcule a m ´edia ponderada com os respectivos

pesos.

3

escalar(x,y) que dados dois arrays retorne o produto escalar

entre eles. Compare com o resultado da func¸ ˜ao dot(x,y) da

numpy.

4

angulo (x,y) que dados dois vetores de 3 dimens ˜oes, retorne o

ˆangulo entre eles

5

primo(x) que dado um n ´umero x inteiro, positivo,

retorne True se x for primo ou False, caso contr ´ario

(26)

Exerc´ıcios

6 L(x, n) que retorne o valor da somaPn

i=11i 

x 1+x

i

. Esta ´e uma aproximac¸ ˜ao da func¸ ˜ao ln(1+x) para x > 1. No programa principal, compare o resultado da sua func¸ ˜ao, com o da func¸ ˜ao log da biblioteca mathpara x = 5

7 roots(a,b,c) que retorne as duas ra´ızes da equac¸ ˜ao a x2+b x + c = 0.

Se ∆ > 0, o resultado deve ser do tipo float. Se ∆ < 0 o resultado deve ser do tipo complex. Sugest ˜ao: A func¸ ˜ao sqrt da biblioteca

numpy.lib.scimathcalcula ra´ızes complexas.

8 A func¸ ˜ao sum do python recebe uma lista e retorna a soma de seus

elementos. Implemente a sua vers ˜ao dessa func¸ ˜ao:mysum([x]). O

teste deve fornecer:

print(mysum([1, 2, 3])) 6

print(mysum(["Hello, ", "World!"])) Hello, World! print(mysum([[1,2],[4,3]])) [1, 2, 4, 3]

Referências

Documentos relacionados

PROCESSO: Encaminhamos a PROPESP o pedido de prorrogação do projeto de pesquisa “AVALIAÇÃO DA PRODUÇÃO HABITACIONAL E OCUPAÇÃO HUMANA EM ASSENTAMENTOS PRECÁRIOS NA AMAZÔNIA:

■ Uma camada de diamantes braçados a vácuo, que proporcionam ao disco um desempenho de corte extraordinário, adequado para cortar a maioria dos materiais que possam ocorrer

Ü Atenc¸ ˜ao: A escolha da largura dos intervalos pode distorcer o comportamento dos dados que estamos analisando. 20 bins

A instalação deste item é obrigatória a fim de evitar erros com as alterações no esquema de banco de dados ao atualizar o Acelerador do PMO de versões anteriores do

Ü Uma outra forma de fazer loop no Python ´e a instruc¸ ˜ao for Ü ela ´e mais conveniente para trabalhar com listas (e arrays como.

Apresentac¸ ˜ao Computador Algoritmos Python Operac¸ ˜ oes Vari ´aveis Programas Repres..

Atualmente aluno no Programa de doutoramento em Ciência da Informação, especialidade Sistemas, Tecnologias e Gestão da Informação, na Universidade Fernando Pessoa (UFP),

• Considerando que o custo máximo admissível não tinha sido alcançado no primeiro momento, foi possível, através da aplicação da revisão da estrutura de custos, otimiza-la,