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



Documentos relacionados
COMPUTAÇÃO E PROGRAMAÇÃO

OPERADORES E ESTRUTURAS DE CONTROLE

Sistemas e Sinais (LEE & LETI)

Slides_Java_1 !"$ % & $ ' ' Output: Run java. Compile javac. Name of program. Must be the same as name of file. Java source code.

Notas de Aula MatLab - 2

Javascript 101. Parte 2

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Introdução aos cálculos de datas

Programação Básica em Arduino Aula 2

IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01

Tutorial de Matlab Francesco Franco

Capítulo 2. Fundamentos de Java

Departamento: Matemática Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007. Aula prática n o 1 - Introdução ao MATLAB

Programa. Linguagem MATLAB Métodos Computacionais para EDO Métodos Computacionais para EDP. Critérios

Laboratório de Sistemas e Sinais L1: Matrizes, Sons e Imagens

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Programação em MATLAB

Aula 2P - Comandos básicos do Matlab aplicados a PDS

Computação e Programação

Introdução à Programação

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Introdução à Programação

Programação em C++: Introdução

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

Tipos de Dados Simples

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

Programação em MATLAB

INF 1005 Programação I

PHP. Hypertext Pre-Processor

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.

Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução. (procedimentos e funções)

3 Classes e instanciação de objectos (em Java)

MATLAB. Tópicos Elementares. 1. Tipos de dados: vectores e matrizes 2. Operadores 3. Controlo de Fluxo

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

CONVENÇÃO DE CÓDIGO JAVA

Instituto Federal do Sertão-PE. Curso de PHP. Professor: Felipe Correia

SPSS Statistical Package for the Social Sciences Composto por dois ambientes:

Análise e Processamento de Imagem

O que é o JavaScript?

TUTORIAL MATLAB MATEMÁTICA COMPUTACIONAL Aula 20-Novembro-2013

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

ANÁLISE DE DADOS. Familiarização com o SPSS

Aplicações de Escritório Electrónico

INTRODUÇÃO OBJECT PASCAL/DELPHI

Oficina de MATLAB Nível Básico Aula 1

Utilidades Diversas. Aplicações Informáticas para Engenharia. SérgioCruz

Tipo de Dados em Linguagem C

Agenda. 5 - Microsoft Excel. Conceitos Fórmulas em Excel Operadores Endereços Funções em Excel. ISEG - Instituto Superior de Economia e Gestão/

Projeto de Redes Neurais e MATLAB

Internet e Programação Web

Análise de complexidade

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Estrutura de um programa em linguagem C

Informática para Ciências e Engenharias 2012/13. Teórica 10

Introdução à Programação

Informática para Ciências e Engenharias 2014/15. Teórica 5

Programando em C++ Histórico da Linguagem C

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Introdução à Programação

Capítulo 2: Introdução à Linguagem C

Mini Curso Introdução ao MATLAB

Estruturas de entrada e saída

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

2.3. PHP Tipos de dados e operadores

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

JSP - ORIENTADO A OBJETOS

1 O PHP E A WORLD WIDE WEB

Algoritmos em Javascript

Oracle PL/SQL Overview

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL

SciLab. Prof. Raimundo C. Ghizoni Teive

I-3 Introdução ao Matlab

Introdução à Linguagem

APOSTILA PHP PARTE 1

1. Domínio dos Atributos

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Introdução ao PHP. Prof. Késsia Marchi

PYTHON LISTAS. Introdução à Programação SI2

Módulo III. Folhas de Cálculo

Linguagens de Programação

Programação Paralela e Distribuída (DCC/UFRJ)

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo:

Algoritmos e Programação

Arquitetura de Computadores. Tipos de Instruções

Introduçã o ão MATLAB e Octave

AMBIENTE DE PROGRAMAÇÃO PYTHON

Algoritmos com VisuAlg

Sumário. INF01040 Introdução à Programação. Elaboração de um Programa. Regras para construção de um algoritmo

Introdução ao processamento de imagens e OCTAVE. Julio C. S. Jacques Junior juliojj@gmail.com

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Aluísio Eustáquio da Silva

Métodos Numéricos em Finanças

Aula 02 Excel Operações Básicas

Geração de Código Intermediário. Tradução dirigida por sintaxe. Código de três endereços - exemplo. Código de Três Endereços

Transcrição:

Breve Introdução à Programação em MATLAB Aulas Práticas de Aprendizagem Automática Ano Lectivo 2006/2007 Susana Nascimento Joaquim F. Silva Departamento de Informática snt@di.fct.unl.pt jfs@di.fct.unl.pt

Introdução ao MatLab O 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.

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

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

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) Double e.g., 3.2567 (8 bytes)

Uint8 e Doubles Double Maioria funções MATLAB doubles como argumento de entrada return double

>> a=1:5 a = 1 2 3 4 5 Uint8 e Doubles >> b=uint8(a) b = 1 2 3 4 5 >> c=double(b) c = 1 2 3 4 5 >> a*2.5 ans = 2.5000 5.0000 7.5000 10.0000 12.5000 >> b*2.5 ans = 3 5 8 10 13 >> c*2.5 ans = 2.5000 5.0000 7.5000 10.0000 12.5000

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 >>

Tipo de Dados Char c = hello >> d=[c, again'] d = hello again >> b=['hello';'again'] b = hello again >> size(b) ans = 2 5

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 >>

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

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 >> image(2) ans = name: 'Mary' height: 4 width: 4 data: [] >> image(1) ans = >> name: 'Tom' height: 3 width: 3 data: [3x3 double]

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)

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, a maioria dos operandos devem ser do mesmo tamanho, a menos que um seja um escalar

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.*b ans = 8 15» b/2 ans = 2.0000 2.5000

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» a a = 2 3» b b = 4 5» a > b ans = 0 0» b > a ans = 1 1» a > 2 ans = 0 1

If, else, endif if index<100 statements else statements end For.. For i = 1:100 statements end Switch, while Controlo de Fluxo

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 retornados 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

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. % %

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

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 y fprintf('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); end total = 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órios e correspondente soma usando loop for; (2) Calcular tempo execução; (3) mostrar resultado

Exemplo de Script MATLAB % agora calculando através da vectorização fprintf('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órios e correspondente soma usando função rand; (2) Calcular tempo execução; (3) mostrar resultado

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.

Exemplo de função MATLAB function [meanr, stdr, z] = simulate(n); Identificador de função Lista de argumentos de entrada, (separados por vírgula) Nome da função Lista de valores de output devolvidos

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

Exemplo de função MATLAB function [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

Exemplo de função MATLAB function [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 positivo if (rem(n,1)~=0) n<=0 error('input n deve ser inteiro positivo'); end Validar condições com mensagens erro

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órios z = rand(n,1); % calcula a média e o desvio padrão meanr= 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ícita Valores não devolvidos são locais à função

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.493962 Desvio 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.500110 Desvio padrão dos 200000 números aleatórios = 0.288374 x = 0.5001 y = 0.2884

Outra Função MATLAB function [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

Simplot.m (cont.) % generate the n random numbers z = rand(n,1); % calculate the mean and standard deviation meanr= 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.)

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

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)) end 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');

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

Exercícios 2- 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.