36
Breve Introdução à Programação em MATLAB Aulas Práticas de Aprendizagem Automática & Data Mining Ano Lectivo 2007/2008 Susana Nascimento Joaquim F. Silva Departamento de Informática snt @ di . fct . unl .pt [email protected]

Susana Nascimento Joaquim F. Silva Departamento de Informática [email protected] .pt

  • Upload
    kale

  • View
    29

  • Download
    0

Embed Size (px)

DESCRIPTION

Breve Introdução à Programação em MATLAB Aulas Práticas de Aprendizagem Automática & Data Mining Ano Lectivo 2007/2008. Susana Nascimento Joaquim F. Silva Departamento de Informática [email protected] .pt [email protected]. Introdução ao MatLab. - PowerPoint PPT Presentation

Citation preview

Page 1: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Breve Introdução à Programação em MATLAB

Aulas Práticas de Aprendizagem Automática & Data Mining

Ano Lectivo 2007/2008

Susana Nascimento

Joaquim F. Silva

Departamento de Informática

[email protected]

[email protected]

Page 2: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Introdução ao MatLabO ambiente de trabalho das aulas práticas: MATLAB.

O MATLAB é um ambiente de programação de alto nível para aplicações científicas e de engenharia.

Facilidades Oferece um leque alargado de bibliotecas de funções pré-definidas.

Muito amigável em funcionalidades gráficas para visualização de dados.

Largamente divulgado em universidades e laboratórios de investigação.

Muito conveniente para o desenvolvimento eficáz de protótipos.

Page 3: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

MATLAB the Language of Technical Computing

Simulink for Model-based and System-Level Design

Site para consulta da linguagem:http://www.mathworks.com/access/helpdesk/help/techdoc/learn_matlab/learn_matlab.shtml

Page 4: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Sumário

• Tipos de dados – arrays: caracteres, numéricos, estruturados, …

• Operadores – aritmética, relacionais, lógicos.

• Fluxo de Controlo– condicionais, case, while, etc.

• M-functions– sintaxe– Exemplos e funções simples

Page 5: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt
Page 6: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Tipos de Dados em MatLab

Array

Char Numeric Structure Cell‘a’ image.width = 120

image.name = ‘face1’

Uint8(8 bit unsigned integer, from 0 to 255,e.g., image gray scales)

Doublee.g., 3.2567(8 bytes)

Page 7: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Uint8 e Doubles

• Double– Maioria funções MATLAB

• doubles como argumento de entrada• return double

Page 8: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Uint8 e Doubles>> a=1:5a = 1 2 3 4 5

>> b=uint8(a)b = 1 2 3 4 5

>> c=double(b)c = 1 2 3 4 5

>> a*2.5ans = 2.5000 5.0000 7.5000 10.0000 12.5000

>> b*2.5ans = 3 5 8 10 13

>> c*2.5ans = 2.5000 5.0000 7.5000 10.0000 12.5000

Page 9: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Tipo ‘Char’>> c=['hello'];>> whos Name Size Bytes Class Attributes

a 1x5 40 double ans 1x5 40 double b 1x5 5 uint8 c 1x5 10 char

>> c(1)

ans =

h

>>

Page 10: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Tipo de Dados ‘Char’c =hello

