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



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

Programação em MATLAB

Javascript 101. Parte 2

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Sistemas e Sinais (LEE & LETI)

Funções em Matlab. Subprogramas em Matlab são funções.

Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015. Visual Basic VBA

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

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

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

Estrutura de Dados Básica

Capítulo 2. Fundamentos de Java

Registos em Ficheiros - Estruturas. Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2009/2010

Flash MX ActionScript

JSP - ORIENTADO A OBJETOS

Primeiro Curso de Programação em C 3 a Edição

COMPUTAÇÃO E PROGRAMAÇÃO

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

OPERADORES E ESTRUTURAS DE CONTROLE

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

Geração de código intermediário. Novembro 2006

Tutorial de Matlab Francesco Franco

APOSTILA PHP PARTE 1

Algoritmos e Programação _ Departamento de Informática

Análise de complexidade

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Programação em MATLAB

Aluísio Eustáquio da Silva

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

Estrutura de um programa em linguagem C

Programação Básica em Arduino Aula 2

Como o FIT funciona. FIT: Framework for Integrated Tests FIT. Dados de testes. Programa. Fixtures. classes. Resultados de testes

ESTRUTURA DE DADOS PILHA

O dono de uma livraria cuja base de dados é administrada por si pediu-lhe para efectuar as seguintes alterações ao preço dos livros:

Introdução à Programação

Programação SQL. Introdução

Tipo de Dados em Linguagem C

2.3. PHP Tipos de dados e operadores

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

Programação. MEAer. Bertinho Andrade da Costa. Instituto Superior Técnico. Introdução ao Pré-Processador. 2011/2012 1º Semestre

Algoritmos em Javascript

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

INF 1620 P1-10/04/02 Questão 1 Nome:

Tópicos avançados sobre funções (cont.)

Resumo da Matéria de Linguagem de Programação. Linguagem C

4 Criação de macros e introdução à linguagem VBA

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

Introdução à Linguagem

MATLAB. Programação básica

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

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

Conceitos de Linguagens de Programação

5 Caso de estudo O cartão fidelidade

Licenciatura em Engenharia Informática Departamento de Engenharia Informática Instituto Superior de Engenharia do Porto

INTRODUÇÃO À LINGUAGEM C++

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

AMBIENTE DE PROGRAMAÇÃO PYTHON

Tarefa Orientada 12 Junção Externa, Auto-Junção e União

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

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Algoritmos e Programação Estruturada

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

Aplicações de Escritório Electrónico

Introdução a PHP (Estruturas de Controle)

Algoritmos e Programação

INF 1005 Programação I

MATRIZ DE EXAME DE EQUIVALÊNCIA À FREQUÊNCIA

Engenharia de Software

DESENVOLVIMENTO DE SOFTWARE

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Unidade IV: Ponteiros, Referências e Arrays

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

O que é o JavaScript?

Oficina de Construção de Páginas Web

Sintaxe Básica de Java Parte 1

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

Panorâmica geral sobre PHP. PHP é uma linguagem que permite fazer. um ficheiro em PHP contem código PHP misturado com HTML.

Aplicações de Escritório Electrónico

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

ISCAP. Algoritmia. Pág. 1. Ana Paula Teixeira

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

1 O PHP E A WORLD WIDE WEB

Capítulo 6. Java IO - Ficheiros

Notas de Aula MatLab - 2

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

Dim formulário As Object formulário = Me Me.Text = "Título"

e à Linguagem de Programação Python

Programação. Folha Prática 3. Lab. 3. Departamento de Informática Universidade da Beira Interior Portugal Copyright 2010 All rights reserved.

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

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

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

Transcrição:

MATLAB Tópicos Elementares Sumário 1. Tipos de dados: vectores e matrizes 2. Operadores 3. Controlo de Fluxo a. Operadores de selecção b. Operadores de repetição 4. Funções em Matlab 5. Leitura e escrita de dados 6. Exemplo: Geração e leitura de imagens J. R. Caldas Pinto, J. M. da Costa Sousa 310 1

Tipos de dados em Matlab J. R. Caldas Pinto, J. M. da Costa Sousa 311 Vectores e Matrizes no Matlab No Matlab o objecto básico é a matriz cujo tipo pode ser qualquer um dos vistos atrás. Todas as operações, em geral reservadas a variáveis, são aplicáveis a matrizes. As matrizes são caracterizadas pelo seu número de linhas e colunas, dado pela função size. Tipo por defeito: double Definição de uma variável do tipo inteiro com 8 bits: x=int8(100); J. R. Caldas Pinto, J. M. da Costa Sousa 312 2

