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 MATLAB LABORATÓ RIO DE MATRIZES Anderson Canêdo de Oliveira 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 conto 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 % linha, coluna, matriz >> a(3) = 2 % 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] % valores em ASCII >> char(a) >> a = Resposta 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) % concatena os vetores a e b na dimensão Dim >> cat(2,célula{:}) 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 = Nome: ST01 Identificador: 200 Valores: [10 20 30] >> s(2) >> ans = Nome: ST02 Identificador: 201 Valores: [0.1
>> s(1).nome(2) >> ans = T 5] MONTANDO VETORES >> a = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1] ou ou ou >> for j=1:11 % para j de 1 até 11 a(j) = (j-1)/10; % compute o j-ésimo termo >> % indicação de final >> a = linspace(0,1,11) >> 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 = 10 a, final = 10 b, 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; ; Switch switch Val case 0 A(I,J) = 2; case 1 A(I,J) = -1; otherwise A(I,J) = 0; 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; I = I + 1; For for <Valor> = <inicio>:<incremento>:<fim> <Expressão1>... <Expressão2>
for i=1:10000 x(i) = cos(2*pi*i/100); ; 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 a ij = 3 ij. 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 FUNÇÕES Linhas de comentário para documentação 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; m = sum(x) / nl; function d = calc_dp(x) [nl, nc] = size(x); if nl == 1 nl = nc; nc = 1; x = x ; m = sum(x) / nl; for i=1:nc m2(:,i) = (x(:,i) - m(i)).^ 2; m2 = sum(m2) / (n1 1); d = sqrt(m2); VARIÁ VEIS GLOBAIS global <nome da variável> % declarar também dentro da função which pesquisa arquivos >> which sin >> which polyfit struct e cell array RESOLVENDO SISTEMAS LINEARES >> A = fix (10 * rand(10));
>> B = fix (100 * rand(10,1)) >> C = [A B] >> D = rref(a) >> E = 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 (nome do arquivo) >> save (arquivo) <nome das variáveis> - salvar variáveis (.mat) >> load (nome do arquivo.mat) >> load (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>) % importa dados >> dlmwrite (<arquivo>, <matriz>, <delimitador>) % 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 leg( x * cos(x) ) - lega 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> ); >> leg( 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) % 1 linha, 3 colunas na posição 1 >> plot(x,y); >> >> subplot(1,3,2) % na posição 2 com zoom >> plot(x,y); >> zoom(2); >> >> subplot(1,3,3) % na posição 3, 2 funções no mesmo gráfico >> plot(x,y, r ); >> hold >> plot(x, x.*sin(x)); 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