introdução ao matlab - departamento de informática · programas em matlab. josé borges josé...
Post on 26-May-2020
3 Views
Preview:
TRANSCRIPT
1
Instituto Superior Técnico,Dep. de Engenharia Mecânica - ACCAII
Introdução ao MATLAB
• MATLAB
• Comandos básicos
• Variáveis e Constantes
• Expressões
• Funções e Operadores
• Vectores e Matrizes
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010
Mathworks
2222
• Site oficial da Mathworks
• MATLAB Central – comunidade de utilizadores
• Documentação em pdf
• Exemplos de utilização
• Demos / Vídeos / Tutoriais
L I N K
L I N K
L I N K
L I N K
L I N K
2
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 3333
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 4444
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.
3
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 5555
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 6666
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.
4
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010
Ambiente do MATLAB
7777
Command Window
Command History
File Browser /
Workspace
Windows MenuDirectoria de trabalho
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 8888
Comandos básicos
Comando Descrição
info apresenta informação da aplicação
demo abre a janela de demonstrações
help apresenta ajuda por palavra chave
helpbrowser abre a janela de ajuda
lookfor nome faz pesquisa por palavra chave
clock informação da data e hora
quit termina o MATLAB
5
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 9999
Comandos para o sistema de ficheiros
Comando Descrição
dir apresenta o conteúdo da directoria
which fich 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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 10101010
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
6
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 11111111
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 12121212
Comandos para manipular variáveis
Comando Descrição
who apresenta as variáveis existentes no ambiente de trabalho
whos informação detalhada das variáveis existentes no ambiente de trabalho
clear clear all
apaga todas as variáveis existentes no ambiente de trabalho
clear vars apaga as variáveis enunciadas
7
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 13131313
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 14141414
Utilização de Variáveis e Atribuição
>> res = 9 – 2
res =
7
>> res = 9 – 2;
>> 9 – 2
ans =
7
>> ans
ans =
7
8
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 15151515
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 16161616
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
9
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 17171717
Constantes em MATLAB
Comando Descrição
pi constante Pi ( π = 3.141592654... )
i representação de número imaginário
j representação de número imaginário
inf infinito ( ∞ )
NaN not a number ( 0 / 0 )
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 18181818
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
10
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 19191919
Operadores matemáticos
Comando Descrição
+ adição--
subtracçãonegação
* produto/ divisão “por” ( 10 / 5 = 2 ) \ divisão “para” ( 5 \ 10 = 2 ) rem resto da divisão inteira
( 11 / 5 = 2, resto = 1 ) ^ exponenciação
help matlab\ops
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 20202020
Funções pré-definidas (exemplos)
Comando Descrição
sin, cos,tan, atan
funções trigonométricas
sqrt raiz quadrada
log, log10, exp
funções de logaritmo e exponenciação
abs valor absoluto
fix, floor, ceil, round
funções de arredondamento
help matlab\elfun
11
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 21212121
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 22222222
Regras de precedência nas expressões
• Precedência dos operadores:
i. () parêntisis
ii. ^ expoente
iii. - sinal de negação
iv. *, /, \ produto e divisão
v. + , - adição e subtracção
>> - ( 3 + 5 ) * 2
ans =
16
>> - 3 + 5 * 2
ans =
7
12
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 23232323
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 24242424
Tipos de dados no Matlab
Tipo básicos Descrição
single, double números reais (by default)
uint8, uint16, uint32, uint64
números inteiros sem signal
int8, int16, int32, int64,
números inteiros com signal
char cadeias de caracteres
false tipo lógico
help datatypes
13
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 25252525
Transformaçã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 4 int32
vali 1x1 4 int32
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 26262626
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
14
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 27272727
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 28282828
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
15
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 29292929
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 30303030
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
16
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 31313131
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 32323232
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 ]
Escalar
Vector Coluna Vector Linha Matriz
1×1
3×1
1×3
3×3
17
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 33333333
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 34343434
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
18
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 35353535
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 36363636
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
19
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 37373737
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
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 38383838
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
20
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 39393939
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
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 40404040
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
21
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 41414141
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
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 42424242
Exemplos de utilização
>> mat = [4 3 1; 2 5 6];
>> size(mat)
ans =
2 3
>> length(mat)
ans =
3
>> numel(mat)
ans =
6
22
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 43434343
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
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 44444444
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
23
José Borges José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010 45454545
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 José Borges -- Miguel Miguel Pedro Pedro SilvaSilva Computação e Programação 2009 / Computação e Programação 2009 / 20102010
Referências
46464646
• Capitulo 1 de Matlab: A Practical Introduction to
Programming and Problem Solving, Stormy Attaway (2009) Elsevier.
• Site do MATLAB@Mathworks: http://www.mathworks.com/
top related