Você está na página 1de 42

CENTRO FEDERAL DE EDUCAO TECNOLGICA

DE SANTA CATARINA CEFET-SC


DEPARTAMENTO ACADMICO DE ELETRNICA

Apostila Bsica do Software Matlab

Andr Lus Dalcastagn

Florianpolis, agosto de 2008


APRESENTAO

O Matlab um software criado pela Mathworks em 1984 destinado anlise e


modelagem de sistemas e algoritmos. Devido sua praticidade, essa poderosa
ferramenta computacional vem sendo utilizada tanto em universidades quanto em
empresas do mundo todo.

Em relao a uma linguagem de programao tradicional (como C/C++ ou


Fortran), o desenvolvimento de algoritmos no ambiente Matlab sem dvida mais fcil
e rpido. A desvantagem que utilizando uma linguagem de programao tradicional
possvel desenvolver algoritmos mais eficientes.

O objetivo deste curso fornecer a base necessria para desenvolver programas


no ambiente Matlab. Devido grande quantidade de funes disponibilizadas pelo
Matlab, impossvel aprender todo o seu contedo em um nico curso. Entretanto, o
aluno ser capaz de entender como o Matlab funciona e descobrir quais funes so
teis para as suas aplicaes.
1 Introduo ao Matlab
O Matlab (Matrix Laboratory) pode ser definido como um ambiente de
computao numrica baseado em matrizes. Dentre as suas principais caractersticas,
destacam-se:

grficos e visualizao de dados;

linguagem de programao de alto nvel;

toolboxes, que oferecem funcionalidades especficas por rea de aplicao.

Como exemplos de toolboxes, podem-se citar:

Optimization, Statistics, Financial;

Fuzzy Logic, Neural Networks, Control System;

Signal Processing, System Identification.

A estrutura de diretrios do Matlab a seguinte:

diretrio base: c:\matlab;

executveis: c:\matlab\bin;

diretrio de trabalho: c:\Matlab\work.

1.1 Ambiente Matlab

a) rea de trabalho

A rea de trabalho do Matlab apresenta duas partes principais:

Command Window: rea na qual os dados e instrues so digitados e os


resultados so apresentados;

Workspace: rea de memria de trabalho do Matlab, na qual todas as variveis


so armazenadas.

Como exemplo, digite no Command Window a instruo ver. Como resultado, o


usurio recebe as informaes acerca das verses do Matlab, do Simulink e de todos os
toolboxes instalados no computador. O sinal de prompt >> dessa janela indica que o
sistema est apto a receber comandos.

1
>> ver
--------------------------------------------------
MATLAB Version 6.0.0.88 (R12) on PCWIN
MATLAB License Number: 0
--------------------------------------------------
MATLAB Toolbox Version 6.0 (R12) 06-Oct-2000
Simulink Version 4.0 (R12) 16-Jun-2000
Stateflow Version 4.0 (R12) 04-Oct-2000
Stateflow Coder Version 4.0 (R12) 04-Oct-2000
Communications Blockset Version 2.0 (R12) 01-Sep-2000
Communications Toolbox Version 2.0 (R12) 01-Sep-2000
Control System Toolbox Version 5.0 (R12) 01-Sep-2000
DSP Blockset Version 4.0 (R12) 01-Sep-2000
Filter Design Toolbox Version 2.0 (R12) 01-Aug-2000
Fixed-Point Blockset Version 3.0 (R12) 26-May-2000
Image Processing Toolbox Version 2.2.2 (R12) 10-Mar-2000
MATLAB Compiler Version 2.1 (R12) 26-Jul-2000
Model Predictive Control Toolbox Version 1.0.5 (R12) 10-May-2000
Nonlinear Control Design Blockset Version 1.1.4 (R12) 12-Jun-2000
Optimization Toolbox Version 2.1 (R12) 07-Jun-2000
Partial Differential Equation Toolbox Version 1.0.3 (R12) 31-Dec-1999
Robust Control Toolbox Version 2.0.7 (R12) 10-May-2000
SB2SL (converts SystemBuild to Simu... Version 2.1 (R12) 16-Jun-2000
Signal Processing Toolbox Version 5.0 (R12) 01-Jun-2000
Simulink Accelerator Version 1.0 (R12) 01-Mar-2000
Model Differencing for Simulink and... Version 1.0 (R12) 19-Jul-2000
Simulink Model Coverage Tool Version 1.0 (R12) 02-Jun-2000
Simulink Report Generator Version 1.1 (R12) 01-Apr-2000
Statistics Toolbox Version 3.0 (R12) 01-Sep-2000
Symbolic Math Toolbox Version 2.1.2 (R12) 11-Sep-2000
System Identification Toolbox Version 5.0 (R12) 27-Aug-2000
Wavelet Toolbox Version 2.0 (R12) 16-Jun-2000

b) Janelas

A verso Matlab para ambiente Windows apresenta as seguintes janelas:

2
Command Window: ambiente de trabalho;

Launch Pad: apresenta informaes, textos explicativos e exemplos dos produtos


instalados;

Workspace: apresenta as variveis do ambiente de trabalho;

Command History: histrico das instrues j executadas.

c) Menus

O Matlab tambm possui uma srie de menus: File, Edit, View, Web, Window e
Help. Os mais importantes sero vistos ao longo do curso. Alguns menus so bastante
utilizados:

File: manipulao de arquivos;

o File/Set Path: configura a lista de diretrios de busca (equivalente ao


comando pathtool);

o File/Preferences: configura parmetros do ambiente Matlab (equivalente


ao comando preferences);

Edit: recursos de edio;

View: configurao de visualizao da tela do Matlab;

Web: aciona web browser;

Window: fecha janelas de figuras (grficos);

Help: aciona textos de ajuda.

d) Barra de ferramentas

A primeira parte da barra de ferramentas do Matlab segue o padro Windows. As


demais opes so prprias do Matlab:

New M-File, Open, Cut, Copy, Paste, Undo e Redo;

Simulink: abre um modelo do Simulink;

Current Directory: apresenta o diretrio de trabalho corrente;

Browse for folder: busca um novo diretrio de trabalho.

3
1.2 Configurao de Parmetros do Ambiente Matlab

Os parmetros do Matlab so configurveis pelo comando preferences ou pelo


menu File/Preferences. As principais opes desse menu so:

General: parmetros gerais.

