Baixe o app para aproveitar ainda mais
Prévia do material em texto
AC304 – MATLAB – UMA FERRAMENTA PARA A ENGENHARIA. INATEL - Instituto Nacional de Telecomunicações Coordenador do curso: Estevan Marcelo Lopes Apostila elaborada por: Luís Antonio Ribeiro Scudeler Monitores: Ivo Bizon Franco de Almeida Luís Antonio Ribeiro Scudeler Introdução O MATLAB (MATrix LABoratory-Laboratório de Matrizes) é um programa de computador de uso específico, otimizado para executar cálculos científicos e de engenharia. Ele nasceu como um programa para operações matemáticas sobre matrizes, mas ao longo dos anos transformou- se em um sistema computacional flexível capaz de resolver essencialmente qualquer problema técnico. O MATLAB implementa a linguagem de programação de mesmo nome, juntamnete com uma grande biblioteca de funções predefinidas que tornam as tarefas de programação técnicas mais fáceis e eficientes. CAPITULO 1: Introdução ao MATLAB Ambiente MATLAB: - Janela de Comando: É onde o usuário irá digitar todos os comandos que serão executados e processados pelo MATLAB. - Espaço de Trabalho: É onde o MATLAB armazenará as variáveis criadas na execução de comandos possibilitando assim ao usuário a ter acesso a elas quando quiser. - Janela de Documentos: São os ‘olhos do MATLAB’. Todo tipo de arquivo que o usuário deseja abrir no MATLAB deve estar indicado nesse campo. Se desejarmos abrir um m-file, por exemplo, que está numa determinada pasta, esta pasta deve estar direcionada no Current Directory para aí sim o software executar o arquivo desejado. - Janela de Histórico de Comandos: É um campo que grava todas as linhas de comandos digitadas. Obtendo ajuda no matlab: - help “nome_da_funçao” - lookfor “palavra_chave” Existem duas formas de se obter ajuda nesse software. A primeira é usarmos o help em seguida o nome de uma função. Porem essa forma exige ao usuário saber o nome exato da função, mas nem sempre conhecemos, o lookfor, é mais flexível nessa questão. Digitamos lookfor em seguida a palavra chave (o que a função faz), o comando procurará funções que trabalhem com a correspondente palavra chave. No exemplo abaixo o help retornou um resumo da função seno (sin=nome_da_funçao), o lookfor retornou todas as funções que trabalham com radianos(radians=palavra_chave). CAPITULO 2: Conceitos Básicos Variáveis - conceito inicial: A unidade fundamental de dados, em qualquer programa MATLAB, é a matriz. Matriz é uma coleção de valores de dados organizados em linhas e colunas, conhecidos por um nome único. Valores individuais de dados em uma matriz são acessados por meio do nome da matriz, seguido de índices entre parênteses que identificam a linha e a coluna do valor particular. Uma variável MATLAB é uma região de memória que contem uma matriz, conhecida por um nome especificado pelo usuário. O conteúdo de uma matriz pode ser utilizado ou modificado a qualquer momento pela inclusão de seu nome em um comando MATLAB apropriado. Criar ou manipular variáveis no MATLAB é bem simples, seguimos a forma geral: Var=expressão, onde ‘Var’ é o nome da variável e ‘expressão’ é uma constante escalar, uma matriz ou combinação de constantes com outras variáveis e operações matemáticas (+,- etc). Exemplos (no Command Window): No exemplo acima verificamos que existem algumas constantes numéricas predefinidas como o ‘i’ que é usado para números imaginários, verificamos que quando queremos atribuir vários valores em uma variável esses elementos ficam entre colchetes ( [ ] ), e que o ponto e virgula ( ; ), é usado para encerrar uma linha e começar outra em uma matriz. - Na primeira linha de comando, é atribuído para a variável ‘var’ o numero imaginário 40i, na segunda linha de comando é atribuído para variável ‘var2’ o dado da variável ‘var’ dividido por 5, na terceira linha de comando, é atribuído para a variável ‘vetor’ os elementos 1,2 e 3, na quarta linha a variável ‘matriz’ recebe os dados do ‘vetor’ na primeira linha e os elementos 4,4 e 5 na segunda linha. Criando e Manipulando as variáveis: Quando queremos criar uma variável que receba um vetor linha (matriz 1xN) ou vetor coluna (matriz Nx1), colocamos seus elementos entre colchetes e usa-se virgula ou espaço em branco para separar-los isto no caso do vetor linha, já no caso do vetor coluna, os elementos terão que ser separados por ponto e virgula. Conclui-se então que o espaço em branco ou a vírgula são usados para separar os elementos em relação às colunas, e o ponto e vírgula para separá-los em relação às linhas. Exemplos (no Command Window): Podemos também criar vetores com intervalos escolhendo a variação desejada. Para intervalos segue-se a sintaxe: [valor _inicial:inc:valor_final] Se o inc não for fornecido ele assumira o valor 1. Exemplos (no Command Window): Os operadores aritméticos são: soma (+), subtração (-), divisão(/), potenciação(^) e multiplicação(*). Não sofrem variações perante números escalares (matriz 1x1), porém quando se trata de matrizes com Mlinhas e Ncolunas os operadores têm dupla interpretação. Considere A e B matrizes com dimensão 3x3. Se fizermos A*B o MATLAB retornará uma matriz correspondente a multiplicação matricial de A com B, porem se fizermos A.*B à matriz resultante corresponde à multiplicação ponto a ponto, ou seja, elemento a elemento. O mesmo conceito se aplica para a divisão ponto a ponto (./) e potenciação ponto a ponto (.^). Exemplos(no Command Window): Indexação: A indexação possibilita a pegar um ou mais valores de dentro de uma matriz já existente. A sintaxe para isso é a seguinte: var=A(i,j), sendo var uma variável que irá receber o elemento ixj da matriz A. Os índices i e j podem assumir um escalar ou um vetor(permitindo assim pegar varias linhas ou varias colunas). Exemplo (no Command Window): Na variável var1 está armazenado o elemento da linha 2 e coluna 3 da matriz A. Na variável var2 está guardada as linhas 1 e 2 e as colunas 1, 2 e 3 da matriz A. Concatenação: Concatenar significa ‘montar’ matrizes com matrizes. Por exemplo, seja A uma matriz 2x2 e B uma matriz 3x2, podemos concatená-las formando uma nova matriz C com 5 linhas e 2 colunas. A concatenação é feita ou em relação à linha ou em relação à coluna, temos que observar que as matrizes devem ter a mesma dimensão no sentido da concatenação, no nosso exemplo só poderíamos concatenar em relação à coluna (tanto A quanto B têm duas colunas). Para concatenar, lembrar o conceito de criação de variáveis, (entre colchetes, espaço ou vírgula usado para delimitar as colunas e o ponto e vírgula delimita as linhas) a diferença é que ao invés de números, usamos matrizes. Exemplo (no Command Window): Funções Predefinidas: O MATLAB possui uma ampla biblioteca de funções, dentre elas iremos trabalhar com funções trigonométricas, funções exponenciais e outras funções de criação de matrizes de leitura de dados e etc. A sintaxe principal de qualquer função segue o padrão, [a1,a2,...an]=nome_da_função(e1,e2,...,en), onde a1,a2,...a3 são os n parâmetros de saída(valores que serão retornados depois de serem modificados pela função) colocados entre colchetes (quando são mais do que um). E os parâmetros de entrada, e1,e2,...,en colocados sempre entre parênteses irão fornecer valores para dentro da função. A e B só podem ser concatenadas em relação à coluna. Então C recebe [A;B](continua2 colunas, mas agora, com 5 linhas) Exemplos (no Command Window): OBS: Notem que quando atribuímos a uma variável algum valor ou expressão, se ao final da linha de comando colocarmos ‘;’ o MATLAB suprime (não mostra para o usuário) o conteúdo dela. Como no caso do ‘x’, que ao final da linha de atribuição foi colocado um ‘;’. No caso do ‘a’, ao final da linha de comando não foi colocado o ‘;’ então o MATLAB mostrou o conteúdo de ‘a’ na tela. Até agora aprendemos a criar vetores e matrizes simples. Porém existem muitas funções para a criação de matrizes e vetores. Dentre elas iremos destacar: - linspace: É uma função de criação de vetores com elementos linearmente espaçados, ou seja, o intervalo entre os elementos do vetor terão a mesma distancia. A sintaxe é: var=linspace(val_inicial,val_final,nº_de_elem) Exemplo (no Command Window): - rand: É uma função de criação de matrizes com elementos aleatórios entre 0 e 1. A sintaxe é: var=rand(m,n) No primeiro quadro algumas funções trigonométricas. No segundo quadro algumas funções exponenciais. No terceiro quadro uma função matricial que tem 2 parâmetros de saída e 1 de entrada. Exemplo (no Command Window): - zeros: Função que cria matriz com elementos nulos. A sintaxe é: var=zeros(m,n) Exemplos (no Command Window): - eye: Função que cria matriz identidade. A sintaxe é: var=eye(m,n) Exemplos (no Command Window): Agora que já sabemos os conceitos de criação de matrizes e vetores, iremos trabalhar com algumas funções informativas ou para realizar algumas modificações, funções que serão uteis para as variáveis criadas. - det: Calcula o determinante de uma matriz. A sintaxe é: var=det(matriz) Exemplo (no Command Window): - inv: Calcula a inversa de uma matriz. A sintaxe é: var=inv(matriz) - reshape: Redimensiona uma matriz. A sintaxe é: var=reshape(matriz,nº_linhas,nº_colunas) Exemplo (no Command Window): - size: Retorna o numero de linhas e o numero colunas de uma matriz. A sintaxe é: [m,n]=size(matriz) Exemplo (no Command Window): OBS: Como existem 2 parâmetros de saída, é necessário o colchetes. - numel: Retorna o numero de elementos de uma matriz. A sintaxe é: var=numel(matriz) Exemplo (no Command Window): - diag: Retorna a diagonal principal de uma matriz. A sintaxe é: var=diag(matriz) Exemplo (no Command Window): - ’: Retorna a transposta de uma matriz. A sintaxe é: var=matriz’ Exemplo (no Command Window): - trace: Retorna a soma da diagonal principal de uma matriz. A sintaxe é: var=trace(matriz) Exemplo (no Command Window): - find: Retorna os índices correspondentes as posições na memória dos elementos que satisfazem a condição. A sintaxe é: var=find(condição) A matriz A contem os elementos 3, 2 e 1 na 1º linha, 5, 5 e 7 na 2º linha e 8, 9 e 10 na 3º linha. Os índices entre parênteses em vermelho correspondem à ordem como está salvo na memória, ou seja, se quisermos o elemento 7 por exemplo , ele é o oitavo na ordem da memória, então no Command Window fazemos: Ou também como já vimos anteriormente, o elemento 7 corresponde a 2º linha e 3º coluna: A função find, irá retornar as posições da memória. Se quisermos converter esses números correspondentes às posições, usamos o conceito de indexação. Veja o exemplo no Command Window abaixo: No exemplo criamos uma matriz A qualquer, depois em uma variável ind, salvamos o vetor coluna correspondente aos índices das posições da memória dos elementos da matriz A que são menores do que 3. Em B estão os elementos correspondentes a essas posições. Resolvendo Sistemas de Equações: Para resolvermos sistemas, criamos uma matriz correspondente aos índices que multiplicam as incógnitas, depois criamos outra matriz (vetor coluna), correspondente aos resultados das equações. Veja como foi resolvido o sistema abaixo no Command Window: Integral e Derivada: Usa-se a função polyder para derivar e polyint para integrar um polinômio qualquer. A sintaxe é: deri=polyder([índices]) e inte=polyint([índices]), veja o exemplo abaixo: CAPITULO 3: Introdução a Programação do MATLAB Os arquivos criados no MATLAB tem extensão ‘.m’ e são chamados de m - files. Existem dois tipos: - script: é uma seqüência de comandos, serve basicamente para automatizar algum processo repetitivo. Compartilha suas variáveis com o Workspace e não possui nem parâmetro de entrada e nem de saída. - função: Quando você utiliza funções do MATLAB, como abs, size, rand, o MATLAB toma as variáveis que você definiu, calcula os resultados desejados de acordo com o que você pediu e depois devolve os resultados. Os comandos executados junto com as variáveis criadas no interior do programa permanecem ocultos ( então a função é uma caixa preta). Resumindo a função aceita parâmetros de entrada e retorna parâmetros de saída. Para criarmos os programas no MATLAB digitamos ‘edit’ no Command Window, irá abrir o editor de programas. É no editor que iremos criar nossos scripts ou nossas funções. Exemplo de script: No editor de programas escrevemos: ATENÇÃO: Script não aceita parâmetros de entrada nem de saída. Mas notem que no exemplo a entrada e a saída de valores são feitas por duas funções existentes no corpo do programa: Input (que irá solicitar um valor) e disp(que irá retornar o resultado para o usuário ou uma mensagem). Então nada impede de usarmos funções em scripts (como também o rand que usamos para criar o vetor). Input e disp serão muito usados em scripts. A sintaxe dessas duas funções é: disp(‘mensagem qualquer’) ou disp(variavel) var=input(‘mensa_de_aviso_que_está_sendo_solicitado_um valor’) Para executar o script, digitamos no Command Window seu nome (o que foi salvo): Exemplo de função: No editor de programas escrevemos: ATENÇÃO: O nome da função terá que ser o mesmo do nome que será salva (no exemplo: ex_fun). A função não precisou do auxilio de outras funções (como input ou disp) para solicitar valores de entrada nem retornar na saída. Parâmetros de saída e de entrada são naturais em funções. Para executar no Command Window: CURIOSIDADE: Para verificarmos se o resultado está certo, existe uma função que soma um vetor qualquer, a função se chama sum. Sua sintaxe é sum(vetor). No caso do exemplo: sum(vetor_linha) Note que nesse caso não há como verificarmos se o resultado está certo, afinal, é característica da função não compartilhar suas variáveis com o workspace, então não temos acesso ao vetor_linha. Foi feito o mesmo exemplo para um script e para a função para se verificar as diferenças entre suas construções. Mas note que se quiséssemos entrar com uma matriz, por exemplo, para ser trabalhada dentro do m-file, o script (por não aceitar diretamente parâmetros de entrada), não seria a melhor opção. Veja o exemplo abaixo: Exemplo de função: No editor: No Command Window: Para criarmos os programas precisamos ter o conhecimento dos operadores, das estruturas de decisão e de repetição: CAPITULO 4: Entrada e Saída de Dados Existem funções de importação (ler dados vindos de arquivos fora do MATLAB, como uma imagem, por exemplo) ou de exportação (salvar dados em tipos diferentes de arquivos) no MATLAB. Funções de Importação/Exportação de Dados:Algumas funções são usadas para salvar e outras para ler, mas cada uma grava ou lê arquivos de tipos diferentes. -dlmwrite: Usado para gravar uma matriz em um arquivo ASCII ‘delimitado’. A sintaxe é: dlmwrite(‘nome_arquivo’,matriz,‘delimitador’) O nome_arquivo sempre entre apóstrofos, é um nome opcional que você deseja salvar a matriz que pode ser qualquer matriz contida no Workspace, o delimitador também sempre entre apóstrofos, pode ser vírgula, ponto e vírgula ou espaço em branco. -dlmread: Usado para ler uma matriz em ASCII. Sintaxe: dlmread(‘nome_arquivo’) O nome_arquivo vem sempre entre apóstrofos. Exemplos no Command Window : CURIOSIDADE: Note que quando escolhemos um nome para salvar a matriz em ASCII, se ao final do nome acrescentarmos .txt, podemos acessar os dados desse arquivo com o arquivo de texto do Windows. IMPORTANTE: Os arquivos que iremos ler deverão existir na pasta indicada no Current Directory, assim como também os arquivos que salvamos ficarão armazenados nesta pasta. -save: Usado para salvar variáveis em arquivos do tipo ‘.MAT’(é o formato de armazenamento de dados mais eficiente, mais compacto e rápido disponível no MATLAB). Sintaxe: save(‘nome_arquivo’,‘var1’,...,‘varN’) É a forma mais comum de salvar dados, afinal podemos salvar quantas variáveis (contidas no Workspace) quisermos. Observe que o nome_arquivo e as variáveis que desejamos salvar são todos colocados entre apóstrofos. -load: Usado para carregar as variáveis salvas em arquivos do tipo ‘.MAT’. Sintaxe: load(‘nome_arquivo’) Exemplos (no Command Window): Note que criamos três variáveis (A, r e b), porem somente A e b foram salvas. Para observarmos os processos, apagamos as variáveis do Workspace (clear é usado para isso), com ele vazio, usamos load para carregar as variáveis salvas, após isso podemos verificar que no Workspace foram criadas as variáveis A e b novamente. -xlsread: Usado para ler uma planilha do MS-Excel. Sintaxe: [dados_num,dados_alfanumericos]=xlsread(‘nom.xls’) Esta função irá retornar como parâmetros de saídas duas matrizes, sendo dados_num uma matriz contendo os valores numéricos e dados_alfanumericos uma matriz contendo caracteres (dados que não são numéricos). Exemplo: No Excel foi criada a planilha com o nome de ‘notas’, e no Command Window digitamos a função entre parênteses o nome e a extensão: Funções de Importação/Exportação de Arquivos de Imagem: -imfinfo: Fornece informaçoes sobre a imagem. Sintaxe: imfinfo(‘nome_imagem.ext’) -imread: Lê arquivo de imagem. Sintaxe: [a,map]=imread(‘nome_imagem.ext’) A sintaxe indica que a funçao deve retornar (parametros de saída) duas matrizes sendo uma(matriz a) contendo os dados para geração da imagem e a outra (matriz map) contendo as cores da imagem. Ao executar a função pode-se observar 2 possíveis casos: 1º Situação: Será retornado somente a matriz a ( matriz map estará vazia), e ela será uma matriz tridimensional, as cores estarão junto à matriz combinadas entre suas dimensões. 2º Situação: Será retornado duas matrizes ( a e map) unidimensionais. Usa-se a função image(matriz_contendo_os_dados) para gerar a figura e colormap(matriz_contendo_as_cores) para dar cor a ela(quando se tem a matriz correspondente às cores). Exemplos no Command Window: OBSERVAÇOES: Quando for executado os exemplos acima note que na primeira situação, a matriz map retornou vazia, diferente da matriz a (matriz tridimensional) que continha os dados para criação da imagem, por isso para visualiza-la só precisou usar a função que gera a imagem. Já na segunda situação tanto a matriz correspondente aos dados(a), quanto a matriz correspondente as cores(map) não eram vazias, então para visualizarmos a imagem nesse caso, foi preciso usar uma função para gera- la e depois outra função para dar cor a ela. -imwrite: Grava matriz em arquivo de imagem. Sintaxe: imwrite(a,map,‘nome_qualquer.extensao’) Para essa função teremos também duas possibilidades: 1º Situação: Quando se tem uma matriz tridimensional correspondente a criação de uma imagem, para salva-la, usamos a função de gravação e entre parenteses colocamos a matriz correspondente aos dados(matriz tridimensional) e o nome que será salvo nesta ordem, conforme indicado na sintaxe. 2º Situação: Caso tenhamos duas matrizes, uma correspondente aos dados para criação da imagem e a outra correspondente às cores(ambas unidimensionais), para salva-las, usamos a função de gravação e entre parenteses colocamos primeiro a matriz relacionada aos dados e depois a matriz relacionada as cores e por ultimo o nome que será salvo, conforme a sintaxe da função. Exemplo no Command Window(1º Situação): No exemplo a seguir, vamos ler os dados de uma imagem e guarda-los em uma matriz, que será uma matriz tridimensional (matriz a) e como as cores estarão combinadas entre suas dimensões, iremos pegar todos elementos porém da primeira dimensão da matriz a e guarda-los em uma matriz b após isso salvaremos b em um arquivo de imagem com um nome de ‘nova.jpg’. Exemplo no Command Window(2º Situação): Nesse exemplo faremos a leitura de uma imagem que nos retornará duas matrizes unidimensionais (a e map), uma correspondente aos dados e a outra correspondente as cores, a seguir será criada outra matriz (matriz b) que conterá todos elementos de a multiplicados por 3, assim iremos salvar a nova matriz b (correspondente a geração da imagem) e a matriz map (correspondete as cores) em um arquivo de imagem com o nome de ‘imagem.bmp’ Funções de Importação/Exportação de Arquivos de Som: -wavread: Lê arquivo de som Microsof Wave. Sintaxe: [A,fs,bits]=wavread(‘nome_do_arquivo’) A funçao deverá retornar (parametros de saída) três matrizes sendo matriz A contendo a amplitude do som, matriz fs contendo a frequencia do som (em Hz) e a matriz bits que são bits por amostragem do som. Usa-se a função sound(A,fs,bits) para gerar o audio do som. Exemplo no Command Window: Após ser executado esse exemplo, verificar que na pasta direcionada no Current Directory foi gerada uma imagem com o nome de ‘nova.jpg’ Verificar que na pasta direcionada no Current Directory foi gerada uma imagem com o nome de ‘imagem.jpg’ Para ler o arquivo de som ‘Bee’, ele precisou estar na pasta direcionada do Current Directory. -wavwrite: Grava matriz em arquivo de som Microsoft Wave. Sintaxe: wavwrite(A,fs,bits,‘ nome_do_arquivo’) A função terá que ter quatro parametros de entrada, sendo os três primeiros as três matrizes correspondentes a amplitude (A), a frequencia (fs) e a amostragem (bits) e o quarto parametro um nome qualquer para salvar as matrizes em arquivo de som. Exemplos no Command Window: Nesse exemplo primeiramente iremos ler os dados do arquivo ‘Bee’ a seguir, sera gerado 3 arquivos de som: 1º Com a amplitude aumentada em 3 vezes. Nome: ‘primeiro’. 2º Com a frequencia aumentada em 2 vezes. Nome: ‘segundo’. 3º Com a amostragem pela metade. Nome: ‘terceiro’. Funções para criação de Arquivos de Animação: -aviinfo: Retorna informações de um arquivo de animação. Sintaxe: aviinfo(‘nome_do_arquivo’) -getframe: Armazena a figura corrente em um quadro de animação. Sintaxe: mov=getframe -movie2avi: Cria um arquivo em formato .AVI a partir de uma matriz contendo os dados dos quadros de animação. Sintaxe: movie2avi(‘mov’,‘nome_arquvivo.avi’) A função terá dois parametros de entrada, sendo o primeiro uma matriz contendo os quadros de animação (obtidospela função getframe) e segundo o nome com a extenção (.avi) que se deseja salvar o arquivo. Os arquivos foram gerados na pasta direcionada no Current Directory. Exemplo: Para gerar esse arquivo de animação será gerado um scrip com o nome de ‘ex_anima’ da seguinte forma: Na 1º linha do programa, foi criada uma estrutura de repetição de a variando de 1 a 100. Dentro da estrutura quando a vale 1, na 2º linha é armazenado na variável x na posição 1 o cosseno de 1, na 3º linha foi usada uma função grafica que gerará o grafico do cosseno do ponto 1 ao ponto 1, na 4º linha em uma variavel mov na posição 1 é guardado o quadro de animação referente ao cosseno do ponto 1 ao 1, na 5º linha a execução volta para a 1º e incrementa a variavel a que passa a ser 2, na 2º linha x na posição 2 recebe cosseno de 2, na 3º linha é gerado o grafico do cosseno do ponto 1 ao ponto 2, na 4º linha a variavel mov recebe na posição 2 o quadro de animação referente ao cosseno do ponto 1 ao 2 , e assim sucessivamente até a variavel a valer 100. Quando a execução sair da estrutura de repetição na 6º linha está a função que irá criar um arquivo com o nome de ex1 em ‘.avi’ dos quadros de animação contidos na varivavel mov. Para executar o exemplo, no Command Window digitamos o nome do scrip: Após executar o exemplo, note que será gerada a animação na figura 1 e na pasta indicada no Current Directory estará um arquivo do tipo ‘.avi’ com o nome de ex1. CAPITULO 5: Gráficos e Aplicações Gráficos: Funções Básicas de Geração de Gráficos: -plot: Gera gráfico bidimensional com coordenadas x e y lineares. Sintaxe: plot (coord_x,coord_y,‘fmt’) A função tem como parâmetros de entrada as coordenadas x e y, e a formatação fmt, porem esta é opcional. A formatação consiste em mudar a cor da linha do gráfico e mudar o tipo de marcador. Se quisermos a cor vermelha e o gráfico tracejado, por exemplo, na formatação colocamos ‘r--’, ou seja, usa-se a primeira letra dos nomes das cores (no exemplo red) para definir a cor da linha e símbolos para indicar o tipo de marcador que são vários: *, +, --, ., >, <, o, ^. Exemplos no Command Window: -loglog: Gera gráfico bidimensional com coordenadas x e y na escala logarítmica. Em todos os casos foi criada uma variável x que recebeu os valores de –pi a pi variando de 0.1 unidades e em uma variável y foi guardado os valores de seno de x. No 1º caso foi plotada a imagem sem formatação, no 2º caso foi usada a formatação ‘r--’, ou seja, red e marcador tracejado, no 3º caso foi usada ‘g*’, ou seja, green e marcador estrelinha. Sintaxe: loglog(coord_x,coord_y,‘fmt’) Como parâmetros de entrada a função recebe as coordenadas x e y e a formatação opcional (que é configurada da mesma forma que foi explicado no comando plot). -semilogx: Gera gráfico bidimensional com a coordenada x em escala logarítmica e a coordenada y em escala linear. Sintaxe: semilogx(coord_x,coord_y,‘fmt’) Como parâmetros de entrada a função recebe as coordenadas x e y e a formatação opcional (que é configurada como no comando plot). -semilogy: Gera gráfico bidimensional com a coordenada y em escala logarítmica e a coordenada x em escala linear. Sintaxe: semilogy(coord_x,coord_y,‘fmt’) Como parâmetros de entrada a função recebe as coordenadas x e y e a formatação opcional (que é configurada da mesma forma que foi abordada no comando plot) Exemplos no Command Window: Em todos os exemplos a coordenada x é igual à coordenada y para melhor visualizarmos as diferenças nas escalas. No 1º caso tanto x quanto y são plotados com a escala logarítmica e com a cor verde e marcador ponto, e como x e y são iguais o gráfico é uma reta. No 2º caso x esta em escala logarítmica e y linear, e o desenho está com a formatação vermelho, e marcador triangulo. No 3º gráfico y está plotado com escala logarítmica e x linear, nesse caso não foi usada nenhuma formatação para o desenho. -polar: Gera gráfico com eixos de coordenadas polares. Sintaxe: polar(ângulo_em_radianos,modulo,‘fmt’) Essa função tem como parâmetros de entrada o ângulo em radianos, valores radiais lineares (modulo), e a formatação opcional. Por exemplo, o numero complexo iz 10 possui modulo igual a um, pois 110|| 22 z e ângulo igual a 90º, afinal 20 1 arctgarctg . Existem algumas funções no Matlab que já fazem esses cálculos facilitando nosso trabalho, como a função angle, que retorna o ângulo de um número complexo e a função abs, que calcula o modulo de um numero complexo. Exemplo 1: Exemplo 2: No 1º exemplo na variável a foi armazenado o numero complexo 0+i, na variável ângulo foi armazenado o ângulo em radianos do numero complexo a e na variável modulo foi armazenado o modulo do numero complexo a. Logo após foi usado o comando polar para plotar o numero complexo com o marcador ‘+’ e com a cor vermelha. O 2º exemplo é semelhante ao 1º porem o número complexo é 6+5i e a formatação usada para o desenho foi a cor verde e marcador ‘*’. -plotyy: Permite criar duas curvas no mesmo gráfico com escalas diferentes para y. Suponha que se deseja plotar xe e )(xsen para x, variando de –pi a pi, no mesmo gráfico, observe o exemplo abaixo (no Command Window): Observe que o gráfico não ficou totalmente visível, afinal um seno de x, varia de -1 a 1 no eixo y, e o gráfico de um expoente, varia de 0 a +∞, então a solução nesse caso, para os dois gráficos ficarem visíveis seria ter duas escalas diferentes para y. Por isso usamos o plotyy, para visualizar-mos dois gráficos com escalas diferentes para y. Desta forma: No exemplo, foi criado um vetor com o nome de x variando de – pi a pi, na variável a foi gravado os valores de seno de x, na variável b os valores de expoente de x, em seguida foi usado a função plot com as 4 coordenadas(2 para cada gráfico). As variáveis são as mesmas criadas no exemplo anterior, porém observe que foram criadas duas escalas diferentes para y, a 1º em azul de -1 a 1(para o gráfico do seno) e a 2º em verde de 0 a 40(para o gráfico de expoente de x). Atributos de Eixos -axis: Controla a escala dos eixos de um gráfico. Sintaxe: axis([Xmin Xmax Ymin Ymax]) Quando é gerado um gráfico do seno, por exemplo, a função plot gera o gráfico com escala definida pelo domínio e imagem, porem pode-se controlar a escala com a função axis. Observe o exemplo abaixo: -grid: Função para exibição de grade no gráfico. Exemplo no Command Window: -hold: Fixa o gráfico corrente na figura. Quando plotar um gráfico com a função plot, em seguida se for usado o comando novamente, o anterior é substituído, mas se não quiser perder o primeiro gráfico para plotar outro junto a ele, usa-se hold, observe o exemplo: -subplot: Permite gerar vários eixos em uma mesma figura. Sintaxe: subplot(m,n,p) A função exige três parâmetros de entrada sendo, m o numero de eixos na vertical, n o numero de eixos na horizontal e p índice do eixo corrente. Observe o exemplo no Command Window abaixo: No exemplo ao lado, foi plotado em uma figura dois gráficos. Se não fosse usado o comando hold, na figura só iria aparecer o gráfico do cosseno, afinal o ultimo comando foi o plot(x,cós(x)). Note também que nesse caso poderia ser usado o plot com as coordenadas dos dois gráficos da seguinte forma: plot(x,sin(x),x,cos(x)) Anotações e Textos -title: Permite colocar título no gráficocorrente. Sintaxe: title(‘titulo’) -xlabel: Nomeia o eixo x. Sintaxe: xlabel(‘eixo x’) -ylabel: Nomeia o eixo y. Sintaxe: xlabel(‘eixo y’) -zlabel: Nomeia o eixo z. Sintaxe: xlabel(‘eixo z’) -gtext: Abre um cursor na figura corrente para se escolher o lugar exato onde o texto irá ficar. Sintaxe: gtext(‘texto’) -legend: Coloca legenda nos gráficos. O numero de gráficos na figura terá que ser o mesmo do numero de textos. Sintaxe: legend(‘texto1’,‘texto2’,...) Observe o exemplo sobre as funções acima: Funções Gráficas 2D Especiais -area: Gera gráfico da área. Exemplo: -bar: Gera gráfico de barra vertical. Exemplo: -stem: Gera gráfico de pontos com hastes. Exemplo -pie: Gera gráfico de pizza. Exemplo -comet: Dados x e y, gera gráfico com exibição de trajetória animada. Exemplo: -ezplot: Gera gráfico de coordenada linear a partir de equações de funções. Sintaxe: ezplot(‘equação’) -ezpolar: Gera gráfico de coordenada polar a partir de equações de funções. Sintaxe: ezpolar(‘equação’) Exemplos sobre ezplot e ezpolar: Funções Gráficas 3D -plot3: Dados x, y e z cria curva no espaço 3D. Sintaxe: plot3(x,y,z,‘fmt’) Exemplo: -meshgrid: Gera malha para criação de superfícies. Sintaxe: [mx,my]=meshgrid(x,y) Dados dois vetores x e y, contendo as coordenadas dos eixos X e Y, retorna duas matrizes, mx e my, contendo a ‘malha’ de coordenadas necessária para geração de superfícies. -mesh: Gera a malha a partir de coordenadas 3D. Sintaxe: mesh(mx,my,mz) Exemplo: -surf: Gera a sduperficie a partir de coordenadas 3D. Sintaxe: surf(mx,my,mz) Exemplo: -contour: Gera gráficos de curvas de nível. Sintaxe: contour(mx,my,mz) Exemplo: -surfc: Gera superfície com curva de nível juntos. Exemplo: Funções Gráficas 3D Especiais -cylinder: Fornece as malhas de coordenadas mx, my e mz necessárias para criação de um cilindro com altura 1. Sintaxe: [mx,my,mz]=cylinder(Raio,N) A função tem como parâmetro de entrada um vetor (Raio), contendo variação do tamanho do raio ao longo da altura e N o numero de faces do cilindro. Exemplo: -sphere: Retorna as malhas de coordenadas mx, my e mz necessárias para criação de uma esfera de raio 1. Sintaxe: [mx,my,mz]=sphere(N) A função aceita como parâmetro de entrada o numero de face da esfera (N). Exemplo: -bar3: Gera gráfico de barra 3D vertical. -pie3: Gera gráfico de pizza 3D. Exemplos: Funções Gráficas de Animação -getframe: Captura figura e retorna estrutura (contendo dados e mapa de cores) para ser utilizada na animação quadro a quadro. Sintaxe: mov=getframe -movie2avi: Armazena a animação armazenada em uma variável em um arquivo em formato AVI. Sintaxe: movie2avi(mov,‘nom_arquivo’) Exemplo: No editor de programas: Após criação do programa, no Command Window digita-se seu nome: Criação de Interface com o Usuário: Caixas de Diálogo (CD) Possibilitam a construção de programas com interface com usuário mais amigável. -inputdlg: Caixa de diálogo para entrada de dados via texto. Exemplo: No exemplo acima entramos com os parâmetros de entrada básicos da função, porém ela aceita outros opcionais, veja o exemplo: Observação: O parâmetro de saída da função inputdlg é uma cadeia de caracteres (cell-array), então para operar os valores Observe que como parâmetros de entrada da função inputdlg entrou- se com infor que é uma matriz de cell-array (cadeia de caracteres, usa-se chaves para delimitá-las) e com titulo que é o nome da caixa de dialogo. msg é uma cadeia de caracteres (cell-array), titulo é o nome da caixa de dialogo, num_de_linhas é um vetor coluna contendo o numero de linhas para cada entrada de dados, e val_predef cadeia de caracteres (cell-array) contendo os valores predefinidos . retornados pela função é necessário usar a função str2double que converte de caractere para numérico. -errordlg: Exibe caixa de diálogo de mensagem de erro. Exemplo: -warndlg: Exibe caixa de diálogo de mensagem de aviso. Exemplo: -helpdlg: Exibe caixa de dialogo de mensagem de ajuda. Exemplo: -msgdlg: Exibe caixa de dialogo para uma mensagem qualquer mensagem. -listdlg: Caixa de diálogo para entrada de dados via lista de seleção. Sintaxe: [ind,teste]=listdlg(‘PromptString’,nome,‘Liststring’,lista) A função tem como parâmetro de entrada o nome da caixa de dialogo (variável nome) e uma cadeia de caracteres (variável lista) que conterá os objetos da lista. Como parâmetros de saída ind, que é o numero equivalente a opção escolhida e teste que é sempre 1 enquanto for escolhida uma opção, este passa a ser 0, quando o usuário não escolher nenhum item ou seja clicar em ‘cancel’. Veja o exemplo a seguir: -questdlg: Caixa de diálogo para entrada de dados com seleção de duas opções possíveis. GUIDE – Graphic User Interface Design Environment Os recursos de interface gráfica com o usuário incluem menus, menus contextuais, botões simples (pushbuttons), controles deslizantes (sliders), botões de rádio, botões de chave (togglebuttons), menus popup, e caixas de listagem. Uma interface com o usuário é o ponto de contato ou método de interação entre uma pessoa e um computador ou programa de computador. Será ressaltado nesse capitulo informações básicas para se criar uma interface. Para acessar o campo de criação de uma interface clicar em File/New/GUI, ou simplesmente digite no Command Window a palavra guide. Após esse processo escolher a opção Blank GUI (Default), após clicar em ‘OK’ abrirá uma janela com um campo em branco do lado direito e várias ferramentas do lado esquerdo: As ferramentas disponíveis são: -[Push Button]: Botão de acionamento de comando. -[Toggle Button]: Botão de configuração de opção. -[Radio Button]: Botão de escolha de opção. -[Checkbox]: Caixa de opção (sim/não). -[Edit Text]: Caixa de edição de texto. -[Static Text]: Texto estático. -[Slide]: Barra de Graduação. -[Frame]: Quadro. -[Listbox]: Caixa de lista de opções. -[Popup Menu]: menu popup de opções. -[Axes]: Eixo. Cada uma dessas ferramentas possui propriedades que podem ser configuradas pelo usuário. Algumas serão destacadas: -[Tag]: nome atribuído ao objeto pelo usuário. -[Callback]: nome da função que é acionada pelo objeto. -[String]: valor ou nome inicial. -[Position]: posição do objeto na janela. -[Style]: informa o tipo do objeto. As demais propriedades configuram basicamente a aparência do objeto, como a cor de fundo, tamanho e fonte de texto. A ferramenta GUIDE é interativa, com muitos detalhes de configuração de parâmetros, desta forma iremos apresentar dois exemplos com as ferramentas básicas para criação de caixas de diálogo no MATLAB. EXEMPLO 1: Será criada uma caixa de dialogo com três botões (Push Button), sendo que cada um deles exibirá um gráfico diferente na ferramenta ‘Axes’. -Botão1: cos(x) para x variando de –pi a pi. -Botão2: sen(x)+cos(x) para x variando de 1 a 10. -Botão3: gráfico animado de sen(x) para x de -4pi a 4pi; 1º Passo: Crie três programas implementados em três m-files (b1.m, b2.m e b3.m) que serão callback dos Push Butons. Então no editor de programas: 2º Passo: Chame o comando guide e construa a janela conforme olayout exibido em seguida: -[Static Text]: Título. -[Axes]: área do gráfico. -[Push Button]: 3botoes. 3º Passo: dê um duplo-clique sobre o objeto [Static Text] para abrir o editor de propriedades e configure ‘String’ com ‘EXEMPLO 1’, e de também um duplo clique sobre o [Push Button] e configure o ‘String’ com o nome de Botão1 para o 1º Push Button, Botão2 para o 2º e assim por diante. 4º Passo: para direcionar os programas aos botões, de um duplo clique sobre os objetos [Push Button] e modifique o campo ‘callback’ com os nomes dos respectivos programas. 5º Passo: crie um menu: -Abra o [Menu Editor], após abrir uma janela clique no ícone do canto superior esquerdo [New Menu]. -No campo label, coloque o nome ‘Exemplo’. -Crie as opções do menu clicando no ícone [New Menu Item] e configure as propriedades: 1º opção: 2º opção: 3º opção: -Label: ‘G1’ -Label: ‘G2’ -Label: ‘G3’ -Callback: ‘b1’ -Callback: ‘b2’ -Callback: ‘b3’ Observação: Para criar as opções do menu ‘Exemplo’, coloque este item em destaque (clique nele) e depois acione o ícone [New Menu Item] 6º Passo: Armazene a janela via opção [Save As] do menu [File] com o nome de ‘inter1’. Ao ser salvo o MATLAB gera um programa automaticamente. Para executar a caixa de dialogo criada, no Command Window digite o nome com qual foi salva: EXEMPLO 2: Vamos resolver um problema de um circuito elétrico onde queremos achar I1, I2, I3 e PT. De acordo com o sistema dado: 1º Passo: Entre no campo para criação de interface, construa a janela conforme o layout abaixo: -os textos na coluna esquerda devem ser criados como [Static Text]. O conteúdo do texto deve ser editado no campo [String]. -os textos da coluna direita devem ser criados com os atributos descritos abaixo: -Utilize [Push Button] para criar o botão ‘CALCULAR’ que irá chamar a callback cujo nome é ‘circuito_calculado’. 2º Passo: armazene a janela via opção [Save As] do menu [File] com o nome de ‘circ’. O MATLAB gerará automaticamente um m-file referente à interface criada. 3º Passo: Até aqui não executamos nenhum procedimento muito diferente do que foi descrito no EXEMPLO1. Agora criaremos o programa callback ‘circuito_calculado’, que deve utilizar os parâmetros de entrada fornecidos na caixa de diálogo para calcular os valores I1, I2, I3 e PT, que devem ser exibidos na caixa de diálogo. Utilizaremos as funções findobj para identificar os objetos UIcontrol (as ferramentas do GUI) e get para obter o conteúdo de suas propriedades. obj=findobj(figura_corrente,‘Propriedade’,‘Valor’) -findobj irá identificar com qual objeto estamos trabalhando, ou seja, o código do objeto da figura que satisfaça a condição ‘Propriedade’=‘Valor’. Por exemplo: obj=findobj(gcf,‘Tag’,‘V1’) obj recebe o código do objeto da figura corrente (indicada pela função gcf - get current figure) cujo ‘Tag’ é ‘V1’. Val=get(obj,‘Propriedade’); -get irá retornar o valor que se encontra na propriedade daquele objeto (objeto cujo o código foi identificado pela função findobj e que foi salvo na variável obj). Por Exemplo: V1=get(obj,‘String’) Porem get retorna uma cadeia de caracteres (cell-array). Para transformá-la em numero real é necessário usar a função de conversão str2double. Para exibir o resultado na caixa de diálogo utilizaremos a função findobj para identificar o objeto, no caso, o texto estático ‘I1’ -set configura o valor da propriedade do objeto. A função set configura a propriedade ‘String’ do objeto. O valor fornecido deve ser uma cadeia de caracteres. A função de conversão num2str transforma o valor numérico I1 em cadeia de caracteres. set(obj,‘String’,‘ValI1’) Então no editor de programas: Aplicações Serão listadas algumas funções para diferentes campos de trabalho. Funções: Trigonométricas e Exponenciais. - exp(x): expoente. - log(x),log10(x),log2(x): logaritmo natural(ln), base 10 e base 2. - pow2(x): potencia base dois ( x2 ). - rem(x,y): resto da divisão de x por y. - sign(x): sinal de x. - fix(x): arredonda para o inteiro mais próximo de 0. - floor(x): arredonda para o inteiro mais próximo de - ∞. - ceil(x): arredonda para o inteiro mais próximo de + ∞. - round(x): arredonda para o inteiro mais próximo. Teoria dos Números - factor(x): retorna fatores primos que compõem o numero fornecido. - isprime(x): verifica se o numero é primo. - lcm(x,y): mínimo múltiplo comum de x e y. - perms(v): retorna todas as permutações possíveis dos números dados. - factorial(x): retorna fatorial de x. Análise de Dados Básica - max(x): retorna o valor máximo do vetor x. - min(x): retorna o valor mínimo do vetor x. - mean(x): retorna a média do vetor x. - median(x): retorna a mediana do vetor x. - sort(m): classifica em ordem crescente (colunas). - sortrows(m): classifica em ordem crescente (linhas). - sum(x): soma os elementos do vetor x. - prod(x): multiplica os elementos do vetor x. Transformação de Coordenadas e Bases - [th,r]=cart2pol(x,y): converte coordenadas cartesianas em polares. - [x,y]=pol2cart(th,r): converte coordenadas polares em cartesianas. - [th,phi,r]=cart2sph(x,y,z): converte coord. cartesianas em esféricas. - [x,y,z]=sph2cart(th,phi,r): converte coord. Esféricas em cartesianas. Polinômios e Interpolação de Dados - roots(v): retorna raízes do polinômio. - poly(v): Dado um vetor contendo as raízes de polinômios, retorna outro contendo os coeficientes deçle. - yn=polyval(p,xn): avalia valor do polinômio dado. - p=polyfit(x,y,n): retorna coeficientes de polinômio de grau n que melhor aproxima(método mínimos quadrados) a curva gerada por (x,y). Otimização - fminbnd(‘equação’,a,b): retorna a coordenada x do valor minimo de uma função de uma variável f(x) em um intervalo fixo. - fzero(‘equação’,valor): retorna coordenada x, onde f(x)=0 a partir de um valor qualquer. Integrais Numéricas - q=quad(‘eq’,a,b): avaliação de integral numérica.(valor da área) - a=dblquad(‘eq’,xmi,xma,ymi,yma): avaliação de integral dupla. - a=triplequad(‘eq’,xmi...): avaliação de integral tripla. Funções de Data/Hora - clock: retorna data e hora como vetor numérico. - etime(clock,t0): tempo gasto(diferença entre tempo). Funções de Cadeia de Caracteres - num2str(x): converte numero em cadeia de caractere. - str2double(x): converte cadeia de caractere em numero. -str2num(x): converte matriz de cadeia de caracteres em numero.
Compartilhar