Introdução ao MATLAB
• MATLAB
• Comandos básicos
• Variáveis e Constantes
• Expressões
• Funções e Operadores
• Vectores e Matrizes
Instituto Superior Técnico,
Dep. de Engenharia Mecânica - ACCAII
Mathworks
• Site oficial da Mathworks
LINK
• MATLAB Central – comunidade de utilizadores
• Documentação em pdf
LINK
• Exemplos de utilização
LINK
• Demos / Vídeos / Tutoriais
José Borges - Miguel Pedro Silva
LINK
LINK
Computação e Programação 2009 / 2010
2
1
A ferramenta MATLAB
•
MATLAB (MATrix LABoratory)
•
Programa optimizado para cálculos de engenharia e
científicos
•
Programa MATLAB implementa a linguagem de
programação MATLAB.
•
Conjunto alargado de funções pré-definidas,
normalmente agrupadas em toolboxes.
Objectivo: escrever, depurar e optimizar
programas em MATLAB.
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
3
Vantagens do MATLAB
• Fácil de utilizar: é uma linguagem interpretada, sendo fácil de
escrever e testar programas.
• Independente da Plataforma: o código desenvolvido corre em
diferentes SOs:
• Windows
• Linux
• Unix
• Macintosh
• O código pode ser compilado, mas é mais lento que Fortran ou
C (C++), por exemplo.
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
4
2
Vantagens do MATLAB
• Grande número de toolboxes desenvolvidas pela Mathworks
em diversas especialidades:
• engenharia, economia, bioinformática, finanças, etc
• Utilizado por uma vasta comunidade:
• Aproximadamente 15.400.000 entradas no google.com
• Existência de toolboxes resultantes de vária contribuições
• Cálculo matemático / manipulação numérica de matrizes
• Geração de gráficos
• Pode ser utilizado para construir aplicações do tipo Graphical
User Interfaces (GUI)
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
5
Desvantagens do MATLAB
• É uma linguagem interpretada, logo a execução é
mais lenta que as linguagens compiladas
(Este problema poderá ser reduzido usando o
compilador do MATLAB para gerar um executável)
• A licença do MATLAB é cara.
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
6
3
Ambiente do MATLAB
Directoria de trabalho
Windows Menu
File Browser /
Workspace
Command Window
Command History
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
7
Comandos básicos
Comando
info
demo
help
helpbrowser
lookfor nome
clock
quit
José Borges - Miguel Pedro Silva
Descrição
apresenta informação da aplicação
abre a janela de demonstrações
apresenta ajuda por palavra chave
abre a janela de ajuda
faz pesquisa por palavra chave
informação da data e hora
termina o MATLAB
Computação e Programação 2009 / 2010
8
4
Comandos para o sistema de ficheiros
Comando
dir
which fich
Descrição
apresenta o conteúdo da directoria
devolve a path para o ficheiro
indicado
what dire
devolve os ficheiros existentes na
directoria indicada
cd dire
acede à directoria indicada
type fich
mostra o conteúdo de ficheiro
delete fich apaga o ficheiro indicado
José Borges - Miguel Pedro Silva
9
Computação e Programação 2009 / 2010
Variáveis
• Objectos utilizados para armazenar valores na memória do
computador, sendo caracterizadas pelo par,
• Identificador: um nome dado à variável para possibilitar sua manipulação
• Conteúdo: o valor a reter, que poderá ser numérico ou alfanumérico
Temperatura = 45; Dia = 12
• As variáveis só são válidas durante a execução da aplicação.
O conteúdo destas perde-se quando a aplicação é encerrada,
podem no entanto ser gravadas em suporte físico permanente
• A cada variável existente na aplicação corresponde uma zona
exclusiva na memória principal do computador, sendo esta
ligação gerida pelo conjunto aplicação & SO
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
10
5
Nomes de Variáveis no MATLAB (regras)
• O nome da variável começa sempre por uma letra, podendo
ser seguido por uma cadeia de caracteres alfanuméricos
• O comprimento máximo para o nome depende do SO, sendo
dado pela instrução namelengthmax
• O MATLAB é case-sensitive (Exemplo: Dia ≠ dia ≠ DIA)
• Existem palavras reservadas
• Embora possam ser definidas variáveis com o nome de funções
(pré-definidas ou definidas pelo utilizador), tal gera confusão e
resulta num mau estilo de programação
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
11
Comandos para manipular variáveis
Comando
who
whos
clear
clear all
clear vars
José Borges - Miguel Pedro Silva
Descrição
apresenta as variáveis existentes no
ambiente de trabalho
informação detalhada das variáveis
existentes no ambiente de trabalho
apaga todas as variáveis existentes
no ambiente de trabalho
apaga as variáveis enunciadas
Computação e Programação 2009 / 2010
12
6
Utilização de Variáveis e Atribuição
nome_variavel = expressão
>> meu_numero = 6
meu_numero =
6
>>
>> 6 = meu_numero
??? 6 = meu_numero
|
Error: The expression to the left of the equals
sign is not a valid target for an assignment.
>>
>>
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
13
Utilização de Variáveis e Atribuição
>> res = 9 – 2
res =
7
>> res = 9 – 2;
>> 9 – 2
ans =
7
>> ans
ans =
7
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
14
7
Inicialização, Incremento e Decremento
>> meu_numero = 0
meu_numero =
0
>> meu_numero = meu_numero + 1
meu_numero =
1
>> meu_numero = meu_numero – 1
meu_numero =
0
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
15
Constantes
• Aplica-se a generalidade das características
enunciadas para as variáveis
• A diferença para estas é que o valor da constante é
fixo e atribuído no momento da sua definição
• Exemplos:
• pi = 3,1416
• aceleração da gravidade, c = 299 792 458 m·s−1
• velocidade da luz, g = 9,78 m·s−2
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
16
8
Constantes em MATLAB
Comando
pi
i
j
inf
Descrição
constante Pi ( π = 3.141592654... )
representação de número imaginário
representação de número imaginário
NaN
not a number ( 0 / 0 )
José Borges - Miguel Pedro Silva
infinito ( ∞ )
Computação e Programação 2009 / 2010
17
Funções e operadores pré-definidos
• 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, ou
não, ser precedidas pelos argumentos de saída:
sinal = sign(-5)
• O comando help pode ser utilizado para,
• listar as toolboxes disponíveis na aplicação: help
• listar as funções de uma toolbox: help toolbox
• exibir informação de ajuda de cada função: help sin
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
18
9
Operadores matemáticos
help matlab\ops
Comando
Descrição
adição
subtracção
negação
produto
divisão “por” ( 10 / 5 = 2 )
divisão “para” ( 5 \ 10 = 2 )
resto da divisão inteira
( 11 / 5 = 2, resto = 1 )
exponenciação
+
*
/
\
rem
^
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
19
Funções pré-definidas (exemplos)
help matlab\elfun
Comando
sin, cos,
tan, atan
sqrt
log, log10,
exp
abs
fix, floor,
ceil, round
José Borges - Miguel Pedro Silva
Descrição
funções trigonométricas
raiz quadrada
funções de logaritmo e
exponenciação
valor absoluto
funções de arredondamento
Computação e Programação 2009 / 2010
20
10
Expressões
• 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 (... )
>> resultado = ( 3 + 5 ) + sin(1.5708) ...
* 2
resultado =
10.0000
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
21
Regras de precedência nas expressões
• Precedência dos operadores:
i.
ii.
iii.
iv.
v.
()
^
*, /, \
+,-
parêntisis
expoente
sinal de negação
produto e divisão
adição e subtracção
>> - ( 3 + 5 ) * 2
ans =
16
>> - 3 + 5 * 2
ans =
7
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
22
11
Tipos de dados
• Reais (números fraccionários)
• Inteiros (com ou sem negativos)
• Caracteres (letras, dígitos, símbolos, sinais de pontuação)
• Lógicos (valores lógicos true e false)
• No MATLAB os tipos são genericamente definidos como
classes, as quais são constituídas por,
• tipo de dados
• operações que podem ser executadas sobre o tipo de dados
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
23
Tipos de dados no Matlab
help datatypes
Tipo básicos
single, double
uint8, uint16,
uint32, uint64
int8, int16,
int32, int64,
char
false
José Borges - Miguel Pedro Silva
Descrição
números reais (by default)
números inteiros sem signal
números inteiros com signal
cadeias de caracteres
tipo lógico
Computação e Programação 2009 / 2010
24
12
Transformação de tipo: casting
>> val = 6 + 3;
>> whos
Name
Size
val
1x1
Bytes
8
Class
Attributes
double
>>
>> vali = int32(val);
>> whos
Name
Size
Bytes
Class
val
1x1
4
int32
vali
1x1
4
int32
José Borges - Miguel Pedro Silva
Attributes
Computação e Programação 2009 / 2010
25
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
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
26
13
Geração de números aleatórios
• Em estatística, um número aleatório é um número
que pertence a uma série numérica e não pode ser
previsto a partir dos membros anteriores dessa série.
• Em ambiente computacional é impossível gerar
números aleatórios. Em alternativa, podem ser
gerados números pseudo-aleatórios, i.e.,
• números gerados com base numa determinada
distribuição e tendo por valor inicial uma dada semente
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
27
Números pseudo-aleatórios no MATLAB
Comando
Descrição
seed
definição da semente
rand
geração de números reais com distribuição
uniforme
randn
geração de números reais com distribuição
normal
randi
geração de números inteiros com
distribuição uniforme discreta
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
28
14
Exemplos de utilização
• Gerar vector (tamanho N) de números inteiros a partir
da distribuição uniforme discreta com valor máximo m:
r = randi(N,m,1);
• Gerar vector de números reais a partir da distribuição
normal com desvio padrão dp e média m:
r = m + dp.*randn(N,1)
• Gerar vector de números reais a partir da distribuição
uniforme no intervalo [a, b] :
r = a + (b-a).*rand(N,1);
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
29
Cadeias de caracteres e Encoding
• A atribuição do conteúdo de caracteres no MATLAB é feita
entre pelicas, por exemplo,
a='a' ou b=‘x'
• A representação interna no MATLAB é feita com valores
numéricos, que podem ser manipulados para fazer a conversão
do tipo:
• Caracter ASCII → Inteiro
• Inteiro → Caracter ASCII
• Cadeia Caracteres ASCII→ Real
• Real → Cadeia Caracteres ASCII
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
30
15
Exemplos de conversão de tipo
>> int32('a')
ans =
97
>> char(97)
ans =
a
>> double('abcd')
ans =
97
98
99
100
>> char('abcd' + 1)
ans =
bcde
José Borges - Miguel Pedro Silva
31
Computação e Programação 2009 / 2010
Vectores e Matrizes
• Variáveis utilizadas para armazenar conjuntos de dados do
mesmo tipo na forma de:
• vector coluna com dimensão [ n × 1 ]
• vector linha com dimensão [ 1 x m ]
• matrizes com dimensão [ n x m ]
Vector Coluna
Vector Linha
Matriz
Escalar
1×3
1×1
3×3
3×1
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
32
16
Criação de vectores coluna
>> vcol_1 = [1; 2]
vlin_1 =
1
2
>> vcol_2 = 5:6;
>> vcol_2 = vcol_2'
vlin_2 =
5
6
>> vcol = [vcol_1 vcol_2]
vcol =
1 5
2 6
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
33
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:1:6
vlin_1 =
1 2 3 4 5 6
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
34
17
Criação de vectores linha
>> 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_3 =
1 3 5 6 4 2
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
35
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
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
36
18
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 2009 / 2010
José Borges - Miguel Pedro Silva
37
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
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
38
19
Acesso aos elementos da matrizes
>> mat = [4 3 1; 2 5 6]
mat =
4
3
1
2
5
6
5
6
>> mat(2,3)
ans =
6
>> mat(2,:)
ans =
2
>> mat(2,2:end)
ans =
5
6
Computação e Programação 2009 / 2010
José Borges - Miguel Pedro Silva
39
Modificação de matrizes
>> mat = [4 3 1; 2 5 6]
mat =
4
3
1
2
5
6
>> mat(2,3) = 9
ans =
9
>> mat(2,:) = 11:2:15
ans =
4
3
1
11
13
15
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
40
20
Informação dimensional
Comando
Descrição
size
dimensões da matriz
length tamanho de um vector
maior dimensão de uma matriz
numel
número de elementos de uma matriz
Computação e Programação 2009 / 2010
José Borges - Miguel Pedro Silva
41
Exemplos de utilização
>> mat = [4 3 1; 2 5 6];
>> size(mat)
ans =
2
3
>> length(mat)
ans =
3
>> numel(mat)
ans =
6
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
42
21
Rearranjo de matrizes
Comando
Descrição
reshape modifica as dimensões da matriz
rearranjando os elementos desta
fliplr rearranja os elementos da matriz pela
troca da esquerda para a direita
flipud rearranja os elementos da matriz pela
troca de baixo para cima
rot90
roda os elementos da matriz 90° no
sentido contrário aos ponteiros do relógio
Computação e Programação 2009 / 2010
José Borges - Miguel Pedro Silva
43
Exemplos de utilização
>> mat = [4 3 1; 2 5 6];
>> fliplr(mat)
ans =
1
3
4
6
5
2
>> flipud(mat)
ans =
2
5
6
4
3
1
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
44
22
Exemplos de utilização
>> mat = [4 3 1; 2 5 6];
>> reshape(mat,3,2)
ans =
4
5
2
1
3
6
>> rot90(mat)
ans =
1
6
3
5
4
2
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
45
Referências
• Capitulo 1 de Matlab: A Practical Introduction to
Programming and Problem Solving, Stormy Attaway (2009)
Elsevier.
• Site do MATLAB@Mathworks: http://www.mathworks.com/
José Borges - Miguel Pedro Silva
Computação e Programação 2009 / 2010
46
23