o Habilita/desabilita textos explicativos de cones;

o Tipo de impresso desejado.

Command Window: configura a janela Command Window.

o Formato de exibio de nmeros;

o Formato de exibio de matrizes;

o Cor e tipo de fonte.

Editor/Debugger: configura o editor de textos do Matlab (edit).

Help: configuraes da ajuda do Matlab.

Current Directory: configura a opo Current Directory da barra de ferramentas.

Workspace: configura parmetros da janela Workspace.

Array Editor: configura parmetros da janela Array Editor.

Guide: configura parmetros do ambiente de desenvolvimento de interfaces


grficas guide (Graphical User Interface).

Figure Copy Template: configura parmetros para cpia de figuras.

Simulink: configura parmetros do Simulink.

1.3 Configurao de Diretrios do Matlab

Para que uma funo possa ser utilizada por qualquer programa Matlab, o
diretrio no qual ela est salva deve estar includo na lista de diretrios de busca do
Matlab (arquivo pathdef.m). Para realizar tal tarefa, pode-se utilizar a instruo
pathtoll ou o menu File/Set Path (mais prtico). Se isso no for feito, a funo
criada s poder ser utilizada por programas Matlab (.m) que estiverem gravados no
mesmo diretrio da funo.

4
O Matlab possui algumas funes do sistema operacional, apresentados na tabela
abaixo.

Tabela 1.1: Comandos do sistema operacional

Comando Funo Exemplo

cd ou pwd Informa ou altera diretrio cd

dir ou ls Lista contedo do diretrio dir

what exibe arquivos Matlab salvos no diretrio what

which Identifica e localiza arquivo which cos

! Chama comando do sistema operacional !del arquivo.m

5
2 Elementos Bsicos do Matlab

2.1 Notaes

O Matlab utiliza as seguintes notaes para representar um nmero:

Tabela 2.1: Notaes adotadas no Matlab

nmero negativo sinal -

casa decimal ponto final .

notao cientfica e

1 j ou i

Exemplos:

>> -2.5e-3
ans =
-0.0025
>> 1+2j
ans =
1.0000 + 2.0000i
Note que o Matlab atribui o resultado de cada operao a uma varivel
denominada ans (de answer). Ela utilizada pelo Matlab para armazenar o ltimo valor
calculado pelo Matlab, a no ser nos casos em que o usurio explicita o nome de uma
varivel juntamente com o comando. Veja o exemplo abaixo.

>> a=-2.5e-3
a=
-0.0025
>> b=1+2j
b=
1.0000 + 2.0000i

2.2 Matrizes

Para o Matlab, qualquer valor numrico interpretado como uma matriz. Uma
matriz definida da seguinte forma:

6
valores numricos so definidos entre colchetes ([...]);

elementos de uma linha so separados por , ou por espao em branco;

final de uma linha informado por ;.

Alguns exemplos

Tabela 2.2: Tipos de matrizes

tipo de matriz exemplo

>> 2
escalar ans =
2
>> [1 2 3]
vetor linha (1 n ) ans =
1 2 3
>> [1;2;3]
ans =
vetor coluna ( n 1) 1
2
3
>> [1 2 3;4 5 6;7 8 9]
ans =
matriz bidimensional ( m n ) 1 2 3
4 5 6
7 8 9
matriz de dimenso
mostrado adiante
n1 n2 " nm

2.3 Variveis

Para criar uma varivel no Matlab deve-se seguir algumas regras. Assim, o nome
de uma varivel Matlab

deve ser alfanumrico e iniciado por uma letra.

case-sensitive;

pode conter o caractere _;

7
pode possuir no mximo 32 caracteres;

no pode ser uma palavra reservada, como for ou while.

As variveis criadas no Matlab ficam registradas na regio Workspace (ver


Captulo 1). A Tabela 2.3 apresenta alguns comandos para manipular essas variveis.

Tabela 2.3: Comandos para manipulao de variveis

comando descrio

who lista nomes das variveis do Workspace

whos lista os nomes e tipos das variveis do Workspace

clear elimina variveis do Workspace

>> a = 1;
>> b = [1 2; 3 4];
>> texto = 'matlab';
>> who
Your variables are:
a b texto
>> whos
Name Size Bytes Class
a 1x1 8 double array
b 2x2 32 double array
texto 1x6 12 char array
Grand total is 11 elements using 52 bytes
>> clear b;
>> whos
Name Size Bytes Class
a 1x1 8 double array
texto 1x6 12 char array
Grand total is 7 elements using 20 bytes
>> who
Your variables are:
a texto

8
2.4 Funes Matemticas

O Matlab possui uma srie de funes matemticas (built-in functions). Alm


dessas funes previamente programadas, o usurio tambm pode criar funes para
atender as suas necessidades. Uma funo no Matlab apresenta a seguinte sintaxe:

[sada1, sada2, ... , sadaN] = NomeFuno [entrada1, entrada2, ... ,entradaM],

onde

sada1 a sadaN so os N parmetros de sada da funo;

entrada1 a entradaM so os M parmetros de entrada da funo;

NomeFuno o nome da funo.

Para obter ajuda em alguma funo, pode-se utilizar o comando

help NomedaFuno

Exemplo

>> help sin


SIN Sine.
SIN(X) is the sine of the elements of X.
Overloaded methods
help sym/sin.m
>> x = pi/2;
>> a = sin(x)
a=
1.0000
interessante notar a funo do ; no Matlab. Na definio da varivel x, o
seu valor no foi apresentado na tela devido insero do ;. J quando se definiu a
varivel a, o seu valor foi apresentado na tela porque no se colocou o ; no final da
instruo. Em termos numricos, no h diferena alguma; o sinal ; serve apenas para
informar ao Matlab que no se deseja ver o resultado de uma operao na tela.

9
3. Manipulao de Matrizes
Como mencionado no Captulo 2, uma matriz definida da seguinte forma:

valores numricos so definidos entre colchetes ([...]);

elementos de uma linha so separados por , ou por espao em branco;

final de uma linha informado por ;.

3.1 Criao de Matrizes


a) Matrizes numricas: formadas por qualquer nmero ou operao numrica:

>> m = [-2.8 sqrt(2) (5+4)/8 1; sin(0.4) exp(0.7) fix(4.5) 100]


m=
-2.8000 1.4142 1.1250 1.0000
0.3894 2.0138 4.0000 100.0000

