21/09/2015
1
D.E.M. – Área Científica de Controlo Automação e Informática Industrial
Computação e ProgramaçãoMEMec, LEAN - 1º Semestre 2015-2016
Aula Teórica 3
• Tipos de dados• Funções, Operadores e Expressões• Vectores • Matrizes• Utilização de funções com vectores e matrizes
Microprocessador só entende números inteiros
em base binária
• Instruções do programa devem ser-lhe fornecidas em linguagem de baixo nível
Linguagens de baixo nível são difíceis de programar pelos
seres humanos e propensas a erros
• Programa deve ser criado preferencialmente numa linguagem de alto nível
Como se traduz o programa do alto para o baixo nível para poder
ser executado?
• Compilador (linguagens compiladas)
• Interpretador (linguagens interpretadas)
• Conceito misto
Computação e Programação 2015 / 2016 2
Wrap Up da última aula
21/09/2015
2
O processamento de dados implica o seu
armazenamento temporário
Entidades Variáveis
• O programador pode definir o seu valor inicial ou não
• O seu valor pode ser gerado e/ou modificado durante a execução do programa
Entidades Constantes
• São definidas pelo programador no momento da programação
• O seu valor não pode ser modificado pelo programa
Computação e Programação 2015 / 2016 3
Wrap Up da última aula
Computação e Programação 2015 / 2016
Alinhamento da AT 3
• Tipos de Dados
• Funções, Operadores e Expressões
• Vectores
• Matrizes
• Utilização de funções com vectores e matrizes
21/09/2015
3
• Se a memória do computador
só armazena números inteiros
em base binária, como é que o
programa reconhece: Números
reais? Caracteres de texto? ou
mesmo Números inteiros < 0 ?
Tipos de dados
10111010 245334
11111111 245335
11000000 245336
11111000 245337
11000000 245338
11000000 245339
11110010 245340
00001001 245341
Definindo um tipo (ou classe) para o objecto!
Computação e Programação 2015 / 2016 5
• Reais
• Inteiros (com ou sem sinal)
• Caracteres (letras, dígitos, símbolos, sinais de pontuação)
• Lógicos (valores lógicos true e false)
• No MATLAB encontramos a palavra class. A definição de classe é mais abrangente do que tipo e envolve
• o tipo de dados• as operações (métodos) que podem ser executadas sobre
o tipo de dados
Tipos de dados
Computação e Programação 2015 / 2016 6
21/09/2015
4
Tipos de dados no Matlab
Tipo básicos Descrição
single, double números reais
uint8, uint16, uint32, uint64
números inteiros sem signal
int8, int16, int32, int64,
números inteiros com signal
char caracteres
logical tipo lógico
Computação e Programação 2015 / 2016 7
Tipo assumido pelo MATLAB quando se cria uma variável numérica
Computação e Programação 2015 / 2016 8
Tipos de dados no Matlab
• Exemplo de diferentes capacidades de representação
Conversion Function Class Range of Values
int8 Signed 8-bit integer -27 to 27-1
int16 Signed 16-bit integer -215 to 215-1
int32 Signed 32-bit integer -231 to 231-1
int64 Signed 64-bit integer -263 to 263-1
uint8 Unsigned 8-bit integer 0 to 28-1
uint16 Unsigned 16-bit integer 0 to 216-1
uint32 Unsigned 32-bit integer 0 to 232-1
uint64 Unsigned 64-bit integer 0 to 264-1
21/09/2015
5
Conversão de tipo: casting
>> val = 6 + 3;
>> whos
Name Size Bytes Class Attributes
val 1x1 8 double
>> vali = int32(val);
>> whos
Name Size Bytes Class Attributes
val 1x1 8 double
vali 1x1 4 int32
Computação e Programação 2015 / 2016 9
Ao avaliar uma expressão como numérica o MATLAB assume
automaticamente o tipo double
É possível explicitar o tipo de uma variável recorrendo à função com
o nome do tipo
Números reais e Encoding
• Com a excepção dos tipos uint todos os restantes tipos de informação terão que obedecer a alguma convenção para poderem ser representados na memória
• No caso dos números reais uma norma comum é a IEEE 754 (floating-point computation)
Apenas um conjunto finito de números reais terão representação exacta!!!
Figu
ra: W
ikip
edia
Computação e Programação 2015 / 2016 10
21/09/2015
6
Caracteres e Encoding
• No caso dos caracteres a convenção mais conhecida será talvez o código ASCII, que associa um dado número inteiro a um carácter, e com o qual as normas actuais são ainda compatíveis
10111010 245334
01000110 245335
01110011 245336
00100001 245337
11101011 245338
11001000 245339
11110010 245340
00001001 245341
10111010 245334
11111111 245335
11000000 245336
11111000 245337
11000000 245338
11000000 245339
11110010 245340
00001001 245341
FF 70
Computação e Programação 2015 / 2016 11
Computação e Programação 2015 / 2016
Código ASCII
Caracteres que representam os algarismos de 0 a 9 e respectivo código numérico
• Tabela com representação do código numérico e do carácter que lhe está associado
Letras do alfabeto maiúsculas e minúsculas e respectivo código numérico
12
21/09/2015
7
Tipo char
>> nome = 'Carlos Picareta';
>> whos
Name Size Bytes Class Attributes
nome 1x15 30 char
• No MATLAB um valor literal do tipo char é representado entre plicas, por exemplo: 'a' ou 'S' ou '?' ou '4'
• Uma cadeia de caracteres (string) é simplesmente uma sequência de caracteres: 'melancia' ou '3ª parte'
• Uma variável do tipo char é criada quando a ela se atribuium valor literal do tipo char :
Computação e Programação 2015 / 2016 13
Tipo char e conversão de tipos
>> int32('F')
ans =
70
>> char(70)
ans =
F
• A codificação de caracteres na forma de números inteiros permite realizar diversas operações com caracteres
Computação e Programação 2015 / 2016 14
Conversão de carácter para inteiro
Conversão de inteiro para carácter
21/09/2015
8
Tipo char e conversão de tipos
>> 'abcd' + 1
ans =
98 99 100 101
>> char('abcd' + 1)
ans =
bcde
>> char('PALAVRA' + 32)
ans =
palavra
• A codificação de caracteres na forma de números inteiros permite realizar diversas operações com caracteres
Computação e Programação 2015 / 2016 15
Porquê?
Uma operação algébrica implica a conversão implícitapara valores numéricos, e o resultado será numérico
No entanto o resultado poderá serreconvertido para caracteres
Computação e Programação 2015 / 2016
Alinhamento da AT 3
• Tipos de Dados
• Funções, Operadores e Expressões
• Vectores
• Matrizes
• Utilização de funções com vectores e matrizes
21/09/2015
9
Computação e Programação 2015 / 2016
• Funções / operadores incluídos no core do MATLAB ou toolboxes da distribuição
• As funções são chamadas pelo nome seguido dos argumentos de entrada entre parêntesis. Podem também ser precedidas pelos argumentos de saída:
sinal = sign(-5)
O comando help explica em pormenor, e muitas vezes com exemplos, como funciona uma dada função
Funções e operadores pré-definidos
17
Computação e Programação 2015 / 2016
Operadores matemáticos
Comando Descrição
+ adição- subtracção, valor simétrico* produto/ divisão “por” ( 10 / 5 = 2 ) \ divisão “para” ( 5 \ 10 = 2 ) ^ exponenciação
help matlab\ops
18
21/09/2015
10
Funções pré-definidas (alguns exemplos)
Comando Descrição
sin, cos,tan, atan
funções trigonométricas
sqrt raiz quadrada
rem resto da divisão inteira ( 11 / 5 = 2, resto = 1 )
abs valor absoluto
fix, floor, ceil, round
funções de arredondamento
help matlab\elfun
Computação e Programação 2015 / 2016 19
• As expressões podem ser criadas utilizando:
• Valores numéricos e/ou variáveis (desde que já criadas!)
• Operadores
• Funções pré-definidas e/ou criadas pelo utilizador
• Parêntesis
• Operador Ellipsis (... )
Expressões
>> resultado = ( 3 + 5 ) + sin(1.5708) ...
* 2
resultado =
10.0000Expressão
Ellipsis
Computação e Programação 2015 / 2016 20
21/09/2015
11
• Precedência dos operadores:
1. () parêntisis
2. ^ expoente
3. - sinal de negação (valor simétrico)
4. *, /, \ produto e divisão
5. + , - adição e subtracção
Regras de precedência nas expressões
>> - ( 3 + 5 ) * 2
ans =
- 16
>> - 3 + 5 * 2
ans =
7
Computação e Programação 2015 / 2016 21
Função pré-definida format
>> 2 * sin(1.4)
ans =
1.9709
>> format long
>> 2 * sin(1.4)
ans =
1.970899459976920
>> format short
>> 2 * sin(1.4)
ans =
1.9709
SÓ AFECTA A APRESENTAÇÃO,
e não a precisão com que o número é guardado
Computação e Programação 2015 / 2016 22
Age sobre o ambiente de trabalho modificando a precisão com que os valores
são apresentados na Janela de Comando
21/09/2015
12
Computação e Programação 2015 / 2016
Alinhamento da AT 3
• Tipos de Dados
• Funções, Operadores e Expressões
• Vectores
• Matrizes
• Utilização de funções com vectores e matrizes
Vectores e Matrizes (arrays)
• Entidades utilizados para armazenar conjuntos de dados do mesmo tipo na forma de:
• vector linha com dimensão 1 x m • vector coluna com dimensão n × 1 • matrizes com dimensão n x m
Escalar
Vector Coluna Vector Linha Matriz
1×1
3×1
1×4
3×3
Computação e Programação 2015 / 2016 24
21/09/2015
13
Criação de vectores linha
>> vlin_1 = [1 2 3 4 5 6]
vlin_1 =
1 2 3 4 5 6
>> vlin_1 = [1,2,3,4,5,6]
vlin_1 =
1 2 3 4 5 6
>> vlin_1 = 1:6
vlin_1 =
1 2 3 4 5 6
>> vlin_1 = 1:2:6
vlin_1 =
1 3 5
O sinal : representa uma iteração
(em baixo, de 1 a 6 com passo 2)
Computação e Programação 2015 / 2016 25
>> vlin_2 = 1:2:6
vlin_2 =
1 3 5
>> vlin_3 = 6:-2:1
vlin_3 =
6 4 2
>> vlin_4 = [vlin_2 vlin_3]
vlin_4 =
1 3 5 6 4 2
Criação de vectores linha
Computação e Programação 2015 / 2016 26
Concatenação de vectores linha
21/09/2015
14
Criação de vectores coluna
>> vcol_1 = [1; 2]
vcol_1 =
1 2
>> vlin = 5:2:7;
>> vcol_2 = vlin'
vcol_2 =
5 7
>> vcol = [vcol_1; vcol_2]
vcol =
1 25 7
Dentro de [ ] ou { } o
sinal ; representa separação de linha
Computação e Programação 2015 / 2016 27
Concatenação de vectores coluna
Acesso / modificação de vectores
>> vlin = [6 7 8 9]
vlin =
6 7 8 9
>> vlin(3)
ans =
8
>> vlin(3:4)
ans =
8 9
>> vlin(2) = 5
ans =
6 5 8 9
É possível usar o operador : para definir um intervalo de índices
Computação e Programação 2015 / 2016 28
21/09/2015
15
Acesso / modificação de vectores
>> vlin(7)
??? Index exceeds matrix dimensions.
>> vlin(7) = 2
vlin =
6 7 8 9 0 0 2
>> vlin(7)
ans =
2
>> vlin([5 1 3 1])
ans =
0 6 8 6
Atribui um valor a um elemento ainda não existente, provocando
a expansão do vector
É possível aceder a elementos concretos, por qualquer ordem
que se deseje, usando um vector de índices
Computação e Programação 2015 / 2016 29
Acesso / modificação de vectores
>> vlin(6) = []
lin =
6 7 8 9 0 2
>> vlin(2:4) = []
vlin =
6 0 2
A atribuição de um vector vazio permite apagar um ou mais
elementos
Computação e Programação 2015 / 2016 30
21/09/2015
16
Computação e Programação 2015 / 2016
Alinhamento da AT 3
• Tipos de Dados
• Funções, Operadores e Expressões
• Vectores
• Matrizes
• Utilização de funções com vectores e matrizes
Criação de matrizes
>> mat = [4 3 1; 2 5 6]
mat =
4 3 1
2 5 6
>> mat = [3 5 7; 1 2]
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
>> mat = [2:4; 3:5]
mat =
2 3 4
3 4 5
Computação e Programação 2015 / 2016 32
21/09/2015
17
Criação de matrizes
>> randi([10,30],2,3)
ans =
17 22 29
27 21 16
>> rand(2)
ans =
0.7572 0.3804
0.7537 0.5678
>> zeros(2)
ans =
0 0
0 0
Computação e Programação 2015 / 2016 33
Acesso aos elementos da matrizes
>> mat = [4 3 1; 2 5 6]
mat =
4 3 1
2 5 6
>> mat(2,3)
ans =
6
>> mat(2,:)
ans =
2 5 6
>> mat(2,2:end)
ans =
5 6
Quando surge sozinho como índice operador : representa todos os índices
de uma dada dimensão (neste caso das colunas)
Ao definir um intervalo de índices é possível fazer referência ao último sem explicitar o seu valor usando a
palavra reservada end
Computação e Programação 2015 / 2016 34
21/09/2015
18
Modificação de matrizes
>> mat = [4 3 1; 2 5 6]mat =
4 3 12 5 6
>> mat(2,3) = 9ans =
4 3 12 5 9
>> mat(2,:) = 11:2:15ans =
4 3 111 13 15
Computação e Programação 2015 / 2016 35
Atribuição de um valor escalar aoelemento da 2ª linha 3ª coluna
Atribuição de um vector de 3 elementos a toda a 2ª linha
Modificação de matrizes
>> mat(:,4) = [6 10]'
mat =
4 3 1 6
11 13 15 10
>> mat(2,6) = 18
mat =
4 3 1 6 0 0
11 13 15 10 0 18
Atribuir um valor a um elemento, linha ou coluna,
ainda não existente, provoca a expansão da matriz
Computação e Programação 2015 / 2016 36
21/09/2015
19
Modificação de matrizes
>> mat(2,4) = []
??? Subscripted assignment dimension mismatch.
>> mat(:,4) = []
mat =
4 3 1 0 0
11 13 15 0 18
>> mat(:,2:4) = []
mat =
4 0
11 18
Ao contrário dos vectores não é possível eliminar um único
elemento, mas é possível eliminar uma linha, coluna ou sub-matriz
Computação e Programação 2015 / 2016 37
Modificação de matrizes
>> mat = randi([1,100],3,4)
mat =
14 61 2 94
21 28 75 47
20 20 45 42
>> fliplr(mat)
ans =
94 2 61 14
47 75 28 21
42 45 20 20
Computação e Programação 2015 / 2016 38
Matriz aleatória com elementos entre 1 e 100
Troca a ordem das colunas
21/09/2015
20
Modificação de matrizes
>> mat
mat =
14 61 2 94
21 28 75 47
20 20 45 42
>> flipud(mat)
ans =
20 20 45 42
21 28 75 47
14 61 2 94
Computação e Programação 2015 / 2016 39
Troca a ordem das linhas
Modificação de matrizes
>> mat
mat =
14 61 2 94
21 28 75 47
20 20 45 42
>> rot90(mat)
ans =
94 47 42
2 75 45
61 28 20
14 21 20
Computação e Programação 2015 / 2016 40
Roda a matriz 90 graus(NÃO É O MESMO QUE A
TRANSPOSTA!)
21/09/2015
21
Computação e Programação 2015 / 2016 41
Informação dimensional
Comando Descrição
size dimensões da matriz
length tamanho de um vectormaior dimensão de uma matriz
numel número de elementos de uma matriz
Exemplos de utilização
>> mat = [4 3 1
2 5 6];
>> size(mat)
ans =
2 3
>> length(mat)
ans =
3
>> numel(mat)
ans =
6
Outra forma de representar uma mudança de linha
Computação e Programação 2015 / 2016 42
21/09/2015
22
Matrizes tridimensionais
>> outra_mat(:,:,1) = [5 1 4 7
6 5 2 2
3 2 4 9];
>> outra_mat(:,:,2) = [3 2 3 1
7 3 4 8
3 1 1 5];
>> outra_mat(:,:,3) = [4 1 6 5
1 8 2 3
1 9 5 2];
>> outra_mat(1,3:4,2:3)
ans(:,:,1) =
3 1
ans(:,:,2) =
6 5
1ª
2ª
3ª
Computação e Programação 2015 / 2016 43
Computação e Programação 2015 / 2016
Alinhamento da AT 3
• Tipos de Dados
• Funções, Operadores e Expressões
• Vectores
• Matrizes
• Utilização de funções com vectores e matrizes
21/09/2015
23
Funções aplicadas a vectores e matrizes
>> vec = 0:pi/2:2*pi
vec =
0 1.5708 3.1416 4.7124 6.2832
>> sin(vec)
ans =
0 1.0000 0.0000 -1.0000 -0.0000
>> round(sin(vec))
ans =
0 1 0 -1 0
?
Computação e Programação 2015 / 2016 45
Funções aplicadas a vectores e matrizes
>> mat = [4 3 1
2 5 6];
>> sqrt(mat)
ans =
2.0000 1.7321 1.0000
1.4142 2.2361 2.4495
>> round(sqrt(mat))
ans =
2 2 1
1 2 2
Computação e Programação 2015 / 2016 46
21/09/2015
24
• Não definir identificadores (nomes) de variáveis iguais aos identificadores (nomes) de funções
• É sempre preferível assumir que as dimensões de uma matriz são desconhecidas e utilizar as funções length e size
Boas práticas de Programação
Computação e Programação 2015 / 2016 47
Referências
• Capitulo 1 de Matlab: A Practical Introduction to Programming
and Problem Solving, Stormy Attaway (2012) Elsevier.
• Intro to MATLABhttp://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/getstart.pdf
http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/matlab_prog.pdf
• Demos relevantes: • Getting Started with MATLAB (5 min, 18 sec)
• http://www.mathworks.com/videos/matlab/getting-started-with-matlab.html
• Working in The Development Environment (4 min, 7 sec)
• http://www.mathworks.com/videos/matlab/working-in-the-development-environment.html
As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva
Computação e Programação 2015 / 2016 48