Escolar Documentos
Profissional Documentos
Cultura Documentos
Índice de conteúdos
-i-
Programação em MatLab
1. A linguagem MatLab
O nome MatLab deriva de MATrix LABorator. É um sistema interativo, baseado na representação
matricial para a resolução de problemas, no âmbito científico e de engenharia, e para a sua
visualização gráfica. Possui um conjunto de “Toolboxes” (Sistemas de Controlo, Otimização, Redes
Neuronais Artificiais) que permitem resolver classes particulares de problemas. Tem a possibilidade
de chamar rotinas desenvolvidas em C ou em Fortran.
2. Estrutura de um programa
O MatLab é usado interativamente; isto é, dado um comando, este é interpretado fornecendo os
resultados solicitados. Um programa é uma sequência destes comandos, os quais podem ser escritos
num ficheiro para uma execução posterior. Um programa, para além de comandos, pode também
conter chamadas a funções.
O ficheiro que contém o programa tem que ter a extensão ".m" para ser reconhecido pelo
MatLab; a este ficheiro que contém a sequência de comandos principais, dá-se o nome de script.
Um ficheiro apenas pode conter um programa. Caso este programa faça uma chamada a uma
função, esta tem que estar definida num outro ficheiro. Um ficheiro pode ter mais do que uma
função, sendo que todas as funções, com exceção da primeira, só podem ser chamadas pelas
funções que estejam definidas naquele ficheiro.
3. Separadores de comandos
Para separar comandos podem ser utilizados o <enter>, a virgula (,) ou o ponto e virgula (;). O
<enter> e a virgula (,) executam o comando e, se tiver um resultado, mostra-o no monitor; o ponto
e virgula (;) apenas executa o comando. Podem-se escrever vários comandos na mesma linha, desde
que separados por vírgulas e/ou ponto e vírgulas.
4. Comentários
Um comentário é um texto inserido em qualquer parte do programa ou função, para aumentar a
sua clareza. Um texto precedido pelo caráter "%" é considerado um comentário.
-1-
Tipos de dados básicos
Os tipos de dados associados aos números inteiros suportam os seguintes conjuntos de valores:
intB = {-2B-1, ..., 2B-1-1}, B {8, 16, 32, 64}. Ex: B = 8, int8 = {-27,..., 27-1} = {-128,..., 127}.
uintB = {0, ..., 2B-1}, B {8, 16, 32, 64}. Ex: B = 8, uint8 = {0,..., 28-1} = {0, ..., 255}.
Um valor numérico é, por defeito, do tipo double (armazenado em 8 Bytes), mas podem ser
usados os outros tipos de dados através da transformação de tipo (casting).
Exemplo:
programa: resultado da execução:
Name Size Bytes Class
A = uint8(89); A 1x1 1 uint8 array
B = int8(89); B 1x1 1 int8 array
C = int16(787); C 1x1 2 int16 array
D = int32(345); D 1x1 4 int32 array
E = uint32(3534); E 1x1 4 uint32 array
X = 4.5; X 1x1 8 double array
Y = double(6.7); Y 1x1 8 double array
Z = single(2.4); Z 1x1 4 single array
whos Grand total is 8 elements using 32 bytes
6. Números complexos
Um número complexo possui a seguinte forma: a + bi. Como MatLab entende as letras i e j como
√(−1), é aconselhado não utilizar tais letras como nomes de variáveis.
-2-
Números complexos
7. Variáveis
As variáveis são representadas por identificadores compostos por cadeias de carateres
alfanuméricos e do caráter "_" (por ex: tempo, x, X). Os elementos de vetores e matrizes são
referenciados por índices (por ex: V(i), m(i,j)). As variáveis não são declaradas, apenas usadas
como parte de expressões. O Matlab é CaseSensitive, ou seja X e x são diferentes.
O Matlab trabalha fundamentalmente com um tipo de dados: matrizes de números reais ou
complexos. Casos especiais de matrizes são os escalares (matriz 1x1) e os vetores (matriz linha 1xm
e matriz coluna nx1). Uma variável pode ser utilizada para armazenar conjuntos de dados do
mesmo tipo, nas seguintes formas:
- um escalar (dimensão 1 x 1)
- um vetor coluna (dimensão n x 1),
- um vetor linha (dimensão 1 x m),
- uma matriz (dimensão n x m).
Escalar Vetor coluna Vetor linha Matriz
5 3 5 8 3 11 9 6 3
1x1 7 1X3 5 7 2
4 4 8 1
3X1 3x3
-3-
Variáveis predefinidas (constantes)
No entanto, qualquer um destes identificadores pode ser redefinido pelo programador como
outra entidade (uma variável) e utilizado dessa forma.
Exemplo:
>> pi >> pi = 23 >> A = 2 * pi
ans = pi = A=
3.1416 23 46
9. Operadores e expressões
O MatLab é uma linguagem que aceite três tipos operadores e de expressões: aritméticos,
lógicos e de texto (literais).
-4-
Operadores e expressões
- operadores,
- parêntesis,
- operador Ellipsis (...), que serve para continuar uma expressão noutra linha do texto.
Exemplo:
programa: resultado da execução:
a = 10; resultado =
resultado = (pi + 5) * a + floor(23.87) ... 83.3326
/ 12
Regras de precedência dos operadores nas expressões:
1. () parêntesis
2. ^ potenciação
3. - sinal de negação (operador unário)
4. *, /, \ produto e divisões
5. +, - adição e subtração
Exemplos:
>> - (3 + 5) * 2 >> - 3 + 5 * 2
ans = ans =
-16 7
Uma expressão lógica é aquela em que os operadores são lógicos e operandos são relações e/ou
variáveis do tipo lógico. O resultado de uma relação ou de uma expressão lógica é verdadeiro ou
falso; contudo, no MatLab o resultado é numérico: 1 significa verdadeiro e 0 falso.
Os operadores relacionais permitem relacionar entidades do mesmo tipo devolvendo 1 (true)
ou 0 (false) e são os seguintes:
> → Maior que
>= → Maior ou igual que
< → Menor que
<= → Menor ou igual que
== → Igual
~= → Diferente
Os operadores lógicos permitem a combinação ou negação das relações lógicas e são os
seguintes:
& → Conjunção (AND)
| → Disjunção (OR)
~ → Negação (NOT)
XOR → Disjunção binária exclusiva (XOR)
-5-
Operadores e expressões
1 1 1 1 0 0
1 0 0 1 1 1
0 1 0 1 1
0 0 0 0 0
Uma variável, depois de usada, pode ser libertada (tornada não definida). Para tal, usa-se a
função clear, a qual tem a seguinte sintaxe:
clear ('<variável>')
Exemplo:
>> A = 25; >> clear('A');
>> A >> A
A=
??? Undefined function or variable 'A'.
25
11. Matrizes
Os elementos de cada linha são separados por espaços ou vírgulas. O final de cada linha é
indicado por um ponto-e-vírgula. A lista de elementos é delimitada por parêntesis retos [ ].
-6-
Matrizes
Exemplos:
% Matriz Bidimensional >> B = [16 3 2 13] % Vetor (Matriz Linha)
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] B=
A= 16 3 2 13
>> C = [16; 5; 9] % Vetor (Matriz Coluna)
16 3 2 13
C=
5 10 11 8
16
9 6 7 12
5
4 15 14 1 9
Numa matriz bidimensional, A(i,j) é o elemento da i-ésima linha e j-ésima coluna. Num vetor,
B(k) é o k-ésimo elemento. O índice inicial da linha e da coluna de uma matriz, e de um vetor é 1.
Exemplos:
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; >> B = [16 3 2 13];
>> A(2,3) >> B(2)
ans = ans =
11 3
O Matlab possui funções que permitem a criação e manipulação de matrizes, como as seguintes:
zeros(m, n) → matriz de zeros de dimensão m x n (m linhas e n colunas)
ones(m, n) → matriz de uns de dimensão m x n
rand(m, n) → matriz (m x n) de números aleatórios com distribuição uniforme em ]0, 1[
randn(m, n) → matriz (m x n) de números aleatórios com distribuição normal (Gaussiana) de
média = 0, variância d2 = 1 e desvio padrão d = 1
eye(m) → matriz identidade (matriz quadrada de ordem m)
Exemplos:
>> Z = zeros(2, 5) % matriz de dimensão 2 x 4 >> X = randn(2, 3)
Z= >> X = rand(2, 4) X=
0 0 0 0 0 X= -0.4326 0.1253 -1.1465
0 0 0 0 0 0.8214 0.6154 0.9218 0.1763 -1.6656 0.2877 1.1909
>> Q = ones(3, 5) 0.4447 0.7919 0.7382 0.4057 >> A = eye(3)
Q= % matriz quadrada de ordem 2 A=
1 1 1 1 1 >> X = rand(2) 1 0 0
1 1 1 1 1 X= 0 1 0
1 1 1 1 1 0.8913 0.4565 0 0 1
0.7621 0.0185
-7-
Matrizes
A concatenação de matrizes é feita da mesma maneira como é feita a definição de uma matriz.
Por exemplo, A = [B C; D E]; as matrizes B e C serão organizadas numa linha, enquanto que as
matrizes D e E serão organizadas noutra; o total de linhas de A será a soma do número de linhas de
B e D; o total de colunas de A será a soma do número de colunas de B e C.
Exemplo:
>> B = [1 30 7 ; 5 1 18; 1 4 10]; A=
>> C = [16 2 13; 5 10 8; 9 6 7 ]; 1 30 7 16 2 13
5 1 18 5 10 8
>> D = [16 3 13; 6 7 12; 4 14 1];
1 4 10 9 6 7
>> E = [5 11 8; 6 7 12; 4 15 1]; 16 3 13 5 11 8
>> A = [B C; D E] 6 7 12 6 7 12
4 14 1 4 15 1
Os operadores aritméticos que se podem aplicar sobre uma matriz são os seguintes;
+ → soma termo a termo da matriz.
- → diferença termo a termo da matriz.
/ → produto da primeira matriz pela inversa da segunda; ou seja, as duas expressões
seguintes são equivalentes: C = A / B e C = A * inv(B);
./ → divisão termo a termo da matriz; para tal, as matrizes devem ter o mesmo tamanho.
* → produto matricial.
.* → multiplicação termo a termo das matrizes (devem ter o mesmo tamanho).
^ → produto matricial n vezes (ou seja, X^n = X * ... * X).
.^ → operação de potenciação termo a termo da matriz.
Exemplo (+):
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; B=
>> B = A + A 32 6 4 26
10 20 22 16
18 12 14 24
8 30 28 2
Exemplo (-):
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; B=
>> B = A - A' 0 -2 -7 9
2 0 5 -7
7 -5 0 -2
-9 7 2 0
-8-
Matrizes
Exemplo (/):
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; B=
>> B = A / inv(A) 378.88 451.77 461.77 408.88
282.88 483.77 525.77 408.88
302.44 474.88 500.88 380.44
320.22 478.44 536.44 494.22
Exemplo (./):
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; B=
>> B = A ./ A 1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Exemplo (*):
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; B=
>> B = A * A 341 285 261 269
261 301 309 285
285 309 301 261
269 261 285 341
Exemplo (.*):
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; B=
>> B = A .* A 256 9 4 169
25 100 121 64
81 36 49 144
16 225 196 1
Exemplo (^):
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; B=
>> B = A ^ 2 341 285 261 269
261 301 309 285
285 309 301 261
269 261 285 341
Exemplo (.^):
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; B=
>> B = A .^ 2 256 9 4 169
25 100 121 64
81 36 49 144
16 225 196 1
Algumas das operações que se podem realizar sobre uma matriz são as seguintes:
sum(M) → soma dos elementos de cada coluna da matriz M
’M → matriz transposta da matriz M
diag(M) → elementos da diagonal principal da matriz M
inv(M) → inversa da matriz M
-9-
Matrizes
- 10 -
Matrizes
Exemplo:
>> B = [1 2 3; 4 5 6;7 8 9]; ans =
>> cross(B, B) 0 0 0
0 0 0
0 0 0
Exemplo:
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; ans =
>> trace(A) 34
Exemplo:
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; ans =
>> det(A) 0
Exemplo:
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; a=
>> [a b] = eig(A) -0.5000 -0.8165 0.2236 -0.4082
-0.5000 0.4082 -0.6708 -0.0000
-0.5000 0.0000 0.6708 -0.4082
-0.5000 0.4082 -0.2236 0.8165
b=
34.0000 0 0 0
0 8.0000 0 0
0 0 0.0000 0
0 0 0 -8.0000
Exemplo:
>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; a=
>> [a b] = find(A >= 5 & A < 10) 2
3
3
3
2
b=
1
1
2
3
4
Ou seja, são os seguintes elementos da matriz:
A(2,1) = 5; A(3,1) = 9; A(3,2) = 7; A(3,3) = 7; A(2,4) = 8.
Exemplo:
>> B = [16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1]; a=
1 2 3 13 14 16
>> a = find(B < 5 | B >= 15)
- 11 -
O operador ":"
O operador ":" é muito útil quando se deseja usar apenas uma parte da matriz. Por exemplo,
A(1:m, n) corresponde aos primeiros m elementos da n-ésima coluna
A(2:5, n) corresponde do 2º ao 5º elementos da n-ésima coluna
A(:, n) corresponde a todos os elementos da n-ésima coluna
A(:, end) corresponde a todos os elementos da última coluna
A(m, 1:n) corresponde os primeiros n elementos da m-ésima linha
A(m, :) corresponde a todos os elementos da m-ésima linha
A(end, :) corresponde a todos os elementos da última linha
A(:, [1 2 4]) corresponde às colunas 1, 2 e 4
A exclusão de linhas e de colunas é feita definindo a linha ou a coluna a ser excluída como vazia.
Exemplo:
>> X = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; X=
>> X(:,2) = [ ] 16 2 13
5 11 8
9 7 12
4 14 1
- 12 -
Funções matemáticas básicas
13.1. Trigonométricas
13.2. Exponenciais
exp(x) → exponencial de x, ex
sqrt(x) → raiz quadrada de x
pow2(x) → 2 elevado à potência x, 2x
13.3. Numéricas
- 13 -
Funções matemáticas básicas
13.4. Estatísticas
14. Funções
Deve-se tomar um certo cuidado com as funções do MatLab, pois esta linguagem possui funções
que podem retornar mais de um valor com uma única chamada (ao contrário das funções existentes
noutras linguagens que devolvem apenas um resultado).
- 14 -
Funções
Num ficheiro podem ser definidas mais do que uma função, mas a primeira delas deve ter o
mesmo nome do ficheiro. As restantes funções só podem ser chamadas pelas funções definidas
naquele ficheiro, não podendo ser chamadas por funções definidas noutros ficheiros.
As variáveis do programa são criadas no espaço de trabalho (globais). Nas funções as variáveis
são locais (não tendo acesso a variáveis globais e nem as podendo criar). Por sua vez, os parâmetros
de saída são variáveis globais.
Uma função pode ser chamada incluída numa expressão (se devolve apenas um valor) ou usando
uma instrução de atribuição. Neste último caso, a sintaxe da chamada de uma função é a seguinte:
[<variáveis>] = <nome_função> (<parâmetros_entrada>)
em que <variáveis> é uma lista de variáveis (separadas por vírgulas ou espaços em branco) que
recebem os valores devolvidos pela função.
Exemplo:
>> [s p] = soma_produto(20, 10)
s=
30
p=
200
Quando se chama uma função que devolve mais do que um resultado, sem especificar as
variáveis que recebem os valores devolvidos pela função, apenas o primeiro resultado é conhecido.
Exemplos:
>> soma_produto(50, 20) >> a = 100 + soma_produto(30, 20)
ans = a=
70 150
A leitura de dados pelo teclado pode ser feita com a função predefina input, a qual tem as
seguintes sintaxes:
[<variável>] = input ('mensagem') % para ler valores numéricos ou de texto
[<variável>] = input ('mensagem', 's') % para ler apenas valores de texto
em que mensagem é o texto a ser exibido ao utilizador (prompt), s para especificar que a entrada
do utilizador deve ser texto e <variável> para receber o valor numérico ou de texto inserido pelo
utilizador a partir do teclado (valor devolvido pela função input).
- 15 -
Comandos de leitura/entrada e escrita/saída padrão
Exemplos:
>> x = input('Insira o seu nome: ') >> st = input('Insira o seu nome: ', 's')
Insira um texto: 'Carlos' Insira o seu nome: Carlos
x= st =
Carlos Carlos
>> input('Insira um valor inteiro: ') >> st = input('Insira o seu nome: ', 's')
Insira um valor inteiro: 34 Insira o seu nome: 'Carlos'
ans = st =
34 'Carlos'
Para se mostrar/escrever os valores das variáveis dentro do programa, pode-se usar o comando
disp. Este comando tem a seguinte sintaxe:
disp ([var1, ..., varN])
em que var1, ..., varN devem ser do mesmo tipo (ou todos valores numéricos ou todos texto). As
vígulas podem ser substituídas por espaços em branco e os parentesis retos podem ser omitidos se
se pretende escrever apenas o valor de uma variável.
Exemplos:
>> m = 25; >> disp([m n]) >> disp([4, ' < ', 6])
>> n = 45; 25 45 #<#
>> disp([m, n]) >> disp(m) >> disp(['4', ' < ', '6'])
25 45 25 4<6
- 16 -
Estruturas condicionais
Exemplo:
programa: resultado da execução 1:
x = input('Insira um numero: '); Insira um numero: 20
if x > 0 20
disp(x); resultado da execução 2:
end; Insira um numero: -10
>>
- 17 -
Estruturas condicionais
else
<comandos3>
end
em que if, else, elseif e end são palavras-chave, <condição1> e <condição2> são expressões lógicas,
e <comandos1>, <comandos2> e <comandos3> são listas de comandos em que apenas uma delas é
executada. A lista <comandos1> é executada se <condição1> for verdadeira; a lista <comandos2> é
executada se <condição1> for falsa e <condição2> verdadeira; e a lista <comandos3> é executada se
<condição1> e <condição2> form ambas falsas.
Exemplo:
programa: resultado da execução 1:
x = input('Insira um numero: '); Insira um numero: 20
if x > y Numero positivo!
disp('Numero positivo!');
resultado da execução 2:
elseif x == y
Insira um numero: -30
disp('Numero nulo!');
Numero negativo!
else
disp('Numero negativo!');
end;
Esta estrutura, que é parecida com as anteriores, permite que se escolha uma opção entre várias
dependendo do resultado de uma variável ou expressão. A sua sintaxe é a seguinte:
switch <expressão>
case <opção1>
<comandos1>
...
case <opçãoN>
<comandosN>
otherwise
<comandos>
end
em que switch, case, otherwise e end são palavras-chave; <expressão> é uma expressão numérica
ou de texto; e <comandos1>, ..., <comandosN> e <comandos> são listas de comandos em que
apenas uma delas é executada.
Se o valor de <expressão> for igual ao valor de <opção1> então é executada a lista <comandos1>;
se não for, mas se o valor desta expressão for igual a <opção2> então é executada a lista
<comandos2>; e assim sucessivamente, até se verificar se o valor daquela expressão é igual a
- 18 -
Estruturas condicionais
<opçãoN> que, caso seja, executa a lista <comandosN>; se o valor da <expressão> não for igual a
nenhuma das opções, é executada a lista <comandos>. De referir que: i, j, <opçãoi> ≠ <opçãoj>.
Exemplo 1:
programa: resultado da execução 1:
x = input('Insira um numero: '); Insira um numero: 2
switch x 2 30
case 1 resultado da execução 2:
y = 10; Insira um numero: 6
case 2 6 100
y = 30;
case 3
y = 50;
otherwise
y = 100;
end;
disp([x, y]);
Exemplo 2:
programa: resultado da execução 1:
x = input('Insira um texto: ', 's'); Insira um numero: 200
switch x DUZENTOS
case '100' resultado da execução 2:
disp('CEM'); Insira um numero: 20
case '200' OUTRO
disp('DUZENTOS'); resultado da execução 3:
case '300' Insira um numero: 100
disp('TREZENTOS'); CEM
otherwise
disp('OUTRO');
end;
- 19 -
Estruturas de repetição
A estrutura "while" testa uma condição lógica e executa uma lista de comandos enquanto a
condição for verdadeira. A sua sintaxe é a seguinte:
while <condição>
<comandos>
end
em que while e end são palavras-chave; e <comandos> é a lista de comandos que é executada
enquanto a <condição> for verdadeira.
Exemplo:
programa: resultado da execução:
a=1 a=
1
b=4
b=
while a < b 4
a=
a=a+1
2
b=b-1 b=
3
end;
a=
3
b=
2
A estrutura "for" é o controlador de fluxo usado quando o número de repetições está definido. A
sua sintaxe é a seguinte:
for <variável_controlo> = <valor_inicial> : <passo> : <valor_final>
<comandos>
end
em que for e end são palavras-chave e a variável <variável_controlo> assume todos os valores
desde <valor_inicial> até <valor_final> com intervalo de variação igual ao valor <passo>. Se o valor
<passo> não foi definido, ele assume o valor de 1.
Exemplo 1:
programa: resultado da execução:
for i = 1:5 X
X(i)=i^2; 1 4 9 16 25
end;
disp('X'); disp(X);
- 20 -
Estruturas de repetição
Exemplo 2:
programa: resultado da execução:
disp('k'); k=
for k = 0:5:15 0
disp(k); 5
end; 10
15
- 21 -
Funções para manipular strings
findstrt
A sintaxe desta função é a seguinte:
<var_retorno> = findstr (<str1>, <str2>)
em que dadas duas strings, <str1> e <str2>, esta função verifica se a string de menor tamanho faz
parte da string de maior tamanho, devolvendo a posição do caráter inicial da string de menor
tamanho na string de maior tamanho. O identificador <var_retorno> é um argumento de saída
opcional que recebe o valor inteiro devolvido pela função. Esta função é Case-Sensitive.
Exemplo:
>> str1 = 'Programando em MatLab.' ; >> x = findstr(str1, str2)
>> str2 = 'MatLab'; x=
>> x = findstr(str2, str1) 16
x=
16
strcmp
A função strcmp compara duas strings e a sua sintaxe é a seguinte:
<var_retorno> = strcmp (<str1>, <str2>)
em que <str1> e <str2> são as duas strings a comparar, devolvendo 1 (se iguais) e 0 (se diferentes).
O identificador <var_retorno> é um argumento de saída opcional que recebe o valor inteiro
devolvido pela função. Esta função é Case-Sensitive.
Exemplo:
>> str1 = 'MATLAB'; x=
>> str2 = 'matlab'; 0
>> x = strcmp(str1, str2)
- 22 -
Funções para manipular strings
strcmpi
Função para comparar duas strings, mas não é Case-Sensitive. A sua sintaxe é a seguinte:
<var_retorno> = strcmpi (<str1>, <str2>)
em que <str1> e <str2> são as duas strings a comparar, devolvendo 1 (se iguais) e 0 (se diferentes).
O identificador <var_retorno> é um argumento de saída opcional que recebe o valor inteiro
devolvido pela função.
Exemplo:
>> str1 = 'MATLAB'; x=
>> str2 = 'matlab'; 1
>> x = strcmpi(str1, str2)
strtok
Esta função separa uma string em duas substrings e tem a seguinte sintaxe:
[<str1>, <str2>] = strtok (<str>, <separador>)
em que <str> é a string a ser separada, usando como separador o carater <separador>. Os
identificadores <str1> e <str2> são argumentos de saída que recebem as substrings determinadas.
Exemplo:
>> [str1, str2] = strtok('MatLab', 'L') str1 =
Mat
str2 =
Lab
strcat
Esta função determina a concatenação de N strings e a sua sintaxe é a seguinte:
<str> = strcat (<str1>, ..., <strN>)
em que <str> é a string resultante (e devolvida) com a concatenação de N strings. Na concatenação
de strings, os espaços em branco no fim das strings envolvidas são desprezados. O identificador
<str> é um argumento de saída opcional. Esta função é Case-Sensitive.
Exemplo:
>> st = strcat('Programar ', ' em ', ' MatLab. ')
st =
Programar em MatLab.
deblank
Esta função determina uma string resultante da remoção dos espaços em branco do final de uma
outra string, cuja sintaxe é a seguinte:
<strf> = deblank (<str>)
em que <strf> é a string definida à custa da remoção dos espaços em branco do final de uma string
fornecida como argumento, <str>. O identificador <strf> é um argumento de saída opcional que
recebe a string devolvida pela função.
- 23 -
Funções para manipular strings
sprintf
A sintaxe desta função é a seguinte:
[<str>, <error>] = sprintf (<formato>, <valor>)
em que a string <str> é determinada a partir dos elementos de <valor> com um dado <formato>,
fornecidos como argumentos; <error> é um argumento de saída opcional que devolve uma
mensagem de erro, se ocorrer algum erro, ou uma matrz vazia, se não ocorrer qualquer erro.
A função sprintf é semelhante a fprintf, com a diferença que sprintf coloca os dados formatados
numa string e não num ficheiro (como fprintf faz).
Exemplo:
>> str = sprintf('%0d', 12) >> str = strcat('MatLab', '_', str)
str = str =
12 MatLab_12
sscanf
A sintaxe desta função é a seguinte:
[<A>, <contador>, <error>, <seguinte>] = sscanf (<str>, <formato>, <tamanho>)
em que a função lê elementos da string <str>, converte-os de acordo com o <formato> especificado
e devolve o resultado numa matriz <A>.
Os identificadores <contador>, <error> e <seguinte> são argumentos de saída opcionais, em que
<contador> devolve o número de elementos lidos com sucesso, <error> devolve uma mensagem de
erro (se ocorrer erro) ou uma matriz vazia (se não ocorrer ero) e <seguinte> devolve um valor igual
ao número de carateres lidos em <str> mais uma unidade. O argumento de entrada <tamanho> é
opcional e especifica o número máximo de elementos que devem ser lidos da string <str> (se não
for especificado qualquer valor, serão lidos todos os elementos da string); os valores possíveis são:
N (ler no máximo N elementos para um vetor coluna), inf (ler pelo menos até ao fim da string),
[m, n] (ler no máximo m x n elementos preenchendo pelo menos uma matriz m x n por colunas).
A função sscanf é semelhante a fscanf, com a diferença que sscanf lê os dados formatados de
uma string e não de um ficheiro (como fscanf faz).
Exemplo:
>> [A, contador, error, seguinte] = sscanf('1 2 3 4 5 6 7 8 9', '%d', 5)
A=
1
2
3
4
5
- 24 -
Funções para manipular strings
contador =
5
error =
''
seguinte =
10
As funções sprintf e sscanf precisam de um parâmetro formato para especificar a forma como os
dados devem ser transformados durante a leitura ou a escrita. Entre os possíveis formatos estão:
%s : texto (string)
%d : decimal
%e : exponencial
%f : ponto fixo (quando usado com sprintf, pode-se definir número de casas; ex: %12.5f)
int2str
Esta função tem a seguinte sintaxe:
<str> = int2str (<numero_inteiro>)
Converte um número inteiro <numero_inteiro> numa string <str> (argumento de saída opcional).
num2str
Esta função tem a seguinte sintaxe:
<str> = num2str (<numero>)
Converte um número qualquer, <numero>, numa string <str> (argumento de saída opcional).
str2num
A sintaxe desta função é a seguinte:
<var_retorno> = str2num (<str>)
Converte uma string, <str>, num número de qualquer tipo; <var_retorno> é um argumento de saída
opcional que recebe o número devolvido pela função.
strtoint
A sintaxe desta função é a seguinte:
<var_retorno> = strtoint (<str>)
Converte uma string, <str>, num número inteiro; <var_retorno> é um argumento de saída opcional
que recebe o valor inteiro devolvido pela função.
str2double
A sintaxe desta função é a seguinte:
<var_retorno> = str2double (<str>)
Converte uma string <str> num valor de dupla precisão; <var_retorno> é um argumento de saída
opcional que recebe o valor de dupla precisão devolvido pela função.
- 25 -
Comandos de leitura e escrita de dados formatadas em ficheiros
A função fopen abre um ficheiro com um determinado tipo de permissão e retorna um valor de
identificação do ficheiro para posterior manipulação. A sua sintaxe é a seguinte:
[<fid>, <mensagem>] = fopen (<nome_ficheiro>, <permissão>)
em que <fid> é variável que fica associada ao nome externo do ficheiro <nome_ficheiro> e que será
utilizada nos comandos de leitura e escrita no modo especificado pela <permissão>. Os valores
(opções) possíveis para <permissão> são os seguintes:
'r' : abre o ficheiro para leitura;
'w' : abre o ficheiro para escrita, criando o ficheiro, se não existe, ou removendo o seu
conteúdo, se já existe;
'r+' : abre o ficheiro para leitura e escrita, mas não cria o o ficheiro;
'w+' : abre o ficheiro para leitura e escrita, criando o ficheiro, se não existe, ou removendo o
seu conteúdo, se já existe;
'a' : cria e abre um ficheiro novo ou abre um ficheiro já existente para escrita, acrescentado no
fim do ficheiro;
'a+' : cria e abre um ficheiro novo ou abre um ficheiro já existente para leitura e escrita,
acrescentado no fim do ficheiro;
Para abrir um ficheiro de texto, ao valor da <permissão> deve ser acrescentado p caráter 't',
como por exemplo, 'wt' ou 'rt+'. Da mesma forma, para abrir um ficheiro binário, deve-se
acrescentar ao valor de <permissão> o caráter 'b', como por exemplo, 'rb' ou rb+'. Se <permissão>
for omitida, então será assumido o valor 'r'. Se não for especificado o tipo de ficheiro com um dos
carateres 't' ou 'b', assume-se que os ficheiros são binários.
Caso a função fopen tenha sucesso ao abrir o ficheiro, esta retornará o identificador de ficheiro
<fid> com um número inteiro maior do que 2 e o conteúdo de <mensagem> será vazio. O <fid> será
usado com outras funções de entrada e saída para identificar o ficheiro no qual as operações serão
realizadas. No entanto, se esta função não tiver sucesso, então <fid> = -1 e <mensagem> conterá
uma cadeia de carateres (string) informando o tipo de erro ocorrido.
- 26 -
Comandos de leitura e escrita de dados formatadas em ficheiros
A função fclose fecha o ficheiro previamente aberto pela função fopen com base no seu número
de identifcação. A sua sintaxe é a seguinte:
[<variável>] = fclose (<fid>)
em que <fid> é a variiável que contém o identificador de um ficheiro aberto com fopen, e
<variável> recebe o valor que esta função retorna, que é 0, em caso de sucesso no fecho do
ficheiro, e -1, em caso de insucesso. Por outro lado, a chamada à função
fclose ('all')
fecha todos os ficheiros abertos com fopen.
Quando um ficheiro é fechado, a associação entre o identificador <fid> e o ficheiro físico
<nome_ficheiro> é desfeita.
A função fscanf efetua a leitura de dados formatados de um ficheiro. A sua sintaxe é a seguinte:
[<variável>, <tamanho>] = fscanf (<fid>, <formato>, <elementos>)
em que <fid> é o identificador associado ao ficheiro onde se está a fazer a leitura dos dados
escritos no formato especificado por <formato> e atribuídos à <variável>. O argumento <tamanho>
é opcional e recebe o valor devolvido pela função que representa o número de elementos lidos com
sucesso; O argumento <elementos> é opcional e indica o limite para o número de valores a serem
lidos do ficheiro. O argumento <formato> pode assumir um dos seguintes valores:
%ni : usado para valores inteiros, sendo n o tamanho do campo de apresentação;
%n.df : notação na forma [-]888.88, sendo n o tamanho do campo (número total de carateres
apresentados) e d o número de dígitos decimais;
- 27 -
Comandos de leitura e escrita de dados formatadas em ficheiros
A função fgetl efetua a leitura de uma linha de texto de um ficheiro para uma string,
desprezando o carácter de quebra de linha (newline). A sua sintaxe é a seguinte:
[<variável>] = fgetl(<fid>)
em que <fid> é o identificador associado ao ficheiro onde se está a fazer a leitura da linha de
texto, a qual é atribuída à <variável> (do tipo string). Se for encontrado o indicador de fim do
ficheiro, é atribuído à <variável> o valor -1.
Por exemplo, o código seguinte lê cada uma das linhas do ficheiro "dados.txt", usando a função
fgetl, e coloca os dois números nela contidos (um inteiro e um real) numa estrutura com dois
campos (Numero e Nota), usando uma função para manipulação de strings (strtok).
- 28 -
Comandos de leitura e escrita de dados formatadas em ficheiros
A função fgets efetua a leitura de uma linha de texto de um ficheiro para uma string, incluindo o
carácter de quebra de linha (newline). A sua sintaxe apresenta duas forma, que são as seguintes:
[<variável>] = fgetl(<fid>)
[<variável>] = fgetl(<fid>, <nchar>)
em que <fid> é o identificador associado ao ficheiro onde se está a fazer a leitura da linha de
texto, a qual é atribuída à <variável> (do tipo string). No segundo caso, lê no máximo <nchar>
caracteres, continando a leitura no caracter seguinte. Se for encontrado o indicador de fim do
ficheiro, é atribuído à <variável> o valor -1.
- 29 -
Comandos de leitura e escrita de dados formatadas em ficheiros
A função fprintf permite guardar dados formatados num ficheiro que está numa unidade de
armazenamento externo. A sua sintaxe é a seguinte:
<tamanho> = fprintf (<fid>, <formatos>, <lista_variáveis>)
em que <tamanho> (opcional) recebe o número de bytes escritos, <fid> é o identificador associado
ao ficheiro onde se pretende guardar os dados, os quais estão contidos na <lista_variáveis>, com os
formatos especificados em <formatos>. Os valores possíveis para o argumento <formatos> são os
mesmos usados para o argumento <formato> da função fscanf. Se o argumento <fid> for omitido ou
se <fid> = 1, então os valores serão apresentados no monitor.
Exemplo 1:
programa: resultado da execução:
[f, erro] = fopen ('saida1.txt', 'w'); num =
if f ~= -1 36
A = [16 3 2; 5 10 8; 9 6 7; 4 14 1];
num = fprintf(f, '%3i', A);
fclose(f);
num
end;
Exemplo 2:
programa: resultado da execução:
[f, erro] = fopen('saida1.txt', 'w');
if f ~= -1
X1 = 10; X2 = 20; X3 = 30;
fprintf(f, '%7.4f %6.3f %5.2f\n', X1, X2, X3);
fclose(f);
end;
- 30 -
Comandos de leitura e escrita de dados formatadas em ficheiros
A função feof verifica se o último registo de um ficheiro, que foi aberto com fopen, foi lido (ou
seja, se já se atingiu o final do ficheiro). A sua sintaxe é a seguinte:
<variável_retorno> = feof (<fid>)
em que <fid> é o identificador do ficheiro em análise e <variável_retorno> recebe o valor 1, se foi
lido o último registo, ou 0, caso contrário.
21. Estruturas
Uma estrutura (struct) é um tipo de dados composto que permite armazenar dados de vários
tipos (os tipos básicos só permitem de um único tipo). Um estrutura é definida por um ou vários
campos (fields) de qualquer tipo de dados. Para se aceder aos campos de uma estrutura, utiliza-se
um ponto (.) depois do nome da variável, seguido pelo nome do campo, da seguinte forma:
variável.campo
Uma variável pode ser definida como uma estrutura de duas formas: a) usando instruções de
atribuição e b) usando a função struct.
Pode-se definir uma variável simples como uma estrutura atribuindo individualmente valores aos
seus campos; o MatLab cria automaticamente a estrutura que se pretende. A sintaxe é a seguinte:
variável_estrutura.campo1 = valor1;
...
variável_estrutura.campoN = valorN;
Por exemplo, definir a variável aluno como uma estrutura com três campos: nome (vetor de
caracteres – string), numero (número inteiro) e testes (vetor de 3 reais = matriz de reais 1x3).
programa: resultado da execução:
aluno.nome = 'Carlos Soares'; aluno =
aluno.numero = uint16(34127); nome: 'Carlos Soares'
aluno.testes = [14.5 16.7 15.6]; numero: 34127
aluno testes: [14.5000 16.7000 15.6000]
As estruturas podem ser vetores ou matrizes. Por exemplo, um vetor de alunos em que cada
aluno é uma estrutura com três campos: nome, numero e testes.
programa: resultado da execução:
aluno(1).nome = 'Carlos Soares'; aluno =
aluno(1).numero = uint16(34127); 1x2 struct array with fields:
aluno(1).testes = [14.5 16.7 15.6]; nome
aluno(2).nome = 'Ana Sousa'; numero
aluno(2).numero = uint16(34925); testes
- 31 -
Estruturas
Exemplo 1: definir a variável aluno como uma estrutura com três campos (nome, numero e
testes), mas sem valores atribuídos aos seus campos (campos vazios).
programa: resultado da execução:
aluno = struct ('nome', { }, 'numero', ... aluno =
{ }, 'testes', { }); 0x0 struct array with fields:
aluno nome
aluno(1).nome = 'Carlos Soares'; numero
aluno(1).numero = uint16(34127); testes
aluno(1).testes = [14.5 16.7 16.6]; Aluno 1:
disp('Aluno 1:'); nome: 'Carlos Soares'
disp(aluno(1)); numero: 34127
testes: [14.5000 16.7000 16.6000]
Exemplo 2: definir a variável aluno como uma estrutura com três campos (nome, numero e
testes), mas com valores atribuídos aos seus campos.
programa: resultado da execução:
aluno = struct ('nome', 'Carlos Soares', ... aluno =
'numero', uint16(34127), ... nome: 'Carlos Soares'
'testes', [14.5 16.7 16.6]); numero: 34127
aluno testes: [14.5000 16.7000 16.6000]
aluno.nome = 'Ana Sousa'; aluno
- 32 -
Estruturas
Depois de construídas as estruturas, pode-se aceder aos elementos dos seus campos de várias
formas. Por exemplo, podem-se extrair várias estruturas de uma só vez.
Exemplo: partindo do exemplo anterior, criar um vector com todos os números de aluno (campo
numero):
programa: resultado da execução:
aluno = struct ('nome', {}, 'numero', {}, 'testes', {}); Numeros =
aluno(1).nome = 'Carlos Soares'; 34127 34925
aluno(1).numero = uint16(34127);
aluno(1).testes = [14.5 16.7 16.6];
aluno(2).nome = 'Ana Sousa';
aluno(2).numero = uint16(34925);
aluno(2).testes = [13.2 18.4 15.3];
Numeros = [aluno.numero];
Numeros
Pode-se acrescentar um campo a uma estrutura adicionando esse novo campo à estrutura,
usando uma instrução de atribuição.
Exemplo: acrescenar o ano de nascimento do aluno (ssn) a um aluno (exemplo anterior):
programa: resultado da execução:
aluno = struct ('nome', 'Carlos Soares', ... aluno =
'numero', uint16(34127), ... nome: 'Carlos Soares'
'testes', [14.5 16.7 16.6]); numero: 34127
aluno testes: [14.5000 16.7000 16.6000]
- 33 -
Estruturas
Para eliminar um campo de uma estrutura, utiliza-se a função rmfield. A sintaxe desta função é
a seguinte:
variável_estrutura_2 = rmfield (variável_estrutura_1, 'campo')
em que variável_estrutura_1 e variável_estrutura_2 podem ser a mesma e campo é o campo que se
pretende eliminar.
Exemplo:
programa: resultado da execução:
aluno1.nome = 'Ana Sousa'; aluno1 =
aluno1.numero = uint16(34925); nome: 'Ana Sousa'
aluno1.testes = [13.2 18.4 15.3]; numero: 34925
aluno1 testes: [13.2000 18.4000 15.3000]
aluno2 = rmfield(aluno1, 'numero'); aluno2 =
aluno2 nome: 'Ana Sousa'
aluno1 = rmfield(aluno1, 'nome'); testes: [13.2000 18.4000 15.3000]
aluno1 aluno1 =
numero: 34925
testes: [13.2000 18.4000 15.3000]
Tal como uma estrutura, uma matrize de células é um tipo de dados composto que permitem
armazenar dados de vários tipos (e não apenas de um só tipo, como acontece com os tipos de dados
básicos). As células são armazenadas de forma semelhante às matrizes numéricas.
Por exemplo, uma matriz de células pode conter numa célula uma matriz de reais, numa outra
uma matriz de inteiros, numa outra um vetor de strings, numa outra uma matriz de números
complexos, numa outra uma estrutura, numa outra uma matriz de células, etc.
- 34 -
Estruturas
No caso por indexação das células, os índices das células são delimitados por parêntesis curvos,
"()", usando a notação padrão das matrizes. Os conteúdos das células da parte direita das instruções
de atribuição são delimitados por chavetas, "{ }".
- 35 -
Estruturas
No caso por indexação do conteúdo, os índices das matrizes são delimitados por chavetas, "{}",
usando a notação padrão de matrizes. Os conteúdos das células são especificadas na parte direita
da instrução de atribuição de forma normal (sem chavetas).
Exemplo: criar uma matriz de células A de dimensão 2x2 (igual ao anterior)
programa: resultado da execução:
B{1,1} = [1 4 3; 0 5 8; 7 2 9]; B=
B{1,2} = 'Carlos Antunes'; [3x3 double] 'Carlos Antunes'
B{2,1} = 3 + 7i; [3.0000+ 7.0000i] [1x5 double]
B{2,2} = 10:10:50; B{1,1} =
B 1 4 3
celldisp(B); 0 5 8
7 2 9
B{2,1} =
3.0000 + 7.0000i
B{1,2} =
Carlos Antunes
B{2,2} =
10 20 30 40 50
Nota: A função celldisp (semelhante à função disp) mostra o conteúdo de cada célula da matriz de
céluas. Por sua vez, a função cellplot mostra a arquitetura das células graficamente.
- 36 -
Estruturas
Ao atribuir-se dados a uma célula de uma matriz de células com índices fora das dimensões
daquela matriz, o MatLab expande e ajusta automaticamente a matriz de forma a incluir aqueles
índices na sua nova dimensão; por sua vez, as restantes novas células são preenchidas com o vazio.
Exemplos: transformar a matriz 2x2 do exemplo anterior numa matriz de 3x3 e de 3x2.
Exemplo 1: Exemplo 2:
>> B{3,3} = 5 >> B{3,2} = 5
B= B=
[3x3 double] 'Carlos Antunes' [] [3x3 double] 'Carlos Antunes'
[3.000+ 7.000i] [1x5 double] [] [3.0000+ 7.0000i] [1x5 double]
[] [] [5] [] [ 5]
- 37 -
Estruturas
c = cell(size(A))
Cria uma matriz vazia com a mesma dimensão de A
Depois da matriz de células ser alocada, as suas células podem ser preenchidas individualmente,
usando instruções de atribuição.
Exemplo (criar uma matriz de células 2x3 vazia e preencher algumas delas):
B = cell(2,3); B=
B = cell(2,3); [1x3 double] [] 'celula 1,3'
B(1,1) = {1:3}; [] [2x2 double] []
B{1,3} = 'celula 1,3'; B{1,1} =
B(2,2) = {[1 2; 3 4]}; 1 2 3
B B{2,1} =
celldisp(B); []
B{1,2} =
[]
B{2,2} =
1 2
3 4
B{1,3} =
celula 1,3
B{2,3} =
[]
Pode-se obter dados de de uma matriz de células e armazená-los numa matriz simples ou numa
nova célula de uma outra matriz. Isto pode ser feito com instruções de atribuição de duas formas:
a) acedendo aos conteúdos das células usando indexação de conteúdos, ou
b) acedendo a um subconjunto de células usando indexação de células.
- 38 -
Estruturas
- 39 -
Estruturas
Exemplo:
programa: resultado da execução:
A{1,1} = [1 4 3; 0 5 8; 7 2 9]; A=
A{1,2} = 'Carlos Antunes'; [3x3 double] 'Carlos Antunes'
A{2,1} = 3 + 7i; [3.0000+ 7.0000i] [1x5 double]
A{2,2} = 10:10:50; A=
B = A; [3.0000+ 7.0000i] [1x5 double]
A B=
A(1, :) = []; [3x3 double]
A [3.0000+ 7.0000i]
B(:, 2) = [];
B
Tal como outros tipos de matrizes, pode-se remodelar uma matriz de células usando a função
reshape. O número de células mantém-se o mesmo, alterando apenas a sua disposição pelo nova
matriz após remodelação; não se usa a função reshape para adicionar ou remover células.
Exemplo:
programa: resultado da execução:
A{1,1} = [1 4 3; 0 5 8; 7 2 9]; A=
A{1,2} = 'Carlos Antunes'; [3x3 double] 'Carlos Antunes'
A{2,1} = 3 + 7i; [3.0000+ 7.0000i] [1x5 double]
A{2,2} = 10:10:50; B=
A [3x3 double] [3.0000+ 7.0000i] 'Carlos Antunes' [1x5 double]
B = reshape(A,1,4); C=
B [3x3 double]
C = reshape(A,4,1); [3.0000+ 7.0000i]
C 'Carlos Antunes'
A = reshape(A,1,4); [1x5 double]
A A=
[3x3 double] [3.0000+ 7.0000i] 'Carlos Antunes' [1x5 double]
- 40 -
Estruturas
Exemplo:
programa: resultado da execução:
A = cell(1,2); A=
A{1}.numero = int32(34216); [1x1 struct] [1x1 struct]
A{1}.nome = 'Carlos Antunes'; A{1} =
A{2}.trabalhos = [0.7 0.5 1.0 0.3 0.5]; numero: 34216
A{2}.frequencia = 8.5; nome: 'Carlos Antunes'
A{2}.exame = 10.7; A{2} =
A{2}.final = []; trabalhos: [0.7000 0.5000 1 0.3000 0.5000]
A frequencia: 8.5000
celldisp(A); exame: 10.7000
final: []
A célula 1 do vetor A contém uma estrutura com dois campos: um número inteiro e uma string. A
célula 2 de A contém uma estrutura com três campos: um vetor de reais e dois números reais.
Após a construção de uma matriz de células com estruturas, pode-se aceder aos conteúdos das
suas células usando indexação dos conteúdos. A sua sintaxe é a seguinte:
<matriz_celulas>{indice_celula}.campo
Por exemplo, depois de se construir a matriz de células A (exemlo anterior), para se determinar a
nota final (campo final da célula 2), deve-se aceder a toda a celula 2, tal como apresentado no
exemplo seguinte:
programa: resultado da execução:
notaT = 0; A{1} =
for i = 1:5 numero: 34216
notaT = notaT + A{2}.trabalhos(i); nome: 'Carlos Antunes'
end; A{2} =
if A{2}.frequencia > A{2}.exame trabalhos: [0.7000 0.5000 1 0.3000 0.5000]
A{2}.final = notaT + A{2}.frequencia; frequencia: 8.5000
else exame: 10.7000
A{2}.final = notaT + A{2}.exame; final: 13.7000
end;
celldisp(A);
- 41 -
Funções gráficas
A função plot serve para desenhar um gráfico bidimensional. Para desenhar um gráfico
tridimensional, utiliza-se a função plot3.
Para se desenhar uma curva bidimensional são necessários duas sequências de valores, uma para
o eixo das abcissas (eixo dos XX) e outra para o eixo das ordenadas (eixo dos YY). Para tal, estas
sequências de valores podem ser armazenadas em vetores ou em matrizes.
Quando se usam vetores, a função plot pode ser usada com as seguintes formas:
plot (Y)
Se Y é um vetor com N elementos, desenha uma curva em que os valores para o eixo das abcissas
são os índices do vetor (1, 2, ..., N) e os valores para o eixo das ordenadas são os elementos do
vetor Y. Desta forma, os N pontos considerados no gráfico são: (1, Y(1)), ...(N, Y(N)).
plot (X, Y)
Se X e Y são vetores com N elementos, desenha uma curva em que os valores para o eixo das
abcissas são os elementos do vetor X e os valores para o eixo das ordenadas são os elementos do
vetor Y. Assim, os N pontos considerados no gráfico são: (X(1), Y(1)), ...(X(N), Y(N)).
plot (X1,Y1, X2, Y2, ..., Xn, Yn)
Desenha n curvas tal que para a k-ésima curva os valores para o eixo das abcissas são os
elementos do vetor Xk (Xk(1), ..., Xk(N)) e os valores para o eixo das ordenadas são os elementos
do vetor Yk (Yk(1), ..., Yk(N)). Ou seja, é como aplicar a função plot n vezes sobre o mesmo
gráfco: plot(X1, Y1), ..., plot(Xn, Yn).
- 42 -
Funções gráficas
valores do vetor X e os valores da coluna k da matriz Y (Y(1,k), ..., Y(m,k)); ou seja, os pontos
envolvidos nesta curva são os seguintes: (X(1), Y(1,k)), ..., (X(m), Y(m,k)).
Se X é um vetor com n elementos e Y uma matriz de m x n, desenha m curvas em que os valores
para o eixo das abcissas são os os elementos do vetor X e os valores para o eixo das ordenadas
são os elementos das linhas da matriz Y. Ou seja, os pontos envolvidos nesta curva são os
seguintes: (X(1), Y(k,1)), ..., (X(n), Y(k,n)).
plot (X1,Y1, X2, Y2, ..., Xn, Yn)
Se X e Y são matrizes de m x n, desenha n curvas em que para a k-ésima curva os valores para o
eixo das abcissas são as colunas da matriz X e para o eixo das ordenadas são as colunas da matriz
de Y. Ou seja, é como aplicar n vezes a função plot sobre o mesmo gráfco: plot(X1, Y1), ...,
plot(Xn, Yn).
A função plot3, para desenhar gráficos tridimensionais, funciona de forma semelhante à função
plot, com a diferença que plot3 utiliza 3 parâmetros de dados.
Para além do parâmetro referente aos dados a serem apresentados no gráfico, essas funções
possuem um outro parâmetro referente à cor e ao tipo de traço/linha. Desta forma, a sintaxe da
função plot é a seguinte:
plot (X, Y, config)
em que config é um conjunto de símbolos que permitem alterar o estilo do gráfico. Estes símbolos
estão associados à cor, ao marcador e ao tipo de linha a apresentar no gráfico. Se este parâmetro
não for utilizado, a função plot assume a configuração padrão: linha azul e continua.
As cores possíveis são as seguintes (símbolo): amarelo (y), lilás (m), azul claro (c), vermelho (r),
verde (g), azul escuro (b), branco (w) e preto (k).
Os marcadores possíveis são os seguintes (símbolo): ponto (.), estrela (*), círculo (º), + (+), x (x),
quadrado (s), losango (d), triângulo para baixo (v), triângulo para cima (^), triângulo para a
esquerda (<), triângulo para a direita (>), pentagrama (p) e hexagrama (h).
Os tipos de linha possíveis são os seguintes (símbolo): linha contínua (-), linha tracejada (--),
traços e pontos (-.) e linha pontilhada (:).
Exemplo:
>> X = 0:0.05:1;
>> plot(X, X.^2, 'bd--');
X= 0 0.0500 0.1000 0.1500 0.2000 ... 0.8500 0.9000 0.9500 1.0000
X.^2 = 0 0.0025 0.0100 0.0225 0.0400 ... 0.7225 0.8100 0.9025 1.0000
- 43 -
Funções gráficas
O MatLab possui várias funções para o desenho de superfícies. Entre elas pode-se destacar os
seguintes: mesh, surf, contour e contour3. Qualquer uma destas funções desenha uma superfície
cujos dados estão contidos numa matriz. Estas funções têm duas formas :
G(Z) - a superfície será desenhada sem nenhuma informação referente aos eixos X e Y;
G(X, Y, Z) - a superficie será desenhada levando em consideraçãoo o dominio de X e Y;
em que G refere-se a uma qualquer das funções mesh, surf, contour e contour3.
Para se usar estas funções, deve-se começar por definir um espaço de coordenadas onde se
aplicar estas funções, o que é feito usando a função meshgrid.
- 44 -
Funções gráficas
- 45 -
Funções gráficas
- 46 -
Funções gráficas
- 47 -
Funções gráficas
A função colorbar permite desenhar uma barra de cores num gráfico. Esta barra representa a
variação dos valores do gráfico.
Exemplo: calcular para função x * exp(-x2 – y2) no domínio [-2, 2] x [-2, 2]
>> [X, Y] = meshgrid(-2:0.2:2, -2:0.2:2); % x, y [-2, 2] x [-2, 2] com intervalo de 0.2
>> Z = X .* exp(-X.^2 – Y.^2);
>> mesh(Z), colorbar;
O Matlab possui várias funções para escrever em gráficos, sendo algumas delas as que a seguir se
apresentam.
title(‘titulo’) - coloca o título “titulo” na posição acima do gráfico;
grid on/off - grid on mostra uma grelha na janela do gráfico e grid off apaga a grelha;
xlabel(‘nome do eixo X’) - coloca um nome para o eixo X do gráfico;
ylabel(‘nome do eixo Y’) - coloca um nome para o eixo Y do gráfico;
zlabel(‘nome do eixo Z’) - coloca um nome para o eixo Z do gráfico;
axis on/off - axis on desenha os eixos coordenados e axis off apaga os eixos;
axis([xmin xmax ymin ymax zmin zmax]) - ajusta os limites das coordenadas da janela onde
está o gráfico: X variando de xmin a xmax, e o mesmo para Y e Z;
text(X,Y,’texto’) - coloca um texto na posição (X,Y) de um gráfico bidimensional;
text(X,Y,Z,’texto’) - coloca um texto na posição (X,Y) de um gráfico tridimensional.
Obs: Esses comandos podem ser utilizados tanto para desenho de gráficos como de superfícies.
- 48 -
Funções gráficas
A função figure permite criar uma nova janela para a apresentação de gráficos. Sem esta função,
todos os gráficos serão desenhados na mesma janela, sendo que um novo gráfico sobrepõe o último
que foi desenhado.
Exemplo: desenhar os gráficos dos vetores x e y em duas janelas diferentes.
>> X = -10:1:10;
>> figure(1);
>> plot(X, X.^2);
>> figure(2);
>> plot(X, X.^3);
A função subplot permite mostrar vários gráficos numa mesma janela. A sua sintaxe é a seguinte:
subplot(r, c, p)
em que r x c indica o número de posições possíveis em que os gráficos podem ser apresentados, e a
sua disposição (em r linhas e c colunas), e p é um número em { 1, ..., r x c } que representa a
posição selecionada.
Exemplo:
>> x = 0:pi/8:pi;
>> subplot(2, 3, 2);
>> plot(x, cos(x));
>> title('Coseno');
- 49 -
Funções gráficas
- 50 -