b) Acrescendo valores em uma matriz: possvel acrescentar apenas um valor em


uma matriz; os demais novos componentes so considerados iguais a zero:

>> m(1,6) = 666


m=
-2.8000 1.4142 1.1250 1.0000 0 666.0000
0.3894 2.0138 4.0000 100.0000 0 0

c) Criao de vetores linearmente espaados: atravs do smbolo :. Veja o exemplo


abaixo, no qual x um vetor que varia entre 1 e 5 com incremento 1 (valor padro).

>> x = 1:5
x=
1 2 3 4 5
Se o incremento for diferente de 1, o seu valor deve ser includo na instruo.
Veja o exemplo a seguir, no qual o incremento do vetor x 0,5 e o do vetor y 0,5 .

> x = 1:0.5:5
x=
1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000
>> y = 5:-0.5:1
y=
5.0000 4.5000 4.0000 3.5000 3.0000 2.5000 2.0000 1.5000 1.0000

10
d) Principais instrues relacionadas com matrizes.
Tabela 3.1: Comandos para criao de matrizes elementares

funo descrio Exemplo


>> eye(3)
ans =
eye cria matriz identidade
1 0 0
0 1 0
0 0 1
>> zeros(2,3)
cria matriz com todos os
ans =
zeros
elementos nulos 0 0 0
0 0 0
>> ones(2,3)
cria matriz com todos os ans =
ones
elementos iguais a um 1 1 1
1 1 1
>> rand(2,3)
cria matriz com nmeros pseudo-
ans =
rand randmicos com distribuio
0.9501 0.6068 0.8913
uniforme entre 0 e 1
0.2311 0.4860 0.7621

e) Concatenao de matrizes: criao de matrizes a partir de outras matrizes:

>> A = [1 2 3];
>> B = [4 5 6];
>> C = [A B]
C=
1 2 3 4 5 6
>> D = [A ; B]
D=
1 2 3
4 5 6
>> E = [A' B']
E=
1 4
2 5
3 6

11
3.2 Operaes com Matrizes

muito importante notar que o Matlab pode realizar uma operao matricial (em
uma ou entre duas matrizes) como tambm uma operao elemento a elemento (em uma
ou entre matrizes). Para exemplificar, considere as matrizes

1 2 5 6
A= e B= .
3 4 7 8

A Tabela 3.2 apresenta as principais operaes realizveis com essas duas matrizes.

Tabela 3.2: Operaes com matrizes

Operao Operador Exemplo

soma + 1+ 5 2 + 6 6 8
A + B= =
3 + 7 4 + 8 10 12

subtrao - 1 5 2 6 4 4
A B= =
3 7 4 8 4 4

multiplicao vetorial * 19 22
A * B=
43 50

multiplicao escalar .* 1 5 2 6 5 12
A .* B= =
3 7 4 8 21 32
diviso matricial
/ 3 2
A / B=
(equivale a A B-1 ) 2 1

diviso escalar ./ 1/ 5 2 / 6 0, 2 0, 333


A ./ B= =
3 / 7 4 / 8 0, 428 0, 5
diviso esquerda
\ 3 4
A \ B=
(equivale a A -1 B ) 4 5

potncia matricial ^ 7 10
A^2=A*A=
15 22

potncia escalar .^ 12 22 1 4
A .^2= 2 =
3 42 9 16

transposta 1 3
A'=
2 4

12
Exemplo 1: Considere o seguinte sistema de equaes lineares

y1 = x1 + x2 + 2 x3 y1 1 1 2 x1
y2 = 3 x1 x2 + x3 y2 = 3 1 1 x2 ou Y = AX
y3 = x1 + 3 x2 + 4 x3 y3 1 3 4 x3

a) Qual o valor de Y se X = [1 1 2] ?
T

Nesse caso, utiliza-se diretamente a operao matricial Y = A * X :

>> A = [-1 1 2 ; 3 -1 1; -1 3 4]
A=
-1 1 2
3 -1 1
-1 3 4
>> Y = A*[1 ; -1 ; 2]
Y=
2
6
4

b) Qual o valor de X se Y = [ 0 2 1] ?
T

Nesse caso, pode-se deduzir que X=A -1Y . No Matlab, esse operao
equivalente a X=A\Y (diviso esquerda, ver tabela 3.2).

>> Y = [0 ; 2 ; 1];
>> X = A\Y
X=
0.7000
0.3000
0.2000
Exemplo 2: Utilizando o Matlab, plote a funo y = x 2 + 2 x 3 , para 5 x 5 .

Note que nesse caso deve-se utilizar a operao de potncia escalar, e no a


matricial, pois para cada elemento de x deve-se calcular um valor de y. Veja como fica
o cdigo Matlab:

>> x=[-5:0.1:5];
>> y = x.^2 + 2*x -3;
>> plot(x,y)

13
35

30

25

20

15

10

-5
-5 -4 -3 -2 -1 0 1 2 3 4 5

Figura 3.1: Grfico de y = x 2 + 2 x 3 .

3.3 Tratamento de Matrizes por Funes


Uma caracterstica muito importante do Matlab a forma como uma funo
manipula matrizes. Uma funo no Matlab trata uma matriz como um todo, e no
elemento a elemento. Tal caracterstica conhecida na literatura como bulk processing.
Para entender tal caracterstica, veja o seguinte exemplo. No primeiro caso, x um
escalar de valor 2. A varivel a simplesmente e 2 = 7,3891 . No segundo caso,
considera-se uma matriz m de dimenso 2 3 . Nesse caso, B tambm uma matriz
a
2 3 , no qual cada elemento Bij dado por e ij .

>> x = 2;
>> a = exp(2)
a=
7.3891

>> M = rand(2,3)
M=
0.9501 0.6068 0.8913
0.2311 0.4860 0.7621

>> B = exp(m)
B=
2.5860 1.8346 2.4383
1.2600 1.6258 2.1428

14
Tal propriedade facilita bastante o desenvolvimento de programas. Por
exemplo, se for desejado plotar o seno de x, para x variando entre 0 e 2 . No Matlab, o
cdigo seria o seguinte:

>> x = 0:0.1:2*pi;

>> plot(x,sin(x));
Em uma linguagem de programao sem bulk processing, o cdigo seria algo desse
tipo:

