Curso MATLAB 6 Instrutor: Marcelo Escobar Introdução [email protected] Introdução a Programação: Entradas Processamento Dados Fornecidos ao Programa Lógica de Programação Algoritmo Dados Fornecidos pelo Programa Argumentos de Entrada Linguagem Argumentos de Retorno Ex: Dados x1, x2, x3 Seqüência de comandos ??? Saídas Retornar menor Valor Algoritmo: Sequência de Passos Lógicos: Independente da Linguagem. Dados: x1, x2, x3 Ler x1 Comparar x1 e x2 Se x1 < x2, min= x1 Se x2 < x1, min= x2 Comparar min e x3 Se min<x3 , min=min Se x3 <min,min=x3 Retornar: min Obs: Dúvidas? Referências/Lógica de Programação no CD rom Linguagem MATLAB: Núcleo da Linguagem formada por vetores e Matrizes. Recursos de Programação. Ferramenta de Interface Gráfica com o Usuário. Caixas de Ferramentas. Comand Window: [ área de trabalho] >>demo [apresenta uma série de demonstrações de uso] >>tour [apresenta um tour pelo matlab] Janelas MATLAB: Comand Window: Área de Trabalho. Comand History: Registro de Comandos executados na C.W. Current Directory: Mostra Arquivos presentes no Diretorio Atual. Worspace: Armazenamento de Variáveis criadas na Comand Window. M-file Editor: Área de Edição de arquivos. Launch Pad: Caixas de Ferramentas do matlab. Simulink: Ferramenta do Matlab para Sistemas Dinâmicos. Tipos de Variáveis : Real , Inteira: double array- variáveis numéricas. Complexa: double array (complex)-variáveis numéricas. Caracter: Char array-variáveis de texto. Célula: cell array-Permite armazenamento de variáveis de tipos diferentes no formato celular do Matlab. Estrutura: struct array-Permite armazenamento de variáveis de tipos diferentes no formato estrutural do Matlab. Formato de Variáveis Numéricas : >>help format >>format short [5 dígitos] >>format short e [5 dígitos +expoente] >>format long [16 dígitos] >>format long e [16 dígitos +expoente] >>format + [positivo, negativo ou 0] >>format rat [Aproximação racional] Comandos do MATLAB : Na comand Window: ( >> “sinal de prompt” ) >>helpdesk [documentação] >>helpwin [help on line] >> help [ lista os tópicos de ajuda] Ex: >>help elfun [ funções matemáticas] Fornece uma listagem de funções. Para verificar o funcionamento de cada função: Ex:>>help sin [sin(X) is the sine of the elements of X.] De maneira Geral: [saída1,...,saídan]=comando(entrada1,...,entradan) lookfor: procura de comandos com alguma palavra. Primeiros Passos: Após abrir o Matlab e fazer um reconhecimento geral, a primeira coisa a se fazer após editar as suas preferências, é selecionar o diretório de trabalho. Caso isso não seja feito, o Matlab salva os arquivos na pasta Work dentro do diretorio no qual o Matlab se encontra instalado. Como mudar o Diretório? Opção 1: Na barra de ferramentas, em current directory, clicar no botão [...] e selecionar o diretorio como no explorer. Opção 2: usando o comando [ cd ] e digitar todo o caminho do diretorio, lembrando que nesse caso, não deve haver espaços nem caracteres especiais. [help cd]. >>cd c:\meus_documentos Como criar Variáveis: Atribuição: [ = ] x Equivalência: [==] : Ex: >>A=2 [atribui a A o valor numérico 2] >>A==2[A=2 ?, retorna 1 se verdadeiro e 0 se falso] Matlab é case Sensitive.[ Variável A é diferente de a] Caso não se forneça o nome da variável de atribuição, o Matlab cria uma variável chamada ans.[answer]. Se a variável já existe, o matlab armazena sempre a ultima atribuição feita. Deve-se evitar dar nomes às variáveis usando nomes de comandos internos do matlab ou usando variáveis especiais que controlam o fluxo da programação. O nome da variável deve começar por uma letra e não deve conter caracteres especiais nem espaço. Como criar Variáveis: Variáveis Especiais: For end if while function elseif case otherwise switch continue else try catch global persistent break 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. Comandos de Gerenciamento: >> help general Who: lista as variaveis atuais Whos: lista as variaveis atuais com seus respectivos tipos. What: lista os arquivos no diretorio atual. Cd: seta o diretorio. Pwd: retorna o caminho do diretorio atual em uma variável. Clear: limpa as variaveis atuais[clear all] Clc: limpa a tela de comando sem deletar as variaveis. Close all: fecha as janelas de figuras abertas. Como criar Variáveis: Execução de comandos: [;]-no final do comando executa e não exibe resultado. [,]-permite a execução de dois comandos na mesma linha, lembrando que eles são executados seqüencialmente. [Crtl+C] -interrompe a execução do comando, usado no caso de travamento durante a execução. [ ] -retorna as linhas executadas anteriormente. [%]-indica comentário [...]-permite continuação de escrita do comando na linha seguinte ex: A=2.1;B=3*A; Comandos de Dimensionamento: length: dimensão do vetor size: dimensão da matriz Vetores: Criando um vetor: Opção 1: >> C=[1 2 3 4 5] ou >> C=[1 ,2 ,3 ,4 ,5] Opção 2: Usando comando linspace, ou logspace. linspace(valor inicial, valor final, número de pontos) linspace cria um vetor linearmente espaçado. >>C=linspace(1,5,5) Opção 3: >>C=1:1:5 Valor inicial: incremento: valor final Opção 4: Usando estrutura for For i=1:5 C(i)=i; end Obs: >>A=2; O matlab encara a variável A como uma matriz 1x 1. Manipulação de Vetores: Operações Básicas: +, - ,* ,/, ^ Operações Ponto a Ponto: ./, .*, .^ Transposição: C’ [ transposta de C-usa aspas simples] Operações elementares: Log exp sin cos tan etc... >>help elfun Ex: >> a=[ 1 2 3]; b=[ 4 5 6]; >> a.*b >>a*b’ Matrizes: Como criar: Opção 1: a partir de vetores C=[ 2 3];D=[ 3 4]; M=[C;D] Opção 2: M= [ 2 3; 3 4] ou M=[ 2,3; 3, 4]; Opção 3: usando estrutura for For i=1:2 For j=1:2 M(i,j)=i+j; end end >>help printmat [ exibição da matriz na tela] Manipulação de Matrizes: Além das operações já citadas anteriormente para vetores. >>help elmat >>help matfun >>help sparfun Produto Matricial: A*B Inversa: inv(A) Determinante: det(A) Posto: rank(A) Valores Caracteristicos: eig(A) rand , eye, zeros, ones- criam matrizes de ordens definidas. Indexação de Matrizes: M(linha, coluna) M(1,1)- retorna elemento M11 Caso não seja especificado a coluna da matriz, o que não é necessário no caso de vetores, ele considera o vetor coluna 1. Ex: A=[ 1 2; 3 4] A(1)=1 A(2)=3 Pode-se também usar incrementos: C=[ 1 2 3; 4 5 6]; C(1:2,2)=[2 ;5]; C(1,1:2:3)=[1 3]; C(1,2:3)=[2 3]; C(:,3)=[3; 6]; [:] indica todas as linhas ou colunas. Matrizes Celulares: Opção 1: Criando matriz celular vazia e depois preencher M=cell( num linhas, num colunas), M=cell(2,3) Opção 2: Preencher direto M(1,1)={ [ 1 2; 3 4]} Indexação de posições celulares: M{ linha 1, coluna j}: M{1,2}=[ 1 2; 3 4]; Indexando elemento internos das células: M{1,2}(2,1)=3 >>cellpisp – exibe toda a célula Utilizada para armazenar variáveis matriciais ou de diferentes tipos com fácil indexação. Estruturas: Como criar? Variável: Marcelo Marcelo.idade=25 Marcelo.peso=70 Marcelo.altura=1.70 Variável utilizada para armazenar variaveis de tipos diferentes de uma forma estruturada. Utilizada por exemplo em Banco de dados com fácil acesso de informações. Variáveis de Texto: Como criar? D=‘valores’ E=‘ resultados obtidos’ >>disp(D); exibe o texto contido em D >>eval(‘D’) ; avalia o conteúdo do string. Ex: >>T=‘D=2’; >>eval(T); cria a variável D. Concatenação: Str=[ ‘valor=‘ ‘D’] Vamos ver melhor para que a concatenação em interfaces. Conversão de Variáveis: >>help datatypes >>help strfun >>Char [ converte para caracter] >>Double [ converte para número] >>int2str [ converte de inteiro para string] >>str2int [converte de string para inteiro] >>num2str [converte de real para string] >>str2num [converte de string para real] Funções de Arredondamento: >>help elmat >>help fix >>help floor >>help ceil >>help round [Arredonda na direção do zero] [Arredonda na direção de -oo] [Arredonda na direção de +oo] [na direção do inteiro mais próximo] >>help rem >>help abs >>help singn [ resto de divisão] [ modulo] [ sinal ] Operações Relacionais e Lógicas: >>help ops Operadores Relacionais: < - menor que <= -menor ou igual > - maior que >= -maior ou igual == - equivalência ~= -diferente Operadores lógicas: & -e | -ou ~ -não Operações Relacionais e Lógicas: Retornam sempre 1 se verdadeiro e 0 se falso Exemplos: v=[ 1 -2 3 -4 5] V>0: [ 1 0 1 0 1] (V>0) & (V<4): [ 1 0 1 0 0] (V==1) | (V<0): [ 1 1 0 10] ~(V<0): [ 10 10 1] Comando find: n=find(v>0) Ou [n,m]=find(v>0) N-linha M-coluna Encontra os índices da matriz que satisfazem operações relacionais e lógicas. Funções Relacionais e Lógicas: Retornam sempre 1 se verdadeiro e 0 se falso. xor: [ ou] any: [ qualquer] all: [todos] isreal: [ verdadeiro se real] iscomplex: [ verdadeiro se complexo] isprime: [ verdadeiro se primo] isifinite: [ verdadeiro se infinito] isnan: [ verdadeiro se não é um número] Controle de Fluxo: >>help lang Teste condicional: If else end Teste múltiplo: Switch case Exemplos: If A==0 B=3 Else B=4 end otherwise switch A case 0 ; B=3; otherwise; B=4; end Se A é igual a zero B=3 senão B=4. Controle de Fluxo: Loops: For i=1:10 A(i)=i; end A=[ 1 2 3 4 5 6 7 8 9 10] O uso da estrutura for, limita o número de iterações, ou seja, o número de vezes que os comandos são executados. it=0; While it<10 it=it+1; A(it)=it; End A=[ 1 2 3 4 5 6 7 8 9 10] A estrutura while permite a execução até que um critério seja satisfeito. Arquivos M: >> edit Ou Menu File– New--- M-file O uso do editor permite que os comandos a serem executados sejam salvos em um arquivo. Tipos de arquivos: Script [ entradas definidas internamente ou interativamente] Function [ arquivo genérico com entradas e saídas] Ex: Script [soma.m] A=2; B=3; Soma=A+B Execução: >>soma Função [som.m] function S=soma(A,B) S=A+B; ou >>som(2,3) >>help type [ exibe m-file na tela] Argumentos de Arquivos M: >>help iofun Entrada de dados: >> help xlsread [ lê dados de uma planilha em excel] >>help input [ recebe entrada de dados na Comand Window] >>help dlmread [ lê dados em arquivo de texto] >>help save [salva dados em arquivo .mat] >>help load [carrega dados de arquivos .mat] Saída de dados: >> help diary [registro do log da sessão] Pode ser usado para armazenar resultados em arquivo txt. >>help disp [exibição de texto e de variáveis na tela] Interfaces mais avançadas será vista no capitulo Interfaces com o usuário Argumentos de Arquivos M: >>help nargin [numero de argumentos de entrada de uma função] >>help nargout [numero de argumentos de uma função] Nargin pode ser usado para usar entradas opcionais. Nargout pode ser usado para limitar a execução de linhas de comando desnecessaria se um dos argumentos de saída não é pedido na chamada da função. Quando criamos as nossas funções, podemos inserir um texto de ajuda antes da primeira linha de comando, assim quando executarmos help nome_da_função esse texto será exibido na tela. function [s1,s2]=nome(e1,e2) %Digite aqui o help da função if nargin<2;e2=0.001;end S1=e1+e2; if nargout<1; s2=2*e2;end Execução de Arquivos M: >>help pause [permite uma pausa durante a execução] >>help echo [escreve na tela as linhas de comando] >>help beep [emite um sinal sonoro] >>help error [emite uma mensagem de erro na tela] >>help warning [emite uma mensagem de warning na tela] >>help keyboard [suspende execução até que o teclado seja acionado] >>help waitforbuttonpress [suspende execução até que o mouse seja acionado] Variáveis Globais e Locais: A execução de um arquivo m como um script, lê as variáveis existentes no workspace e salva todas as variáveis criadas durante sua execução. No entanto, quando executamos um arquivo m tipo function, este não lê as variáveis existentes no workspace, lê apenas as variáveis dadas na entrada do programa ou aquelas definidas internamente. Além disso, a function pode até exibir na tela resultados se não usarmos [;] no final da linha, mas ela só retorna os argumentos assinados em sua saída e não salva as demais variáveis no workspace. Para que uma function leia uma variável definida externamente, é necessário definir essa variável como global em todos os arquivos em que ela é utilizada, ou passar como parâmetro de entrada. Variáveis Globais e Locais: A desvantagem de passar como parâmetro, é que se usarmos uma sub-rotina pronta sendo chamada pelo nosso arquivo principal, precisamos alterar a mesma para esta receber as variáveis. Ex:Queremos resolver uma equação na forma F(x)= x2 –ax+2, onde a é fornecido pelo usuário. Sub-rotina: Function y=f(x) global a Y= x2 –ax+2; Programa principal: Function s=main(a) global a s=fsolve(‘f’,0); Ou Sub-rotina: Function y=f(x,a) Y= x2 –ax+2; Programa principal: Function s=main(a) s=fsolve(‘f’,0,[],a); Variáveis Globais e Locais: Nesse caso, a função fsolve, já possui uma entrada para parâmetros, mas muitas vezes quando usamos uma rotina genérica para resolver nosso problema, temos que redefinir a entrada da função e a depender da complexidade do programa temos que alterar em varias linhas e isso deixa a nossa sub rotina menos genérica. O sugerido é usar variáveis globais, e sempre no inicio dos programas usar um clear all para limpar as variáveis existentes no workspace evitando confusão na memória durante a execução de nossos problemas. Debugando Arquivos M: Debugar, consiste em depurar o programa, ou seja, verificar a existência de erros. >>help depfun [ dependências do arquivo] Permite o retorno de diretórios utilizados, funções utilizadas,dentre outras informações. >>help profile [ Perfil de desempenho] Traça um perfil de desempenho, com o tempo associado à execução de cada comando, dentre outras informações. Uso: >>profile on >>minha_função >>profile report