UFRJ - Instituto de Matemá tica – Departamento de Ciência da Computaç ã o Curso de Bacharelado em Informá tica Disciplina Tó picos Especiais em Inteligência Computacional – Redes Neurais – 2002/1 Anderson Canêdo de Oliveira MATLAB – LABORATÓ RIO DE MATRIZES BIBLIOGRAFIA MATLAB 6 – Fundamentos de Programaç ão - É lia Yathie Matsumoto - Editora É rica AJUDA help – help on-line em linha de texto helpwin – janela de help on-line helpdesk – documentaç ão em hipertexto (html) COMANDOS pathtool – janela para configuraç ão da lista de diretó rios de busca workspace – janela do workspace path / matlabpath – exibem path de busca corrente what – exibe arquivos ‘.m’ e ‘.mat’ contidos no diretó rio de trabalho clc – limpa tela which – identifica e localiza arquivo ! – chama comandos do SO >> !del teste.m format – formato de exibiç ão dos nú meros na tela who – lista nomes das variáveis em uso whos – lista nomes e tipos das variáveis em uso clear – elimina variáveis OPERADORES * multiplicação .* multiplicação por escalar ./ divisão por escalar \ divisão à esquerda (a\b equivale a a -1 * b) .^ potência escalar ‘ transposta EXPRESSÕ ES BOOLEANAS • 0 (zero) ou nil (nulo, vazio) indica condiç ão falsa • 1 (um) ou diferente de 0 (zero) indica condiç ão verdadeira Símbolos e operadores booleanos: Operador Teste retorna verdadeiro se Exemplo == I igual a J I == J ~= I diferente de J I ~= J < I menor que J I < J > I maior que J I > J <= I menor igual a J I <= J >= I maior igual a J I >= J ~ (not) I falso ~ I & (and) I e J verdadeiros I & J | (or) I ou J verdadeiro I | J VARIÁ VEIS São case-sensitive e o nome deve ser formado com o máximo de 32 caracteres CONTANTES NUMÉ RICAS pi – 3.141592... inf – infinito (1/0) NAN – não nú mero (0/0) realmin – menor nú mero real (2-1022) realmax – maior nú mero real (2-1023) FUNÇ Õ ES TRIGONOMÉ TRICAS sin – seno cos – cosseno sinh – seno hiperbó lico FUNÇ Õ ES MATEMÁ TICAS sqrt – raiz quadrada exp – exponencial log – logaritmo abs – retorna o valor absoluto fix – parte inteira de um nú mero real round – inteiro mais pró ximo floor – menor inteiro mais pró ximo ceil – maior inteiro mais pró ximo FUNÇ Õ ES MATRICIAIS eye – matriz identidade >> a = eye(3) >> a = 1 0 0 0 1 0 0 0 1 zeros – matriz de zeros ones – matriz de 1’s det – determinante inv – inversa reshape – reformata matriz size – vetor contendo o tamanho de cada dimensão da matriz lenght – comprimento do vetor ou dimensão máxima da matriz diag – retorna a diagonal de uma matriz ou cria matriz diagonal a partir de um vetor tril – matriz triangular inferior triu – matriz triangular superior fliplr – inverte ordem das colunas flipud – inverte ordem das linhas INDEXAÇ Ã O DOS ELEMENTOS DE UMA MATRIZ >> a = [4 3; 2 1]; >> a = 4 3 2 1 >> a(1,1) = 4 >> a(3) = 2 % linha, coluna, matriz % indexação seqüencial (ordem em linhas) TIPOS DE DADOS String (Cadeia de carcteres) >> >> >> >> >> txt = ‘Resposta’ a = double(txt) a = [82 101 115 112 111 115 116 97] char(a) a = Resposta % valores em ASCII Cell Array (células) Permite o armazenamento de matrizes de naturezas diferentes em uma ú nica estrutura identificada por um ú nico nome. >> >> >> >> >> celula = cell(2) celula{1,1} = eye(3) celula{1,2} = ‘matriz identidade’ celula{2,1} = pi celula{2,2} = 0:1:10 num2cell – transforma um vetor numérico em células >> v = 1:5 % v = [1 2 3 4 5] >> c = num2cell(v) >> c = [1] [2] [3] [4] [5] cat – faz a funç ão inversa, concatena vetores >> cat(Dim,a,b) >> cat(2,célula{:}) % concatena os vetores a e b na dimensão Dim STRUCT (ESTRUTURA) Permite o armazenamento de matrizes de naturezas diferentes, identificáveis por nome de campos. >> s = struct(‘Nome’, {‘ST01’}, ‘Identificador’, {200}, ‘Valores’, {[10 20 30]}) >> s = Nome: ‘ST01’ Identificador: 200 Valores: [10 20 30] >> s.Nome >> ans = ST01 >> s(2).Nome = ‘ST02’ >> s(2).Identificador = 201 >> s(2).Valores = [0.1 5]’ >> s(1) >> ans = >> s(2) >> ans = Nome: ‘ST01’ Identificador: 200 Valores: [10 20 30] Nome: ‘ST02’ Identificador: 201 Valores: [0.1 5] >> s(1).Nome(2) >> ans = T MONTANDO VETORES >> a = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1] ou >> for j=1:11 a(j) = (j-1)/10; >> end % para j de 1 até 11 % compute o j-ésimo termo % indicação de final ou >> a = linspace(0,1,11) ou >> a = 0:0.1:1 % a = <inicio>:<incremento>:<final> linspace(a,b,c) – vetor linearmente espaç ado (a = inicial, b = final, c = nú mero de elementos) logspace(a,b,c) – vetor logaritmicamente espaç ado (inicial = 10a, final = 10b, c = nú mero de elementos) CONCATENANDO MATRIZES a = [1 2] b = [3 4] Concatena matrizes em linhas >> c = [a b] % c = [1 2 3 4] Concatena matrizes em colunas >> d = [a ; b] % d = [1 2 3 4] find – retorna um vetor coluna com os índices seqüenciais dos elementos = 0 ou que satisfazem a condiç ão determinada >> b = find(a < 20) % retorna um vetor coluna com os índices dos elementos de a % menores de 20 sort(a, Dim) – ordena elementos da matriz a na dimensão Dim, se DIM não for informado ordena as colunas. RESOLVENDO SISTEMAS LINEARES Ax = b x = A-1 b >> A = [ 3 1 5 2] >> b = [2; -9] >> x = A\b Combinando as linhas >> U = [A b] >> u = rref(U) >> xu = u(:,3) EDITOR DE PROGRAMAS >> edit % - comentários ... – linha de comando continua na próxima linha SCRIPT Seqüência de comandos para automatizar algum processo repetitivo. Não trabalha com parâmetros de entrada nem de saída. Sempre trabalha com as variáveis do workspace (usa variáveis pré-definidas e define variáveis no workspace) FUNÇ Ã O Também é uma seqüência de comandos, mas que aceita comandos de entrada, retorna parâmetros de saída. Utilizam seu pró prio espaç o de memó ria para armazenar suas variáveis locais. function [ps1, ps2, ..., psn] = nome_da_funcao (pe1, ..., pem) ps1, ..., psn = Parâmetros de saída pe1, ..., pem = Parâmetros de entrada % estat.m - Exemplo 1 % [media, desvio_padrão = stat(x) % retorna média e desvio padrão dos valores em x function [media, desvio_padrão = stat(x) media = mean(x); % media desvio_padrao = std(x) % desvio padrão • Interessante aproveitar o cabeç alho para documentar o programa e gerar os textos de auxílio par o comando help. • A funç ão e o arquivo m-file devem ter o mesmo nome. • Variáveis do workspace não são reconhecidas dentro das funç õ es • Podem ser criadas subfunç õ es dentro de uma funç ão ESTRUTURAS DE SELEÇ Ã O If, elseif, else if I == J A(I,J) = 2; elseif abs(I – J) == 1 A(I,J) = -1; else A(I,J) = 0; end; Switch switch Val case 0 A(I,J) = 2; case 1 A(I,J) = -1; otherwise A(I,J) = 0; end ESTRUTURAS DE REPETIÇ Ã O While while I < J if I == J A(I,J) = 2; elseif abs(I – J) == 1 A(I,J) = -1; else A(I,J) = 0; end I = I + 1; end For for <Valor> = <inicio>:<incremento>:<fim> <Expressão1> ... <Expressão2> end for i=1:10000 x(i) = cos(2*pi*i/100); end; EXERCÍCIOS 1) Montar o vetor X = sin(2 * pi * i/100), i = 1, 2, ..., 10000 2) Escreva um programa no Matlab para um valor n e construir uma matriz A (nxn) com elementos aij = 3ij. Tenter fazer usando laç os e depois tente refazer sem usar laç os 3) Escreva um pequeno programa para achar o menor inteiro positivo r, tal que 2 r = ∝ no ponto aritmético flutuante. Dica: Constante do Matlab inf = infinito, ex. 1/0 4) Diferenç a entre (A * A) e (A .^ A) ? Exercício aula anterior SCRIPTS Linhas de comentário para documentaç ão FUNÇ Õ ES Ex1: Criar funç ão para calcular média e desvio padrão Ex2: Criar funç ão com subfunç õ es para calcular a média e o desvio padrão function m = calc_media(x) [nl, nc] = size(x); if nl == 1 nl = nc; end m = sum(x) / nl; function d = calc_dp(x) [nl, nc] = size(x); if nl == 1 nl = nc; nc = 1; x = x’; end m = sum(x) / nl; for i=1:nc m2(:,i) = (x(:,i) - m(i)) .^ 2; end m2 = sum(m2) / (n1 – 1); d = sqrt(m2); VARIÁ VEIS GLOBAIS global <nome da variável> which – pesquisa arquivos >> which sin >> which polyfit struct e cell array RESOLVENDO SISTEMAS LINEARES >> A = fix (10 * rand(10)); % declarar também dentro da função >> >> >> >> B C D E = = = = fix (100 * rand(10,1)) [A B] rref(A) A\B Calcular a diferenç a de D(:,11) e E Format – muda a formato de apresentaç ão format long format short IF, Switch, For Save e Load >> >> >> >> save save load load (nome do arquivo) (arquivo) <nome das variáveis> - salvar variáveis (.mat) (nome do arquivo.mat) (nome do arquivo) (variável) find – retorna um vetor coluna com os índices seqüenciais dos elementos = 0 ou que satisfazem a condiç ão determinada >> b = find(a < 20) % retorna um vetor coluna com os índices dos elementos de a % menores de 20 FUNÇ Õ ES PARA IMPORTAÇ Ã O DE DADOS Arquivos ASCII >> dlmread (<arquivo>, <delimitador>) >> dlmwrite (<arquivo>, <matriz>, <delimitador>) % importa dados % exporta dados Outras funç õ es - Matlab 6 importdata – importa dados de vários tipos de arquivos (bmp, mat, txt, wav, etc) xlsread – importa dados de planilhas excel PLOT >> >> >> >> >> >> % Exemplo: Gráfico f(x) = x * cos(x), -2π < x < 2π x = -2*pi : 0.1 : 2*pi; y = x .* cosx(x); figure(1); plot(x,y); % default : linha contínua azul plot(x,y,’r*’); % marcador * na cor vermelho CONFIGURAÇ Õ ES DO GRÁ FICO hold on – habilita / desabilita exibiç ão de gráficos na mesma janela. grid on – habilita / desabilita grid do gráfico zoom(fator) – zoom no gráfico legend(‘x * cos(x)’) - legenda xlabel(‘Eixo x’) – nome do eixo x ylabel(‘Eixo y’) – nome do eixo y title(‘Grá fico f(x)=x * cos(x)’) – titulo do gráfico axis([xmin xmax ymin ymax]) – altera limites do gráfico (escala) >> axis([-pi pi –1 1]); VÁ RIOS GRÁ FICOS NUMA SÓ JANELA >> plot (x,sin(x),’r’, x,cos(x),’k:’, x,sin(x).*cos(x),’b>’); >> legend(‘sin(x)’,’cos(x)’,’sin(x).*cos(x)’); Plotando matrizes – cada coluna gera uma curva >> A = fix(10 * rand(10)); >> plot(A); plotyy – duas curvas no mesmo gráfico com escalas diferentes >> >> >> >> >> x = 0.1:0.1:10 plot(x, sin(x)); plot(x, exp(x)); plot(x, sin(x), ‘r’, x, exp(x), ‘b’); plotyy(x, sin(x), x, exp(x)); subplot(linhas, colunas, posiç ã o) – gera vários gráficos numa mesma janela. >> >> >> >> >> >> >> >> >> >> >> >> >> x = -2*pi:0.1:2*pi; y = x .* cos(x); subplot(1,3,1) plot(x,y); % 1 linha, 3 colunas na posição 1 subplot(1,3,2) plot(x,y); zoom(2); % na posição 2 com zoom subplot(1,3,3) plot(x,y,’r’); hold plot(x, x.*sin(x)); % na posição 3, 2 funções no mesmo gráfico exportar grá fico – grava gráfico como imagem no disco >> print –dbitmap –r300 <arquivo> GRÁ FICOS PARA FUNÇ Õ ES ESPECIAIS polar, loglog, semilogx, semilogy plot3 – cria uma curva no espaç o 3D >> x = -4*pi : 0.1 : 4*pi >> y = -4*pi : 0.1 : 4*pi >> plot3(cos(x), sin(y), (x+y)) % fornecer coordenadas x, y, z FUNÇ Õ ES GRÁ FICAS 2D ESPECIAIS area – gráfico de área bar – gráfico de barra vertical barh – gráfico de barra horizontal stairs – gráfico escada pie – gráfico de pizza scatter – gráfico discreto que indica pontos com marcadores stem – gráfico discreto que indica pontos com hastes