inc = 0.1
xi = 0
i=1
while xi <= 6.28
x(i) = xi
yi = sin(xi)
xi = xi + inc
end
plot(x,y)

O grfico fornecido pelo Matlab mostrado na figura abaixo.


1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 1 2 3 4 5 6 7

Figura 3.2: Grfico de sen(x) para 0 x 2 .

3.4 Indexao de Matrizes

Uma tarefa que aparece com freqncia em programas a necessidade de


utilizar apenas determinados elementos de uma matriz, e no a matriz como um todo.
Para isso, realiza-se uma indexao matricial. Considere a matriz M definida abaixo:

15
>> M = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12]
M=
1 2 3 4
5 6 7 8
9 10 11 12

a) Indexao de apenas um elemento. Se apenas um elemento for desejado, deve-se


informar a posio que tal elemento ocupa na matriz (linha e coluna).

>> a = M(3,2)
a=
10
No Matlab, os elementos tambm so indexados seqencialmente. Essa indexao segue
por linha e depois por coluna. Assim, a matriz anterior indexada da seguinte forma:

1( elem. 1) 2( elem. 4) 3( elem. 7 ) 4( elem. 10)


elem. 2)
M = 5( 6(
elem. 5 )
7(
elem. 8)
8(
elem. 11)
.
( elem. 3) elem. 12 )
10(
elem. 6 )
11(
elem. 9 )
9 12(

>> b = M(6)
b=
10
>> c = M(10)
c=
4

b) Indexao de mais de um elemento. Se for desejado indexar uma faixa de


elementos de uma matriz, pode-se utilizar o smbolo :. Dessa forma, cria-se
submatrizes. Por exemplo, considere que se deseja criar uma matriz Z = [ 6 7 8] .

Nesse caso, a matriz Z deve receber os elementos da 2a linha de M, comeando da


coluna 2 at a coluna 4. Veja o exemplo:

>> Z = M(2,2:4)
Z=
6 7 8

16
A mesma operao pode ser realizada com a ajuda de um end, que representa o final
de um intervalo. Por exemplo:

>> Z = M(2,2:end)
Z=
6 7 8

c) Indexao de uma linha ou coluna completa. Outra ferramenta til consiste em


utilizar : sem nmeros. Nesse caso, : representa todos os nmeros de uma linha ou
coluna. Por exemplo, se for desejado criar uma matriz Y formada pela primeira coluna
de M. Nesse caso, define-se:

>> Y = M(:,1)
Y=
1
5
9

3.5 Matrizes Multidimensionais

O Matlab permite a criao de matrizes com mais de duas dimenses. A


forma de criao idntica a de matrizes bidimensionais.
Exemplo: Criao de uma matriz de dimenso 2 2 2 .
>> A = [1 2 ; 3 4]
A=
1 2
3 4

>> B = [5 6 ; 7 8]
B=
5 6
7 8

>> C(:,:,1) = A;
>> C(:,:,2) = B

C(:,:,1) =
1 2
3 4

C(:,:,2) =
5 6
7 8

17
3.5 Funes Matriciais Bsicas

Tabela 3.3: Funes matriciais bsicas

funo descrio Exemplo

>> X = [1 2 ; 4 5];
>> det(X)
det (X) determinante da matriz quadrada X
ans =
-3
>> inv(X)
ans =
inv (X) matriz inversa da matriz
-1.6667 0.6667
1.3333 -0.3333
>> diag(X)
ans =
diag (X) retorna a diagonal principal de X
1
5
>>>> v = [1 2 3];

>> diag(v)
se v um vetor, cria matriz diagonal ans =
diag (v)
utilizando elementos de v 1 0 0
0 2 0
0 0 3
>> x = [1 2 3 4 5 6 7 8 9 0];
>> reshape(x,2,5)
reshape(x,n,m) cria matriz de dimenso n m a partir
ans =
da matriz x
1 3 5 7 9
2 4 6 8 0

3.6 Outros Tipos de Dados


Alm de matrizes, o Matlab trabalha com outros trs tipos de dados:
cadeias de caracteres (strings);
clulas (cell arrays);
estruturas (structus).

a) Cadeias de caracteres (strings)

18
Cadeias de caracteres so dados tipo texto, formados por cadeias de caracteres
ASCII (American Standard Code for Information Interchange). Cada caractere ocupa
dois bytes de memria. No Matlab, uma string definida entre . Veja o exemplo.

>> texto1 = 'Curso'


texto1 =
Curso
Atravs do comando whos pode-se verificar as informaes acerca da varivel texto1.
Ela um vetor de dimenso 1 5 , do tipo char array, que ocupa 10 bytes de memria.

>> whos texto1


Name Size Bytes Class
texto1 1x5 10 char array
Grand total is 5 elements using 10 bytes
Internamente, os caracteres so armazenados atravs dos respectivos cdigos
ASCII. Para obter a string em formato numrico, pode-se utilizar a funo double:

>> double(texto1)
ans =
67 117 114 115 111
A operao inversa que transforma um cdigo ASCII em uma string efetuada pela
funo char:

>> a = [84 101 120 116 111];


>> char(a)
ans =
Texto
A indexao de uma string idntica a de uma matriz. Veja o exemplo.

>> a = texto1(1:3)
a=
Cur
Da mesma forma, pode-se realizar a concatenao de strings:

>> texto2 = ' de Matlab';


>> textototal = [texto1 texto2]
textototal =
Curso de Matlab

19
b) Clulas (cell arrays)
Uma clula um tipo de varivel que permite armazenar matrizes de
naturezas diferentes (escalares, vetores, matrizes, strings) em uma nica estrutura. Para
criar uma clula, utiliza-se a funo cell. Clulas utilizam {} ao invs de []. Veja o
exemplo abaixo, de uma clula de dimenso 2 2 .

>> celula = cell(2)


celula =
[] []
[] []
>> celula{1,1} = eye(2);
>> celula{1,2} = 'matriz identidade 2x2';
>> celula{2,1} = 2;
>> celula{2,2} = [1 2 3]
celula =
[2x2 double] [1x21 char ]
[ 2] [1x3 double]
>> whos celula
Name Size Bytes Class
celula 2x2 474 cell array
Grand total is 33 elements using 474 bytes

Costuma-se utilizar clulas em bancos de dados que mesclam elementos


numricos e alfanumricos. Por exemplo, uma lista de alunos e suas respectivas
matrculas.

