slides computação e programação memec+lean · 18/11/2015 3 alinhamento da at 20 • números...
TRANSCRIPT
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.