Introdução
ao Ambiente Matlab
José
Demisio Simões da Silva
Novembro de
1997
Objetivo:
-
Introduzir comandos básicos do Matlab para permitir um rápido
acesso às facilidades do ambiente. O usuário iniciante poderá
dispor de uma referência rápida para algumas possibilidades
de uso do Matlab.
Observação:
-
O documento como está, não intenciona cobrir todos os tópicos
do Matlab, porque o ambiente, devido à sua arquitetura formada por
caixas de ferramentas (toolboxes), possui manuais específicos para
cada caixa de ferramentas, tornando impraticável a tentativa de
abranger todos os tópicos em um único documento referência.
Vá o Índice
Este trabalho baseia-se em um documento público disponível
na Internet, nas experiências pessoais do autor, nos manuais do Matlab,
no livro Matlab Versão do Estudante e nas informações
disponíveis na página da internet da companhia Mathworks.
1. Acessando o Matlab
2. Utilizando o MATLAB.
3. Operações com
matrizes e vetores
4. Declarações, expressões
e variáveis; Salvando uma sessão.
5. Funções de Construção
de Matrizes
6. Loops for, while e blocos if
7. Funções Escalares.
8. Funções Vetoriais.
9. Funções Matriciais.
10. Edição de Linha
de Comando e Chamada
11. Sub matrizes e notação
em dois pontos (:)
12 – Arquivos M
13. Strings, Mensagens de Erro,
Entrada.
14. Manipulação
de Arquivos M
15. Formato de Saída
16. Cópia
17. Gráficos
Bibliografia
1. Acessando o Matlab
c:\ > matlab
>> quit
Em sistemas operacionais pode-se ter o MATLAB em uma janela e o editor
em outra.
Índice
2. Utilizando o MATLAB.
Entrando com matrizes
-
O MATLAB trabalha essencialmente com um tipo de objeto - matriz numérica
retangular, que pode aceitar inclusive valores complexos. Todas as variáveis
no MATLAB representam matrizes. Algumas vezes matrizes de 1 x 1 são
interpretadas como escalares e matrizes com uma linha ou uma coluna são
interpretadas como vetores.
Introduzindo uma matriz no MATLAB.
Lista explícita de elementos
A = [ 1 2 3; 3 4 5; 6 7 8] que é a mesma
coisa que entrar como a seguir:
A = [ 1 2 3
3 4 5
6 7 8]
-
Os elementos de uma linha podem ser separados por vírgula (,) ou
espaço ( ).
-
Números na forma exponencial, deve-se evitar espaços em branco
(exemplo, 3.19e-3).
-
Matrizes grandes – usar um arquivo M onde é possível editar
os erros facilmente
-
Geração por declarações embutidas ou funções
(ou seja, comandos do MATLAB )
Exemplos de funções utilizadas para gerar matrizes: rand,
magic, hilb.
rand(n) gera matriz quadrática de dimensões n
x n, aleatória com distribuição uniforme, no intervalo
[0,1].
Ex.: x=rand(3)
rand(m,n) gera uma matriz de dimensões m x n.
Ex: x=rand(3,4)
magic(n) cria uma matriz integral de dimensões n x
n que é matriz quadrada (linhas e colunas têm a
mesma soma).
Ex: x=magic(4)
-
Em todos os exemplos, m e n são inteiros positivos.
-
Outra forma de gerar matrizes é através de "loops" "for".
-
Para especificar um único elemento da matriz é usa-se índices
entre parênteses.
Ex: x(2,3)
Esta notação denota um valor na segunda linha e terceira
coluna.
Tente: x(3,5)
-
Indexadores de matrizes no MATLAB têm que ser inteiros positivos
(não nulos).
Índice
3. Operações com
matrizes e vetores
-
Operações disponíveis no Matlab:
+ Adição
- Subtração
* Multiplicação
^ Potência
' Transposição (por exemplo, se A é uma matriz,
então A' é sua transposta)
\ Divisão à esquerda
/ Divisão à direita
-
Tais operações aplicam-se também a escalares (considerados
matrizes de 1 x 1).
-
Se os tamanhos das matrizes são incompatíveis, para a operação
matricial, será gerada uma mensagem de erro, com exceção
do caso de operações entre escalares e matrizes (para
adição, subtração, divisão e multiplicação),
quando cada entrada da matriz é operado pelo escalar.
-
A "divisão de matrizes" necessita de atenção especial.
Se A é uma matriz inversível quadrada e b é um vetor
coluna (ou linha) compatível, então
x = A\b é a solução de A *
x = b e, respectivamente,
x = b/A é a solução de x
* A = b.
-
Na "divisão à esquerda", se A é quadrada, então
ela é fatorada usando-se eliminação Guassiana e estes
fatores são usados para resolver A * x = b. Se A não
é quadrada, ela é fatorada usando ortogonalização
de Householder com pivoteamente por coluna e os fatores são usados
para resolver o sistema sub ou sobre determinado no sentido dos mínimos
quadráticos. A divisão à direita é definida
em termos da divisão à esquerda por b/A = (A'\b').
-
As operações de adição e subtração
operam sobre os elementos da matriz, ou seja, elemento por elemento. As
outras operações são operações matriciais.
As operações (*,^,\,/ ) podem operar por elemento
da matriz se forem precedidos por ponto
Ex.: [1,2,3,4] .*[1,2,3,4] como [1,2,3,4].^2
Índice
4. Declarações,
expressões e variáveis; Salvando uma sessão.
-
Matlab - linguagem de expressões; as expressões que se entra
pelo teclado são interpretadas e avaliadas. Sintaxe das declarações
no Matlab:
variável = expressão,
ou simplesmente
expressão
-
Expressões - compostas por operadores, funções
e variáveis.
-
A avaliação da expressão produz uma matriz, que é
então exibida na tela e atribuída à variável
para uso posterior.
-
Se a variável e o sinal de igual ( = ) são omitidos,
o Matlab cria uma variável ( ans de answer ) e atribui
o resultado a ela.
-
Declaração termina com <carriage return> (enter).
Uma declaração pode ser continuada na próxima linha
com três ou mais pontos seguidos por um <carriage return>.
-
Várias declarações podem ser colocadas em uma única
linha se separadas por vírgulas ou ponto e vírgula.
-
Se o último caractere de uma declaração é ponto
e vírgula, a impressão é suprimida, mas a atribuição
é feita. (Útil para suprimir a impressão de resultados
intermediários).
-
Matlab distingue entre letras maiúsculas e minúsculas.
Ex.: initFF é diferente de initff.
-
Variáveis podem ter até 19 caracteres. Não é
permitido usar caracteres de pontuação.
-
O comando who lista as variáveis disponíveis no espaço
de trabalho (workspace).
-
Para remover uma variável do espaço de trabalho : clear
nome da variável .
-
Para remover mais de uma variável especifica-se as lista de variáveis:
clear var1 var2 var3
-
O comando clear sozinho remove todas as variáveis não
permanentes.
-
A variável permanente eps (epsilon): precisão de cerca
de 10-16 (maioria das máquinas) Ela é útil para determinar
tolerâncias para a convergência em processo iterativos.
-
Outras variáveis permanentes são:
pi
razão entre o perímetro da circunferência e seu diâmetro.
inf
infinito, por exemplo, 1/0
NaN Não-numérico,
por exemplo, 0/0
i e j
i=j=sqrt(-1) (raiz quadrada de –1)
realmin menor número real positivo
utilizável
realmax maior número real positivo
utilizável
-
Exibição ou execução pode ser parada em na
maioria das máquinas sem ser necessário sair do Matlab digitando
apenas CTRL-C (CTRL-BREAK no PC).
-
Saindo-se do Matlab perde-se todas as variáveis. O comando save
permite salvar as variáveis em disco chamado matlab.mat.
Ex.:
a=rand(3);
b=rand(5);
c=rand(20);
who
save
clear
-
O comando load restaura o espaço de trabalho ao seu estado
anterior.
Ex.:
who
load
who
-
Para salvar apenas algumas variáveis presentes no ambiente atual,
especifica-se o comando acompanhado dos argumentos.
>> save dados a b
dados é o nome do arquivo e as variáveis são
: a e b .
-
Apenas elas estarão no arquivo dados, as demais variáveis
no ambiente serão perdidas se a sessão for interrompida.
Índice
5. Funções
de Construção de Matrizes
-
Funções de construção de matrizes são:
eye matriz identidade
Ex.: eye(2)
zeros matriz de zeros
Ex: zeros(2,2)
ones matriz de 1's
Ex: ones(2,2)
-
Se x é um vetor, diag(x) é a matriz diagonal
com x na diagonal;
x=[1 2 3 1 -1 4];
diag(x)
-
Se A é uma matriz quadrada, então diag(A) é
um vetor cujos componentes são os elementos da diagonal de A.
A=[3 11 5; 4 1 -3; 6 2 1]
diag(A)
Tente diag(diag(A))
-
É possível construir uma matriz a partir de blocos. Exemplo,
se A é uma matriz 3 x 3, então
B = [A, zeros(3,2); zeros(2,3), eye(2)]
Matriz 5 x 5.
triu parte triangular superior de uma matriz
triu(A)
tril parte triangular inferior de uma matriz
tril(A)
rand matriz gerada aleatoriamente
rand(5,4)
hilb matriz de Hilbert
hilb(3)
magic quadrado mágico
magic(3)
toeplitz digite help toeplitz
Para ver toeplitz, digite help toeplitz no Matlab.
Índice
6. Loops for, while e blocos
if
-
Comandos de fluxos do Matlab funcionam como nas linguagens de programação.
-
Sintaxe para um for é:
x=[];n=5;
for i=1:n, x=[x,i^2], end
ou
x=[];n=5;
for i=1:n
x=[x,i^2]
end
-
Observe que as duas declarações anteriores produziram o mesmo
resultado. Veja que é possível definir uma matriz vazia e
que o índice varia de 1 até n.
Outro exemplo:
m=3; n=4;
for i=1:m
for j=1:n
H(i,j)=1/(i+j-1);
end
end
H
-
O resultado é uma matriz de Hilbert de tamanho m=3
x n=4.
-
Colocando-se ponto e vírgula depois de um comando, evita-se a impressão
durante o processamento.
-
Para exibir o resultado da matriz H utilizou-se o comando H
sem ponto vírgula.
-
Sintaxe para um loop com while :
while relações
declarações
end
Declarações (grupo de comando) são executadas
repetidamente enquanto as relações forem satisfeitas.
Ex.: Tomando-se um certo a, o seguinte código computa
e exibe o menor inteiro não negativo n tal que 2^n >=
a:
n=0;a=3;
while(2^n<a)
n=n+1;
end
n
-
Sintaxe de uma relação if é:
if relações
declarações
elseif relações
declarações
else
declarações
end
Declarações são executadas se a relação
for verdadeira.
if n<0
parity=0;
elseif rem(n,2)==0
parity=2;
else
parity=1;
end
parity
-
Operadores relacionais no Matlab são:
< menor
>
maior
<=
menor ou igual
>=
maior ou igual
==
igual
~=
diferente
-
Observe que '=' é usado para atribuição
a variáveis, enquanto '==' é usado em uma relação.
As relações podem ser conectadas ou quantificadas através
de operadores lógicos:
&
and
|
or
~
not
-
Quando aplicada a um escalar, uma relação é na realidade
1 ou 0 dependendo se a relação é verdadeira
ou falsa.
Ex.:
3>5
ans =
0
3<5
ans =
1
3==5
ans =
0
3==3
ans =
1
-
Quando aplicada a matrizes do mesmo tamanho, a relação é
uma matriz de 0's ou 1's que dá o valor da relação
entre entradas correspondentes. Por exemplo:
a=rand(5)
a =
0.9103 0.3282
0.2470 0.0727 0.7665
0.7622 0.6326
0.9826 0.6316 0.4777
0.2625 0.7564
0.7227 0.8847 0.2378
0.0475 0.9910
0.7534 0.2727 0.2749
0.7361 0.3653
0.6515 0.4364 0.3593
b=triu(a)
b =
0.9103 0.3282
0.2470 0.0727 0.7665
0
0.6326 0.9826 0.6316
0.4777
0
0 0.7227 0.8847
0.2378
0
0
0 0.2727 0.2749
0
0
0
0 0.3593
a==b
ans =
1 1
1 1 1
0 1
1 1 1
0 0
1 1 1
0 0
0 1 1
0 0
0 0 1
-
Relação entre matrizes é interpretada como verdadeiro
por um while ou por um if se cada entrada da matriz de relação
é não nula. Assim, se você deseja executar o comando
quando as matrizes A e B são iguais, poderias digitar:
if A==B
comandos
end
-
Para executar o comando quando A e B não são
iguais, você poderia digitar:
if any(any(A~=B))
comandos
end
any – retorna "1" se um elemento da matriz for igual
a 1.
ou de forma mais simples,
if A~=B else
comandos
end
-
Observe que if A~=B, comandos, end não fará
o que se deseja uma vez que o comando executaria apenas se cada umas das
entradas correspondentes em A e B diferem. As funções
any e all podem ser usadas de forma criativa para reduzir
as relações matriciais para vetores ou escalares. No código
acima, a função any foi chamada duas vezes, pois ela
é um operador vetorial (seção 8).
all – retorna 1 se todos os elementos da matriz forem diferente
de zero.
Índice
7. Funções Escalares.
-
Algumas funções no Matlab operam essencialmente sobre escalares,
mas operam sobre cada elemento se forem aplicadas a uma matriz. As funções
escalares mais comuns são:
sin seno
asin arcoseno
exp exponencial abs valor absoluto
round arredonda
cos cosseno
acos arco cosseno log (log natural)
sqrt raíz quadrada
floor arredonda na direção de menos infinito
tan tangente
atan arco tangente
rem resto da divisão
sign função sinal
ceil arredonda na direção de mais infinito
Índice
8. Funções
Vetoriais.
-
Outras funções do Matlab operam essencialmente sobre vetores
(linha e coluna), mas em uma matriz m x n,
agem sobre coluna por coluna para produzir um vetor linha com o resultado
de sua aplicação para a cada coluna. É possível
operar sobre linha por linha transpondo-se a matriz, por exemplo:
mean(a')'.
a =[ 0.9103 0.3282 0.2470
0.0727 0.7665
0.7622 0.6326
0.9826 0.6316 0.4777
0.2625 0.7564
0.7227 0.8847 0.2378
0.0475 0.9910
0.7534 0.2727 0.2749
0.7361 0.3653
0.6515 0.4364 0.3593]
a =
0.9103 0.3282
0.2470 0.0727 0.7665
0.7622 0.6326
0.9826 0.6316 0.4777
0.2625 0.7564
0.7227 0.8847 0.2378
0.0475 0.9910
0.7534 0.2727 0.2749
0.7361 0.3653
0.6515 0.4364 0.3593
mean(a)
ans = 0.5437 0.6147
0.6714 0.4596 0.4232
mean(a')'
ans =
0.4649
0.6973
0.5728
0.4679
0.5097
-
Outros exemplos de funções vetoriais são:
max(a) sum(a) median(a) any(a) min(a) prod(a) all(a) sort(a) std(a)
prod – produto dos elementos
sort – ordena em ordem crescente
median – mediana
Tentar:
max(max(A)) e max(A)
Índice
9. Funções Matriciais.
-
Grande parte da versatilidade do MATLAB vem de suas funções
matriciais. As mais usadas são:
eig autovalores e autovetores
chol fatorização de Cholesky
svd decomposição em valor singular
inv inversa
lu fatorização LU
qr fatorização QR
hess forma de Hessenberg
schur decomposição de Schur
expm matriz exponencial
sqrtm matriz de raiz quadrada
poly característica polinomial
det determinante
size tamanho
norm norma 1, norma 2, norma F, norma infinita
cond número de condição na norma
2 rank ranque
-
As funções no MATLAB podem ter argumentos simples ou múltiplos.
Por exemplo,
y = eig(a) ou eig(a) produzem um vetor coluna contendo os
autovalores da matriz "a".
y = eig(a)
y =
2.7594
0.9232
-0.3618 + 0.1449i
-0.3618 - 0.1449i
-0.0613
Já [U,D] = eig (a) produz uma matriz U cujas colunas
são os autovetores de "a" e a matriz diagonal D com
os autovalores de "a" na sua diagonal.
[U,D] = eig (a)
U =
Columns 1 through 4
-0.3454
-0.7798
0.1164 - 0.1629i 0.1164 + 0.1629i
-0.5604
0.0010
0.0766 + 0.2393i 0.0766 - 0.2393i
-0.4815
0.4525
-0.5920 - 0.0723i -0.5920 + 0.0723i
-0.4198
0.3858
0.6555 - 0.2277i 0.6555 + 0.2277i
-0.3983
-0.1960
-0.0666 + 0.2348i -0.0666 - 0.2348i
Column 5
-0.4895
-0.4205
0.3115
0.0416
0.6963
D =
Columns 1 through 4
2.7594
0
0
0
0
0.9232
0
0
0
0 -0.3618
+ 0.1449i 0
0
0
0 -0.3618
- 0.1449i
0
0
0
0
Column 5
0
0
0
0
-0.0613
Índice
10. Edição de
Linha de Comando e Chamada
-
A linha de comando do MATLAB pode ser facilmente editada. O cursor pode
ser posicionado com as setas letf/right (esquerda/direita) e a tecla
Backspace (retorno) ou Delete (Excluir) usada para apagar
o caracter à esquerda do cursor. Outras características de
edição também estão disponíveis. Em
um computador PC tente as teclas Home, End e Delete;
em outros sistemas veja help cedit ou digite cedit.
-
Uma característica conveniente é usar as setas Up/Down
para rolar sobre a pilha com comandos anteriores. É possível,
portanto, relembrar uma linha de comando anterior, editá-la e executá-la.
Para pequenas rotinas, é mais conveniente usar isto do que usar
um arquivo M que implica em sair do Matlab para um editor de texto (seções
12 e 14). Por exemplos, o comando flopcounts (seção
15) para computar o inverso de matrizes de tamanhos diferentes pode ser
comparado chamando-se, editando-se e executando repetidamente as seguintes
linhas:
a=rand(8); flops(0), inv(a); flops
ans =
1320
Se você queria comparar desenhos (plots) das funções
y=sin(mx) e y=sin(nx) no intervalo [0,2*pi] para vários
m e n, é possível fazer os mesmo com a linha
de comando:
m=2; n=3; x=0:0.01:2*pi; y=sin(m*x); z=sin(n*x); plot(x,y,x,z)
Índice
11. Sub matrizes e notação
em dois pontos (:)
-
Os vetores e matrizes são frequentemente usados no Matlab para atingir
efeitos de manipulação sobre dados complexos. A notação
"dois pontos" (que é usada para gerar vetores e submatrizes)
e de subscrito em vetores são chaves para uma manipulação
eficiente destes objetos. O uso criativo destas características
permite a minimização do uso de loops (que deixa o
Matlab lento) e torna o código simples e mais compreensível.
-
A expressão 1:5 (já vista nas declarações
de loops for) é na realidade o vetor linha [1 2 3 4 5].
Os números não precisam ser inteiros nem incrementados de
1. Por exemplo,
0.2:0.2:1.2
5:-1:1
Exemplo: Uma tabela de senos.
x=[0.0:0.1:2.0]';
y=sin(x);
[x y]
Note que a função sin opera para cada valor de
x, assim o seno (coluna da direita) é função
do valor de x (coluna da esquerda).
-
A notação em dois pontos (:) pode ser usada para acessar
submatrizes de uma matriz.
Ex.:
a=[10 20 30 40; 50 60 70 80; 90 100 110 120; 130 140 150 160]
a(1:4,3) corresponde aos 4 valores da coluna 3 da
matriz a .
-
Os dois pontos (:) denotam uma linha inteira ou uma coluna inteira,
por exemplo:
a(:,3)
a(1:4,:)
-
Vetores arbitrários integrais podem ser usados com subscrito:
a(:,[2 4])
que resulta na submatriz com as colunas 2 e 4 da matriz
a .
-
Este uso de subscritos pode ser usado em ambos os lados de uma declaração
de atribuição:
b=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
a(:,[2 4 5])=b(:,1:3)
As colunas 2, 4 e 5 da matriz a foram substituídas
pelas colunas 1, 2 e 3 da matriz b . Note que com
este comando a matriz a é apresentada por completo com as
modificações ocorridas.
-
É possível multiplicar as colunas 2 e 4 da
matriz a pela matriz 2 x 2 [1 2; 3 4]:
a(:,[2 4])= a(:,[2 4]) * [1 2; 3 4]
Novamente a matriz é apresentada por completo junto com as modificações.
-
Se x é um vetor de dimensão n , veja o efeito da declaração
x = x(n:-1:1).
x= [ 1 2 3 4 5 6]
x=x(6:-1:1)
Observação:
-
Pense nas linhas de comandos em Matlab para executar as funções
apresentadas até agora, comparadas com algoritmos equivalentes em
qualquer linguagem de programação.
Índice
12 – Arquivos M
-
Matlab pode executar um sequência de declarações armazenada
em arquivos chamados "Arquivos M" (devido à extensão
".m"). Muito do trabalho com Matlab está na criação
e refinamento de arquivos M.
-
Os arquivos M podem ser scripts (roteiros) ou funções.
Arquivos Scripts.
-
Um script consiste em uma sequência de comandos do Matlab.
Se o arquivo tem um nome, por exemplo, sequence.m, então
o comando sequence fará o Matlab executar os comandos declarados
no arquivo sequence.m. Todas as variáveis em um script
são globais e mudam os valores das variáveis de mesmo
nome no ambiente da sessão de Matlab atual.
-
Arquivos scripts são frequentemente usados para entrar dados
em uma matriz grande.
-
Neles os erros de entrada podem ser facilmente editados e eliminados.
Exemplo: Arquivo M chamado dados.m com as linhas abaixo:
a= [
1 2 3 4
5 6 7 8
]
Executar o arquivo dados.
-
Um arquivo M pode referenciar outros arquivos M, incluindo referência
a si próprio (recursividade).
Arquivos funções
-
Arquivos funções fornecem flexibilidade ao Matlab. Pode-se
criar novas funções específicas para o problema. Tais
funções têm o mesmo status de qualquer outra função
do Matlab.
-
Em uma função as variáveis são locais.
(Entretanto, a versão 4 do Matlab permite se declarar uma variável
global dentro de uma função. Veja help global)
Exemplo de uma função simples:
function a = randint1(m,n)
% RANDINT1 gera uma matriz de números aleatórios
% randint1(m,n) retorna uma matriz m x n com valores
entre 0 e 9.
a = floor(10*rand(m,n));
Uma versão mais generalizada:
function a = randint2(m,n,a,b)
% RANDINT2 gera uma matriz de números aleatórios
% randint2(m,n) retorna uma matriz m x n com valores
entre 0 e 9.
% randint(m,n,a,b) retorna entradas entre os inteiros
a e b
if nargin < 3, a=0; b=9; end
a = floor((b-a+1)*rand(m,n))+a;
(Digite no editor do Matlab e experimente).
-
As funções devem ser gravadas com os mesmos nomes das funções:
randint1.m e randint2.m.
Explicação da função:
-
Primeira linha - nome da função, os argumentos de entrada
e de saída; sem esta linha o arquivo é um script e não
uma função.
-
Chamando a partir do ambiente Matlab z = randint2(3,4), os números
3 e 4 são atribuídos às variáveis m e
n na no arquivo da função. A saída é atribuída
à variável z. (Como as variáveis em uma função
são locais, seus nomes são independentes daqueles que estão
no ambiente do Matlab atual.)
-
O uso de nargin (número de argumentos de entrada) permite
o ajuste de um valor padrão de um variável de entrada omitida
– tais como a e b na função exemplo randint2.m.
-
Uma função também pode ter argumentos de saída
múltiplos. Por exemplo:
function [mean, stdev]= stat(x)
% STAT Média e Desvio Padrão
% Para um vetor x, stat(x) retorna a média
e o desvio padrão de x.
% Para uma matriz x, stat(x) retorna dois vetores
linha contendo
% respectivamente, a média e o desvio padrão
de cada coluna.
[m,n]=size(x);
if m == 1
m=n; % caso de um vetor linha
end
mean = sum(x)/m;
stdev= sqrt(sum(x.^2)/m - mean.^2);
(Crie um arquivo M e tente este comando para um vetor qualquer.)
-
Um comando no Matlab [xm, xd]=stat(x), atribui a média e
o desvio padrão de x, às variáveis xm
e xd.
-
Atribuições isoladas também podem ser feitas com uma
função que tem argumentos de saída múltiplos.
Por exemplo, xm = stat(x) (sem colchetes em torno de xm)
atribui a média de x à xm.
-
% indica que o resto da linha é um comentário; O Matlab
ignora o resto de linha.
-
As primeiras linha de comentários documentam o arquivo M. Servem
para a ajuda on-line e são apresentadas quando se digita o comando:
help stat. Esta documentação deve sempre estar
presente em um arquivo de função.
Observação:
-
Esta função ilustra algumas das características do
Matlab que podem ser usadas para produzir código eficiente. Exemplo,
x.^2 é a matriz de quadrados dos componentes de x;
sum é uma função vetorial (seção
8); sqrt é uma função escalar (seção
7); e sum(x)/m é uma operação entre uma matriz
e um escalar.
-
A função abaixo, que dá o máximo divisor comum
de 2 inteiros através do algoritmo Euclidiano, ilustra o uso de
uma mensagem de erro.
function a = mdc(a,b)
% MDC Máximo Divisor Comum
% mdc(a,b) é o máximo divisor comum
dos inteiros a e b,
% com a e b diferentes de zero.
a=round(abs(a)); b=round(abs(b))
if a==0 & b==0
error('O mdc não é definido quando ambos
os número são zero')
else
while( b~=0)
r = rem(a,b);
a = b; b = r;
end
end
-
Outras características avançadas são ilustradas no
exemplo de função que se segue. Como notado anteriormente,
alguns dos argumentos de entrada de uma função como tol
no exemplo, podem ser opcionais através do uso de nargin
(número de argumentos de entrada). A variável nargout
pode ser usada de forma similar.
-
Note que o fato da relação ser um número (1 quando
verdadeiro; 0 quando falso) é usado e que, quando os comandos while
ou if são avaliados, nonzero significa verdadeiro e 0 significa
falso. A função do Matlab feval permite que se tenha
uma string (sequência de caracteres) como uma variável
de entrada, como nome de uma outra função.
function [b, steps] = bisect(fun, x, tol)
% BISECT Calcula a raiz de uma função de uma variável
pelo método da bisseção.
% bisect(fun, x) retorna uma raiz da função.
fun é uma string contendo o nome
% nome de uma função de valor real,
de uma variável real; funções ordinárias
% são definidas em arquivos M.
% x é um valor inicial (chute). O valor retornado
está perto de um ponto
% onde a fun muda de sinal. Por exemplo,
% bisect('sin', 3) é PI. Note as aspas em
torno de sin.
%
% Um terceiro argumento opcional especifica uma tolerância
para a precisão
% relativa do resultado. O padrão é
eps (valor padrão do Matlab para precisão
% em ponto flutuante).
% Um segundo argumento de saída opcional dá
um matriz contendo a observação
% dos passos de execução; as linhas
são da forma [c f(c)].
% Inicialização
if nargin < 3 , tol = eps; end
trace = (nargout == 2)
if x ~=0, dx = x/20; else, dx = 1/20; end
a = x – dx; fa = feval(fun,a);
b = x + dx; fb= feval(fun,b);
% Ache a mudança de sinal
while (fa > 0) == (fb > 0)
dx = 2.0*dx;
a = x – dx; fa = feval(fun,a);
if (fa > 0) ~= (fb > 0), break; end
b=x+dx; fb=feval(fun,b);
end
if trace, stpes=[a fa; b fb]; end
% Loop Principal
while abs(b –a) > 2.0 * tol * max(abs(b),1.0)
c = a + 0.5*(b-a); fc = feval(fun,c);
if trace, steps = [steps; [c fc]]; end
if (fb > 0) == (fc > 0)
b =c; fb = fc;
else
a =c; fa =fc;
end
end
-
Algumas das funções do Matlab são embutidas enquanto
outras são distribuídas em arquivos M. A lista atual de arquivo
M – do Matlab ou do usuário – pode ser vista com o comando type
nome_da_função. Por exemplo:
type eig
eig is a built-in function.
type randint1
function a = randint1(m,n)
% RANDINT gera uma matriz de números aleatórios
% randint(m,n) retorna uma matriz m x n com valores entre 0 e
9.
a = floor(10*rand(m,n));
Índice
13. Strings, Mensagens de Erro,
Entrada.
-
Strings são fornecidas para o Matlab limitadas por aspas simples.
Exemplo: s = 'Este e um teste.'
-
Strings podem ser apresentadas com a função disp.
Por exemplo:
disp('Esta mensagem esta sendo apresentada')
-
Mensagens de erro podem ser apresentadas pela função error.
error('A matriz deve ser simetrica')
Observação:
Dentro de um arquivo M esta mensagem pára a execução
e sai do arquivo M.
-
Em um arquivo M o usuário pode ser requisitado a entrar com dados
de forma interativa.
Exemplo:
iter = input("Entre o numero de interacoes : ')
Observação: O comando input não funciona
com o Notebook (ambiente vinculado ao Microsoft Word).
Índice
14. Manipulação
de Arquivos M
-
Para-se criar ou editar um arquivo M enquanto mantem-se o Matlab ativo
sem perder as variáveis globais no ambiente atualmente.
-
Pode-se usar a característica de ! para chamar um editor
de textos. O comando ! permite a execução de comandos
do sistema sem sair do Matlab.
Ex.: !dir, !rename, etc.
-
Na edição de textos pode-se usar qualquer editor de
texto ascii disponível no sistema. No windows, quando da instalação
o ambiente Matlab especifica como padrão o notepad. Entretanto,
é possível especificar qualquer outro editor escolhendo-se
a opção Options da barra de menu do Matlab, depois
escolhendo a opção Editor Preference e digitar o caminho
e o nome do editor escolhido.
-
Para versões mais antigas do Matlab o procedimento pode ser
diferente.
-
No windows, assim como no Unix e nos sistemas que permitem multiprocessamento,
é possível manter tanto a janela do ambiente Matlab, quanto
o editor de texto ativos.
Observação:
-
De dentro do Matlab, o comando dir lista o conteúdo do diretório
atual, enquanto o comando what lista apenas os arquivos M do diretório.
Os comandos do Matlab delete e type podem ser usados para
apagar um arquivo e imprimir um arquivo na tela, respectivamente, e chdir
pode ser usado para mudar o diretório de trabalho. Enquanto estes
comandos podem duplicar os comandos do sistema operacional, eles não
precisam de um ! antes.
Os arquivos M devem estar acessíveis ao Matlab. Nas instalações
em mainframe e em rede de workstations, os arquivos M pessoais que são
armazenados em um subdiretório da área do usuário
nomeado <matlab>, por exemplo, serão acessíveis
ao Matlab a partir de um diretório no qual o usuário está.
Índice
15. Formato de Saída
-
Os cálculos no Matlab são feito com precisão dupla,
mas o formato de apresentação da saída pode ser controlado
pelos comandos abaixo:
format short ponto fixo com
4 casas decimais (o padrão) 35.8333
format long ponto
fixo com 14 casas decimais
35.83333333333334
format short e notação científica
com 4 casas decimais 3.5833e+01
format long e notação
científica com 15 casas decimais
35.83333333333334e+01
format hex
hexadecimal
4041eaaaaaaaaaab
format bank duas casa decimais
35.83
format rat
aproximação racional
215/6
format +
positivo, negativo ou zero
+
-
Uma vez acionado, o comando escolhido permanece até ser mudado.
-
Os comandos de formatação também podem ser acionados
a partir do menu de barra do Matlab. Selecione a opção Options,
dentro dele selecione Numerical Format e mova o cursor sobre o formato
desejado.
-
format compact suprime a maioria das linhas em branco; permite que
mais informação seja colocada na tela ou na página.
Ele independe de outros comandos de formatação.
Índice
16. Cópia
-
Para se obter uma cópia em arquivo do que aparece na tela, durante
a execução de um comando do Matlab, usa-se o comando diary.
diary <nome do arquivo>
-
Após esse comando tudo que aparecer na tela, será copiado
para o arquivo (exceto gráficos) especificado. Se o nome
do arquivo é omitido, o comando cria um arquivo padrão diary.
O comando continua escrevendo no arquivo até se digitar:
diary off - que desabilita a opção de cópia.
Para continuar com a cópia, é suficiente digitar:
diary on - que o Matlab volta a escrever no arquivo.
-
Arquivo resultante pode ser editado ou impresso, usando-se qualquer editor
de textos.
Índice
17. Gráficos
-
O Matlab pode produzir gráficos em planos (2D e 3D) e em malhas
3D para superfícies.
Gráficos em Planos:
-
O comando plot cria gráficos de x-y no plano; se
x e y são vetores de mesmo tamanho, o comando plot(x,y)
abre uma janela gráfica e desenha um gráfico x-y
dos elementos de x versos os elementos de y.
Exemplo:
x=-4:.01:4;
y=sin(x);
plot(x,y)
x é uma partição do domínio com tamanho
de grade de 0.01; y é um vetor que dá os valores
do seno nos nós da partição (relembre que o seno opera
em função do ponto).
-
Quando na tela gráfica, pressionando qualquer tecla retorna-se para
a tela de comando enquanto o comando shg (mostra gráfico)
e depois retorna-se para tela gráfica atual (função
mais atual: figure(gcf)).
Ex.: Desenhar o gráfico de y=exp(-x.^2) no intervalo –1.5
a 1.5.
x = -1.5:0.01:1.5;
y= exp(-x.^2);
plot(x,y)
Note o comando .^ significando operação ponto do
vetor x.
-
Também é possível fazer um gráfico de curvas
paramétricas.
Ex.:
t=0:0.001:2*pi;
x=cos(3*t);
y=sin(2*t);
plot(x,y)
-
O comando grid colocauma grade de linhas sobre o gráfico
atual. Experimente refazer o comando anterior e depois digite grid.
-
Gráficos podem ter títulos, eixos rotulados e textos dentro
do gráfico. Para isso usa-se os seguintes comandos que tem strings
como argumentos.
title título do gráfico
xlabel rótulo do eixo x
ylabel rótulo do eixo y
gtext texto posicionado interativamente
text posiciona texto na posição
especificada
Exemplos:
title ('Funcao y = sin(2*x)') gera o título do gráfico.
gtext('A Funcao') permite o posicionamento do texto pelo o mouse
ou as teclas de seta. (Pressionando qualquer tecla posiciona-se o texto
no local escolhido.)
-
Os eixos são autoescalonados. Podem ser modificados utilizando-se
o comando axis. Se c=[ xmin, xmax, ymin, ymax ] então o comando
axis(c) ajusta o escalonamento dos eixos para os limites definidos
no vetor c.
Por padrão o comando axis congela o escalonamento atual para
os gráficos subsequentes; axis('auto') - retorna-se ao auto
escalonamento.
axis('square') - garante que a mesma escala é usada para
ambos os eixos.
axis(image) - apresenta imagem com a mesma relação
de aspecto da imagem.
axis off - desativa os eixos
axis on - ativa os eixos.
Para outras características do comando axis veja help axis.
-
Há duas formas de se fazer gráficos múltiplos em uma
única janela. Considere:
Ex.:
x=0:0.01:2*pi;
y1=sin(x);
y2=sin(2*x);
y3=sin(4*x);
plot(x,y1,x,y2,x,y3)
Ex: É possível também formar um vetor Y
contendo os valores funcionais como colunas:
x=0:0.01:2*pi;
Y=[sin(x)', sin(2*x)', sin(4*x)'];
plot(x,Y)
-
Outra forma é utilizando o comando hold.
hold - congela a tela do gráfico atual de forma que gráficos
subsequentes são superimpostos sobre o atual
hold novamente desabilita-se a opção.
hold on – habilita superposição de gráficos
hold off – desabilita superposição de gráficos
-
É possível alterar os caracteres de tipo de linha e de ponto
usados como padrão. O código abaixo ilustra. Digite e execute-o
no Matlab.
x=0:0.01:2*pi;
y1=sin(x);
y2=sin(2*x);
y3=sin(4*x);
plot(x,y1,'--',x,y2,'*',x,y3,'+')
-
Observe que uma linha tracejada e uma linha pontilhada, são usadas
para as duas primeiras curvas. A terceira usa o símbolo + em cada
ponto. Os tipos de linhas e marcas são:
Tipos de linha: sólido (-), tracejado (--), pontilhado (:),
traço e ponto (-.)
Tipos de Marcas: ponto (.), sinal de adição
(+), asterisco (*), circulo (o), letra x (x)
-
O comando subplot pode ser usado para particionar a tela e permite
a apresentação simultânea de vários gráficos
não superpostos. Por exemplo, tente as linhas abaixo no Matlab.
x=0:0.01:2*pi;
y1=sin(x);
y2=sin(2*x);
y3=sin(3*x);
y4=sin(4*x)+cos(x);
y5=cos(2*x)+sin(3*x);
subplot(2,2,1), plot(y1)
subplot(2,2,2), plot(y2)
subplot(2,2,3), plot(y3)
subplot(2,2,4), plot(y4)
-
Observe que o exemplo permite a apresentação da funções
y1, y2, y3 e y4. Modifique o código para apresentar também
a função y5.
Impressão de Gráficos.
O comando print permite que se faça uma impressão
de uma figura na impressora ou para um arquivo, em algum formato. Digite
help print para maiores detalhes do comando print.
Gráficos em Malhas 3D
-
É possível desenhar superfícies em malhas 3D com a
função mesh.
-
O comando mesh(z) cria um desenho 3D em perspectiva dos elementos
da matriz z. A superfície da grade é definida pelas
coordenadas z dos pontos, acima de uma grade retangular no plano
x-y. Por exemplo, digite e execute o comando mesh(eye(10)).
-
Para desenhar o gráfico de uma função z=f(x,y)
sobre um retângulo, deve-se primeiro definir os vetores xx
e yy que dão as partições dos lados do retângulo.
Com a função meshgrid (domínio da grade) é
possível criar uma matriz x, cujas linhas igualam-se a xx e
cujas colunas têm comprimentos de yy e, similarmente, uma
matriz y, cujas linhas igualam-se à matriz yy usando-se
o comando:
[x,y]=meshgrid(xx,yy);
-
Depois, computa-se uma matriz z, obtida pela avaliação
da função f sobre as matrizes x e y,
com a qual o comando mesh pode ser utilizada.
Por exemplo, digite e execute o código abaixo, com avaliação
da função
z=exp(-x.^2-y.^2) sobre o quadrado definido por [-2,2] x
[-2,2].
xx=-2:.1:2;
yy=xx;
[x,y]=meshgrid(xx,yy);
z=exp(-x.^2-y.^2);
mesh(z)
-
As primeiras linhas podem ser omitidas, se modificarmos a linha de meshgrid
para:
[x,y]=meshgrid(-2:.1:2, -2:.1:2);
-
Outras formas de desenhos estão disponíveis. Por exemplo,
veja o help da função plot3.
Ex.
x=rand(3,20);
plot3(x(1,:),x(2,:),x(3,:))
Índice
Bibliografia
Sigmon, K. Matlab Primer. University of Florida. 1992
Hanselman, D.; Littlefield, B. Matlab Versão do Estudante: Guia
do Usuário. Makron Books, São Paulo, 1997.
Leonard, N.E.; Levine, W.S. Using Matlab to Analyze and Design
Control Systems. The Mathworks, Addison Wesley, 1995.
Site na internet.
http://www.mathworks.com
http://www.mathworks.com/education/