c) Estruturas (structs)
um tipo de dado que permite o armazenamento de matrizes de naturezas
diferentes (escalares, vetores, matrizes, strings) identificveis por nomes de campos.
Para criar uma estrutura, utiliza-se a funo struct. Como exemplo, considere que se
deseja criar uma estrutura para armazenar a Tabela 3.4.
Tabela 3.4: Exemplo de tabela para ser utilizada em uma estrutura
Aluno Matrcula Nota
Joo 001 1,0
Maria 002 10,0
Jos 003 7,0

20
>> s = struct('Aluno',{'Joao'},'Matricula',{001},'Nota',{1.0})
s=
Aluno: 'Joao'
Matricula: 1
Nota: 1
>> s(2).Aluno = 'Maria';
>> s(2).Matricula = 002;
>> s(2).Nota = 10;
>> s(3).Aluno = 'Jose';
>> s(3).Matricula = 003;
>> s(3).Nota = 7;
>> whos s
Name Size Bytes Class
s 1x3 998 struct array
Grand total is 28 elements using 998 bytes
Os contedos de uma estrutura so acessados da seguinte forma:

>> s
s=
1x3 struct array with fields:
Aluno
Matricula
Nota
>> s(1)
ans =
Aluno: 'Joao'
Matricula: 1
Nota: 1
>> s(2)
ans =
Aluno: 'Maria'
Matricula: 2
Nota: 10

21
4. Programao no Matlab

4.1 Editor de programas


Existe um ambiente prprio do Matlab para edio de programas. Para abri-lo,
digita-se o comando edit. Tal editor apresenta algumas caractersticas interessantes:
linhas numeradas, o que til principalmente para a localizao de erros de
programao;
o caractere % indica comentrio;
o caractere ... indica que o comando continua na prxima linha. Tal recurso
permite deixar o texto mais organizado;
a cor atribuda pelo editor a um texto indica a sua classe. O padro de cores varia
de acordo com a verso do Matlab.

4.1 Tipos de arquivos Matlab


Um programa em Matlab possui a extenso .m e chamado de m-file.
Existem dois tipos de arquivos Matlab: script e funo.

a) Script
Um script simplesmente uma seqncia de comandos Matlab. Qualquer
seqncia de comandos pode ser implementada diretamente na janela de comando do
Matlab. Entretanto, se for desejado alterar algum parmetro ou simplesmente repetir a
operao, os comandos devem ser digitados novamente. Tal situao no prtica. Para
solucionar esse tipo de problema existe o script. Se a seqncia de comandos for salva
em um script, basta digitar o seu nome na janela de comando para repetir o processo.

Exemplo: script denominado scriptEq2Grau.m, que plota uma equao do segundo grau
do tipo y = ax 2 + bx + c , com a = 1 , b = 2 e c = 3 :

x = [-10:0.1:10];
a = 1;
b = 2;
c = -3;
y = x.^ 2 + b*x + c;
plot(x,y);

22
Note que o script no apresenta parmetros de entrada nem de sada. Ele
apenas realiza as operaes desejadas e utiliza variveis do workspace. Isso significa
que todas as variveis de um script so salvas no workspace (digite comando whos).

b) Funo
Uma funo tambm realiza uma seqncia de comandos. Diferentemente de
um script, uma funo possui parmetros de entrada e pode retornar parmetros de
sada. Por exemplo, considere que se deseje criar um arquivo Matlab que calcule uma
funo do segundo grau para valores variveis de a, b e c. Nesse caso, um script no
serve; deve-se criar uma funo. Veja o exemplo.
Exemplo: Funo denominada FuncaoEq2Grau.m.

% Apresenta o grfico de uma equao do segundo grau


function y = FuncaoEq2Grau(a,b,c)
x = [-10:0.1:10];
y = x.^ 2 + b*x + c;
plot(x,y);
Para que a funo tenha os mesmos parmetros do script anterior, digita-se

z = FuncaoEq2Grau(1,2,-3);
Note que a nica varivel criada no workspace (digite comando whos) z.
Todas as variveis utilizadas por uma funo so internas, o que significa que no so
salvas no workspace (diferentemente do caso de um script0). Uma caracterstica
interessante a possibilidade de criar um texto explicativo para uma funo, que
apresentado ao se utilizar a funo help do Matlab. Esse texto deve ser escrito como
comentrio (atravs de %) no incio do m-file.

4.2 Tipos de funes


O Matlab reconhece trs tipos de funo:
built-in functions: so funes internas do Matlab, cujo cdigo no acessvel
ao usurio (por exemplo, digite which cos);
Matlab m-files: funes escritas em arquivos m-file. O cdigo acessvel ao
usurio, podendo inclusive ser modificado (por exemplo, digite which roots);
User m-files: funes escritas em arquivos m-file pelo prprio usurio, como a
FuncaoEq2Grau.m descrita anteriormente.

23
4.3 Operadores lgicos
O Matlab possui operadores utilizveis em expresses lgicas (Booleanas),
que so utilizadas em tomadas de decises. Para o Matlab, considera-se que
0 (zero) ou nil indica condio falsa;
1 (um) ou diferente de zero indica condio verdadeira.

A Tabela 4.1 apresenta os smbolos adotados para os operadores lgicos.


Tabela 4.1: Operadores lgicos

Operador Verdadeiro se Exemplo

= = ou eq A igual a B A = = B ou eq(A,B)

~= ou ne A diferente de B A ~= B ou ne(A,B)

< ou lt A menor do que B A < B ou lt(A,B)

> ou gt A maior do que B A > B ou gt(A,B)

<= ou le A menor ou igual a B A <= B ou le(A,B)

>= ou ge A maior ou igual a B A >= B ou ge(A,B)

~ ou not lgica not ~A ou not(A)

& ou and lgica and

>> A = 2;
>> B = 4;
>> A == B
ans =
0

>> A < B
ans =
1

>> A > B & A ~= B


ans =
0
O Matlab tambm possui funes para teste de matrizes

24
Tabela 4.2: Funes matriciais

Funo verdadeiro se matriz M for

isempty(M) vazia

isequal(M,M2) igual a matriz M2

isnumeric(M) numrica

ischar(M) alfanumrica

issparse(M) esparsa

Existem tambm as funes any e all. Veja o seu funcionamento no exemplo.