Exemplo a = 1 2 3 4 5 6 7 8 >> size(a) ans = 2 4 J. R. Caldas Pinto, J. M. da Costa Sousa 313 Vectores e matrizes Vectores: são matrizes n 1 ou 1 n. Construção de Matrizes e Vectores k=0:1:20; % vector com elementos de 0 a 20 a =ones(2,3); b=zeros(3,4); c=eye(3); d=rand(3,4); e=randn(3,4); f=repmat(a,2,4) >> a=[1; 2] Concatenação: >> b=[1 3; 5 7]; >> c=[7 8 9]; >> A=[a b;c] A = 1 1 3 2 5 7 7 8 9 J. R. Caldas Pinto, J. M. da Costa Sousa 314 3

Manipulação de matrizes Acesso aos elementos de matrizes Podem ser acedidos individualmente, em grupo, ou com um único índice, to em conta que as matrizes são guardadas por colunas. A = 1 1 3 2 5 7 7 8 9 >> b=a(1:2,2:3) b = 1 3 5 7 >> c=a(:,2:3) b = 1 3 5 7 8 9 >> d=a(6) d = 8 J. R. Caldas Pinto, J. M. da Costa Sousa 315 Manipulação de matrizes Apagar linhas ou colunas de uma matriz Usa-se um par de parêntesis rectos X = A; Para apagar a segunda coluna de X: X(:,2)=[]; Selecção através de variáveis lógicas Um vector numérico com zeros e valores diferentes de zero pode transformar-se em vector de variáveis lógicas A = 6 4 0 0 5 7 7 0 9 >> logical(a) A = 1 1 0 0 1 1 1 0 1 J. R. Caldas Pinto, J. M. da Costa Sousa 316 4

Trocar colunas e selecção elementos Trocar colunas: A = B(:,[1 3 2 4]) Selecção de elementos de uma matriz: A = 1 4 7 2 5 8 3 6 9 >> B = A > 5 B = 0 0 1 0 0 1 0 1 1 >> A(B) ans = 6 7 8 9 J. R. Caldas Pinto, J. M. da Costa Sousa 317 Procura e testes A instrução find permite encontrar as posições em termos de colunas que obedecem a dada condição: k = find(isprime(a)) % isprime: 1 se for primo k = find(a>5) Testes à classe de objectos (não aos seus elementos): islogical ischar isstruct isnumeric iscell J. R. Caldas Pinto, J. M. da Costa Sousa 318 5

Espaço em memória As matrizes são escritas em memória coluna a coluna. Há permanente alocação dinâmica de memória embora se possa reservar espaço (criando uma matriz inicial com a dimensão máxima que pode ser atingida). Neste caso diz-se que a alocação é estática. Uma matriz pode crescer atribuindo novos valores. Contudo não podem ser usados pontos não definidos. Libertação de espaço de memória: Quando uma matriz de grandes dimensões deixa de ser utilizada, deve ser utilizada a instrução clear. J. R. Caldas Pinto, J. M. da Costa Sousa 319 Exemplo >> d=repmat(5,2,4) d = 5 5 5 5 5 5 5 5 >> d(3,1)=6 d = 5 5 5 5 5 5 5 5 6 0 0 0 >> a=d(5,1)??? Index exceeds matrix dimensions. J. R. Caldas Pinto, J. M. da Costa Sousa 320 6

