At 20 recursao numeros aleatorios_topicos avancados sobre funcoes
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

At 20 recursao numeros aleatorios_topicos avancados sobre funcoes

  • 2,579 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,579
On Slideshare
485
From Embeds
2,094
Number of Embeds
7

Actions

Shares
Downloads
24
Comments
0
Likes
0

Embeds 2,094

http://ratosdotecnico.blogspot.pt 2,051
http://www.ratosdotecnico.blogspot.pt 21
http://ratosdotecnico.blogspot.com 17
http://ratosdotecnico.blogspot.com.br 2
http://ratosdotecnico.blogspot.co.uk 1
http://ratosdotecnico.blogspot.dk 1
http://www.ratosdotecnico.blogspot.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 11/17/2012 Computação e Programação MEMec, LEAN - 1º Semestre 2012-2013 Aula Teórica 20 • Funções Recursivas • Geração de números aleatórios • Tópicos Avançados sobre Funções • Funções com número variável de argumentos de entrada e saída • Funções como argumentos para outras funções • Funções anónimas D.E.M. – Área Científica de Controlo Automação e Informática IndustrialAlinhamento da AT 20 • Funções Recursivas • Geração de números aleatórios • Tópicos Avançados sobre Funções Computação e Programação 2012 / 2013 2 1
  • 2. 11/17/2012Recursão • A recursão ocorre quando uma qualquer entidade é definida em termos de si própria • Uma definição recursiva possui sempre dois casos: 1. Caso geral (também chamado de inductivo, ou passo recursivo) 2. Caso base • O caso geral deve tender para o caso base • O caso base dá uma resposta concreta Computação e Programação 2012 / 2013 3Exemplo função factorial• Considere-se como exemplo a função factorial 1 se ݊ ൌ 0 ݊! ൌ ቄ 1ൈ 2ൈ⋯ൈ݊ se ݊ ൐ 0• Esta função pode ser definida de forma recursiva 1 se ݊ ൌ 0 ݊! ൌ ൜ ݊ ൈ ݊ െ 1 ! se ݊ ൐ 0 Computação e Programação 2012 / 2013 4 2
  • 3. 11/17/2012Exemplo função factorial Caso base, que devolve uma resposta concreta 1 se ݊ ൌ 0݊! ൌ ൜ ݊ ൈ ݊ െ 1 ! se ݊ ൐ 0 Passo recursivo, que invoca a própria função factorialNotar que: • O passo recursivo tem que ser no sentido da simplificação do problema, i.e., em direcção à resposta fornecida pelo caso base O que aconteceria se fosse ݊ ൈ ݊ ൅ 1 ! ? Computação e Programação 2012 / 2013 5Exemplo função factorial 4! = 4 × 3! = 4 × 6 = 24 3! = 3 × 2! = 3 × 2 = 6 2! = 2 × 1! = 2 × 1 = 2Notar que: 1! = 1 × 0! = 1 × 1 = 1 • Até chegar ao caso base foram deixados bastantes cálculos em suspenso! 0! = 1 Computação e Programação 2012 / 2013 6 3
  • 4. 11/17/2012Exemplo função factorial>> factorialRecursivo(4)fac = 1fac = 2fac = 6fac = 24ans = 24>> Computação e Programação 2012 / 2013 7Exemplo função factorial >> factorialRecursivo(4) ans = 24 3 2 1 0 6 2 1 1 Computação e Programação 2012 / 2013 8 4
  • 5. 11/17/2012Recursão• No exemplo anterior, num dado momento, há 5 funções abertas em simultâneo => recursos × 5 (por exemplo a memória para as variáveis locais)• Quando um problema tem uma solução não recursiva esta será, provavelmente, mais eficiente do que a recursiva (mas não necessariamente mais simples de implementar)• No entanto, existem muitos problemas complexos para os quais só são conhecidas soluções recursivas Computação e Programação 2012 / 2013 9Exemplo função factorial>> factorialIterativo(4)fac = 1fac = 2fac = 6fac = 24ans = 24>> Computação e Programação 2012 / 2013 10 5
  • 6. 11/17/2012Exemplo função factorial • Note-se que nenhum dos exemplos anteriores está protegido contra erros de utilização! • O que aconteceria se fossem dadas as seguintes instruções? >> factorialRecursivo(-2) ??? Maximum recursion limit of 500 reached. Use set(0,RecursionLimit,N) to change the limit. Be aware that exceeding your available stack space can crash MATLAB and/or your computer. Error in ==> factorialRecursivo >> factorialIterativo(-2) ans = 1 Computação e Programação 2012 / 2013 11Alinhamento da AT 20 • Funções Recursivas • Números aleatórios • Tópicos Avançados sobre Funções Computação e Programação 2012 / 2013 12 6
  • 7. 11/17/2012Geração de números aleatórios• Em estatística, um número aleatório é um número que pertence a uma série numérica e não pode ser previsto a partir dos membros anteriores dessa série• Num computador os números “aleatórios” são produzidos por um algoritmo a partir de um valor inicial• Os números “aleatórios” gerados em computadores são por isso chamados de pseudo-aleatórios Computação e Programação 2012 / 2013 13Geração de números aleatórios• “Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin.“ - John von Neumann• ”The generation of random numbers is too important to be left to chance.” - R. Coveyou http://en.wikipedia.org/wiki/Pseudorandom_number_generator Computação e Programação 2012 / 2013 14 7
  • 8. 11/17/2012Geração de números aleatóriosComando Descrição seed Definição da semente rand Geração de números reais com distribuição uniforme randn Geração de números reais com distribuição normal randi Geração de números inteiros com distribuição uniforme discreta Computação e Programação 2012 / 2013 15Geração de números aleatórios• A repetibilidade das sequências pode ser obtida definindo o algoritmo e o valor inicial>> rand(seed,0)>> rand(1,5)ans = 0.2190 0.0470 0.6789 0.6793 0.9347>> rand(1,5)ans = 0.3835 0.5194 0.8310 0.0346 0.0535>> rand(seed,0)>> rand(1,5)ans = 0.2190 0.0470 0.6789 0.6793 0.9347 Computação e Programação 2012 / 2013 16 8
  • 9. 11/17/2012Geração de números aleatórios• Gerar um vector de 100 valores com distribuição uniforme no intervalo [0,1]>> r = rand(100,1));• Gerar um vector de 100 inteiros com distribuição uniforme no intervalo [1, 5]>> r = ceil(5.*rand(100,1)); Computação e Programação 2012 / 2013 17Geração de números aleatórios• Gerar um vector de 100 valores com distribuição uniforme no intervalo [a, b]>> r = a + (b-a).*rand(100,1);• Gerar vector de números reais com distribuição normal, com desvio padrão dp e média m>> r = m + dp.*randn(N,1); Computação e Programação 2012 / 2013 18 18 9
  • 10. 11/17/2012Alinhamento da AT 20 • Funções Recursivas • Números aleatórios • Tópicos Avançados sobre Funções • Funções com número variável de argumentos de entrada e saída Computação e Programação 2012 / 2013 19Número variável de argumentos• É possível a uma função ter um número variável de argumentos de entrada e de saída• O MATLAB possui dois cell arrays pré-definidos, chamados varargin e varargout, onde podem ser guardados um qualquer número de argumentos de entrada e de saída respectivamente• Tratando-se de cell arrays os argumentos podem ser de qualquer tipo Computação e Programação 2012 / 2013 20 10
  • 11. 11/17/2012Número variável de argumentos• Para além destes cell arrays, existem ainda as funções pré-definidas nargin e nargout, que indicam com quantos argumentos de entrada e com quantos argumentos de saída uma função foi efectivamente chamada Computação e Programação 2012 / 2013 21Exemplo areaEmMetros2 • Crie uma função que receba através dos seus argumentos de entrada um valor de raio em m, dm, cm ou mm, e que devolve a área do círculo correspondente em m2. Se a função receber apenas um argumento assume que o valor é passado em m. Se receber dois argumentos o segundo será uma string com a unidade. Computação e Programação 2012 / 2013 22 11
  • 12. 11/17/2012Exemplo areaEmMetros2 >> areaEmMetros2(1) ans = 3.1416 >> areaEmMetros2(10,dm) ans = 3.1416 >> areaEmMetros2(100,cm) ans = 3.1416 >> areaEmMetros2(1000,mm) ans = 3.1416 Computação e Programação 2012 / 2013 23Exemplo converteTemperaturas• Crie uma função que receba um valor de temperatura em ºC, e que devolva o correspondente valor em ºF e ºK. Se a função for chamada com apenas um argumento de saída devolverá apenas a temperatura em ºF, se for chamada com dois devolverá ambos os resultados de conversão. Computação e Programação 2012 / 2013 24 12
  • 13. 11/17/2012Exemplo converteTemperaturas>> tF = converteTemperaturas(30)tF = 86>> [tF, tK] = converteTemperaturas(30)tF = 86tK = 303.1500 Computação e Programação 2012 / 2013 25Alinhamento da AT 20 • Funções Recursivas • Números aleatórios • Tópicos Avançados sobre Funções • Funções como argumentos para outras funções Computação e Programação 2012 / 2013 26 13
  • 14. 11/17/2012Definição de function handle• Um function handle é um tipo de dados em MATLAB, que permite fazer a chamada a uma função de um modo indirecto• É possível utilizar um function handle como argumento de uma função.• É possível guardar function handles em estruturas de dados (estruturas ou cell arrays) para posterior utilização Computação e Programação 2012 / 2013 27Definição de function handleDescrição: Um function handle retorna um handle para a função especificada Formas de criar um function handle:Sintaxe: handle = @nome_funcao ou handle = @(argumentos)funcao_anonima Computação e Programação 2012 / 2013 28 14
  • 15. 11/17/2012Function handles usados com funções• Os function handles podem ser criados para funções pré-definidas ou para funções definidas pelo >> h = @minhaFuncao; programador >> minhaFuncao(5) ans = >> h_sin = @sin; 16 >> h_sin(pi/2) >> h(5) ans = ans = 1 16 Computação e Programação 2012 / 2013 29Function handle como argumento• Uma das principais razões para utilizar function handles, é a possibilidade de passar funções como argumentos a outras funções• Por exemplo: uma função que crie um gráfico formatado pode receber um vector de pontos e um function handle com a função (desses pontos) que se pretende apresentar Computação e Programação 2012 / 2013 30 15
  • 16. 11/17/2012 Function handle como argumento>> hndl = @minhaFuncao;>> fnfnexamp(hndl)>> fnfnexamp(minhaFuncao)??? Input argument "x" is undefined.Error in ==> minhaFuncao at 4res = x.^2 - 2*x + 1; Computação e Programação 2012 / 2013 31 Alinhamento da AT 20 • Funções Recursivas • Números aleatórios • Tópicos Avançados sobre Funções • Funções anónimas Computação e Programação 2012 / 2013 32 16
  • 17. 11/17/2012Funções anónimasDescrição: Uma função anónima é uma função muito simples que não necessita de ser guardada num m-file. Podem ser criadas na linha de comandos, ou num script.Sintaxe: handle = @(argumentos)funcao Computação e Programação 2012 / 2013 33Exemplos>> h_areaRect = @(larg,alt) larg*alt;>> area = h_areaRect(2,4)area = 8>> myFun1 = @(x) x.^2 - 2*x + 1;>> myFun1(4)ans = 9 Computação e Programação 2012 / 2013 34 17
  • 18. 11/17/2012Exemplos>> printAnonim=@() fprintf(%.2fn,rand);>> printAnonim() Quando uma função anónima não recebe argumentos, deve0.81 ainda assim ser chamada com parentisis vazios>> printAnonim Se isso não for feito é apresentada a definiçãoprintAnonim = da função @()fprintf(%.2fn,rand) Computação e Programação 2012 / 2013 35Bibliotecas de funções anónimas• É possível guardar num ficheiro .mat funções anónimas logicamente relacionadas, de modo a ser possível reutilizá-las.>> areaRect = @(larg,alt) larg*alt;>> areaCirc = @(raio) pi*raio^2;>> save funcAnonimAreas areaRect areaCirc>> clear Computação e Programação 2012 / 2013 36 18
  • 19. 11/17/2012 Bibliotecas de funções anónimas>> load funcAnonimAreas>> whosName Size Bytes Class AttributesareaCirc 1x1 16 function_handleareaRect 1x1 16 function_handle>> areaRect(2,1)ans = 2>> areaCirc(1)ans = 3.1416 Computação e Programação 2012 / 2013 37 Referências • Capítulo 10 de Stormy Attaway (2012), “Matlab: A Practical Introduction to Programming and Problem Solving”, Elsevier. Computação e Programação 2012 / 2013 38 19