>> A = [0 2 4 6 8];
>> isempty(A)
ans =
0
>> any(A)
ans =
1
>> all(A)
ans =
0
>> all(A>=0)
ans =
1

4.4 Controladores de fluxo


O Matlab possui estruturas para tomada de decises, iguais s existentes em
linguagens de programao estruturadas. As principais so as estruturas for, if e while.
A tomada de deciso se baseia no resultado de uma expresso booleana. Se uma
expresso retorna 0, o Matlab interpreta condio falsa. Se uma expresso retorna um
valor diferente de zero, o Matlab considera como condio verdadeira.

a) For
for varivel = <valor inicial> : <incremento> : <valor final>
comandos
end

25
Exemplo: Criao de um vetor formado por 10 mltiplos de 3.

for i = 1:10
v(i) = 3*i;
end

b) While
O lao while permite que uma seqncia de comandos seja repetida enquanto
uma certa condio for verdadeira. Apresenta a seguinte estrutura:
while <expressao>
comandos
end
Por exemplo, considere que se deseja determinar o maior valor de n tal que
n ! < 10100 . Pode-se utilizar o seguinte cdigo.

n = 1;
while prod(1:n) < 1e100
n = n + 1;
end

c) If, elseif, else.


O lao if, elseif, else estabelece diversos caminhos para a fluncia de um
programa. A sua estrutura mostrada abaixo.
if <expressao1>
comandos
elseif <expressao2>
comandos
.
elseif <expressaon>
comandos
else
comandos
end

Veja um exemplo de utilizao da estrutura. O valor da varivel b depende do valor da


varivel a, que varia entre 0 e 10.

26
a = round(10*rand(1)); % a eh uma variavel com valor entre 0 e 10
if a > 5
b = 3*a;
elseif a < 5
b = a/3;
else
b = a;
end
4.5 Implementao do algoritmo de Gauss
O algoritmo de Gauss til para resolver um sistema de equaes lineares de
ordem n , do tipo AX = Y , com A singular ( det(A) 0 ). O mtodo possui duas etapas:
1 Triangularizao: consiste em transformar A numa matriz triangular superior,
mediante permutaes e combinaes lineares de linhas;
2 Retrossubstituio: clculo de X, soluo de AX = Y , a partir da soluo do ltimo
componente de X, e ento substituindo regressivamente nas equaes anteriores.

1a etapa: triangularizao da matriz A


1. Entrada { n , aij , yi | i = 1(1)n , j = 1(1)n }

2. Para k = 1(1)n 1
2.1. Para i = k + 1(1)n
2.1.1. mik = aik / akk
2.1.2. Para j = k + 1(1)n
2.1.2.1. aij = aij + mik * akj

2.1.3. yi = yi + mik * yk
3. Sada { n , aij , yi | i = 1| n , j = 1| n }

2a etapa: Retrossubstituio
1. Entrada {{ n , aij , yi | i = 1(1)n , j = 1(1)n , aij so coefic. de uma matriz triang. sup.}
2. xn = yn / ann
3. Para k = n 1(1)1
3.1. xk yk
3.2. Para i = k + 1(1)n
3.2.1. xk xk aki * xi

3.3. xk xk / akk

4. Sada { xi | i = 1(1)n }

27
O algoritmo implementado em Matlab pode ser o seguinte:

% Triangularizacao
% Passo 1.
A=[3 2 0 1 ; 9 8 -3 4 ; -6 4 -8 0 ; 3 -8 3 -4];
Y=[3 ; 6 ; -16 ; 18];
n=length(A);

for k=1:n-1 % Passo 2


for i = k+1:n % Passo 2.1
mik = -A(i,k)/A(k,k); % Passo 2.1.1
A(i,:) = A(i,:) + mik*A(k,:); % Passos 2.1.2 e 2.1.2.1.
Y(i) = Y(i) + mik*Y(k); % Passo 2.1.3
end
end

% Retrossubstituicao
x(n)=Y(n)/A(n,n); % Passo 2
for k = n-1:-1:1 % Passo 3
x(k)=Y(k); % Passo 3.1
for i = k+1:n % Passo 3.2
x(k) = x(k) - A(k,i)*x(i); % Passo 3.2.1
end
x(k)=x(k)/A(k,k); % Passo 3.3
end
disp('Vetor x='); % Passo 4
disp(x');

28
5. Grficos no Matlab
O Matlab possui sofisticados recursos para a visualizao de dados na forma
grfica. Ele trabalha com objetos grficos, tais como linhas e superfcies. As
propriedades de tais objetos podem ser controladas atravs das propriedades dos
objetos. Entretanto, o Matlab disponibiliza diversas funes que facilitam a
configuraes das propriedades de objetos. As principais funes com esse fim so
vistas neste captulo.

5.1 Cor, linha e marcador de uma curva (clm)


Antes de apresentar as funes de plotagem, interessante apresentar as
propriedades de cor, tipo de linha e tipo de marcador de uma curva. A Tabela 5.1
apresenta as diferentes possibilidades.
Tabela 5.1: Cores, tipos de linha e marcadores

Cor Tipo de linha Marcador

y (amarela) - (slida) . (ponto)

m (magenta) : (pontilhada) o (crculo)

c (azul-claro) -. (ponto-trao) x (marcador x)

r (vermelha) -- (tracejada) + (cruz)

g (verde) * (estrela)

b (azul) s (quadrado)

w (branca) d (losango)

k (preta) h (hexagrama)

p (pentagrama)

v ou ^ (tringulo p/ baixo ou cima)

< ou > (tringulo p/ esquerda ou direita)

5.2 Principais funes relacionadas com grficos

A Tabela 5.2 apresenta algumas das principais funes relacionas com


grficos Matlab.

29
Tabela 5.2: Funes relacionadas com grficos

title ttulo ylabel nome do eixo y

text texto em local especificado grid desenha linhas de grade

gtext texto usando mouse axis intervalo dos eixos

xlabel nome do eixo x legend legendas no grfico

5.3 Funes utilizadas para plotagem


A Tabela 5.3 apresenta as principais funes utilizadas para gerar grficos 2D.
Tabela 5.3: Funes para plotagem 2D
Funo Descrio
plot(x1,y1,clm1,...,xN,yN,clmN) eixos X e Y em escala linear
semilogx(x1,y1,clm1,...,xN,yN,clmN) eixo X logartmico e eixo Y linear
semilogy(x1,y1,clm1,...,xN,yN,clmN) eixo X linear e eixo Y logartmico
loglogy(x1,y1,clm1,...,xN,yN,clmN) eixos X e Y logartmicos
plotyy(x1,y1,clm1,x2,y2,clm2) duas curvas com escalas em Y diferentes
stem(x,y) plota seqncias discretas

5.4 Propriedades de textos


Textos em grficos possuem propriedades que podem ser alteradas, tais como
tipo e tamanho da fonte. A Tabela 5.4 apresenta comandos que realizam essas tarefas.
Tabela 5.4: Propriedades de textos em grficos Matlab

Propriedade Comando Exemplo

Tipo de fonte \fontename \fontname{Arial}

Tamanho da fonte \fontesize \fontsize{14}

Texto em negrito \bf \bfTexto

Texto em itlico \it \itTexto

Subscrito _ X_n

Sobrescrito ^ X^n

Letras gregas '\nomeletra' '\pi'

30
5.5 Exemplos

a) Plotar a funo y = e x sen( x) , para 0 < x < 10 .

% Exemplo a
clear
close all
x = 0:0.1:10;
y = exp(-x).*sin(x);
plot(x,y,'r'); % Plota curva em vermelho
title('\fontsize{18}f(x)=e^{-x}*sen(x)'); % Titulo em fonte 18
xlabel('Eixo X');
ylabel('Eixo Y');
axis([0 10 -0.1 0.4]); % escala de x varia entre 0 e 10; de y entre -0.1 e 0.4
% insere texto em fonte times 16
gtext('\fontname{timesnewroman}\fontsize{16}ponto de maximo local');

b) Plotar as funes f1 ( x) = e x sen( x) e f 2 ( x) = sen( x) , para 0 < x < 10 , no mesmo