Arrays de caracteres (char) Esta subclassedeobjectos difere dos arrays numéricos pelo conjunto de métodos que lhe estão associados. Exemplo: a=[ TAI ]; ischar(a); retorna 1 size(char); retorna [1 3] blanks(n) é uma string com n espaços em branco disp(blanks(n)') move o cursor n linhas para baixo. disp(['xxx' blanks(20) 'yyy']) S = char(t1,t2,t3,..) forma um array de caracteres S conto as strings T1,T2,T3,... como linhas. J. R. Caldas Pinto, J. M. da Costa Sousa 321 Funções associadas a strings C a te g o r y F u n c t io n D escription G e n e r a l b l a n k s String of blanks c e l l s t r C reate cell array of strings from character array c h a r C reate character array (string) d e b l a n k R em ove trailing blanks e v a l E x e c u te s trin g w ith M A T L A B e x p re s s io n S tring Tests i s c e l l s t r True for cell array of strings i s c h a r T ru e fo r c h a ra c te r a rra y i s l e t t e r True for letters of alphabet. i s s p a c e True for whitespace characters. String O perations f i n d s t r Find one string within another l o w e r C o n v e rt s trin g to lo w e rc a s e s t r c a t C oncatenate strings s t r c m p C om pare strings s t r c m p i C om pare strings, ignoring case s t r j u s t Justify string s t r m a t c h Find m atches for string s t r n c m p C om pare first N characters of strings s t r n c m p i C om pare first N characters, ignoring case s t r r e p R eplace string with another s t r t o k Find token in string s t r v c a t C oncatenate strings vertically u p p e r C onvert string to uppercase J. R. Caldas Pinto, J. M. da Costa Sousa 322 7

Operadores aritméticos J. R. Caldas Pinto, J. M. da Costa Sousa 323 Operadores relacionais e lógicos J. R. Caldas Pinto, J. M. da Costa Sousa 324 8

Funções lógicas xor ou exclusivo. all retorna 1 se todos os elementos do vector têm o valor true ou são todos não nulos. Este operador opera coluna a coluna em matrizes. any retorna 1 se qualquer elemento do vector tem o valor true ou é não nulo. Caso contrário retorna zero. Este operador opera coluna a coluna em matrizes. i = find(a > 8); A(i) = 100 i é um vector com os índices onde A é maior que 8. O vector i é preenchido coluna a coluna. J. R. Caldas Pinto, J. M. da Costa Sousa 325 Controlo de fluxo Operadores de selecção if, else, and elseif if avalia uma expressão lógica e executa um grupo de instruções baseadas no valor da expressão. Forma mais simples: if logical_expression statements J. R. Caldas Pinto, J. M. da Costa Sousa 326 9

If com matrizes vazias Uma matriz vazia retorna falso. Exemplo: if A S1 else S0 executa a instrução S0 se A for uma matriz vazia. J. R. Caldas Pinto, J. M. da Costa Sousa 327 Instrução switch switch executa as instruções baseadas num valor da variável ou expressão. É equivalente ao CASE em Fortran90. switch expressão (escalar ou string) case valor1 instruções % Executa se expressão é valor1 case valor2 instruções % Executa se expressão é valor2... otherwise instruções % Executa se todos os valori não se verificarem J. R. Caldas Pinto, J. M. da Costa Sousa 328 10

Instrução while O ciclo while executa as instruções enquanto a expressão de controlo for verdadeira (1). while expressão, instruções J. R. Caldas Pinto, J. M. da Costa Sousa 329 Instrução for O ciclo for executa as instruções um pré-determinado número de vezes. for índice = início:incremento:fim, instruções J. R. Caldas Pinto, J. M. da Costa Sousa 330 11

Arrays como índices Os índices de um ciclo for podem ser arrays. Considere-se uma array A m n: A instrução for i = A, instruções atribui a i ovector A(:,k). Na primeira iteração, k é igual a 1; na segunda iteração k é igual a 2, etc., até que k é igual a n. Ou seja, o ciclo é repetido o número de vezes igual ao número de colunas de A. Em cada iteração, i é um vector conto uma das colunas de A. J. R. Caldas Pinto, J. M. da Costa Sousa 331 Vectorização de ciclos Os ficheiros de código.m podem ser acelerados através da vectorização, ou seja, conversão de ciclos em operações com vectores e matrizes. Exemplo: Cálculo do seno de 1001 valores entre 0 e 10. i = 0; for t = 0:.01:10, i = i+1; y(i) = sin(t); A forma vectorizada do mesmo código é dada por: t = 0:0.01:10; y = sin(t); J. R. Caldas Pinto, J. M. da Costa Sousa 332 12

Intruções return e break return return termina a sequência de comandos a ser executada e devolve o controlo à função anterior ou ao teclado. break A instrução break termina a execução de um ciclo for ou while. A execução continua com a primeira instrução fora do ciclo. Em ciclos encadeados, break acaba apenas com o ciclo mais interior. J. R. Caldas Pinto, J. M. da Costa Sousa 333 Funções em Matlab J. R. Caldas Pinto, J. M. da Costa Sousa 334 13

Sintaxe de funções Se a função retorna mais de um valor: [out1, out2,..., outn] = nome_funcao(in1, in2,..., inn) Uma função que retorna apenas um valor tem o seguinte aspecto: out = nome_funcao(in1, in2,..., inn) J. R. Caldas Pinto, J. M. da Costa Sousa 335 Tipos de ficheiros.m (M-files) J. R. Caldas Pinto, J. M. da Costa Sousa 336 14

Testes ao nº de argumentos As funções nargin e nargout permitem determinar o número de argumentos de entrada e de saída. Podem ser utilizadas condições para realizar acções depo do número de argumentos. A ordem em que os argumentos é importante. O argumento a retornar aparece no ínicio, e os opcionais no fim da lista. Exemplo: function c = testa_argumentos(a,b) if (nargin ==1) c=a.^2; elseif (nargin ==2 c=a+b; J. R. Caldas Pinto, J. M. da Costa Sousa 337 Sub-funções Os M-files de funções podem conter mais de uma função. A função primária é a principal, ou seja, a que é invocada pelo nome do ficheiro M-file. As funções adicionais no ficheiro são sub-funções, e só são visíveis pela função primária, ou por outras subfunções no mesmo ficheiro. Cada sub-função começa pela sua linha de definição, estão umas a seguir às outras. A ordem das subfunções é opcional, mas a função primária deve aparecer em primeiro lugar. J. R. Caldas Pinto, J. M. da Costa Sousa 338 15

Exemplo de sub-funções function [avg,med] = newstats(u) % Primary function % NEWSTATS Find mean and median with internal functions. n = length(u); avg = mean(u,n); med = median(u,n); function a = mean(v,n) average. a = sum(v)/n; % Subfunction Calculate function m = median(v,n) median w = sort(v); if rem(n,2) == 1 m = w((n+1)/2); else m = (w(n/2)+w(n/2+1))/2; % Subfunction Calculate J. R. Caldas Pinto, J. M. da Costa Sousa 339 Funções privadas As funções privadas estão em sub-directorias com o nome de private. Estas funções só são visíveis nas funções da directoria de raíz (parent directory). Estas directorias com o nome específico de private podem ser criadas pelo programador, utilizando os procedimentos habituais de criação de directorias ou folders no computador. Estas directorias private não devem ser colocadas na path! J. R. Caldas Pinto, J. M. da Costa Sousa 340 16

Leitura de dados do ecrã % Exemplo de entrada de valores num % programa em Matlab i = input('enter a integer number:') f = input('enter a float number:') st = input('enter a string :','s') J. R. Caldas Pinto, J. M. da Costa Sousa 341 Escrita de dados em ficheiros % Exemplo da escrita de valores numa file em matlab i=2; f=4.5; texto='tai'; filename = input( Insira o nome do ficheiro :','s') fid = fopen(filename,'w'); fprintf(fid,'%4d \n',i); fprintf(fid,'%5.2f \n',f); fprintf(fid,'%s \n',texto); fclose(fid); J. R. Caldas Pinto, J. M. da Costa Sousa 342 17

Escrita de dados em ficheiros Escrita de resultados de cálculo em ficheiros de texto. Neste caso torna-se prático passar esses resultados para texto e ligá-los a outras mensagens. O Matlab usa as seguintes funções para o efeito: int2str num2str sprintf O nome do ficheiro pode reflictir determinados cálculos e ser colocado numa dada directoria. A função strcat pode ser usada para o efeito: fich=strcat( Res',int2str(a), _',int2str(b),'.txt'); J. R. Caldas Pinto, J. M. da Costa Sousa 343 Utilização do fprintf em Matlab J. R. Caldas Pinto, J. M. da Costa Sousa 344 18

Tipos de saída J. R. Caldas Pinto, J. M. da Costa Sousa 345 Caracteres de controlo J. R. Caldas Pinto, J. M. da Costa Sousa 346 19

Escrita de dados em ficheiros ascii x=[1 2 3 4 5 6]; filename = input( Insira o nome do ficheiro :','s') fid = fopen(filename,'w'); fprintf(fid,'%4d \n',length(x)); % length da para % vectores linha ou coluna for i =1:length(x), fprintf(fid,'%4d',x(i)); fprintf(fid,'\n'); fclose(fid); 6 1 2 3 4 5 6 J. R. Caldas Pinto, J. M. da Costa Sousa 347 Exemplo com matrizes x=[1 2 3; 4 5 6]; dim=size(x); filename = input( Insira o nome do ficheiro :','s'); fid = fopen(filename,'w'); fprintf(fid,'%4d \n %4d \n',dim(1),dim(2)); %no. linhas e colunas for i =1:dim(1), fprintf(fid,'%4d',x(i,:)); fprintf(fid,'\n'); fclose(fid); 2 3 1 2 3 4 5 6 J. R. Caldas Pinto, J. M. da Costa Sousa 348 20

Leitura de dados em ficheiros ascii [A,count] = fscanf(fid,format,size) Lê dados do ficheiro fid, converte-os de acordo com o format, e retorna a matriz A. count é um argumento opcional que retorna o número de elementos lidos. % Este exemplo destina-se a ilustrar o uso de fscanf de forma simples % Prete-se ler dados numa file que sabemos corresponder a um vector % O primeiro elemento da file corresponde ao o número de elementos do % vector e os restantes estao dispostos em coluna % Os elementos vão ser lidos como double % Abertura da file para leitura filename = input( Insira o nome do ficheiro :','s') fio=fopen(filename,'r'); dim=fscanf(fio,'%4d ',1); % numero de elementos xvec=fscanf(fio,'%5f',dim); fclose(fio); xvec xvec = 1 2 3 4 5 6 J. R. Caldas Pinto, J. M. da Costa Sousa 349 Leitura de matrizes Prete-se ler dados num ficheiro onde: o primeiro e segundo elemento são o nº de linhas e de colunas. Os restantes elementos estão dispostos linha a linha Os dados são reais do tipo double. % Abertura de ficheiro para leitura filename = input( Insira o nome do ficheiro :','s') fio=fopen(filename,'r'); size=fscanf(fio, '%4d ',[2 1]); % numero de linhas e colunas xmat=fscanf(fio, '%5f',[size(2),size(1)]); fclose(fio); J. R. Caldas Pinto, J. M. da Costa Sousa 350 21

Leitura genérica Leitura de dados não estruturados em ficheiros tipo txt. Dados dos quais nada se conhece e que podem diferir de linha para linha. filename = 'dados.txt'; fid = fopen(filename, 'rt'); i = 1; while (feof(fid) == 0) a{i}=fgetl(fid); % lê a linha para um string i=i+1; % uso duma cell a estudar à frente fclose(fid); J. R. Caldas Pinto, J. M. da Costa Sousa 351 Ex: Geração e Leitura de Imagens Manipulação de Imagens Imagem: matriz de M linhas e N colunas, com elementos que depem do tipo de imagem. Imagens a cinzento Imagens binárias Imagens a cores Criação de Imagens No Matlab ou num programa qualquer de aquisição e processamento de imagem (ex: Paint Shop Pro) J. R. Caldas Pinto, J. M. da Costa Sousa 352 22

Imagem em Matlab ima2=ones(80,100)*255; ima2(30:60, 30:80)=0; % seja um rectangulo interior imshow(ima2) imwrite(ima2, 'imagem02.tif'); Gravar no ficheiro ascii temp02.txt dim2=size(ima2); fid = fopen('temp02.txt','w'); fprintf(fid,'%4d \n %4d \n',dim2(1:2)); for i=1:dim2(1), fprintf(fid,'%4d',ima2(i,:)); fprintf(fid,'\n'); fclose(fid); J. R. Caldas Pinto, J. M. da Costa Sousa 353 Criação de imagem em bitmap % Leitura para uma matriz de uma imagem em bitmap ima1=imread('imagem02.bmp'); dim=size(ima1); %dimensao da imagem imshow(ima1) % Visualizaçao em matlab: J. R. Caldas Pinto, J. M. da Costa Sousa 354 23

Gravar imagens % Colocar a imagem num ficheiro ascii ima1t=double(ima1); % para usar fprintf fid = fopen('temp03.txt','w'); fprintf(fid,'%4d \n%4d \n',dim(1:2)); for i=1:dim(1), fprintf(fid,'%4d',ima1t(i,:)); fprintf(fid,'\n'); fclose(fid); A imagem criada deve ser convertida para double antes de ser escrita no ficheiro. Existe uma grande variedade de possibilidades de ler imagens em Matlab. J. R. Caldas Pinto, J. M. da Costa Sousa 355 24