curso de matlab%c2%ae
Post on 06-Jul-2015
191 Views
Preview:
TRANSCRIPT
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 1/113
Núcleo de Engenharia Biomédica do IST
Setembro/Outubro 2008
Responsável: Gustavo Lopes
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 2/113
Noções gerais sobre o MATLAB e o seu interface gráfico
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 3/113
O MATLAB Nome vem de matrix laboratory
Programa de computador optimizado para cálculoscientíficos e de engenharia
Implementa a linguagem de programação do MATLAB
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 4/113
Vantagens Fácil de usar, muito prático para prototipagens
Suportado em diversas plataformas (Linux, Windows,Solaris e Mac OS X)
Elevado número de funções predefinidas
Excelente para visualizar dados técnicos
Integração com outras linguagens (especialmente Java)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 5/113
Desvantagens Preço
Vários milhares de euros Mas: USD 89 para a versão de estudantes (R2007a) Mas: CIIST disponibiliza licenças validadas em rede
Última versão: R2008a Várias toolboxes Ver https://delta.ist.utl.pt/software/matlab.php
(tarball em https://nebm.ist.utl.pt/~glopes/MATLAB/ )
Mais lento que código escrito em C/C++ Especialmente em código não vectorizado
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 6/113
Desktop do MATLAB
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 7/113
Janela de comandos Permite executar
comandosinteractivamente
Executar mais que umcomando de uma vez:
Usar vírgula ouquebra de linha(shift+enter)
Usar ponto e vírgula
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 8/113
Directório de trabalho
Mostrado o conteúdo na janela “Current Directory ”
Primeiro local de procura de funções Sobrepõe-se ao path
Local de escrita/leitura para caminhos não totalmentequalificados
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 9/113
Workspace Colecção de todas as
variáveis em memória Variáveis podem ser
eliminadas/copiadas/guardadas/carregadasinteractivamente pela janela Workspace
who lista nomes de variáveis whos lista variáveis com
mais informação (e.g.dimensões, bytes ocupados)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 10/113
Documentação help <função> mostra a documentação de uma
função particular
help / mostra informação sobre os operadores
doc <função> mostra a documentação de umafunção ou tópico na janela de ajuda
lookfor <tópico> procura determinado termo nadescrição de uma função
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 11/113
Tipos de dados Todas as variáveis são
arrays
Arrays lógicos ou dedoubles podem seresparsos
O MATLAB temtipagem fraca (weaklytyped )
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 12/113
Criação, acesso, alteração e operações lógicas
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 13/113
Arrays (1) São rectangulares
Tamanho mínimo é 0 por 0 (array vazio)
Pode ter qualquer número de dimensões (tensor de qualquerordem)
size devolve o tamanho (número de graus de liberdade) de cadadimensão
A matriz é o array mais básico O MATLAB não admite arrays unidimensionais, apenas vectores
linha e vectores coluna
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 14/113
Arrays (2)Forma inválida Forma rectangular
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 15/113
Criação de matrizes Matriz: array de duas dimensões
Criada com parênteses rectos []
Elementos das colunas separados por vírgula ou espaço Linhas separadas por ; (ponto e vírgula)
Exemplo (matriz 2 por 4): mat = [4 1 8 4; 6 9 1 2] ou
mat = [4, 1, 8, 4; 6, 9, 1, 2]
mat =
4 1 8 46 9 1 2
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 16/113
Criação de matrizes (2) Por omissão, os arrays são criados com tipo double
Conversão pode ser feita usando as funções com o mesmonome dos tipos
Funções especializadas: ones(n) ou ones(m, n) – array de 1’s
zeros(n) ou zeros(m, n) – array de 0’s
eye(n) ou eye(m, n) – 1’s na diagonal, 0’s no resto rand(n) ou rand(m, n) – números aleatórios com
distribuição uniforme entre 0 e 1 randn(n) ou randn(m, n) – números aleatórios com
distribuição normal padrão
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 17/113
Criação de matrizes (3) Matrizes podem ser criadas por
concatenação de outrasmatrizes
A concatenação pode ser vertical,horizontal ou mista
Além da sintaxe à direita, pode
usar-se vertcat e horzcat cat permite concatenação
segundo uma direcção arbitrária
>> [[1,2;3,4];[5,6]]
ans =
1 23 45 6
>> [[1,2;3,4],[5;6]]
ans =
1 2 53 4 6
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 18/113
Criação de matrizes (4)>> mat1 = [1 2; 3 4];>> mat2 = [5 6; 7 8];>> mat3 = [9 10 11 12];>> [mat1 mat2; mat3]
ans =
1 2 5 63 4 7 89 10 11 12
>> cat(1, mat1, mat2)
ans =
1 23 45 67 8
>> cat(2, mat1, mat2)
ans =
1 2 5 6
3 4 7 8
>> cat(3, mat1, mat2)
ans(:,:,1) =
1 23 4
ans(:,:,2) =
5 67 8
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 19/113
Vectores Matrizes (arrays bidimensionais) em que o tamanho de
uma das dimensões é unitário isvector testa se um array é um vector
Vectores linha podem ser criados com início:final (passo1) e início:passo:final
Vectores coluna podem ser criados transpondo vectoreslinha (operador .’)
>> 1:4, 0:1/3:1
ans =1 2 3 4
ans =
0 0.3333 0.6667 1.0000
>> (1:4).'
ans =
123
4
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 20/113
► Exercícios Cria a matriz mat = [3 3 3 3; 4 3 3 3; 5 5 5 5]
concatenando os blocos: 3 * ones(2,3)
[5 5 5]
(3:5).’
Repete o exercício anterior recorrendo somente à
função cat para executar a concatenação Que está errado na seguinte expressão?
cat(1, [3 4 5; 5 4 3], [7 6])
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 21/113
Acesso a elementos Faz-se na forma variável(índices 1, índices 2, …)
Índices começam em 1, não em 0 como na maioria daslinguagens de programação
Acesso linear variável(índice único)
Funciona para arrays de qualquer dimensão Devolve uma matriz linha
variável(:) lineariza qualquer array
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 22/113
Acesso a elementos (2)>> mat = [1 2 3 ; 4 5 6; 7 8 9]
mat =
1 2 34 5 67 8 9
>> mat(3)
ans =
7
>> mat(1:5)
ans =
1 4 7 2 5
A ordem é column major order
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 23/113
Acesso a elementos (3) Acesso não linear
Deve ter tantos conjuntos de índices quanto números dedimensões
Conjuntos de índices separados por vírgula
end representa o valor máximo do índice da dimensãoem que aparece (i.e., o tamanho da mesma)
Dois pontos,:
, seleccionam a respectiva dimensão emtoda a largura (equivalente a 1:end)
Se o último conjunto de índices for escalar, elimina-seúltima dimensão (excepto tratando-se já duma matriz)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 24/113
Acesso a elementos (4)>> mat = [5 3 2 6; 4 8 65; 1 5 7 3]
mat =
5 3 2 64 8 6 51 5 7 3
>> mat(3, 2)
ans =
5
>> mat([1 2], [2 4])
ans =
3 68 5
>> mat(2, :)
ans =
4 8 6 5
>> mat(2:end, [1 3])
ans =
4 61 7
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 25/113
► Exercícios Dada a matrix mat = [3 3 3 3; 4 3 3 3; 5 5 5 5]
Extrai a submatriz de mat sem a primeira linha. Resolve oexercício: Seleccionando explicitamente os índices de interesse Recorrendo a um vector construído com end para as linhas e
recorrendo a : para as colunas
Extrai a submatriz de mat sem as colunas do meio. Obtém, de mat, o vector [3 3 3 3 4 3 3 3] recorrendo apenas
a acesso linear e a transposição Seleccionando submatrizes de mat e recorrendo a
concatenação, substitui a linha central por [3 3 5 5]
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 26/113
Atribuição a parte de array O conteúdo de uma variável é completamente
substituído por uma atribuição com o nome da variávelno lado esquerdo (lhs) Exemplo: mat = [1 2; 3 4]
Podem substituir-se apenas alguns elementos Usa-se indexação do mesmo modo com que se
extrairiam os elementos
Se o lado direito for: Um escalar, todos os elementos referidos tomam esse valor Um array com as mesmas dimensões que a expressão do lado
esquerdo, então cada elemento referido no lado esquerdoassume o valor correspondente do lado direito
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 27/113
Atribuição a parte de array (2)>> mat = zeros(3);>> mat([1 3],[1 3]) = 1;
mat =
1 0 10 0 01 0 1
>> mat = zeros(3);
>> mat(1:2,2:3) = [1 2; 3 4]
mat =
0 1 20 3 4
0 0 0
>> mat = zeros(3);>> mat(1:5) = 10:14
mat =
10 13 011 14 012 0 0
>> mat = zeros(3);
>> mat(1:5) = 10:16??? In an assignment A(I)= B, the number of elementsin B and I must be the same.
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 28/113
Atribuição a parte de array (3) As atribuições a arrays podem referenciar do lado
esquerdo: Índices superiores ao tamanho da respectiva
dimensão, aumentando o tamanho dessa dimensão São colocados zeros em todos os elementos que não são alvo
da atribuição e que não estavam antes definidos
Mais um índice do que o número de dimensões,
adicionando mais uma dimensão ao array O lado direito tem de ter mesmos tamanhos que o esquerdo
Forma alternativa à concatenação de criar arrays de dimensãosuperior a 2
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 29/113
Atribuição a parte de array (4) Índices superiores Mais dimensões
>> mat = ones(2);>> mat(4:5, 3) = [1; 2]
mat =
1 1 01 1 00 0 0
0 0 10 0 2
>> mat = 2*ones(2);>> mat(:, :, 2) = 3*ones(2)
mat(:,:,1) =
2 22 2
mat(:,:,2) =
3 33 3
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 30/113
► Exercícios Seja mat = [8 1 6; 3 5 7; 4 9 2]
Substitui a linha do meio por zeros
Usando uma única atribuição, adiciona uma 4ª coluna a mat
com a soma dos valores das linhas (e.g. mat(1, 4) deve valer8+1+6=15). Nota: usa a função sum(mat, 2) para fazer estasoma ao longo das colunas (dimensão 2).
Desloca os valores de mat uma coluna para a direita e uma
linha para baixo tal que a matriz passe a ser 4 por 4. A primeira linha e a primeira coluna devem ficar apenas comzeros. Usa três atribuições a mat.
Tenta executar mat(2, :) = []. Que resultado observas?
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 31/113
Arrays lógicos (1) O valor de verdade é representado por 1; falso é
representado por 0
>> true
ans =
1
>> false
ans =
0
>> 5 > 6
ans =
0
>> 6 ~= 7
ans =
1
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 32/113
Arrays lógicos (2) Operadores > , <, ==, ~=, >=, <=, &, | e xor operam
elemento a elemento De um dos lados tem de estar
Ou um escalar, caso em que a operação é aplicada entre esseescalar e cada um dos elementos do array do outro lado
Ou um array com a mesma forma que aquele do outro lado,caso em que a operação é aplicada entre elementos homólogos
Para verificar igualdade entre dois arrays, usar isequal
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 33/113
Arrays lógicos (3)>> mat = [1 3 5; 3 4 5];>> mat > 3
ans =
0 0 10 1 1
>> class(ans)
ans =
logical
>> mat = [1 3 5; 3 4 5];>> mat > [2 2 6; 4 3 4]
ans =
0 1 00 1 1
>> [0 1 0; 0 1 1] | [1 1 0; 0 0 1]
ans =
1 1 00 1 1
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 34/113
Arrays lógicos (4)Não funciona Usar isequal
>> a = [1 2 3; 4 5 6];>> b = [1 2; 4 5];
>> a == b??? Error using ==> eqMatrix dimensions mustagree.
>> a = [1 2 3; 4 5 6];>> b = [1 2; 4 5];
>> isequal(a,b)
ans =
0
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 35/113
Arrays lógicos (5) Arrays lógicos podem ser usados como “índices” de arrays
O array lógico tem de ter a mesma forma que o array queindexa
Seleccionam os elementos correspondentes às posiçõesem que o array lógico assume o valor de verdade
É devolvido um vector coluna
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 36/113
Arrays lógicos (6) Atenção que os arrays
são, por omissão, dotipo double
Pode ser necessáriofazer um conversão
explícita para o tipological
>> mat = [1 3 5; 3 4 5];>> mat([0 1 0; 1 1 0])??? Subscript indices musteither be real positive
integers or logicals.
>> mat(logical([0 1 0; 1 1 0]))
ans =
334
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 37/113
Arrays lógicos (7) find(logic_mat) devolve
as posições linearizadas ondeo argumento é verdadeiro
>> mat = [1 3 5; 3 4 5];>> mat(mat > 3)
ans =
455
>> mat(mat > 3) = 0
mat =
1 3 03 0 0
>> mat = [1 3 5; 3 4 5];>> find (mat == 3)
ans =
23
>> find(mat > 3 & mat < 5)
ans =
4
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 38/113
Arrays lógicos (8) [x y] = find(logic_mat)
coloca na variável x as posiçõesdas linhas e na variável y as
posições das colunas onde oargumento é verdadeiro
>> mat = [1 3 5; 3 4 5];>> [x y] = find(mat >= 3 & mat < 5)
x =
212
y =
122
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 39/113
► Exercícios Seja mat uma matriz arbitrária. Como colocarias a 0 todos
os seus elementos cujo módulo fosse inferior a 10^-10?
Seja vec = [3 4 7 5 3 9 11 2]
Usando isprime, selecciona todos os números primos em vec
Usando isprime e find, selecciona a posição do 2º númeroprimo em vec
Usando isprime, xor e sum, encontra o número de elementos
de vec que satisfazem, uma, mas não ambas, das seguintescondições: Elemento primo
Elemento maior que 7
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 40/113
Caracteres, células, estruturas e referências para funções
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 41/113
Caracteres (1) Criados com char(array numérico) ou 'cadeia de
caracteres' (com as plicas) Primeiro método implica conhecer correspondência
entre números e caracteres (a codificação usada) O segundo método:
Cria um array 1 por n (uma string), onde n é o número decaracteres entre as plicas
A plica pode ser incluída escapando-a com outra plica A exigência de que os arrays têm de ser rectangulares
mantém-se!
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 42/113
Caracteres (2)>> 'uma plica na string:''!'
ans =
uma plica na string:'!
>> size(ans)
ans =
1 22
>> ['string 1' 'string 2']
ans =
string 1string 2
>> ['string 1'; 'string 2']
ans =
string 1
string 2
>> ['string 1'; 'string 2 ...']??? Error using ==> vertcatCAT arguments dimensions are notconsistent.
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 43/113
Células (1) Arrays de MATLAB só podem ter 1 tipo de dados
Arrays de células permitem guardar vários tipos dedados numa só variável O array continua a ter só um tipo de dados (células)
Cada célula pode contém um array arbitrário
Inclusive, uma célula pode conter um array de células
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 44/113
Células (2) Criar uma célula (array de células 1 por 1): {array}>> ca = {[1 3; 2 5]}
ca =
[2x2 double]
>> ca = [ca {42}]
ca =
[2x2 double] [42]
>> [{zeros(2)} {1986};{int8(zeros(3))} {'uma string'}]
ans =
[2x2 double] [ 1986]
[3x3 int8 ] 'uma string'
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 45/113
Células (3) Pode ser usado apenas o operador {}
{A B; C D} é equivalente a [{A} {B}; {C} {D}]
Ex.: {zeros(2) 1986; int8(zeros(3)) 'uma string'}
var{indíces} = A é equivalente var(índices) = {A}
Ex.: ca = {6}; ca{2} = zeros(3);
Pode seleccionar-se uma célula particular ou umsubarray de um array de células com o operador () No entanto, isto não extrai os elementos das células!
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 46/113
Células (4) Extracção de elementos de dentro das células faz-se
com o operador {} O operador {} pode ser encadeado O operador () pode aparecer no final Ex.: ca = {4, {zeros(2)}}; ca{2}{1}(2,2)
Extrair mais que um elemento de cada vez resulta emretorno múltiplo! Outra solução que extraísse os elementos de dentro das
células seria impossível, já que, em geral, é impossívelcombinar os conteúdos das várias células seleccionadas
Concatenação pode ser forçada e.g. com cat
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 47/113
Células (5)>> ca = {[1 3; 2 4], 'foo';zeros(2), 'bar'}
ca =
[2x2 double] 'foo'[2x2 double] 'bar'
>> ca(1,:)
ans =
[2x2 double] 'foo'
>> ca{1,2}
ans =
foo
>> [a b] = ca{1,:}
a =
1 3
2 4
b =
foo
>> cat(1, ca{:,1})
ans =
1 32 40 00 0
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 48/113
►Exercícios
Constrói uma string cujo conteúdo é “O valor de var é x”, onde x é o valor do escalar guardado na variável varpelos métodos que se seguem e imprime-a na command
window com disp(string): Usando concatenação horizontal e a função num2str
Usando a função sprintf (escreve help sprintf)
Por que razão são, em geral, arrays de células maisadequados do que matrizes de caracteres para guardarconjuntos de strings?
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 49/113
►Exercícios
Dado ca = {'matlab', [5 3; 7 6]} Adiciona uma célula com o elemento [8, 7] recorrendo a
concatenação
Adiciona a linha {'nebm‘, 5, 6} recorrendo a atribuição Do array de células ca obtido:
Executa cellplot(ca)
Selecciona a primeira coluna de células e verifica o resultadode iscellstr aplicado ao resultado
Coloca, respectivamente, nas variáveis a e b, o conteúdo dascélulas (1,1) e (1,2) num único comando
Porque é válido cat(1, ca{1,2:3}]) mas não [ca{1,2:3}](equivalente a cat(2, ca{1,2:3}]))?
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 50/113
Estruturas (1) Tipo com um conjunto de contentores de dados – os
campos Um campo pode conter uma outra estrutura
O campo tem um nome e é acedido comvariavel.nome
Num arrays de estruturas, todos os elementos têm de
conter os mesmos campos Mas cada estrutura do array de estruturas pode ter um
tipo de dados diferente associado ao mesmo campo
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 51/113
Estruturas (2)>> salas.nome = 'X02.3';>> salas.capacidade = 50;>> salas
salas =
nome: 'X02.3'capacidade: 50
>> salas(2).nome = 'X4.3';>> salas(2)
ans =
nome: 'X4.3'capacidade: []
>> salas(2).capacidade = 25;
>> salas
salas =
1x2 struct array with fields:nomecapacidade
>> salas(2).capacidade
ans =
25
>> {salas.nome} (= {salas(:).nome})
ans =
'X02.3' 'X4.3'
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 52/113
Referências a funções (1) Tipo que permite chamar indirectamente uma função
Se var é uma referência a uma função, a função pode serchamada com var(argumento1, argumento2, …)
Referência é criada com: @nome_da_função @(arg1, arg2, …)função_estilo_lambda
Está a ser descontinuada a criação de arrays não escalaresde referências para funções Usar alternativamente arrays de células
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 53/113
Referências a funções (2)>> fh = @sin;>> fh(pi/6)
ans =
0.5000
>> fh = @(x) x.^2;>> fh([0:4])
ans =
0 1 4 9 16
>> [@sin @tan]Warning: non-scalar function handleswill not be supported past R2008a.
ans =
@sin @tan
>> fhs = {@sin @tan};>> fhs{1}(pi/6)
ans =
0.5000
>> fhs = @(x) [sin(x) tan(x)];>> fhs(pi/6)
ans =
0.5000 0.5774
Salvo em atribuições, evitar usar espaçosnas definições de funções estilo lambda,ou então envolver a função emparênteses, i.e., (@(args) definição)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 54/113
►Exercícios Atribui à variável funs um array 1 por 2 do tipo estrutura
com os campos “nome” e “funcao”. Os elementos devem serpreenchidos com os pares ('quadrática', @(x)x^2) e('cúbica', @(x)x^3) Extrai o valor do campo “nome” no 2º elemento do array Extrai simultaneamente os campos “nome” dos 2 elementos e,
numa única instrução: Coloca os valores nas variáveis a e b Coloca os valores num array de células
Cria uma referência para uma função ( f ) que recebe edevolve uma referência para uma função tal quef: (arg: x -> arg(x)) -> (ret: x -> arg(x).^2)arg(x) é um array numérico Verifica que f(x -> x^2)(2) = 16 ao avaliar a correspondente expressão
MATLAB
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 55/113
M files, estruturas de controlo, funções, funções estilo lambda,
passagem por valor, scoping e closures, depuração
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 56/113
M-files M-files são ficheiros de extensão .m com código
MATLAB
Há dois tipos de M-files: Scripts Funções
São acedidos pelo nome (removida a extensão)
São procurados no directório de trabalho e no path
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 57/113
Scripts Operam sobre o workspace base (o mesmo que é
usado ao introduzir comandos interactivamente)
Não recebem argumentos (“argumentos de entrada”)
Não retornam valores (“argumentos de saída”)
Não podem definir funções (excepto funções tipolambda)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 58/113
Scripts (2)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 59/113
Estruturas de controlo (1) if – executa instruções se dada condição for verdadeira
if expressão1
instruções1;
elseif expressão2instruções2;
elseinstruções3;
end
Pode haver mais blocos elseif (ou nenhum).
Pode não haver bloco else.
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 60/113
Estruturas de controlo (2) while – executa reiteradamente um conjunto de
instruções enquanto dada condição for verdadeira
Pode usar-se break , continue e return
while expressão1instruções1;
end
>> v = 2; while v < 8000; v = 2*v; end; v
v =
8192
Exemplo:
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 61/113
Nota na avaliação de condições (1) A condição tem de ser uma expressão lógica ou conversívelpara expressão lógica
Se a expressão não for escalar, todos os seus elementos têmde ser verdade ou conversíveis para verdade para que as
instruções sejam executadas Qualquer número que não zero é convertido para o valor de
verdade
>> a = [0 1 1];>> if a, disp('verdadeiro'), else, disp('falso'), end
falso
>> a = [5 1 1; 1.4 1 1];>> if a, disp('verdadeiro'), else, disp('falso'), endverdadeiro
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 62/113
Nota na avaliação de condições (2) Condições compostas podem não ser completamente
avaliadas Exemplo: em if 1 || func(), func() nunca é avaliada
Importante se func() for custosa a avaliar ou tiver efeitos colaterais Pode usar-se o operador | para forçar a avaliação de ambos os termos
Funções importantes: any e all
Aplicados a vectores, devolvem um escalar Aplicados a uma matriz, actuam ao longo das colunas
Pode especificar-se a dimensão em que actuam
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 63/113
for – itera ao longo de uma variável
Itera ao longo das colunas Na construção for var=expr, var é em cada iteração um
vector coluna tirado de uma coluna de expr
Pode usar-se break , continue e return
Geralmente usado em construções do génerofor var=inicio:passo:fim
Estruturas de controlo (3)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 64/113
Nota: evitar usar i e j como iteradores visto estesrepresentarem a unidade imaginária
Estruturas de controlo (4)>> for k=1:3, disp('novaiteração'), disp(k), endnova iteração
1
nova iteração2
nova iteração3
>> var = [(1:3).' (2:4).'];>> for k=var, disp('novaiteração'), disp(k), endnova iteração
123
nova iteração2
34
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 65/113
Funções de M-files (1) Um M-file pode definir uma função pública (primária) Função primária tem de ter o mesmo nome que o
ficheiro em que está definida (tirado o .m)
Após terminar o corpo da função primária, podem serdefinidas várias funções privadas auxiliares (chamadasde subfunções no MATLAB)
Dentro do corpo das funções podem ser definidas
funções aninhadas (nested functions) Uma função em MATLAB pode ter retornos
múltiplos! (chamados de argumentos de saída noMATLAB)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 66/113
Funções de M-files (2)function y = prodpols(coefs, x)%PRODPOLS Avalia polinómio em dado ponto, dados os seus coeficientes.% y = prodpols(coefs, x) avalia o polinómio de coeficientes coefs no ponto% x. Mais precisamente y é o somatório de coefs(i) * x^(i-1) com i desde i% até ao comprimento de coefs, o qual deve ser um vector numérico.
if ~isvector(coefs) || ~isnumeric(coefs)error('prodpols:badarg1', ...
'Primeiro argumento tem de ser vector numérico.');elseif ~isscalar(x) || ~isnumeric(coefs)
error('prodpols:badarg2', ...'Segundo argumento tem de ser escalar numérico.');
end
xpow = zeros(size(coefs));for k=1:length(coefs)
xpow(k) = x^(k-1);end
y = sum(coefs .* xpow);
end
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 67/113
Funções de M-files (3)>> who>> prodpols([-10 4 4; 1 1 1], 2)??? Error using ==> prodpols at 8Primeiro argumento tem de ser vector numérico.
>> prodpols([-10 4 4], 2)
ans =
14
>> who
Your variables are:
ans
>> help prodpolsPRODPOLS Avalia polinómio em dado ponto, dados os seus coeficientes.y = prodpols(coefs, x) avalia o polinómio de coeficientes coefs no pontox. Mais precisamente y é o somatório de coefs(i) * x^(i-1) com i desde iaté ao comprimento de coefs, o qual deve ser um vector numérico.
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 68/113
Funções de M-files (4)function y = prodpols(coefs, x)%PRODPOLS Avalia polinómio em dado ponto, dados os seus coeficientes.% (documentação e verificação dos argumentos suprimidos)
xpow = powers(size(coefs), x);y = sum(coefs .* xpow);
end
function out = powers(sizecoef, x)%POWERS Subrotina para calcular potências de x.% out = powers(sizecoef, x) recebe um array com as dimensões dum vector de% coeficientes e calcula as potências de x tais que out(i) = x^(i-1) com i
% desde 1 até ao comprimento indicado por sizecoef.out = zeros(sizecoef);for k=1:max(sizecoef)
out(k) = x^(k-1);end
end
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 69/113
Funções de M-files (5)
Subfunções podem aparecer em qualquer ordem, desde quedepois da primária, a qual tem de ser sempre a primeira no M-file
Subfunções podem chamar outras subfunções
>> help prodpolsPRODPOLS Avalia polinómio em dado ponto, dados os seus coeficientes.(documentação e verificação dos argumentos suprimidos)
>> help prodpols>powersPOWERS Subrotina para calcular potências de x.
out = powers(sizecoef, x) recebe um array com as dimensões dum vector decoeficientes e calcula as potências de x tais que out(i) = x^(i-1) com idesde 1 até ao comprimento indicado por sizecoef.
>> prodpols([-10 4 4], 2)
ans =
14
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 70/113
Scope (1) Scope é o contexto em que uma variável está definida
O MATLAB guarda as variáveis em workspaces
O workspace base é usado por scripts e pela linha decomandos interactiva
As funções têm o seu próprio workspace e só podem
aceder a outros workspaces Se alguma variável for declarada global em ambos os
workspaces
Usando as funções evalin ou assignin
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 71/113
Scope (2)
Evitar usar estemecanismo afavor de
argumentos deentrada e saída ouclosures
function functesteglobal glgl = 3; %variável é global e é partilhada com outros workspaces que a
%tenham declarado globallo = 3; %variável é local e perder-se-á quando a função retornar
end
>> gl = 5; lo = 5;>> functeste>> gl, lo
gl =
5
lo =
5
>> global gl>> gl = 5; lo = 5;>> functeste>> gl, lo
gl =
3
lo =
5
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 72/113
►Exercícios Constrói uma função partition, que particiona um array de células, tal
que: A função recebe 3 argumentos
cellarr, um array de células vectorial 1 por k , com k >= 0 n, um inteiro não negativo (o tamanho das partições) d, um inteiro positivo (o offset entre as partições)
A função devolve 2 argumentos Um array de células n por y, tal que cada linha é um subarray de cellarr de
tamanho n, com os seguintes conteúdos: Linha 1: [cellarr(1), cellarr(2), …, cellarr(n)]
Linha 2: [cellarr(1+d), cellarr(2+d), …, cellarr(n+d)]
Linha 3: [cellarr(1+2d), cellarr(2+2d), …, cellarr(n+2d)] etc. Um inteiro positivo com o número de partições criadas
Nota que y == floor((d+length(cellarr)-n)/d)
Todas as linhas têm o mesmo tamanho, logo alguns elementos finais decellarr podem não aparecer nas partições
Se d > n, alguns elementos do meio não figurarão no resultado
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 73/113
Passagem por valor (1) Em MATLAB, todas as variáveis são passadas por
valor
Não se podem construir referências para variáveis de
modo a obter o mesmo efeito que na passagem porreferência (como em C) Não se podem facilmente construir estruturas de dados
como listas ligadas
Excepções: objectos de Java e classes de utilizador queherdam de handle.
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 74/113
Passagem por valor (2)function teste(a, b)a.campo = 2;b = 4;
end
>> x.campo = 10; b = 3;>> teste(x, b);>> x, b
x =
campo: 10
b =
3
function [a b] = teste(a, b)a.campo = 2;b = 4;
end
>> x.campo = 10; b = 3;>> [x b] = teste(x, b)
x =
campo: 2
b =
4
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 75/113
Scope (3) Funções aninhadas também têm o seu próprio
workspace
Podem, contudo, aceder aos workspaces das funçõesenvolventes
Regra: uma variável é guardada no workspace dafunção mais exterior que a usa Funções envolventes não podem usar variáveis que são
argumentos de saída nas funções aninhadas
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 76/113
Scope (4)function functestek = 3;a = 1;function nested1
nested2;
k = a * 3;function nested2a = a * 2;
endenddisp(k); %k == 3nested1;disp(k); %k == 6
%nested2; Inválido, nested2 sópode ser chamada por nested1
nested1;disp(k); %k == 12
end
function functestefunction nested
for k=1:4;
end
end
k = 3;while k <= 5 %ciclo nunca termina!
nested;k = k + 1;
endend
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 77/113
Scope (5) O workspace da função envolvente continua disponível
à função aninhada mesmo depois de a funçãoenvolvente retornar!
Exemplo: Função que recebe um conjunto de coeficientes e
devolve a função polinomial construída com essescoeficientes. I.e., dado coefs devolve uma função
Função devolvida tem um mecanismo para aplicar umfactor de escala persistente, mas alterável, ao polinómio
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 78/113
Scope (6) Ainda sem o mecanismo para o factor de escala:function pol = getpol(coefs)%GETPOL Função polinomial dados os seus coeficientes% pol = getpol(coefs) devolve um handle para uma função polinomial cujos
% coeficientes são dados pelo vector coefs.
function out = powers(x)out = zeros(size(coefs));for k=1:length(coefs)
out(k) = x^(k-1);end
end
function y = funpol(x)y = sum(coefs .* powers(x));
end
pol = @funpol;end
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 79/113
Scope (7) Opções para definir o factor de escala persistente Usar variáveis globais
Potencialmente perigoso e sem mecanismos de validação
(poderia definir-se essa global com uma string, por exemplo) Adicionar um segundo argumento à função polinomial
devolvida, o factor de escala Melhor, mas pouco prático porque
se teria de incluir o segundo argumento em todas as chamadas ter-se-ia de guardar o factor de escala nalguma variável
acessível no mesmo contexto em que se chamará a funçãopolinomial devolvida
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 80/113
Scope (8)function [pol setfact] = getpol(coefs)%GETPOL Função polinomial dados os seus coeficientes% [pol setfact] = getpol(coefs) devolve um handle pol para uma função% polinomial cujos coeficientes são dados pelo vector coefs e uma função% de argumento único que define um factor de escala que será aplicado a% todas as chamadas à função polinomial devolida
%Função powers() igual ao exemplo anterior (suprimida por falta de espaço)factor = 1;
function y = funpol(x)y = factor * sum(coefs .* powers(x));
end
function deffactor(fact)
if ~isscalar(fact) || ~isnumeric(fact)error('getpol:deffactor:badarg', ...'O factor tem de ser um escalar numérico.');
endfactor = fact;
end
pol = @funpol;setfact = @deffactor;end
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 81/113
Scope (9)>> [pol setfact] = getpol([-10 4 4])
pol =
@getpol/funpol
setfact =
@getpol/deffactor
>> pol(2)
ans =
14
>> setfact('str')??? Error using ==> getpol>deffactor at 23O factor tem de ser um escalar numérico.
>> setfact(.5)
>> pol(2)
ans =
7
>> [pol2 setfact2] = getpol([-10 4 4]);
>> setfact2(2);>> pol(2)
ans =
7
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 82/113
Depuração (1)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 83/113
Depuração (2)>> [pol2 setfact2] = getpol([-10 4 4]);29 pol = @funpol;K>> dbcont>> pol2(2)13 out(k) = x^(k-1);K>> whosName Size Bytes Class Attributes
---- powers -----------------------------------------------------ans 0x0 0 (unassigned)k 1x1 8 doubleout 1x3 24 doublex 1x1 8 double
---- getpol -----------------------------------------------------
ans 0x0 0 (unassigned)coefs 1x3 24 doublefactor 1x1 8 doublepol 1x1 32 function_handlesetfact 1x1 32 function_handle
K>> dbstep14 end
K>> dbquit
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 84/113
Depuração (3) dbclear - Remove breakpoint.
dbcont - Continue execution.
dbdown - Change local workspace context.
dbquit - Quit debug mode.
dbstack - Display function call stack.
dbstatus - List all breakpoints.
dbstep - Execute one or more lines.
dbstop - Set breakpoint.
dbtype - List M-file with line numbers. dbup - Change local workspace context.
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 85/113
Número de argumentos (1) Argumentos de entrada Uma função pode ser chamada com menos argumentos
de entrada do que aqueles que são declarados no
cabeçalho da função Função nargin devolve o número de argumentos
passados Não se pode referir argumentos não definidos, pelo que
se deve, caso não tenham sido passados todos os
argumentos Emitir um erro (usar nargchk) Atribuir valores por defeito
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 86/113
Número de argumentos (2)function res = teste(a, b)res = a * b;
end
>> teste(3, 4, 5)
??? Error using ==> testeToo many input arguments.
>> teste(3, 4)
ans =
12
>> teste(3)??? Input argument "b" is undefined.
Error in ==> teste at 2res = a * b;
function res = teste(a, b)if nargin == 0
error(nargchk(1, 2, nargin, 'struct'))elseif nargin == 1
b = 1;end
res = a * b;end
>> teste()??? Error using ==> teste at 3Not enough input arguments.
>> teste(3)
ans =
3
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 87/113
Número de argumentos (3) Argumentos de saída Uma chamada a uma função pode especificar menos
argumentos de saída do que aqueles que são declarados
no cabeçalho da função Não são emitidos erros como nos argumentos de entrada, os
retornos extra são simplesmente ignorados
Ainda assim, a função pode verificar nargout para evitar fazercálculos desnecessários
Podem gerar-se erros com nargoutchk
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 88/113
Número de argumentos (4)function [a b] = teste()a = 3;b = 4;
end
>> a = teste
a =
3
>> [a b] = teste
a =
3
b =
4
>> [a b c] = teste??? Error using ==> testeToo many output arguments.
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 89/113
Número de argumentos (5) Funções podem ter um número arbitrário deargumentos de entrada e saída Usar varargin no final da lista de argumentos de
entrada Usar varargout no final da lista de argumentos de saída
Variáveis varargin e varargout são vectores de células
>> [a b] = prodsum(5)
??? Error using ==> prodsumToo many output arguments.
Error in ==> prodsum
>> [a b c] = prodsum(5, [2 3 4], [2 3 4])
(a = 5, b = 9, c = 24)
function [a varargout] = prodsum(a, varargin)
if length(varargin) >= 1varargout{1} = sum(varargin{1});endif length(varargin) == 2
varargout{2} = prod(varargin{2});end
end
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 90/113
►Exercícios Altera partition
Por forma a que o último argumento seja facultativo. Seeste não for fornecido, as partições resultantes deverão
ser tão numerosas quanto possível, mas sem qualquersobreposição e
de modo a que todos os argumentos sejam validados
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 91/113
Plots 2-D e 3-D, edição
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 92/113
Gráficos 2-D Função plot
plot(y) produz gráfico dos elementos do vector y em funçãodos respectivos índices ou, se y for complexo, da parte
imaginária em função da parte real plot(x,y) produz gráfico dos elementos do vector y em
função dos elementos do vector x
plot(x1,y1,...,xn,yn) produz gráficos dos elementos do vector yi em função dos elementos do vector xi
Os gráficos são lineares por troços, entre cada par depontos
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 93/113
Exemplos (1)>> x1=-2*pi:0.1:2*pi;
>> x2=-2*pi:1:2*pi;
>> plot(x1,sin(x1),x2,sin(x2))
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 94/113
Formatação Básica É possível especificar a cor, estilo da linha emarcadores para os pontos do gráfico usando
plot(x1,y1,’color_style_marker1’,x2,y2,’color_style_marker2’,...)
É também possível adicionar um título ao gráfico,legendá-lo e identificar os eixos, usando os comandostitle, legend, xlabel e ylabel.
Os limites do sistema de eixos podem ser alterados epode ser adicionada uma grelha ao gráfico
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 95/113
Exemplos (2)>> x1=0:pi/100:2*pi;
x2=0:pi/10:2*pi;
plot(x1,sin(x1),'m--',x2,sin(x2),'ks');
grid on
>> figure;
plot(x1,sin(x1),'m--',x2,sin(x2),'ks');
xlabel('x (rad)'); ylabel('sin(x)');
title('Gráfico da função sin(x) para xentre 0 e 2\pi');
axis([0 2*pi -1.5 1.5]); grid on
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 96/113
Exemplos (3)>> x=-pi:pi/100:pi; xm=-pi:pi/10:pi;y1=sin(x); y2=sin(2*x); ym=sin(xm);
figure;plot(x,y1,'LineStyle','--','LineWidth',4,'Color','k');xlabel('x (rad)'); grid on
hold on
plot(x,y2,'LineStyle',':','LineWidth',2);legend('sin(x)','sin(2x)','Location','SouthEast');
plot(xm,ym,'LineStyle','none','Marker','o','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor','r');
hold off
text(-pi,0,'\leftarrow sin(-\pi)=0','FontSize',14,'FontWeight','Bold')set(gca,'YTick',[-1 -0.5 0 0.5 1]);set(gca,'XTick',[-pi -pi/2 0 pi/2 pi]);
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 97/113
Exemplos (4)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 98/113
Exemplos (5)>> for k=0:pi/50:2*pi
plot(sin(k),cos(k),'ro');
axis equal; axis([-1 1 -1 1])
pause(.2); hold on;
end
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 99/113
Exemplos (6)>>
for k=0:pi/10:2*pi
subplot(1,2,1);
line([sin(k) sin(k+pi/10)],[cos(k) cos(k+pi/10)],'Color','g');
axis equalaxis([-1.5 1.5 -1.5 1.5])
hold on;
subplot(1,2,2);
line([sin(k) sin(k+pi/10)],[cos(k) cos(k+pi/10)],'Color','r');
axis([-1.5 1.5 -1.5 1.5])
pause(.5);
hold on;
end
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 100/113
Exemplos (7)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 101/113
Exemplos (8)>> n=randn(1000,1); figure;
subplot(3,2,[3 5]); plot(0:.1:2*pi,cos(0:.1:2*pi));
subplot 321; hist(n,10);
subplot 322; hist(n,100);
subplot 324; grid on;
subplot 326;
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 102/113
Janela com vários gráficos A função subplot permite a apresentação de vários
gráficos numa mesma janela
subplot(m,n,p) ou subplot mnp divide a janelanuma matriz m por n de subgráficos e selecciona o p-ésimo gráfico como gráfico activo
Os subgráficos são numerados da esquerda para a direitaao longo da primeira linha da matriz, depois da segundae assim por diante
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 103/113
Outros Gráficos Gráficos com escalas logarítmicas
loglog(), semilogy(), semilogx()
>> x=0:.1:5; y=exp(x);figuresubplot(1,2,1)plot(x,y,'Color','m','LineWidth',3)grid on
subplot(1,2,2)semilogy(x,y,'Color','m','LineWidth',3)grid on
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 104/113
Outros Gráficos (2) Gráficos 3-D
plot3(), surf(), mesh(), contour()
sphere, cylinder
>> t2=0:.01:10*pi;
[x y]=pol2cart(t2,t2);figuresubplot(2,2,1)plot3(x,y,0:3141);grid onsubplot(2,2,2)plot(x,y);grid onsubplot(2,2,[3 4])polar(t2,t2,'--r');
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 105/113
Outros Gráficos (3)>> [x y z]=peaks; figure;
subplot(1,2,1);mesh(x,y,z);
subplot(1,2,2);contour(x,y,z); colormap jet;colorbar
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 106/113
Outros Gráficos (4) area() para colorir a área por baixo de uma curva efill() para criar polígonos coloridos
>> y=[4 2 9 -2 1 3]; area(y)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 107/113
Outros Gráficos (5) Gráficos de Barras e de Queijo
bar() e barh(), bar3() e bar3h(), pie()
Stem graphs
>> t=0:pi/10:3*pi;y=cos(t);stem(y,'Marker','h','MarkerEdgeColor','k',
'MarkerFaceColor','g','LineStyle','--','Color','g')
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 108/113
► Exercício Refazer o Exemplo 5 usando
a exponencial complexa
a equação da circunferência em coordenadas cartesianas
Desenhar quadrado preenchido a vermelho
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 109/113
Figure Windows Quando a função plot é executada o MATLAB abre uma janela
(Figure Window) para apresentar o gráfico, caso não haja já umaaberta; no caso de haver janelas abertas o gráfico é desenhado nosistema de eixos da última janela activa, substituindo o que lá seencontrava Pode usar-se o comando hold on para manter o gráfico anterior
O comando figure abre uma nova Figure Window numerada apartir da janela de menor número que se encontre aberta Pode especificar-se o número da figura, escrevendo figure(n)
Os comandos close, close figure n e close all fecham ,respectivamente, a janela actual, a janela especificada nocomando e todas as janelas
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 110/113
Figure Windows (2) A janela permite a
inspecção do gráficodesenhado, sendopossível, por exemplo,
Visualizar os valores dospontos
Fazer zoom a partes do
gráfico Mudar a sua orientação
(útil em 3-D) e movê-lo
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 111/113
Figure Windows (3) É possível editar o gráfico na própria janela (mudando
cores e estilos das linha, limites dos eixos, etc.) e obtero código correspondente à figura com as alterações
efectuadas fazendo File -> Generate M-File
O gráfico pode ser guardado em diversos formatos(.jpg, .png, .fig, .eps)
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 112/113
Construção de interfaces gráficos com o GUIDE
5/7/2018 Curso de MATLAB%c2%ae - slidepdf.com
http://slidepdf.com/reader/full/curso-de-matlabc2ae 113/113
Problema Construir um interface para desenhar polinómios A granularidade do gráfico (número de pontos da
curva) será especificada ao abrir o interface
Interface terá Zona onde o gráfico é desenhado Colecção de lista de coeficientes dos polinómios que se
podem desenhar
Podem adicionar-se listas de coeficientes Campos onde se escolhe o intervalo onde o gráfico é
desenhadod h l d l
top related