grfico.

% Exemplo b
clear
close all
x = 0:0.1:10;
y1 = exp(-x).*sin(x);
y2 = exp(-x);
y3 = sin(x);
plot(x,y1,'r',x,y2,'b',x,y3,'k');
title('\fontsize{18}f(x)=e^x*sen(x)'); % Titulo em fonte 18
legend('f_1(x)=e^{-x}*sen(x)','f_2(x)=e^{-x}','f_3(x)=sen(x)');
xlabel('Eixo X');
ylabel('Eixo Y');
axis([0 10 -1 1]); % escala de x varia entre 0 e 10 e a de y entre -1 e 1

31
c) Funo semilogx e comando figure: Diagramas de Bode de H ( j) = j /(10 + j) .

% Exemplo c
clear
close all
w = logspace(-2,3,1000); % w vetor logaritmicamente espacado entre 10^-1 e 10^2,
com 1000 pontos
H = j*w./(j*w+10);
magH = 20*log10(abs(H)); % Magnitude em dB
fasH = angle(H)*180/pi; % Fase em graus

figure(1) % Grafico de magnitude


semilogx(w,magH); % Eixo X em escala logaritmica
title('Magnitude');
xlabel('\omega (rad/s)');
ylabel('dB');
grid

figure(2) % Grafico de fase


semilogx(w,fasH); % Eixo X em escala logaritmica
title('Fase');
xlabel('\omega (rad/s)');
ylabel('graus');
grid

d) Funo subplot: Diagramas de Bode de H ( j) = j /(10 + j) na mesma figura.

% Exemplo d
clear
close all
w = logspace(-2,3,1000); % w vetor logaritmicamente espacado entre 10^-1 e 10^2,
com 1000 pontos
H = j*w./(j*w+10);
magH = 20*log10(abs(H)); % Magnitude em dB
fasH = angle(H)*180/pi; % Fase em graus

subplot(1,2,1) % Figura com 1 linha, 2 colunas, grafico 1

32
semilogx(w,magH); % Eixo X em escala logaritmica
title('Magnitude');
xlabel('\omega (rad/s)');
ylabel('dB');
grid
subplot(1,2,2) % Figura com 1 linha, 2 colunas, grafico 2
semilogx(w,fasH); % Eixo X em escala logaritmica
title('Fase');
xlabel('\omega (rad/s)');
ylabel('graus');
grid

e) Funo stem: plotar y (k ) = a k * u (k ) em funo de k.

% Exemplo e
k = -10:10;
% Criacao do degrau unitario u(k)
for i = 1:length(k)
if k(i) >= 0
u(i) = 1;
else
u(i) = 0;
end
end
% alternativa ao for:
% u = (k >= 0)
% Criacao de y(k) = a^k*u(k)
a = 0.5;
y = (a).^k.*u;
stem(k,y);

Grficos 3D
O Matlab possui diversas funes destinadas criao de grficos em 3D. A
Figura 5.1 apresenta apenas algumas delas. Quem desejar se aprofundar no assunto deve
ler a documentao do prprio Matlab.

33
Grfico 3D

Curvas Superfcies

plot3 curvas em 3D surf superfcies 3D

contour curvas de nvel mesh malhas 3D

Figura 5.1: Tipos de grficos e funes 3D.

a) Exemplo de uma curva em 3D (funo plot3)

t = 0:pi/50:10*pi;
x = sin(t);
y = cos(t);
z = t;
plot3(x,y,z);
xlabel('sin(t)'); ylabel('cos(t)'); zlabel('t');
Se for desejado plotar uma funo de duas variveis z = f ( x, y ) necessrio
gerar matrizes X e Y contendo linhas repetidas, que definem o domnio da funo. A
funo Malab que define X e Y a partir de vetores x e y a meshgrid. Feito isso,
pode-se utilizar a funo desejada para plotar a funo z. Veja o exemplo abaixo, no
qual se deseja obter as curvas de superfcie (funo surf) e de malha (funo mesh) de

z = f ( x, y ) =
sen ( x2 + y 2 )
x2 + y 2
clear
close all
x = -8:0.5:8;
y = -8:0.5:8;
[X,Y] = meshgrid(x,y); % Geracao de matrizes X e Y a partir de x e y
r = sqrt(X.^2 + Y.^2);
Z = sin(r)./r;
figure(1) % Grafico de superficie
surf(X,Y,Z);
figure(2) % Grafico de malha
mesh(X,Y,Z);

