Introdução ao MATLAB - Departamento de Informática ... · 1 Instituto Superior Técnico, Dep. de...

23
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 Silva Silva Computação e Programação 2009 / Computação e Programação 2009 / 2010 2010 Mathworks 2 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

Transcript of Introdução ao MATLAB - Departamento de Informática ... · 1 Instituto Superior Técnico, Dep. de...

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/