17
18/11/2015 1 D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre 2015-2016 Aula Teórica 20 Números complexos 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 Recursão Possui sempre dois casos Caso geral (também chamado de inductivo, ou passo recursivo) que deve tender para o caso base Caso base que dá uma resposta concreta Pesquisa binária Assume que o vector ou lista estão previamente ordenados • Em geral é mais eficiente que a pesquisa sequencial 2 Wrap Up da última aula Ocorre quando uma qualquer entidade é definida em termos de si própria Computação e Programação 2015 / 2016

Slides Computação e Programação MEMec+LEAN · 18/11/2015 3 Alinhamento da AT 20 • Números complexos • Tópicos Avançados sobre Funções Computação e Programação 2015

  • Upload
    lytu

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

18/11/2015

1

D.E.M. – Área Científica de Controlo Automação e Informática Industrial

Computação e ProgramaçãoMEMec, LEAN - 1º Semestre 2015-2016

Aula Teórica 20

• Números complexos• 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

Recursão

Possui sempre dois casos

• Caso geral (também chamado de inductivo, ou passo recursivo) que deve tender para o caso base

• Caso base que dá uma resposta concreta

Pesquisa binária

• Assume que o vector ou lista estão previamente ordenados

• Em geral é mais eficiente que a pesquisa sequencial

2

Wrap Up da última aula

• Ocorre quando uma qualquer entidade é definida em termos de si própria

Computação e Programação 2015 / 2016

18/11/2015

2

>> factorialRecursivo(4)

ans =

24

32

10

11

26

3Computação e Programação 2015 / 2016

Wrap Up da última aula

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

Polinómios

• No Matlab representa-se um polinómio como um vector linha de coeficientes. Por exemplo:

x3 + 2x2 - 4x + 3 será [1 2 -4 3]

• Funções para calcular facilmente raízes ou o valor do polinómio em conjuntos de pontos x

• Funções para realizar ajustes (regressões) de conjuntos de pontos a funções polinomiais

Computação e Programação 2015 / 2016 4

Wrap Up da última aula

Números aleatórios

• Num computador os números “aleatórios” são produzidos por um algoritmo a partir de um valor inicial, são por isso chamados pseudo-aleatórios

18/11/2015

3

Alinhamento da AT 20

• Números complexos

• Tópicos Avançados sobre Funções

Computação e Programação 2015 / 2016 5

• No Matlab o número imaginário representando o

valor de −1 é representado pelas letras i ou j

Cálculos com números complexos

Computação e Programação 2015 / 2016 6

>> sqrt(-1)

ans =

0 + 1.0000i

>> i

ans =

0 + 1.0000i

>> j

ans =

0 + 1.0000i

18/11/2015

4

• Ao trabalhar com matrizes é comum definirvariáveis i e j que podem ocultar em certascircunstâncias o valor imaginário. No entanto estepoderá continuar a ser utilizado.

Cálculos com números complexos

Computação e Programação 2015 / 2016 7

>> i = 12;

>> i

i =

12

>> 3 + 2i

ans =

3.0000 + 2.0000i

>> 1i

ans =

0 + 1.0000i

A definição da variável i ocultou nesta situação o número imaginário pré -definido

No entanto quando não há ambiguidade na utilização ele pode

continuar a ser utilizado

• Funções básicas

Cálculos com números complexos

Computação e Programação 2015 / 2016 8

função Descrição

complexCria um valor complexo a partir dos coeficientes das suas partes real e imaginária

real Devolve a parte real de um valor complexo

imag Devolve a parte imaginária de um valor complexo

conj Valor complexo conjugado

isreal Verifica se um valor possui apenas parte real

18/11/2015

5

Exemplos

Computação e Programação 2015 / 2016 9

>> z1 = 4 + 2i

z1 =

4.0000 + 2.0000i

>> z2 = sqrt(-5)

z2 =

0 + 2.2361i

>> z3 = complex(3,-3)

z3 =

3.0000 - 3.0000i

>> z4 = 2 + 3j

z4 =

2.0000 + 3.0000i

>> z5 = (-4) ^ (1/2)

ans =

0.0000 + 2.0000i

>> real(z1)

ans =

4

>> imag(z3)

ans =

-3

>> conj(z1)

ans =

4.0000 - 2.0000i

>> abs(z1)

ans =

4.4721

• A função isreal verifica se um valor foi definidocomo real puro, mesmo que a sua parte complexaseja 0

Cálculos com números complexos

Computação e Programação 2015 / 2016 10

>> isreal(z1)

ans =

0

>> isreal(3.3)

ans =

1

>> z5 = complex(3)

z5 =

3

>> isreal(z5)

ans =

0

18/11/2015

6

• Para apresentar um número complexo dispfunciona automaticamente, mas a função fprintfnecessita que se especifiquem ambas as partes

Cálculos com números complexos

Computação e Programação 2015 / 2016 11

>> disp(z1)

4.0000 + 2.0000i

>> fprintf('%f + %fi\n', real(z1), imag(z1))

4.000000 + 2.000000i

• Qualquer número z = a + bi pode ser representadona forma polar

z = r (cos θθθθ + i sin θθθθ) = r e iθθθθ

onde:a = r cos θθθθ

b = r sin θθθθ

Ou de forma inversa:

r = |z|= �� + ��

θθθθ = arctan(b/a)

Representação Polar

Computação e Programação 2015 / 2016 12

18/11/2015

7

• Funções básicas

Representação Polar

Computação e Programação 2015 / 2016 13

função Descrição

abs Devolve o módulo

angle Devolve o ângulo

Exemplos

Computação e Programação 2015 / 2016 14

>> z1 = 3 + 4i;

>> r = abs(z1)

r =

5

>> theta = angle(z1)

theta =

0.9273

>> r*exp(i*theta)

ans =

3.0000 + 4.0000i

18/11/2015

8

Alinhamento da AT 20

• Números complexos

• 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

15Computação e Programação 2015 / 2016

Nú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 podemser guardados um qualquer número de argumentosde entrada e de saída respectivamente.

• Tratando-se de cell arrays os argumentos podem serde qualquer tipo.

16Computação e Programação 2015 / 2016

18/11/2015

9

Número variável de argumentos

• Para além destes cell arrays, existem ainda as funçõespré-definidas nargin e nargout, que indicam com quantos argumentos de entrada e com quantosargumentos de saída uma função foi efectivamentechamada.

17Computação e Programação 2015 / 2016

Exemplo areaEmMetros2

• Crie uma função que receba através dos seusargumentos de entrada um valor de raio em m, dm, cm ou mm, e que devolve a área do círculocorrespondente 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.

18Computação e Programação 2015 / 2016

18/11/2015

10

Exemplo areaEmMetros2

>> areaEmMetros2(1)

ans =

3.1416

>> areaEmMetros2(10,'dm')

ans =

3.1416

>> areaEmMetros2(100,'cm')

ans =

3.1416

>> areaEmMetros2(1000,'mm')

ans =

3.1416

19Computação e Programação 2015 / 2016

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

Exemplo converteTemperaturas

20Computação e Programação 2015 / 2016

18/11/2015

11

>> tF = converteTemperaturas(30)tF =

86

>> [tF, tK] = converteTemperaturas(30)tF =

86tK =

303.1500

Exemplo converteTemperaturas

21Computação e Programação 2015 / 2016

Alinhamento da AT 20

• Números complexos

• 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

22Computação e Programação 2015 / 2016

18/11/2015

12

Definição de function handle

• Um function handle é um tipo de dados emMATLAB, que permite fazer a chamada a uma funçãode um modo indirecto.

• É possível utilizar um function handle comoargumento de uma função.

• É possível guardar function handles em estruturas dedados (estruturas ou cell arrays) para posteriorutilização.

23Computação e Programação 2015 / 2016

Definição de function handle

Descriçã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

24Computação e Programação 2015 / 2016

18/11/2015

13

Function handles usados com funções

• Os function handles

podem ser criados para funções pré-definidas ou para funções definidas pelo programador.

>> h_sin = @sin;

>> h_sin(pi/2)

ans =

1

>> h = @minhaFuncao;

>> minhaFuncao(5)

ans =

16

>> h(5)

ans =

16

25Computação e Programação 2015 / 2016

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

Function handle como argumento

26Computação e Programação 2015 / 2016

18/11/2015

14

Function handle como argumento

>> hndl = @minhaFuncao;

>> fnfnexamp(hndl)

>> fnfnexamp(minhaFuncao)

??? Input argument "x" is undefined.

Error in ==> minhaFuncao at 4

res = x.^2 - 2*x + 1;

27Computação e Programação 2015 / 2016

Alinhamento da AT 20

• Números complexos

• 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

28Computação e Programação 2015 / 2016

18/11/2015

15

Funções anónimas

Descriçã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

29Computação e Programação 2015 / 2016

Exemplos

>> h_areaRect = @(larg,alt) larg*alt;

>> area = h_areaRect(2,4)

area =

8

>> myFun1 = @(x) x.^2 - 2*x + 1;

>> myFun1(4)

ans =

9

30Computação e Programação 2015 / 2016

18/11/2015

16

Exemplos

>> printAnonim=@() fprintf('%.2f\n',rand);

>> printAnonim()

0.81

>> printAnonim

printAnonim =

@()fprintf('%.2f\n',rand)

Quando uma função anónima não recebe argumentos, deve ainda assim ser chamada com

parentisis vazios

Se isso não for feito é apresentada a definição

da função

31Computação e Programação 2015 / 2016

Bibliotecas de funções anónimas

• É possível guardar num ficheiro .mat funçõesanónimas logicamente relacionadas, de modo a serpossível reutilizá-las.

>> areaRect = @(larg,alt) larg*alt;

>> areaCirc = @(raio) pi*raio^2;

>> save funcAnonimAreas areaRect areaCirc

>> clear

32Computação e Programação 2015 / 2016

18/11/2015

17

Bibliotecas de funções anónimas

>> load funcAnonimAreas

>> whos

Name Size Bytes Class Attributes

areaCirc 1x1 16 function_handle

areaRect 1x1 16 function_handle

>> areaRect(2,1)

ans =

2

>> areaCirc(1)

ans =

3.1416

33Computação e Programação 2015 / 2016

As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva

Computação e Programação 2015 / 2016 34

Referências

• Capítulo 15 de Stormy Attaway (2012), “Matlab: A Practical Introduction to Programming and Problem Solving”, Elsevier.