Computação e Programação MEMec, LEAN - 1º Semestre 2015-2016 Aula Teórica 7 Matrizes como imagens Funções definidas pelo programador: Âmbito das variáveis Apresentação do projecto D.E.M. Área Científica de Controlo Automação e Informática Industrial Wrap Up da última aula Quais as estruturas de repetição do MATLAB? for while Quando se utiliza uma e outra? forquando se pretende que o programa execute a repetição um número pré-determinado de vezes whilequando o número de repetições a executar depende de alguma condição lógica e não pode ser previsto à partida elo programa Computação e Programação 2015 / 2016 2 1
Wrap Up da última aula O que é um ciclo infinito? É um problema que pode ocorrer nos ciclos while quando a condição de paragem nunca é satisfeita Para que serve a instrução break Serve para interromper um ciclo whilenalgum ponto da sequência a ser repetida, permitindo executar a 1ª parte dessa sequência pelo menos uma vez Computação e Programação 2015 / 2016 3 Alinhamento da AT 7 Matrizes como imagens Funções definidas pelo programador: Âmbito das variáveis Computação e Programação 2015 / 2016 4 2
Função pré-definida image Descrição: Representa uma matriz na forma de uma imagem Sintaxe: image(c) image(c,'propriedade',valor,...) >> A = [0:10:60; 10:10:70; 20:10:80] A = 0 10 20 30 40 50 60 10 20 30 40 50 60 70 20 30 40 50 60 70 80 >> image(a) Computação e Programação 2015 / 2016 5 Função pré-definida colormap Descrição: Escolhe uma tabela de cores para representação de matrizes Sintaxe: colormap(map) Existem várias tabelas de cores pré-definidas no Matlab, embora seja fácil ao utilizador definir a sua própria tabela. Computação e Programação 2015 / 2016 6 3
Exemplo >> A = [0:5:100; 10:5:110; 20:5:120]; >> image(a) >> imagesc(a) >> colormap(bone) >> colormap(winter) >> colormap(hot) Semelhante a image, mas ajusta a tabela de cores aos valores máximo e mínimo da matriz Computação e Programação 2015 / 2016 7 Função pré-definida imread Descrição: Lê uma imagem de um ficheiro para uma matriz (nos formatos suportados) Sintaxe: imread(ficheiro) imread(ficheiro,formato) >> B = imread('koala.jpg'); >> image(b) Computação e Programação 2015 / 2016 8 4
Função pré-definida imwrite Descrição: Grava uma matriz como imagem(nos formatos suportados, ver ajuda da função) Sintaxe: imwrite(matriz,ficheiro) imwrite(matriz,ficheiro,formato) >> B(:,:,1:2) = 0; >> image(b) >> imwrite(b,'koala_azul.jpg') Computação e Programação 2015 / 2016 9 Trabalhar com o PlotEditMode Botão para modo de edição Adicionar legenda, texto e setas Barra de ferramentas de edição Clickpara seleccionar objecto Posicionar rótulos e outros objectos por click e arrasto Clickno botão direito do rato para aceder às propriedades do objecto Computação e Programação 2015 / 2016 10 5
Trabalhar com o Ploting Tools Subplots Activar as Ploting Tools Figura Figure Pallete Plot Browser Adicionar dados Property Editor Property Inspector Computação e Programação 2015 / 2016 11 Formatação avançada de gráficos >> x = -pi:pi/10:pi; >> y = tan(sin(x)) - sin(tan(x)); >> plot(x,y,'rs--','linewidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10) Computação e Programação 2015 / 2016 12 6
Implementação de Algoritmos em MATLAB Sequenciação Selecção Repetição Módulos Ficheiros script Estruturas: if if else if elseif switch case Estruturas: for while Funções definidas pelo programador Computação e Programação 2015 / 2016 13 Alinhamento da AT 7 Matrizes como imagens Funções definidas pelo programador: Âmbito das variáveis Computação e Programação 2015 / 2016 14 7
Funções Há dois aspectos distintos a ter em conta nas funções: A sua definição: onde é criado um nome para a função, definidos os seus argumentos de entrada e de saída, e descrito na forma de código fonte o processo de computação que essa função terá que executar A sua aplicação (ou chamada à função): em que o processo de computação é realizado para valores particulares dos argumentos de entrada, produzindo um resultado concreto. Computação e Programação 2015 / 2016 15 Definição de Funções Uma funçãoé uma sequência de instruções de MATLAB armazenada num ficheiro de texto (um M-file, i.e., um ficheiro de texto com extensão.m) Uma funçãodestingue-se de um scriptessencialmente de três formas 1. O código fonte começa com um cabeçalho específico 2. O âmbito das variáveis não é partilhado com o Ambiente de Trabalho 3. A chamada da função envolve, em geral, a passagem de argumentos Computação e Programação 2015 / 2016 16 8
Cabeçalho da função Descrição: declaração de um M-file como função Sintaxe: function [lista_out] = nome_funcao(lista_in) onde lista_out: lista de argumentos de saída separados por vírgulas lista_in: lista de argumentos de entrada separados por vírgulas NOTA: o nome do M-filedeve ser igual ao nome da função, acrescido da extensão.m Computação e Programação 2015 / 2016 17 Definição e aplicação Definição da função >> minha_area = calcarea(0.2) minha_area = 0.1257 >> meu_raio = 1.5; Chamadas à função >> minha_area = calcarea(meu_raio) minha_area = 7.0686 Computação e Programação 2015 / 2016 18 9
Alinhamento da AT 7 Matrizes como imagens Funções definidas pelo programador: Âmbito das variáveis Computação e Programação 2015 / 2016 19 Variáveis Cada função tem um ambiente próprio para as suas variáveis, ao contrário do script As trocas de informação com o exterior fazem-se através dos argumentos da função No MATLAB as variáveis locais da função são criadas quando esta é iniciada, e destruídas quando esta termina* * - com a excepção das variáveis persistentes e globais Ambiente de trabalho (Base) Função Argumentos de Entrada Argumentos de Saída Script Computação e Programação 2015 / 2016 20 10
Execução da função no MATLAB Chamada à função No ambiente de trabalho base não são criadas as variáveis area e radpertencentes à função, apenas é criada a variável ans(dado que não houve atribuição do resultado). Computação e Programação 2015 / 2016 21 Scripts como drivers para funções Computação e Programação 2015 / 2016 22 11
Execução no MATLAB Execução do script São criadas no ambiente de trabalho base as variáveis areae radiusdo script, mas não as da função Computação e Programação 2015 / 2016 23 Âmbito das variáveis O âmbito de uma variável(scope) é o ambiente de trabalho em que ela é válida. (informalmente pode dizer-se que é a parte do nosso programa, ou do ambiente do Matlab, onde essa variável está definida, é reconhecida, e pode ser utilizada) O ambiente de trabalho da CommandWindowé chamado Ambiente de trabalho Base (Base Workspace) e é partilhado com os scripts. Cadafunção tem o seu ambiente de trabalho próprio e todas as suas variáveis estão definidas apenas nesse ambiente. Computação e Programação 2015 / 2016 24 12
Âmbito das variáveis Regras de âmbito de uma variável: 1. Se uma variável for criada através da Command Window pertencerá ao Ambiente de trabalho Base, e pode ser utilizada na Command Window e em qualquer script. Command Window Script (ex: programa.m) Função (ex: func.m) e= 2; Computação e Programação 2015 / 2016 25 Âmbito das variáveis Regras de âmbito de uma variável: 2. Se uma variável for criada dentro de um scriptserá partilhada com o Ambiente de trabalho Base, e pode ser utilizada a partir do ponto em que foi definida no código fonte do script, na Command Window e em qualquer outro script. Command Window Script(ex: programa.m) Função (ex: func.m) a= 12; Computação e Programação 2015 / 2016 26 13
Conceito de âmbito (scope) Regras de âmbito de uma variável: 3. Se uma variável for definida como argumento de entrada ou de saídade uma função o seu ambiente tem o mesmo nome da função, e pode ser utilizada apenas no código fonte dessa função em qualquer parte do código. Command Window Script(ex: programa.m) Função (ex: func.m) function... = func (c) Computação e Programação 2015 / 2016 27 Conceito de âmbito (scope) Regras de âmbito de uma variável: 4. Se uma variável for criada dentro de uma função o seu ambiente tem o mesmo nome da função, e pode ser utilizada apenas no código fonte dessa função e apenas a partir do ponto em que foi definida. Command Window Script(ex: programa.m) Função (ex: func.m) function d = func (...) d = 1; Computação e Programação 2015 / 2016 28 14
Exemplo: função desigualdade Computação e Programação 2015 / 2016 29 Definição da função desigualdade Cabeçalho Comentários Ajuda da função que aparece na Command Window quando é usado o comando help Corpo da função Código fonte da função Computação e Programação 2015 / 2016 30 15
Definição da função desigualdade Argumento de saída Palavra reservada Nome da função Argumentos de entrada Cabeçalho Computação e Programação 2015 / 2016 31 Driver para a função desigualdade Computação e Programação 2015 / 2016 32 16
Visualização do âmbito das variáveis NOTA: colocar um breakpoint na função desigualdade.m e correr o script driverdesigualdade.m(quando em modo debugcarregar na tecla F10 para avançar a execução) Computação e Programação 2015 / 2016 33 Âmbito Base do MATLAB Base MATLAB Script: driverdesigualdade.m Função: desigualdade.m Âmbito: Base (Ambiente de trabalho do MATLAB) Variáveis: V Vmax Vmin Computação e Programação 2015 / 2016 34 17
Âmbito do script driverdesigualdade Base MATLAB Script: driverdesigualdade.m Função: desigualdade.m Âmbito: driverdesigualdade Variáveis: V Vmax Vmin Computação e Programação 2015 / 2016 35 Âmbito da função desigualdade MATLAB Script: driverdesigualdade.m Função: desigualdade.m Âmbito: desigualdade Variáveis: X Xmax Xmin Computação e Programação 2015 / 2016 36 18
Exemplo de execução >> driverdesigualdade Introduza o valor de V: 10 Introduza o valor de Vmin: 1 Introduza o valor de Vmax: 9 10.00 não pertence a [1.00,9.00] >> Computação e Programação 2015 / 2016 37 Boas práticas de Programação Usar o mesmo nome para a função e para o ficheiro onde ela esta guardada (é um erro comum não o fazer!) Se os argumentos forem passados à função na sua chamada, não substituir estes valores por input dentro da função As funções que executam cálculos normalmente não os apresentam ao utilizador. Crie funções distintas estas tarefas. Evitar criar funções demasiados longas (mais de uma página) Faça a depuração de erros lógicos das funções uma-a-uma de forma independente do programa principal. Integre as funções no programa só depois de garantir que estão a realizar a sua tarefa correctamente. Computação e Programação 2015 / 2016 38 19
Referências Capítulo 6 de Stormy Attaway (2012), Matlab: A Practical Introduction to Programming and Problem Solving, Elsevier. GettingstartedwithMATLAB: http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/getstart.pdf As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva Computação e Programação 2015 / 2016 39 20