Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
1 UNIVERSIDADE FEDERAL DE SÃO JOÃO DEL-REI – UFSJ DEPEB – DEPARTAMENTO DE ENGENHARIA DE BIOSSISTEMAS MATLAB Programação de Computadores e Aplicações do Cálculo Vetorial em Engenharia de Alimentos Keite FRANÇA 2010 i ÍNDICE APRESENTAÇÃO .............................................................................................................................. III I INTRODUÇÃO AO MATLAB ........................................................................................................... 1 1 – AMBIENTE DE TRABALHO ......................................................................................................... 2 2 – EDITOR DE LINHAS DE COMANDO .......................................................................................... 5 3 – ACESSOS AO “HELP” .................................................................................................................. 7 4 - OPERAÇÕES BÁSICAS E EXPRESSÕES LÓGICAS ............................................................. 10 5 – CONSTANTES E VARIÁVEIS..................................................................................................... 12 6 – COMENTÁRIOS E PONTUAÇÕES ............................................................................................ 15 7 – FUNÇÕES MATEMÁTICAS ........................................................................................................ 16 8 – ORDENS DOS CÁLCULOS ........................................................................................................ 20 9 – COMANDOS DE ENTRADA E SAÍDA ....................................................................................... 21 ENTRADA ........................................................................................................................................... 21 SAÍDA................................................................................................................................................. 21 10 – CONTROLADORES DE FLUXO .............................................................................................. 22 ESTRUTURAS CONDICIONAIS .............................................................................................................. 22 ESTRUTURA IF-END ............................................................................................................................ 22 INSTRUÇÃO ELSE ............................................................................................................................... 23 SWITCH CASE ..................................................................................................................................... 25 LOOP FOR .......................................................................................................................................... 25 COMANDO BREAK ............................................................................................................................... 26 LOOPS WHILE ..................................................................................................................................... 26 11 – MANIPULAÇÕES DE MATRIZES E VETORES ..................................................................... 27 OPERAÇÕES ELEMENTO A ELEMENTO ................................................................................................ 28 CONSTRUÇÃO DE VETORES ................................................................................................................. 29 ENDEREÇAMENTO DE VETORES.......................................................................................................... 31 OPERAÇÕES ENTRE VETORES.............................................................................................................. 32 FUNÇÕES COM MATRIZES ................................................................................................................... 33 SUBMATRIZES .................................................................................................................................... 33 12 – GRÁFICOS NO MATLAB .......................................................................................................... 35 GRÁFICOS BIDIMENSIONAIS ............................................................................................................... 35 ESTILOS DE LINHA E SÍMBOLO ........................................................................................................... 38 ESCALA .............................................................................................................................................. 39 SUBPLOT ............................................................................................................................................ 39 CONTROLE DE TELA ........................................................................................................................... 40 GRÁFICOS TRIDIMENSIONAIS E CONTORNOS ...................................................................................... 40 ANOTAÇÕES NO GRÁFICO ................................................................................................................... 42 13 – CARACTERES E STRINGS ...................................................................................................... 43 FUNÇÕES DE CONVERSÃO ................................................................................................................... 43 14 – ARQUIVOS .................................................................................................................................. 44 OS ARQUIVOS MAT ............................................................................................................................ 44 ARQUIVOS ASCII ............................................................................................................................... 44 FORMATOS DE ARQUIVOS SUPORTADOS PARA IMPORTAR E EXPORTAR ................................................. 45 II CRIAÇÃO DE INTERFACES GRÁFICAS ................................................................................... 47 15 – O QUE É UMA GUI? .................................................................................................................. 48 ii OS MODOS DE CRIAÇÃO ...................................................................................................................... 49 16 – OS COMPONENTES BÁSICOS DE UMA GUI ....................................................................... 50 O INSPETOR DE PROPRIEDADES .......................................................................................................... 52 17 – ROTEIRO PARA A CONSTRUÇÃO DE UMA GUI ................................................................ 56 CRIANDO UMA GUI ............................................................................................................................ 56 PROGRAMANDO A GUI ....................................................................................................................... 59 18 – CRIANDO E MODIFICANDO MENUS ..................................................................................... 60 A CRIAÇÃO DE MENUS E SUBMENUS NO GUIDE ................................................................................... 60 PROPRIEDADES DOS MENUS................................................................................................................ 61 19 – CONFIGURANDO E EXPLORANDO OS EVENTOS E AS CHAMADAS DE RETORNO DA GUI ................................................................................................................................................. 64 COMANDO GET E SET .......................................................................................................................... 64 EDIT TEXT ......................................................................................................................................... 65 RADIOBUTTON ................................................................................................................................... 65 POP-UP MENU .................................................................................................................................... 65 20 – ANOTAÇÕES .............................................................................................................................. 66 iii APRESENTAÇÃO O MATLAB é um software criado no fim dos anos 1970 por Cleve Moler (um dos fundadores da MathWorks, Inc.), o qual é destinado à análise e modelagem de sistemas e algoritmos. Devido à sua praticidade, essa poderosa ferramenta computacional vem sendo utilizada tanto em universidades quanto em empresas do mundo todo. Em relação a uma linguagem de programação tradicional (como C/C++ ou Fortran), o desenvolvimento de algoritmos no ambiente MATLAB é sem dúvida mais fácil e rápido. A desvantagem é que utilizando uma linguagem de programação tradicional é possível desenvolver algoritmos mais eficientes. O MATLAB (Matrix Laboratory) pode ser definido como um ambiente de computação numérica baseado em matrizes. Dentre as suas principais características, destacam-se: gráficos e visualização de dados; linguagem de programação de alto nível; toolboxes, que oferecem funcionalidades específicas por área de aplicação, dentre outros. O objetivo deste curso é fornecer a base necessária para desenvolver programas no ambiente MATLAB, e, desenvolver as habilidades dos alunos em construir softwares para resolver problemas em Engenharia de Alimentos usando o Cálculo Vetorial. 1 _________________________ I INTRODUÇÃO AO MATLAB ____________________________ 2 1 – AMBIENTE DE TRABALHO Quando iniciamos o MATLAB aparece-nos uma janela (Figura 1), designada por Command window, através da qual iremos fazer a interação com o programa. Nela aparece, além de uma barra de menus, o símbolo » (prompt), que nos indica que o MATLAB está pronto para executar as operações e instruções por nós introduzidas. Commands to get started: intro, demo, help help Commands for more information: help, whatsnew, info, subscribe » Figura 1: Janela inicial do MATLAB, designada como Command window. Existem outras áreas que podem ser suprimidas, mas é interessante deixa-las a mostra para um maior controle das informações geradas pelo sistema. Na Figura 2 é possível observar mais 3 áreas: O Current Directory (diretório atual), nesta janela pode-se observar o conteúdo da pasta atual (ou diretório atual). É um bom procedimento que os arquivos 3 vistos nesta janela, sejam os que se pretende utilizar. Caso contrário, o MATLAB não reconhecerá os comandos por não estar direcionado ao diretório atual. Buffer (Workspace), janela onde são apresentadas as variáveis criadas, seu tamanho, tipo e conteúdo; Command History, nesta são registrados todos os comandos ao serem digitados no Workspace. Figura 2: Outras áreas de controle do MATLAB. Pode ser observado também, que na parte superior da janela do MATLAB já aparece o Current Directory. No Workspace pode-se entrar com os comandos diretamente. Qualquer comando do MATLAB pode ser inserido neste lugar (Figura 3). Figura 3: Workspace e prompt de comando. 4 O funcionamento do prompt de comando é semelhante ao do promtp de comando do sistema. Vários comandos utilizados permanecem no MATLAB, e podem ser bastante úteis durante a programação no MATLAB (Tabela 1). Tabela 1: Comandos essenciais via prompt. 5 2 – EDITOR DE LINHAS DE COMANDO As teclas com setas podem ser usadas para se encontrar comandos dados anteriormente, para execução novamente ou sua reedição. Por exemplo, suponha que você entre com: » sen(0) Ao apertar a tecla Enter , o MATLAB responde com uma mensagem de erro: ??? Undefined function or variable sen. Isto acontece porque para se determinar o seno de um ângulo é necessário digitar em inglês o comando sin. Ao invés de reescrever a linha inteira, simplesmente pressione a tecla "seta para cima". O comando errado retorna, e você pode, então, mover o cursor para trás usando a tecla "seta para esquerda" ou o ponto de inserção com o "mouse" ao lugar apropriado para inserir a letra i: » sin(0) ans = 0 Note que o MATLAB chamou o resultado de ans (answer = resposta). Além das teclas com setas, podem-se usar outras teclas para reeditar a linha de comando. A seguir é dada uma breve descrição destas teclas: Tabela 2: Teclas de Edição 6 Exemplo 1: Digite: » clc (este comando apaga a tela) Exemplo 2: Digite: » 258/652 , 56*48 Nota: A vírgula permite que mais de um comando seja introduzido de uma só vez. ATENÇÃO: O MATLAB executa os comandos da esquerda para a direita e apresenta os resultados, um acima do outro, na ordem de execução!!! 7 3 – ACESSOS AO “HELP” No MATLAB, pode-se obter ajuda sobre qualquer comando ou função. Isto pode ser feito basicamente de três formas: interativamente através do menu de barras, através do comando help ou do comando lookfor. Digitando-se simplesmente o comando help: » help O MATLAB mostra uma listagem de todos os pacotes disponíveis. Ajuda sobre um pacote específico ou sobre um comando ou função específica é obtida com o comando help <tópico>, onde tópico pode ser o nome de um pacote, de um comando ou função. Por exemplo: » help sin SIN Sine of argument in radians. SIN(X) is the sine of the elements of X. See also asin, sind. Overloaded methods: codistributed/sin Reference page in Help browser doc sin O comando help é a maneira mais simples de se obter auxílio no caso do usuário conhecer o tópico em que ele quer assistência. Note que no exemplo mostrado a função SIN está escrita em letras maiúsculas somente para destacar. Deve-se lembrar que todos os comandos do MATLAB devem ser escritos em letras minúsculas. Portanto, para utilizar esta função deve-se digitar: » sin (x) O Comando lookfor provê assistência pela procura através de todas as primeiras linhas dos tópicos de auxílio do MATLAB e retornando aquelas que contenham a palavra-chave especificada. O interessante deste comando é que a palavra chave não 8 precisa ser um comando do MATLAB. Sua sintaxe é lookfor <palavra-chave>, onde palavra-chave é a cadeia de caracteres que será procurada nos comandos do MATLAB. Por exemplo, para se obtiver informações sobre funções para se resolver integral: >> lookfor integral ellipke - Complete elliptic integral. expint - Exponential integral function. dblquad - Numerically evaluate double integral over a rectangle. quad - Numerically evaluate integral, adaptive Simpson quadrature. quad2d - Numerically evaluate double integral over a planar region. quadgk - Numerically evaluate integral, adaptive Gauss-Kronrod quadrature. quadl - Numerically evaluate integral, adaptive Lobatto quadrature. triplequad - Numerically evaluate triple integral. assema - Assembles area integral contributions in a PDE problem. ellipk - Complete elliptic integral of first kind. cosint - Cosine integral function. sinint - Sine integral function. Apesar da palavra integral não ser um comando do MATLAB, ela foi encontrada na descrição de 12 comandos. Tendo esta informação, o comando help pode ser usado para exibir informações a respeito de um comando específico, como por exemplo: » help triplequad TRIPLEQUAD Numerically evaluate triple integral. Q = TRIPLEQUAD(FUN,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX) evaluates the triple integral of FUN(X,Y,Z) over the three dimensional rectangular region XMIN <= X <= XMAX, YMIN <= Y <= YMAX, ZMIN <= Z <= ZMAX. FUN is a function handle. The function V=FUN(X,Y,Z) should accept a vector X and scalar Y and Z and return a vector V of values of the integrand. Q = TRIPLEQUAD(FUN,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,TOL) uses a tolerance TOL instead of the default, which is 1.e-6. 9 Q = TRIPLEQUAD(FUN,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,TOL,@QUADL) uses quadrature function QUADL instead of the default QUAD. Q = TRIPLEQUAD(FUN,XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,TOL,MYQUADF) uses your own quadrature function MYQUADF instead of QUAD. MYQUADF is a function handle. MYQUADF should have the same calling sequence as QUAD and QUADL. Use [ ] as a placeholder to obtain the default value of TOL. QUADGK is not supported directly as a quadrature function for TRIPLEQUAD, but it can be called from MYQUADF. Example: Integrate over the region 0 <= x <= pi, 0 <= y <= 1, -1 <= z <= 1: Q = triplequad(@(x,y,z) (y*sin(x)+z*cos(x)), 0, pi, 0, 1, -1, 1) or Q = triplequad(@integrnd, 0, pi, 0, 1, -1, 1) where integrnd is the M-file function: %----------------------------% function f = integrnd(x, y, z) f = y*sin(x)+z*cos(x); %----------------------------% Note the integrand can be evaluated with a vector x and scalars y and z. Class support for inputs XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX and the output of FUN: float: double, single See also quad, quadl, quadgk, quad2d, dblquad, function_handle. Reference page in Help browser doc triplequad 10 4 - OPERAÇÕES BÁSICAS E EXPRESSÕES LÓGICAS O MATLAB oferece as seguintes operações aritméticas básicas: Tabela 3: Operações aritméticas A ordem nas expressões segue a ordem matemática - potência, seguida da multiplicação e da divisão, que por sua vez são seguidas pelas operações de adição e subtração. Parêntesis podem ser usados para alterar esta ordem. Neste caso, os parêntesis mais internos são avaliados antes dos mais externos. Uma expressão se diz lógica se os operadores são lógicos e os operandos são relações e/ou variáveis do tipo lógico. Os operadores relacionais realizam comparações entre valores do mesmo tipo. Os operadores relacionais utilizados pelo MATLAB são: Tabela 4: Operadores relacionais. Note que (=) é usado para atribuição de um valor a uma variável, enquanto que (= =) é usado para comparação de igualdade. No MATLAB os operadores relacionais podem ser usados para comparar vetores de mesmo tamanho ou escalares. O resultado de uma relação ou de uma expressão lógica é verdadeiro ou falso; contudo, no MATLAB o resultado é numérico, sendo que 1 significa verdadeiro e 0 significa falso. Por exemplo: 11 >> 1 > 6 >> 2= = 2 ans = ans = 0 1 Os operadores lógicos permitem a combinação ou negação das relações lógicas. Os operadores lógicos do MATLAB são: Tabela 5: Operações lógicas. A prioridade dos operadores lógicos, do mais alto ao mais baixo, é: não, e, e ou. Podemos combinar expressões usando os operadores lógicos do MATLAB. Os operadores são representados pelos seguintes símbolos. Quando duas expressões são unidas por e ; o resultado será 1 (verdadeiro) se ambas expressões forem verdadeiras, para expressões unidas por ou, o resultado será 1 (verdadeiro) se uma ou ambas expressões forem verdadeiras. Assim, para a seguinte expressão lógica: a < b & b < c O resultado será 1 (verdadeiro) somente se a < b < c; e falso (0) para todos resultados diferentes. Além disso, a operação só será válida se as matrizes resultantes (a < b e b < c) tiverem o mesmo tamanho. Uma expressão pode conter vários operadores lógicos, como a expressão abaixo: ~ (b = = c | b = = 5.5) O MATLAB analisaria primeiro, as expressões b = = c e b = = 5.5 (obviamente, por causa do uso de parênteses). O resultado seria inversamente pelo operador não. Assim, suponha b = = 3 e c = = 5. Nenhuma das expressões é verdadeira, logo, a expressão b = = c | b = = 5.5 é falsa. Aplicando o operador não, o valor da expressão é alterado e a mesma torna-se verdadeira. 12 5 – CONSTANTES E VARIÁVEIS O MATLAB faz cálculos simples e científicos como uma calculadora. Para tal, os comandos devem ser digitados diretamente no prompt (>>) do MATLAB, já que este se trata de um software interativo. Por exemplo: >> 3*25 + 5*12 ans = 135 Observe que no MATLAB a multiplicação tem precedência sobre a adição. Uma constante numérica no MATLAB é formada por uma sequência de dígitos que pode estar ou não precedida de um sinal positivo (+) ou negativo (-) e pode conter um ponto decimal (.). Esta sequência pode terminar ou não por uma das letras e, E, d ou D, seguida de outra sequência de dígitos precedida ou não de um sinal de (+) ou de (-). Esta segunda sequência é a potência de 10 pela qual a primeira sequência deve ser multiplicada. Por exemplo: >> 5.67e-1 significa 0,567 O formato em que uma constante numérica é mostrada no MATLAB segue, como opção default, os seguintes critérios: se um resultado é inteiro, o MATLAB mostra o número como inteiro; quando o resultado é real, o MATLAB mostra o número com 4 dígitos à direita do ponto decimal; se os dígitos do resultado estiverem fora desta faixa, o MATLAB mostra o resultado usando a notação científica. Tabela 6: Formatos Numéricos 13 Alternativamente, você pode usar variáveis para armazenar informação. Por exemplo: >> q1=3, p1=25, q2=5, p2=12 q1 = 3 p1 = 25 q2 = 5 p2 = 12 >> total = q1*p1+q2*p2 total = 135 Primeiro, criamos quatro variáveis, q1, p1, q2 e p2, atribuindo a elas os seus valores respectivos. Observe que o sinal de igual (=) aqui significa atribuição. O que estiver à direita do sinal de igual é “colocado” na variável que estiver à esquerda. Finalmente, criamos uma variável chamada total que recebeu o total da compra. O nome de uma variável deve começar sempre por uma letra. Nunca utilize caracteres especiais como # { } [ ] ( ) . , ; : ! ? % / + - * =. Procure dar nomes pequenos e que faça algum tipo de associação com o valor que está sendo armazenado (por exemplo, se for velocidade, a variável pode se chamar V). O sinal de igual (=) significa atribuição. O que estiver à direita do sinal de igual é “colocado” na variável que estiver à esquerda. ATENÇÃO: No MATLAB as variáveis podem ser redefinidas a qualquer momento, bastando para isso atribuir-lhes um novo valor. Os nomes das variáveis devem consistir de uma única palavra, conforme as regras expressas na Tabela 7: 14 Tabela 7: Regras para construção de variáveis Alguns nomes são usados para variáveis predefinidas, ou seja, são variáveis especiais do MATLAB. Estas são: Tabela 8: Variáveis do MATLAB Dica: Para saber se o nome da variável é um comando interno do MATLAB, basta dar um >>help [nome da variável]. Caso não seja, o MATLAB retorna uma mensagem dizendo que a variável [nome] não foi encontrada. 15 6 – COMENTÁRIOS E PONTUAÇÕES O sinal de percentagem (%) é usado para anteceder comentários que explicam os comandos MATLAB. Note que ao digitar um comentário a cor muda automaticamente para verde. % ====================================== % Este programa calcula e imprime % distância, em linha reta, entre dois pontos. p1 = [1,5]; % ponto 1 inicial; p2 = [4,7]; % ponto2 inicial; d = sqrt (sum ((p2-p1).^2)) % calcular distância; % ====================================== A Tabela 9 resume os comentários e pontuações utilizados no MATLAB. Tabela 9: Comentário e pontuações » q1 = 3, p1 = 25, ... q2 = 5; p2 = 12; % Exemplo de uso da vírgula, ponto e vírgula e três pontos. q1 = 3 p1 = 25 Os espaços em branco entre os operadores (aritméticos, lógicos, relacionais) e as variáveis (ou constantes) são opcionais. O mesmo para vale para a vírgula, o ponto e vírgula e o símbolo de porcentagem. No entanto, o espaço em branco entre a última variável (ou constante) de uma linha e os três pontos é obrigatório. 16 7 – FUNÇÕES MATEMÁTICAS O MATLAB tem uma série de funções científicas pré-definidas. A palavra função no MATLAB tem um significado diferente daquele que tem na Matemática. Aqui, função é um comando, que pode ter alguns argumentos de entrada e alguns de saída. Algumas dessas funções são intrínsecas, ou seja, não podem ser alteradas pelo usuário. Outras funções estão disponíveis em uma biblioteca externa distribuídas com o programa original (MATLAB TOOLBOX), que são na realidade arquivos com a extensão “.m” criados a partir das funções intrínsecas. A biblioteca externa (MATLAB TOOLBOX) pode ser constantemente atualizada à medida que novas aplicações são desenvolvidas. As funções do MATLAB, intrínsecas ou arquivos ".m", podem ser utilizadas apenas no ambiente MATLAB. As categorias gerais de funções matemáticas disponíveis no MATLAB incluem: Matemática elementar; Funções especiais; Matrizes elementares e especiais; Decomposição e fatorização de matrizes; Análise de dados; Polinômios; Solução de equações diferenciais; Equações não-lineares e otimização; Integração numérica; Processamento de sinais. A maioria das funções pode ser usada da mesma forma que seria escrita matematicamente. Por exemplo: >> x = sqrt(2)/2 x = 0.7071 17 >> y = acos(x) y = 0.7854 >> y_graus = y * 180/pi y_graus = 45.0000 As funções matemáticas elementares incluem funções para executar um número de cálculos comuns como o cálculo de valor absoluto e a raiz quadrada. Além disso, também incluímos um grupo de funções usadas em arredondamentos. Mostraremos a seguir uma lista destas funções com uma breve descrição, como pode ser visto na Tabela 10: Tabela 10: Algumas funções matemáticas NOTA: Deve-se tomar cuidado para não fazer confusão ao utilizar as funções logarítmicas. Em textos, a notação usual para o logaritmo na base natural é ln(x) – a função correspondente no MATLAB é log(x) - enquanto o logaritmo na base 10 é normalmente representado por log(x) – no MATLAB log10(x). Em adição, o MATLAB apresenta uma estrutura que nos permite criar funções sob a forma de arquivos M. Como exemplo, considere uma função que esteja em um arquivo-M denominado circum.m: % ============================================== function c = circum ( r) % CIRCUM Circunferência de um círculo de raio r. % Para matrizes, CIRCUM ( r ) retorna uma matriz 18 % que contêm as circunferências de círculos com raios iguais % aos valores no vetor original. c = pi*2*r; % =============================================== Assim, se o prompt do MATLAB apresentar: r = [0 1.4 pi]; a = circum (r ); Os elementos da matriz A corresponderão as circunferências de círculos de raios 0, 1,4 e p, respectivamente. Para esta função também são válidos os comandos: a = 5.6; disp (circum(a)) c = [1.2 3; 5 2.3]; circum (c) ; Assim, circum passa a ser uma função MATLAB assim como ones, sin e outras. A parte comentada no arquivo circum.m é usada quando digitarmos help circum no prompt do MATLAB. Há algumas regras para escrever uma função de arquivo M: A função deve começar com uma linha contendo a palavra function, seguida pelo argumento de saída, um sinal de igual, e o nome da função. Os argumentos para a função devem estar entre parênteses. Esta linha define os argumentos de entrada e saída; As primeiras linhas devem ser comentários porque serão exibidas quando o menu help for usado juntamente com o nome da função , como help circum; A única informação retornada da função é contida nos argumentos de saída, que são, obviamente, matrizes. Verificar se a função inclui um comando que assegure um valor ao argumento de saída. Uma função que possui mais de uma variável de saída, como por exemplo: function [ dist, vel, acel] = motion (x) 19 Deve apresentar as variáveis de saída dentro de colchetes. Além disso, todos os valores devem ser calculados dentro da função. Uma função que tenha múltiplos argumentos de entrada deve listar os argumentos no comando function, como mostrado no exemplo a seguir, que tem dois argumentos de entrada: function error = mse (w,d) As variáveis especiais nargin e nargout podem ser usadas para determinar o número de argumentos de entrada passado para uma função e o número de argumentos de saída solicitados quando a função é chamada. 20 8 – ORDENS DOS CÁLCULOS Os cálculos aritméticos são realizados sempre segundo a seguinte ordem: 1) Operações dentro dos parênteses (interno → externo); 2) Funções; 3) Potenciação; 4) Multiplicação e divisão; 5) Soma e subtração. Operadores de mesma hierarquia são efetuados da esquerda para a direita. Por exemplo, utilizando o MATLAB, determine o valor da expressão: 124 245 )10ln(4 )8,08,9( Esta expressão matemática é escrita na forma adequada para o MATLAB da seguinte forma: » ((9.8-0.8) / (4-log(10)))^(245/124) e o seu resultado é igual a 27.0011 . Observe que as vírgulas nas expressões para o MATLAB são representadas por pontos, pois ele utiliza a forma inglesa de representar os números decimais. Exemplos: a) 47*45,23 256433 b) ))2(ln( 3 234483( 13321,3 sen Os resultados são: a) 0.1606; b) 7.0567 e+003. ATENÇÃO: O resultado 0.1606 na realidade representa 0,1606. Observe também que a notação científica utilizada pelo MATLAB não usa o símbolo x 10exp comum em textos. Assim: 1,2 x 106 ≡ 1.2 e+006 = 1.2 e 6 no MATLAB, e, 9,9 x 10-12 ≡ 9.9 e-012 = 9.9 e-12 no MATLAB. 21 9 – COMANDOS DE ENTRADA E SAÍDA Os comandos de entrada e saída são responsáveis pela comunicação de dados entre o usuário e o espaço de trabalho do MATLAB. Ao trabalhar na janela de controle, a definição de um valor para uma variável e a sua inserção no espaço de trabalho é feita pelo usuário, utilizando o comando de atribuição. Na elaboração de programas, o programador define a utilização de uma determinada variável, e pode conferir valores para ela através de comando de atribuição ou através do comando de entrada input. Ao rodar um programa, quando encontra este comando, o computador interrompe temporariamente a execução e apresenta uma mensagem na janela de comando solicitando que o usuário entre com o valor da variável. Após a inserção do valor, o programa volta a rodar automaticamente. Entrada A sintaxe do comando input é a seguinte: Nome da variável = input ('mensagem') O resultado da inserção deste comando é o aparecimento na janela de comando do texto. O usuário do programa irá inserir a informação solicitada. Saída Comando disp Caso, em algum momento ao longo de um programa, seja necessário apresentar uma mensagem na tela, utilize o comando disp ('mensagem'). Note que, de forma distinta do que ocorre com o comando input, o comando disp não para a execução do programa, por exemplo: » Casa = „sim‟; » w = input ('Entre com o valor da variável w: '); » disp ('Valores das variáveis Casa e w '), Casa, w 22 10 – CONTROLADORES DE FLUXO Estruturas Condicionais Uma estrutura condicional permite a escolha do grupo de comandos a serem executados quando uma dada condição for satisfeita ou não, possibilitando desta forma alterar o fluxo natural de comandos. Esta condição é representada por uma expressão lógica. Estrutura if-end A estrutura condicional mais simples do MATLAB é: if <condição> <sequência de comandos> end Se o resultado da expressão lógica <condição> for 1 ( verdadeiro ) então a lista de <comandos> será executada. Se o resultado for 0 ( falso ) os <comandos > não serão executados. Como exemplo, temos: count=0; sum=0; a=0; if a < 50 count = count +1; sum = sum + a; a = a + 1; end Suponha que a seja um escalar. Se a < 50, então count é incrementada por 1 e a é adicionada à sum; caso contrário, os comandos não serão executados. Se a não for um escalar, então count é incrementado por 1 e a é adicionada à sum somente se cada elemento em a for menor que 50. 23 Instrução Else Esta instrução permite que executemos um comando se a expressão lógica é verdadeira e um diferente comando se a expressão é falsa. A forma geral do comando if combinada à instrução else é mostrada a seguir: if expressão grupo de comandos A else grupo de comandos B end Se a expressão lógica é verdadeira, então o grupo de comandos A é executado. Caso contrário, o grupo de comandos B é executado. Como exemplo, suponha que um táxi esteja passando entre dois edifícios. Considere que a variável d contenha a distância do veículo ao edifício mais próximo. Se o carro estiver a 10 metros do edifício, a velocidade é calculada usando a seguinte equação: velocidade = 0,425 + 0,00175d 2 ; Se o táxi estiver a uma distância maior que 10 metros, use a equação a seguir: velocidade = 0,625 + 0,12d – 0,00025d2 Calculamos a velocidade correta com estes comandos: if d < = 10 velocidade = 0.425 + 0.00175*d^2; else velocidade = 0.625 + 0.12d – 0.00025*d^2; end Quando há muitas alternativas a serem executadas, pode ser mais difícil determinar quais expressões lógicas deva ser verdadeiro (ou falsa) para executar cada 24 grupo de comandos. Neste caso, a cláusula elseif é frequentemente usada para simplificar o programa lógico: if expressão 1 grupo de comandos A elseif expressão 2 grupo de comandos B elseif expressão 3 grupo de comandos C end Se a expressão 1 for verdadeira, somente o grupo de comandos A é executado. Se a expressão 1 for falsa e a expressão 2 for verdadeira, então somente o segundo grupo de comandos é executado. Se as expressões 1 e 2 forem falsas e a expressão 3 for verdadeira, então somente o grupo de comandos C é executado. Se mais de uma expressão lógica for verdadeira, a primeira que for verdadeira determina qual grupo de comandos será executado. Se nenhumas das expressões lógicas forem verdadeiras, então nenhum dos comandos dentro da estrutura if é executado. Else e elseif podem ser combinadas dentro de uma estrutura if-else-end, como mostramos a seguir: if expressão 1 grupo de comandos A elseif expressão 2 grupo de comandos B elseif expressão 3 grupo de comandos C else grupo de comandos D end Se nenhuma das expressões lógicas for verdadeira, então o grupo de comandos D é executado. 25 Switch case Teste múltiplo para selecionar um dado corrente, salvando as últimas mudanças na estrutura. - String - célula que contém o conteúdo do menu. - Value - o índice dentro do contexto do menu, o qual contém o dado selecionado. O comando switch tem a estrutura a seguir: str = get(hObject, 'String'); val = get(hObject,'Value'); switch str{val}; case expressão 1 grupo de comandos A case expressão 2 grupo de comandos B case expressão N grupo de comandos N end Loop for O comando for tem a estrutura a seguir: for variável = expressão Grupo de comandos A End Os comandos entre as instruções for e end são executados uma vez para cada coluna da expressão matricial. A cada iteração, a variável é atribuída para a próxima coluna da matriz, isto é, durante o i-ésimo ciclo do loop, temos que variável = expressão matricial (: , i ). As regras para um loop for são: Se o conjunto for uma matriz vazia, o loop não será executado. O fluxo de controle passará ao próximo comando após a instrução end; Se a expressão for um escalar, o loop será executado uma única vez; 26 Se a expressão for um vetor-linha, então a cada iteração a variável conterá o próximo valor do vetor; Se a expressão for uma matriz, então a cada iteração a variável conterá a próxima coluna da matriz; Uma vez completo o loop for a variável contém o último valor usado. Se o operador dois-pontos é usado para definir a expressão matricial usando o formato: for k = início: incremento: limite Comando break O comando break pode ser usado para sair de um loop antes que o mesmo seja completo. É frequentemente usado se houver um erro detectado dentro do loop. Loops while O loop while é uma importante estrutura para repetição de um grupo de comandos quando a condição especificada for verdadeira. O formato geral para esta estrutura de controle é: while expressão grupo de comandos A end Se a expressão for verdadeira, então o grupo de comandos A é executado. Depois de estes comandos serem executados, a condição é novamente questionada. Se for verdadeira, o grupo de comandos é novamente executado. Quando a condição for falsa, o controle pula para o comando posterior ao comando end. As variáveis modificadas no grupo de comandos A devem incluir as variáveis na expressão, ou o valor da expressão nunca será mudado. Se a expressão for verdadeira (ou é um valor não-nulo), o loop torna-se um loop infinito.( Lembre-se que você pode usar ^c para sair um loop infinito). 27 11 – MANIPULAÇÕES DE MATRIZES E VETORES O MATLAB possui a capacidade de realizar operações matriciais do mesmo modo que as operações aritméticas envolvendo escalares. Os símbolos das operações matriciais são mostrados na Tabela 11: Tabela 11: Símbolos das operações matriciais Observações: Divisão Existem dois símbolos para divisão de matrizes no MATLAB "\" e "/". Se A é uma matriz quadrada não singular, então A\B e B/A correspondem respectivamente à multiplicação à esquerda e à direita da matriz B pela inversa da matriz A, ou inv(A)*B e B*inv(A), mas o resultado é obtido diretamente. Em geral, X = A \ B é a solução de A*X = B X = B / A é a solução de X*A = B Exponenciação A expressão A^p eleva A à p-ésima potência e é definida se A é matriz quadrada e p um escalar. Se p é um inteiro maior do que um, a exponenciação é feita como múltiplas multiplicações. Por exemplo: Entre com a seguinte matriz: 35 21 A , agora faça no MATLAB: » A^3 ans = 51 46 115 97 28 Operações Elemento a Elemento Além das operações tradicionais entre matrizes, o MATLAB dispõe do recurso das operações elemento a elemento. Quando aplicamos uma operação elemento a elemento a uma matriz, a operação é aplicada separadamente a cada elemento da matriz. 169 41 2.^, 43 21 AA As principais operações elemento a elemento são mostradas na Tabela 12. Tabela 12: Operações elemento a elemento em uma matriz Observações: i) Para realizarmos uma multiplicação ou divisão elemento a elemento entre duas matrizes, estas devem ter a mesma dimensão (deve existir correspondência entre os elementos). ii) A divisão por elemento entre matrizes é definida de maneira similar à multiplicação por elemento, ou seja, A ./ B= ai j / bi j e A .\ B= ai j \ bi j , onde A e B têm mesma dimensão. iii) A exponenciação por elemento entre matrizes é definida de maneira similar à multiplicação por elemento, ou seja, A .^ B= ai j bi j , onde A e B têm mesma dimensão. De maneira similar, a potenciação por elemento entre uma matriz e um escalar apresenta as seguintes formas: A .^c = ai j c e c .^ A = c ai j . iv) As operações de soma e subtração convencionais já são naturalmente operações elemento a elemento, não necessitando assim de um caractere especial. As funções matemáticas embutidas no MATLAB (seno, exponencial, etc.) quando aplicadas a matrizes geram resultados do tipo elemento a elemento. 29 Construção de vetores Na Tabela 13, tem-se um resumo das diversas formas de se construir um vetor no MATLAB. Tabela 13: Construção de vetores Por exemplo: » x = 1 : 5 gera um vetor linha contendo os números de 1 a 5 com incremento unitário. Produzindo x = 1 2 3 4 5 » X = 1:10.5 X = 1 2 3 4 5 6 7 8 9 10 » z = 6 : -l : l z = 6 5 4 3 2 1 Pode-se, também, gerar vetores usando a função linspace. Por exemplo: 30 » k = linspace (0, l, 6) K = 0 0.2000 0.4000 0.6000 0.8000 1.0000 gera um vetor linearmente espaçado de 0 a 1, contendo 6 elementos. » x = linspace (1, 10.5, 5) x = 1.0000 3.3750 5.7500 8.1250 10.5000 » x=logspace(0, 2, 5) x = 1.0000 3.1623 10.0000 31.6228 100.00 » x = [8 6 8.10 5-6j] x = 8.0000 6.0000 8.1000 5.0000 - 6.0000i Nos exemplos acima os vetores possuem uma linha e várias colunas (vetores linha). Da mesma forma podem existir vetores coluna (uma coluna e várias linhas). Para se criar um vetor coluna elemento por elemento estes devem estar separados por ( ; ). Por exemplo: » v = [1.5; -3.2; 9] v = 1.5000 -3.2000 9.0000 Vetores coluna podem também ser criados a partir dos comandos utilizados anteriormente para criar os vetores linha, acompanhados do símbolo ( ' ), que é o operador de transposição. Exemplos: 31 » y = (1: 0.5 : 3) ' y = 1.0000 1.5000 2.0000 2.5000 3.0000 » z = [0 -2.3 4 sqrt(33)] ' z = 0 -2.3000 4.0000 5.7446 Endereçamento de Vetores No MATLAB, cada um dos elementos de um vetor pode ser acessado por meio de seu índice que identifica cada uma das colunas. Por exemplo: » x = 1 : 10 x = 1 2 3 4 5 6 7 8 9 10 » x(3) % Acessa o terceiro elemento de x ans = 3 » x(5) % Acessa o quinto elemento de x ans = 5 Elementos de um vetor também podem ser acessados em blocos. Por exemplo: 32 » c=linspace(10, 40, 7) c = 10 15 20 25 30 35 40 » c(3 : 5) % terceiro a quinto elemento de c ans = 20 25 30 » (5 : -2 : 1) % quinto, terceiro e primeiro elementos de c ans = 30 20 10 O endereçamento indireto também é possível, permitindo referenciar os elementos em qualquer ordem: » c([4 1]) % quarto e primeiro elementos ans = 25 10 Operações entre vetores As operações básicas entre vetores só são definidas quando estes tiverem o mesmo tamanho e orientação (linha ou coluna). Estas operações são mostradas na Tabela 14. Tabela 14: Operações básicas com vetores 33 Funções com matrizes O MATLAB possui algumas funções que se aplicam a matrizes como, por exemplo, as funções size (fornece o número de linhas e colunas de uma matriz) e length (fornece o maior valor entre o número de linhas e colunas). O MATLAB tem também funções que se aplicam individualmente a cada coluna da matriz produzindo um vetor linha com os elementos correspondentes ao resultado de cada coluna. Se a função for aplicada à transposta de da matriz, os resultados serão relativos a cada linha da matriz. Se o argumento da função for um vetor, o resultado será um escalar. Algumas dessas funções são (Tabela 15): Tabela 15: Funções básicas para matrizes Submatrizes Sendo B uma matriz 3x3 unitária, podemos defini-la através da seguinte função: >> B = ones (3) 111 111 111 B Sendo C uma matriz de zeros 3x4, podemos defini-la como: 34 >> C = zeros (3,4) 0000 0000 0000 C Para que o MATLAB gere uma matriz de números aleatórios entre 0 e 1, utilizamos a função rand (veja também a função randn, utilizando o comando help ). Exemplo: >> D = rand (2,3) 3835.06793.00470.0 9347.06789.02190.0 D Uma matriz magic square de ordem n é uma matriz n x n constituída de números inteiros de 1 a n 2 . Os elementos aij da matriz estão dispostos de forma tal que o somatório de cada linha é igual ao somatório de uma coluna. Forma Geral: magic (n) matriz square magic de ordem n. Assim, para saber o quadrado mágico de ordem 3 , o prompt do MATLAB deve apresentar: >> E = magic (3) 294 753 618 E 35 12 – GRÁFICOS NO MATLAB A construção de gráficos no MATLAB é mais uma das facilidades do sistema. Por meio de comandos simples podem-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenadas. Gráficos Bidimensionais É muito comum engenheiros e cientistas usarem gráficos x - y. Os dados que nós plotamos são usualmente lidos por um arquivo ou calculados em nossos programas. Geralmente assumimos que valores de x representam variáveis independentes e que valores de y representam variáveis dependentes. Os valores de y podem ser calculados usando as funções de x, ou os valores de x e y podem ser retirados de experiência. Estes são os comandos para plotar gráficos bidimensionais (Tabela 16): Tabela 16: Alguns comandos para gráficos bidimensionais Observação: É importante lembrar que logaritmo de valores negativos e zero não existem, logo se tentarmos plotar um gráfico semilog ou log com valores negativos ou zeros, aparecera no MATLAB uma mensagem informando que esses valores serão omitidos do gráfico. Se Y é um vetor, plot (Y) produz um gráfico linear dos elementos de Y versos o índice dos elementos de Y. Por exemplo, para plotar os números [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14], entre com o vetor e execute o comando plot: 36 >> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14]; >> plot (Y) Figura 4: Plotagem de gráfico bidimensional. Se X e Y são vetores com dimensões iguais, o comando plot(X,Y) produz um gráfico bidimensional dos elementos de X versos os elementos de Y, por exemplo >> t = 0:0.05:4*pi; >> y = sin(t); >> plot(t,y) Figura 5: Gráfico de elementos de x versos elementos de y 37 O MATLAB pode também plotar múltiplas linhas e apenas um gráfico. Existem duas maneiras, a primeira é usado apenas dois argumentos, como em plot (X,Y), onde X e/ou Y são matrizes. Então: Se Y é uma matriz e X um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de Y versos o vetor X. Se X é uma matriz e Y é um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de X versos o vetor Y. Se X e Y são matrizes com mesma dimensão, plot(X,Y) plota sucessivamente as colunas de X versos as colunas de Y. Se Y é uma matriz, plot(Y) plota sucessivamente as colunas de Y versos o índice de cada elemento da linha de Y. A segunda, e mais fácil, maneira de plotar gráficos com múltiplas linhas é usando o comando plot com múltiplos argumentos. Por exemplo: >> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi)) Figura 6: Comando plot com múltiplos argumentos 38 Estilos de Linha e Símbolo Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser controlados se os padrões não são satisfatórios. Por exemplo, >> X = 0:0.05:1; >> subplot(l,2,l), plot(X,X.^2,‟k*‟) >> subplot(l,2,2), plot(X,X.^2,‟k --„) Figura 7: Estilos de linhas e símbolos O comando plot(x, y) nos mostra uma linha plotada representando os vetores y e x, mas podemos selecionar outros tipos de linha. Também podemos plotar pontos ao invés de linhas. A Tabela 17 mostra as diferentes opções de linhas e marcações: Tabela 17: Diferentes opções de linhas e marcações Tipo de linha Indicador Tipo de ponto Indicador Solid - Point . Dashed -- Plus + Dotted : Star * Dashdot -. circle ° x-mark x 39 Podemos também escolher as cores que serão usadas. Estas propriedades estão resumidas na Tabela18: Tabela 18: Tipos de cores Cores y Amarelo m Lilás c Azul claro r Vermelho g Verde b Azul escuro w Branco k Preto Escala A escala dos eixos no MATLAB é automática, porém se você quiser rearrumar a escala de seus eixos você pode usar o comando axis. Existem várias formas de se usar o comando axis: axis - Este comando congela a escala de eixos para uma subseqüência de gráficos. A Segunda execução do comando retorna o sistema a escala automática. axis(v) - v é um vetor de quatro elementos que contém a escala de valores,[xmin,xmax,ymin,ymax]. Esses comandos tem um uso especial quando se quer comparar curvas de diferentes gráficos, pois pode ser difícil a comparação quando as curvas possuem diferentes eixos e escalas. Subplot O comando subplot é usado quando se quer visualizar dois ou mais gráficos ao mesmo tempo. >> subplot(2,1,1), plot(x,y) 40 >> subplot(2,1,2), plot(y,x) Esse comando significa que teremos 2 gráficos sendo o primeiro (plot(x,y)) colocado no canto superior esquerdo da tela e o segundo colocado no canto superior direito da tela. Controle de tela gcf __________________ Apresenta uma janela com gráfico; clc __________________ Limpa a janela de comando; clg __________________ Limpa a janela do gráfico; Gráficos Tridimensionais e Contornos A rede de superfície pode ser gerada por um conjunto de valores em uma matriz. Cada ponta na matriz representa o valor da superfície que corresponde ao ponto na tela. Para gerar um arquivo que representa uma superfície 3D, primeiramente calculamos o conjunto dos valores de x e y que representam as variáveis independentes e depois calculamos os valores de z que representa os valores da superfície. O comando no MATLAB para plotar gráficos 3D é mesh(z). O comando meshgrid tem os argumentos do vetor x e y, ou seja transforma o domínio especificado pelos vetores x e y em vetores que podem ser usados em cálculos de funções de 2 variáveis e construção de gráfico 3D. Exemplo: Gerar o gráfico 3D da função -0.5 < x < 0.5 ; -0.5 < y < 0.5 ; f(x ,y)= z = 1 - x²- y² 1 = |x² + y² + z²| Solução: >> [xgrid,ygrid]=meshgrid(-0.5:0.1:0.5,-0.5:0.1:0.5); >> z=sqrt(abs(1 - xgrid.^2 - ygrid.^2)); >> mesh(z); 41 Figura 8: Gráfico de superfície E, o comando contour(z,10) mostra a projeção da superfície acima no plano x y com 10 iso-linhas: Figura 9: Gráfico de contorno 42 Estes são alguns comandos para plotar gráficos tridimensionais e contornos (Tabela 19). Tabela 19: Alguns comandos para gráficos tridimensionais e de contorno Anotações no gráfico O MATLAB possui comandos de fácil utilização para adicionar informações em um gráfico (Tabela 20): Tabela 20: Anotações em gráficos Observação: O MatLab possui uma ferramenta interativa para ampliar seções de um gráfico a fim de mostrá-las em mais detalhes, ou para dar um zoom em uma região de interesse. O comando zoom on ativa o zoom. Dando um clique com o mouse dentro da janela ativa, amplia-se o gráfico por um fator de dois em torno do ponto indicado pelo ponteiro do mouse. Pressionando a tecla shift e dando um clique com o mouse, o gráfico é reduzido por um fator de dois. Você pode também dar um clique e arrastar o mouse para ampliar uma área específica. O comando zoom (n) amplia usando um fator igual a n, enquanto zoom out devolve o gráfico a seu estado inicial. O comando zoom off desliga o modo de ampliação 43 13 – CARACTERES E STRINGS Um caractere no MATLAB é um valor inteiro convertido em um caractere equivalente de Unicode® UTF-16. Um string de caractere é um vetor com componentes convertidos de códigos numéricos para caracteres. Os elementos de um caractere ou string são uma classe do tipo char. As células da classe char podem ter múltiplos strings, com cada string possuindo o mesmo comprimento. Funções de conversão A Tabela 21 mostra algumas funções de conversão utilizadas no MATLAB. Tabela 21: Funções de conversão Função Descrição char Converte um inteiro positivo em um caractere equivalente. (Trunca qualquer parte fracional). int2str Converte um inteiro negativo ou positivo em um caractere. (Arredonda qualquer parte fracional). num2str Converte um tipo numérico para um tipo de caractere com uma precisão e formato específicos. str2num Converte um string para um tipo numérico com uma precisão e formato específicos. double Converte um string para um código numérico str2double Converte um string para um valor com precisão dupla. uintN (por exemplo uint8) Converte um caractere em um código inteiro, o qual representa um caractere. 44 14 – ARQUIVOS O MATLAB trabalha com dois tipos diferentes de arquivos: Os arquivos MAT e os arquivos ASCII. Os arquivos MAT Os arquivos MAT são gerados por um programa MATLAB usando o comando save, que contém o nome do arquivo e as matrizes que devem ser armazenadas. A extensão .mat é automaticamente adicionada ao nome do arquivo, contudo também é possível definir a extensão do arquivo a ser salvo. Assim, para salvar matrizes A, B e C, em um arquivo .mat nomeado “teste_1” devemos fazer: save ([teste_1 „.mat‟], „A‟, „B‟, „C‟); Para recuperar as matrizes no programa MATLAB, usamos o comando: load („teste_1.mat‟); Arquivos ASCII Um arquivo ASCII que será usado juntamente com um programa MATLAB deve conter informação exclusivamente numérica, e cada linha do arquivo deve conter o mesmo número de dados. O arquivo pode ser gerado utilizando um processador de texto ou, por exemplo, utilizando programas como o Fortran ou ainda, por um programa MATLAB usando a seguinte forma do comando save: save teste_1.dat R /ascii Cada linha da matriz R será escrita para linhas distintas no arquivos de dados. Recomenda-se utilizar a extensão .dat para ser mais fácil distingui-los dos arquivos MAT e dos arquivos M. 45 O comando load seguido do nome do arquivo irá recuperar a informação da matriz R. load teste_1.dat; Formatos de arquivos suportados para importar e exportar A Tabela 22 mostra os formatos de arquivos que se pode importar e exportar para a aplicação do MATLAB. Tabela 22: Formatos de arquivos suportados. Conteúdo do arquivo Extensão Função para importar Função para exportar Dados em formato MATLAB MAT load save Texto Quaisquer load save -ascii dlmread dlmwrite textscan Planilha XLS xlsread xlswrite XLSX XLSB XLSM Dados científicos CDF cdfread, ou veja cdflib cdfwrite, ou veja cdflib FITS fitsread Não há HDF hdfread H5 hdf5read hdf5write NC Ver netcdf Ver netcdf Imagem BMP imread imwrite GIF HDF JPEG JPG JP2 JPF JPX 46 J2C J2K PBM PCX PGM PNG PNM PPM RAS TIFF TIF XWD CUR imread Não há FITS FTS ICO Arquivo de áudio AU SND auread auwrite WAV wavread wavwrite Arquivo de vídeo (todas as plataformas) AVI mmreader avifile MJ2 mmreader Não há Arquivo de vídeo (Windows) MPG mmreader Não há ASF ASX WMV Quaisquer Arquivo de vídeo (Mac) MPG MP4 M4V mmreader Não há Quaisquer Arquivo de vídeo (Linux) Quaisquer mmreader Não há Imagem imread imwrite 47 _________________________ II CRIAÇÃO DE INTERFACES GRÁFICAS ____________________________ 48 15 – O QUE É UMA GUI? Uma interface gráfica com o usuário (graphical user interface, a famosa GUI) é uma interface “pictórica” para um programa. Uma GUI provê um ambiente familiar para o trabalho do usuário, fornecendo recursos como janelas, botões, menus, entre outros. Pode-se criar uma interface gráfica se o aplicativo que você está desenvolvendo vai ser utilizado por outras pessoas, ou se a função que você está escrevendo vai ser usada várias vezes. Nesses casos, menus, botões e caixas de texto podem ser usados como métodos de inserção de dados. Tenha em mente que a GUI deve se comportar de maneira inteligível, de forma que o usuário presuma qual a ação que o programa tomará quando este interagir com um objeto pertencente à interface. Por exemplo, quando um botão for clicado, é natural que a ação adotada pelo programa seja descrita pelo nome etiquetado no botão. O MATLAB contém exemplos interessantes de suas habilidades com as GUIs. Utilize, na janela de comandos (command window), o comando >> demo e veja o vídeo associado, ou consulte a ajuda do programa. Para iniciar o Guide, digitamos na janela de comandos do MATLAB: >> guide Quando uma GUI é criada no Guide, ele se encarrega de criar dois arquivos: o arquivo do corpo da interface gráfica (que é salvo como uma figura de extensão .fig, do MATLAB) e outro arquivo contendo funções que controlam como a GUI trabalha (salvo como um arquivo de função .m, do MATLAB). Este arquivo fornece códigos para iniciar a GUI e contém a estrutura para os callbacks da interface (as rotinas que são executadas quando o usuário interage com um componente da GUI). Na Figura 10, temos o Guide com uma GUI em branco. 49 Figura 10: A tela inicial do Guide, exibindo uma GUI em branco. Os modos de criação Basicamente, há dois meios de se criar uma GUI: Criando funções diretamente na linha de comando (o que pode ser dolorido, assombroso e desumano); Simplificando drasticamente a tarefa, com o uso da função Guide, existente no Matlab. Neste curso as GUIs serão criadas com o auxílio do Guide, e depois programadas de acordo com a necessidade do usuário. 50 16 – OS COMPONENTES BÁSICOS DE UMA GUI A Tabela 23 mostra os componentes mais usados no GUI. Tabela 23: Descrição dos componentes mais usados na criação de uma GUI. 51 52 Conhecendo estes componentes e utilizando-os convenientemente, estaremos a um passo da criação de GUIs úteis e funcionais. Depois de projetar a GUI, basta programar as ações de cada componente. Entretanto, algumas vezes é interessante mudar a cor de fundo da janela, ou o tipo de fonte de um rótulo de texto, entre outros aspectos da interface. Podemos fazer isso no Guide utilizando o inspetor de propriedades dos componentes. O inspetor de propriedades Se executarmos um clique duplo em qualquer um dos componentes no momento de criação da sua interface gráfica no Guide, o inspetor de propriedades (Inspector; Property Inspector nas primeiras versões) é acionado. Pode-se também clicar no componente em questão com o botão direito do mouse, e selecionar a opção Property Inspector, ou escolher View → Property Inspector no menu do Guide. Na Figura 11, temos o inspetor de propriedades da interface gráfica de um botão texto. As propriedades apresentadas são referentes ao pushbutton da GUI. O inspetor de propriedades exibe as propriedades do objeto, e se alterará conforme outros objetos são clicados. Podemos alterar os valores das propriedades como necessário. 53 Figura 11: O inspetor de propriedades do Guide. As propriedades exibidas referem-se a um pushbutton. Na Tabela 24, dada abaixo, temos algumas propriedades compartilhadas pela maioria dos componentes descritos na Tabela 23. Tabela 24: Propriedades comuns à maioria dos componentes dados pelo Guide. 54 55 Conhecendo estas propriedades, podemos começar a customizar a aparência da interface gráfica. 56 17 – ROTEIRO PARA A CONSTRUÇÃO DE UMA GUI Antes de por a “mão na massa”, é interessante que haja um projeto das GUIs que você deseja construir. Obviamente, este projeto é feito depois das outras funções da interface terem sido planejadas. Um projeto de GUI pode ser feito com papel e caneta, como um rascunho da interface que você deseja que o programa tenha. A ideia de um esboço é exemplificada na Figura 12. Figura 12: Um esboço de interface gráfica com o usuário. O rascunho em um papel é simples, mas independente da complexidade da GUI, é sempre um bom meio de começar. Depois de projetada, é hora de estruturar sua GUI no Guide. Criando uma GUI Neste primeiro momento, cabe apresentar o espaço do MATLAB destinado à construção de uma interface gráfica, ou seja, uma GUI. É acessado do menu new gui. 57 Figura 13: Acesso ao menu do GUI. Dê um clic em OK para abrir um utilizador em branco para a criação da GUI, ou digite “guide” na janela de comando do MATLAB (Figura 14). Figura 14: Janela para a criação da GUI 58 Com o utilizador você poderá fazer um desenho de seu programa utilizando as ferramentas à direita da janela do utilizador (Figura 15). A barra para construção dá ao usuário o material necessário para construir a cara da interface gráfica. Figura 15: Barra de ferramentas da GUI Na Figura 16, como exemplo, temos uma GUI com todos esses componentes. Figura 16: Exemplo de uma GUI com todos os seus componentes 59 Programando a GUI O Guide é um programa simples de ser utilizado. Podemos trabalhar facilmente editando a GUI, colocando objetos como botões e caixas de texto diretamente na área de layout. Porém, para que a GUI interaja com o usuário de maneira satisfatória, é preciso programar as ações de seus objetos. Fazemos isso alterando a função .m da interface gráfica que foi criada. Como exemplo, na Figura 17, temos a GUI botaotexto.fig, e o arquivo botaotexto.m no editor do Matlab. Figura 17: A GUI botaotexto.fig, e seu respectivo arquivo .m no MATLAB Editor. Esta interface gráfica exibe um botão, uma caixa de edição e um rótulo de texto. O MATLAB chama esses objetos de pushbutton, edit text e static text, respectivamente. Observe, no arquivo botaotexto.m, os callbacks já citados anteriormente. Quando clicarmos o pushbutton, ativaremos seu callback, que determinará a ação do botão. Da mesma forma, quando digitarmos alguns caracteres na edit text e pressionarmos “Enter”, ativaremos seu callback. Note que static text não tem sua função callback. Tenha em mente que nem sempre todos os callbacks são utilizados 60 18 – CRIANDO E MODIFICANDO MENUS A criação de menus e submenus no Guide Menus podem também ser adicionados às interfaces gráficas criadas no Guide. Eles são úteis quando queremos disponibilizar opções que não são necessárias em todo o momento de execução, ou adicionar funções que são utilizadas com pouca frequência. Há dois tipos de menus disponíveis no Guide: os menus padrão (standard), que se situam na barra de menus, no topo de uma janela, e os menus de contexto, que aparecem quando o usuário clica com o botão direito sobre um determinado objeto. O Guide possui uma ferramenta para edição de menus, o Menu Editor. Para acioná-lo, podemos ir para Tools → Menu Editor, ou simplesmente clicar no ícone que exibe um menu. Este ícone é mostrado na Figura 18, juntamente com o Menu Editor. Figura 18: O manipulador de menus do Guide, Menu Editor. A Figura 19 mostra exemplos de menus padrão no Menu Editor, e a interface gráfica com um menu de contexto ativado. É importante saber que, para os menus de 61 contexto trabalharem da maneira esperada, devemos alterar a propriedade UIContextMenu do componente ao qual queremos associar tal menu. Figura 19: Menus padrão e de contexto criados no Menu Editor. Depois de construídos, podemos trabalhar com algumas propriedades dos menus, a fim de deixar a interface ainda mais intuitiva. Propriedades dos menus Alguns recursos de interesse na personalização de menus são as caixas “separator above this item”, que quando selecionada mostra uma barra que separa os subitens do menu acima do submenu relacionado, e “check mark this item ”, que quando marcada mostra o subitem correspondente selecionado com uma marcação. A Figura 20, mostra exemplos das duas opções na GUI botaotexto e onde encontrá-las no Menu Editor. 62 Figura 20: As opções “separator above this item” e “check mark this item” selecionadas para o subitem 2, e a interface gráfica resultante. Quando lidamos com menus, é comum observarmos a presença de atalhos que aparecem na forma de letras sublinhadas. As “letras mnemônicas”, como são chamadas, servem para agilizar o acesso ao menu. Para utilizá-las, pressionamos ALT e a letra correspondente ao item de menu que desejamos acionar. Para implementar a funcionalidade das letras mnemônicas no Menu Editor do Guide, simplesmente colocamos o caractere “&” imediatamente antes da letra desejada. Por exemplo, na interface exibida na Figura 20, se quisermos que o menu “Item 2” tenha como atalho a combinação ALT + T, escrevemos “I&tem 2” na propriedade “Label” do Menu Editor. Note que, em tempo de execução, o atalho apenas aparecerá quando pressionarmos ALT. Na Figura 21, temos o exemplo descrito acima na GUI botaotexto. 63 Figura 21: Exemplo de interface gráfica com uma letra mnemônica e a correspondente entrada no Menu Editor. 64 19 – CONFIGURANDO E EXPLORANDO OS EVENTOS E AS CHAMADAS DE RETORNO DA GUI Após montar o programa utilizando os recursos computacionais citados acima, podemos ativar a interface, basta apertar Ctrl+T, ou aperte um botão verde em formato de play na parte superior da janela. Quando a janela de uma interface gráfica é ativada, o MATLAB cria automaticamente uma função (M-file) com o código necessário para gerar a Estrutura de dados de todos os componentes e propriedades respectivas, as quais constituem a interface por meio de uma sequência de instruções que aparecem no início da função que não devem ser alteradas. O arquivo .m gerado pelo MATLAB, geralmente, contém: 1) A função principal que leva o nome da GUI projetada; 2) Subfunções padrões que implementam as chamadas de retorno para cada componente ativo da GUI. Cada função de chamada de retorno cuida somente de um ÚNICO COMPONENTE DA GUI. Nome da chamada de retorno: “TAG” + “_CALLBACK”. O Tag do M-file deve ser correspondente a ferramenta usada na interface. Os comandos devem ser digitados no M-file da interface abaixo da parte correspondente ao callback do botão. Outras estruturas de dados dos argumentos: Object Handle (hObject): estrutura com atributos e propriedades (os mesmos visualizáveis no Property Inspector) da componente que disparou a callback. Event Data (eventdata): estrutura com o histórico da sequência de evento até ao disparo da callback (não é utilizado por todas as componentes). Handles Structure (handles): apontador para uma estrutura com atributos e propriedades (os mesmos visualizáveis no Property Inspector) de todas as componentes existentes na GUI, bem como dados específicos da aplicação. Comando get e set O comando “get” serve para a entrada de dados, seja ele um número ou um nome. Já o comando “set” tem a finalidade de apenas exibir dados obtidos ou gerados no programa em qualquer elemento GUI programado. Por exemplo: Variável = get(handles.edit1,'string'); set (handles.text1,'string',Variavel); 65 Edit Text O edit text mostra o valor corrente de um slider. O usuário pode entrar com o valor dentro da caixa de texto e atualizar o valor ou outra informação. texto = get(handles.edit1,'String'); % mostra um caractere k=str2double(get(handles.edit1, 'string')); %intervalo de amostragem Radiobutton Os botões de rádio geralmente são exclusivos; ou seja, quando um é clicado, os outros relacionados àquele são desativados. Isso não é implementado automaticamente, o que requer esforço extra de nossa parte. Para isso, é necessário alterar o valor “value” referente ao radiobutton: set(handles.radiobutton1,'Value',1); % Selecionado set(handles.radiobutton2,'Value',0); % Não selecionado set(handles.radiobutton3,'Value',0); % Não selecionado Pop-up menu Quando o Callback do pop-up menu é selecionado, o valor do menu de propriedades do pop-up menu que contém o índice correspondente é escolhido. Por exemplo, em um pop-up menu com quatro índices contendo valores distintos (1 a 4), quando selecionado o segundo item, que corresponde ao valor 2, este é armazenado na variável. popup_sel_index = get(handles.popupmenu1, 'Value'); switch popup_sel_index case 1 cp2=1; case 2 cp2=2; case 3 cp2=3; case 4 cp2=4; end 66 20 – ANOTAÇÕES
Compartilhar