34
6. Funes relacionadas com arquivos de dados
O Matlab possui diversas funes para leitura e gravao de arquivos de
dados (texto, imagem e som). Algumas das principais so apresentadas neste captulo.

6.1 Leitura e gravao de arquivos de dados

a) Funes dlmread e dlmwrite


Para ler ou gravar um arquivo ASCII delimitado utiliza-se as funes dlmread
e dlmwrite, respectivamente. O arquivo possui um caractere delimitador, que separa os
dados uns dos outros. Veja os exemplos.
A funo dlmread(NomeArquivo,delimitador) l um arquivo ASCII com
determinado delimitador. Por exemplo, considere um arquivo dados.txt, cujo
delimitador um espao em branco. O exemplo abaixo mostra como ler este arquivo e
salvar o seu contedo em uma varivel denominada a.

>> type dados.txt


1234
5678
9 10 11 12
>> a = dlmread('dados.txt',' ')
a=
1 2 3 4
5 6 7 8
9 10 11 12

A funo dlmwrite(NomeArquivo,matriz,delimitador) permite gravar os


dados de uma matriz em um arquivo ASCII com determinado delimitador. O exemplo
abaixo mostra salva a matriz M no arquivo gravar.txt, cujo delimitador a ,.

>> M = [1 3 5 7;2 4 6 8]
M=
1 3 5 7
2 4 6 8
>> dlmwrite('gravar.txt',M,',');
>> type gravar.txt
1,3,5,7
2,4,6,8

35
b) Funes load e save
As funes load e save servem para ler/gravar variveis armazenadas em
arquivos com extenso .mat, que um formato binrio proprietrio do Matlab. A sintaxe
a seguinte:
load(NomeArquivo)
save(NomeArquivo,var1,var2,...,varN)
save(NomeArquivo,var1,var2,...,varN,-ASCII)

No comando save, se nenhuma varivel for especificada, o Matlab salva todas


as variveis do worspace no arquivo especificado. A opo -ASCII salva o arquivo no
formato ASCII. Veja alguns exemplos.

>> a = [1 2];
>> b = 3;
>> texto = 'teste';
>> save('arquivo1','a','texto');
>> clear
>> whos
>> load('arquivo1')
>> whos
Name Size Bytes Class
a 1x2 16 double array
texto 1x5 10 char array
Grand total is 7 elements using 26 bytes

Existem diversas outras funes para carregar arquivos de dados. Elas podem
ser acessadas pelo comando importdata (help importdata).

6.2 Leitura e gravao de arquivos de imagem


Para ler ou gravar um arquivo de imagem, utiliza-se as funes imread e
imwrite, respectivamente. A sintaxe a seguinte:
A = imread(NomeArquivo)
imwrite(Matriz,NomeArquivo)
As extenses permitidas so: bmp, cur, gif, hdf, io, jpg, jpeg, pcx, png, tif,
tiff e xwd

36
6.3 Leitura e gravao de arquivos de imagem
Para ler arquivo de som, utilizam-se as funes auread (som NeXT/SUN) e
wavread (som Microsoft wave). Para gravar um arquivo de som, utilizam-se as funes
auwrite (som NeXT/SUN) e wavwrite (som Microsoft wave).

37
7. Polinmios

a) Razes de um polinmio: funo roots


Dado um vetor p com n elementos, a funo roots retorna as razes do
polinmio P definido por P = p(1) x n + p(2) x n 1 + " + p(n 1) x + p(n) . Veja o exemplo,

onde se considera um polinmio P = 6 x 5 15 x 4 + 3 x 2 + 4 x + 1 .

>> p = [6 -15 0 3 4 1];


>> roots(p)
ans =
2.3531
0.9461
-0.2579 + 0.4447i
-0.2579 - 0.4447i
-0.2833

b) Coeficiente de um polinmio a partir de suas razes: funo poly


Dado um vetor r contendo as razes de um polinmio, a funo poly retorna
um vetor contendo os coeficientes do polinmio. Veja o exemplo, no qual se deseja um
polinmio com razes 1 e 2. O resultado P = x 2 x 2 .

> >> r = [-1 2];


>> P = poly(r)
P=
1 -1 -2

c) Valor de um polinmio: fuo polyval


A funo polyval calcula o valor de um polinmio P(X) para cada valor de um
vetor X. Por exemplo, considere que se deseja calcula o valor de P = x 2 x 2 para
3 < x < 3 . Veja o exemplo.

>> p = [1 -1 -2];
>> x = -3:0.1:3;
>> resultado = polyval(p,x);
>> plot(x,resultado);

d) Ajuste de curvas por polinmio de grau n: fuo polyfit

38
Dados vetores x e y, a funo polyfit retorna os coeficientes de um polinmio
de grau n que melhor aproxima os pontos definidos por (x,y). Veja o exemplo, no qual a
curva aproximada por um polinmio de grau 3, dado por
P = 0, 0046 x 3 0, 7995 x 2 + 3,5478 x + 99,8667 .

>> x = 1:10;
>> y = [100 110 105 98 102 107 103 100 99 103];
>> p = polyfit(x,y,3);
>> p = polyfit(x,y,3)
p=
0.0466 -0.7995 3.5478 99.8667
>> aprox = polyval(p,x);
>> plot(x,y,x,aprox,'r');

e) Multiplicao/diviso de polinmios: fues conv/deconv


Dados dois vetores p1 e p2, contendo os coeficientes de dois polinmios, as
funes conv e deconv retornam os coeficientes de um vetor dado pela multiplicao e
diviso entre p1 e p2, respectivamente. Veja o exemplo.

>> p1 = [2 1 3 4];
>> p2 = [1 -1 2];
>> p3 = conv(p1,p2)
p3 =
2 -1 6 3 2 8
>> p4 = deconv(p1,p2)
p4 =
2 3

39
8. Bibliografia

MATSUMOTO, E. Y. MATLAB 6 Fundamentos de Programao. 1. ed. So

Paulo: Editora rica Ltda., 2001.

Centro Brasileiro de Pesquisas Fsicas. Matlab Curso Introdutrio. Disponvel

em: <http://mesonpi.cat.cbpf.br/e2002/cursos/NotasAula/Tutorial_matlab.pdf>

Acesso em: 06 jul. 2005.

Apostila do II Workshop Internacional de Ensino de Engenharia. Mini-curso Uso do

Matlab no Ensino de Engenharia.

40

Você também pode gostar