>> d=[c,‘ again']d =hello again

>> b=['hello';'again']b =helloagain

>> size(b)ans =2 5

Page 11: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Tipo de Dados ‘Struct’>> image.height=3;>> image.width=3;>> image.data = [8 10 2; 22 7 22; 2 4 7];>> whos Name Size Bytes Class Attributes

ima 1x1 130 struct image 1x1 590 struct

>> clear ima>> whos Name Size Bytes Class Attributes

image 1x1 590 struct

>>

Page 12: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Arrays de Estruturas>> image.name='Tom';>> image.height=3;>> image.width=3;>> image.data=[8 10 2; 22 7 22; 2 4 7];>> image(1)=image;>> image(2).name='Mary';>> image(2).height=4;>> image(2).width=4;

>> whos Name Size Bytes Class Attributes image 1x2 870 struct

>> image

image =

1x2 struct array with fields: name height width data

Page 13: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Arrays de Estruturas>> image(2)

ans =

name: 'Mary' height: 4 width: 4 data: []

>> image(1)

ans =

name: 'Tom' height: 3 width: 3 data: [3x3 double]

>>

>> image.name='Tom';>> image.height=3;>> image.width=3;>> image.data=[8 10 2; 22 7 22; 2 4 7];>> image(1)=image;>> image(2).name='Mary';>> image(2).height=4;>> image(2).width=4;

>> whos Name Size Bytes Class Attributes image 1x2 870 struct

>> image

image =

1x2 struct array with fields: name height width data

Page 14: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Operadores

• Aritméticos– Computação numérica, e.g., 2^10

• Relacional– Comparação quantitativa de operandos– e.g., a < b

• Lógico– AND, OR, NOT– Devolve variável Booleana, 1 (TRUE) ou 0 (FALSE)

Page 15: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Operadores Aritméticos

• Transposta, a’• Potência, a^2

• Adição, multiplicação, divisão – a(1)*b(2)– a*b

• Aplica-se se a e b forem matrizesde dimensões compatíveis(columns(a) = rows(b))

– a.*b (elemento a elemento)• Excepto para operações com matrizes, a maioria dos

operandos devem ser do mesmo tamanho,a menos que um seja um escalar

Page 16: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Operadores Aritméticos• Transposta, a’• Potência, a^2

• Adição, multiplicação, divisão – a(1)*b(2)

– a*b• Aplica-se se a e b forem matrizes

de dimensões compatíveis

(columns(a) = rows(b))– a.*b (elemento a elemento)

excepto para operações com

matrizes, os operandos devem

ser do mesmo tamanho, a menos que

um seja escalar

» a = [2 3];» b = [4 5];» a(1)*b(2)ans = 10

» a*b??? Error using ==> *Inner matrix dimensions must agree.

» a*b'ans = 23

» a.*bans =

8 15

» b/2ans = 2.0000 2.5000

Page 17: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Operadores Relacionais

• <, <=, >, >=, ==, ~=

• Compara elementos correspondentes de

arrays das mesmas dimensões• Se um é escalar e o outro não,

o escalar é comparado com cada elemento• O resultado é 0 ou 1, elemento a elemento

» aa = 2 3

» bb = 4 5

» a > bans = 0 0

» b > aans = 1 1

» a > 2ans = 0 1

Page 18: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Controlo de Fluxo

• If, else, endif– if index<100

statementselse statementsend

• For…..– For i = 1:100

statementsend

• Switch, while

Page 19: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Programação em MATLAB

• Ficheiros com código MATLAB: “M file”, e.g., sort.m

• Dois tipos de M-files– scripts

• Não há variáveis de entrada• Não são returnados valores• Operam os dados na workspace

– funções• Podem aceitar argumentos e retornar valores• Por default as variáveis são locais• Funcionalidade do Matlab aumentada pela utilização de

funções

Page 20: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exemplo de Script MATLAB• % script randVect• % Script simples para gerar um vector de n n. aleatórios. • % ilustar aplicando:• % (a) loops for, and (b) chamada directa a uma função.• %• %•

Page 21: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exemplo de Script MATLAB• % script randVect• % Script simples para gerar um vector de n n. aleatórios. • % ilustar aplicando:• % (a) loops for, and (b) chamada directa a uma função.• %• %

• n = 100000; % the number of points for the "for loop”• y = zeros(n,1); % preallocate memory for y• fprintf('Simulating %d random numbers.....\n\n',n);

• Inicialização de variáveis

Print de informação para o ecran

Page 22: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exemplo de Script MATLAB% script randVect% Script simples para gerar um vector de n n. aleatórios. % ilustar aplicando:% (a) loops for, and (b) chamada directa a uma função.

n = 100000; % número de elementos do vector (iterações do “loop for”)y = zeros(n,1); % prealoca memória para o vector yfprintf('Simulando %d números aleatórios.....\n\n',n);

% primeiro fazer os cálculos no “loop for"fprintf('For loop calculations.....\n');tic % iniciar o timer for i=1:n y(i) = rand(1);endtotal = sum(y);fprintf('Sum of %d random numbers = %f\n',n,total);t1 = toc; % ler o tempo que passou desde o “tic” (em segundos)fprintf('Tempo gasto, no loop = %6.5f microseconds\n\n', (t1)*1000);

…...

(1) Calcula n n. aleatóriose correspondente soma usando loop for; (2) Calcular tempo execução; (3) mostrar resultado

Page 23: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exemplo de Script MATLAB

…………% agora calculando através da vectorizaçãofprintf('Vectorization calculations.....\n');

tic % iniciar o timer z = rand(n,1);total = sum(z);

fprintf('Soma dos %d números aleatórios = %f\n',n,total);t2 = toc; % ler o tempo gasto desde o “tic” (em segundos)fprintf(‘Tempo gasto = %6.5f microsegundos\n', (t2)*1000);

(1) Calcula n n. aleatóriose correspondente soma usando função rand; (2) Calcular tempo execução; (3) mostrar resultado

Page 24: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Gerador de números (pseudo) aleatórios em MatLab

• Gera sequência (de comprimento n) de nºs pseudo aleatórios:– Geração da sequência: x(i) = mod(a * x(i-1), m) – Inicialização com valor (“seed”)

» help rand

RAND Uniformly distributed random numbers. RAND produces pseudo-random numbers. The sequence of numbers generated is determined by the state of the generator. Since MATLAB resets the state at start-up, the sequence of numbers generated will be the same unless the state is changed. S = RAND('state') is a 35-element vector containing the current state of the uniform generator. RAND('state',S) resets the state to S. RAND('state',0) resets the generator to its initial state. RAND('state',J), for integer J, resets the generator to its J-th state. RAND('state',sum(100*clock)) resets it to a different state each time. This generator can generate all the floating point numbers in the closed interval [2^(-53), 1-2^(-53)]. Theoretically, it can generate over 2^1492 values before repeating itself.

Page 25: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exemplo de função MATLABfunction [meanr, stdr, z] = simulate(n);

Identificador de função

Lista de valores de output devolvidos

Nome dafunção

Lista de argumentos de entrada,(separados por vírgula)

Page 26: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Função MATLAB• Definição de linha de função

– Requerida em todas as funções • Lista de inputs e outputs

– vírgula separadora: [y, z] = average(a, b, c)– Para mais do que um output, os outputs são limitados por parêntesis

rectos• Variáveis de entrada

– Variáveis de função são locais à função – As variáveis de entrada são legíveis pela função: cópias locais podem

ser feitas se precisarmos de mudar os inputs• Escopo

– MATLAB procura seguindo a ordem: • nome da variável, subfunção, directoria corrente e search path do

MATLAB

Page 27: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exemplo de função MATLABfunction [meanr, stdr, z] = simulate(n);% % Função que calcula e devolve: média e desvio padrão dos números aleatórios % (distribuição uniforme)%% INPUTS:% n: number (inteiro) de nºs (pseudo)aleatórios a gerar.%% OUTPUTS:% meanr: média dos n nºs (pseudo)aleatórios % stdr: desvio padrão dos nºs (pseudo)aleatórios % z: array n x 1 de nºs (pseudo)aleatórios

Funções comentadas

Page 28: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exemplo de função MATLABfunction [meanr, stdr, z] = simulate(n);%% Função que calcula e devolve: média e desvio padrão dos números aleatórios % (distribuição uniforme)%% INPUTS:% n: number (inteiro) de nºs (pseudo)aleatórios a gerar.%% OUTPUTS:% meanr: média dos n nºs (pseudo)aleatórios % stdr: desvio padrão dos nºs (pseudo)aleatórios % z: array n x 1 de nºs (pseudo)aleatórios

% testa se n é inteiro positivoif (rem(n,1)~=0) | n<=0 error('Input n deve ser inteiro positivo');end

Validar condições com mensagens erro

Page 29: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exemplo de função MATLAB…

fprintf(‘Calcula Média e desvio padrão de %d números aleatórios.....\n\n',n);

% gera n números aleatóriosz = rand(n,1);

% calcula a média e o desvio padrãomeanr= mean(z); fprintf('Média dos %d números aleatórios = %f\n',n,meanr);stdr= std(z);fprintf(‘Desvio padrão dos %d números aleatórios = %f\n',n,stdr);

Não necessita de função return explícitaValores não devolvidos são locais à função

Page 30: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Chamada da função MATLAB>> [x,y]=simulate(200)Calcula média e desvio padrão de 200 números aleatórios.....

Média dos 200 números aleatórios = 0.493962Desvio padrão dos 200 números aleatórios = 0.282144

x = 0.4940

y = 0.2821

>> [x,y]=simulate(200000)Calcula média e desvio padrão de 200000 números aleatórios.....

Média dos 200000 números aleatórios = 0.500110Desvio padrão dos 200000 números aleatórios = 0.288374

x = 0.5001

y = 0.2884

Page 31: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Outra Função MATLABfunction [meanr, stdr, z] = simplot(n,plotflag);% % Função que, relativamente a um vector de n valores uniformemente %distribuidos calcula e devolve: média e desvio padrão dos números. Se% var plotflag for 1 é feito o plotting do histograma dos nºs gerados.%% INPUTS:% n: number (inteiro) de nºs (pseudo)aleatórios a gerar.

% plotflag: se plotflag=1, desenhar histograma de z, % c.c. não.%% OUTPUTS:% meanr: média dos n nºs (pseudo)aleatórios % stdr: desvio padrão dos nºs (pseudo)aleatórios % z: array n x 1 de nºs (pseudo)aleatórios

% testa se n é inteiro positivo if (rem(n,1)~=0) | n<=0 error('Input n deve ser inteiro positivo');end

Page 32: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Simplot.m (cont.)

% generate the n random numbersz = rand(n,1);

% calculate the mean and standard deviationmeanr= mean(z); fprintf('Média de %d números aleatórios = %f\n',n,meanr);stdr= std(z);fprintf(‘desvio padrão dos %d números aleatórios = %f\n',n,stdr);

if nargin>1 & plotflag==1 figure hist(z, max(n/100,10))end

Novo código

Nargin n. de argumentos de entrada

sintaxe: hist(data vector, número de interv.)

Page 33: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Fazer o plotting da média amostral em função de n

• Alteração do simplot.m– Para cada valor i = 1 … n, calcular

• mean(i) = [sum (x(i)…… x(i)) ]/I• mean(i) deve convergir para true mean 0.5 para

n>>>– “Lei dos grandes números” da estatística

– Fazer plot para visualizar– Características de plotting acrescidas

• grids, log axes, labels, titles

Page 34: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Código acrescentado ao simplot.m

if nargin>1 & plotflag==1 figure % figure para ver quão uniforme é a distribuição hist(z,max(n/100,10)) figure % figure para ver como a amostra converge para 0.5 cs = cumsum(z); % gera um vector de somas cacumuladas ns = 1:n; % gera um vector de tamanhos de amostras runningmean = cs’./ns; % calcula as médias (running mean) plot(ns,runningmean); %runningmean = cs./ns'; %semilogx(ns,runningmean); %grid; %axis([1 n 0 1]); %xlabel('Numero de números aleatórios gerados'); %ylabel(‘Valor da média'); %title('Convergência da média da amostra para a média verdadeira'); end

Page 35: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exercícios1- Fazer uma função que receba como entrada um vector e devolva outro vector correspondente à normalização do primeiro.

nxxxX ,, 21 nzzzZ ,, 21

)var(X

xxz ii

ni

ii xx

nX

1

2)(1

1)var(

ni

iixn

x1

1

Page 36: Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl .pt

Exercícios2- Fazer uma função que, a partir de uma matriz de N objectos e A atributos caracterizadores, devolva a matriz de correlações entre os atributos.