Você está na página 1de 95

APOSTILA DE MATLAB

ENGENHARIA DE PRODUO PLENA


















M MM MATLAB ATLAB ATLAB ATLAB








Prof. Tiago Wirtti Prof. Tiago Wirtti Prof. Tiago Wirtti Prof. Tiago Wirtti
APOSTILA DE MATLAB

ENGENHARIA DE PRODUO PLENA

NDICE:
MDULO I
1. RECURSOS BSICOS DO MATLAB E AMBIENTE DO MATLAB
2. ARQUIVOS M DE COMANDOS
3. OPERANDO COM VETORES E MATRIZES
4. OPERADORES LGICOS E RELACIONAIS
5. CONTROLE DE FLUXO
MDULO II:
6. ARQUIVOS M DE FUNES
7. EXECUO DE FUNES COM EVAL E FEVAL
8. FUNES SOBRE CONJUNTOS, BITS E CONVERSO ENTRE BASES
9. TEMPO
10. LGEBRA MATRICIAL
MDULO III:
11. ANLISE DE DADOS
12. INTERPOLAO
13. POLINMIOS
14. OTIMIZAO
15. INTEGRAO E DIFERENCIAO
MDULO IV:
16. GRFICOS BIDIMENSIONAIS
17. GRFICOS TRIDIMENSIONAIS
18. INTERFACE GRFICA COM O USURIO (GUI)

APOSTILA DE MATLAB
1 11 1
ENGENHARIA DE PRODUO PLENA

1. 1. 1. 1. R RR RECURSOS ECURSOS ECURSOS ECURSOS B BB BSICOS DO SICOS DO SICOS DO SICOS DO M MM MATLAB E ATLAB E ATLAB E ATLAB E A AA AMBIENTE DO MBIENTE DO MBIENTE DO MBIENTE DO M MM MATLAB ATLAB ATLAB ATLAB

O primeiro passo com o MATLAB aprender as operaes bsicas, ou seja, as operaes
bsicas da matemtica. Em seguida vamos conhecer um pouco o espao de trabalho do MATLAB,
algumas variveis especiais, comentrios, nmeros complexos, aritmtica de ponto flutuante e
funes matemticas.

1.1 1.1 1.1 1.1 Matemtica Elementar Matemtica Elementar Matemtica Elementar Matemtica Elementar

Seja a expresso:

50 x 4 + 20 x 2 35 = 205.
No ambiente MATLAB a mesma expresso seria avaliada assim:

>> 50 * 4 + 20 * 2 - 35
ans =
205

Podemos definir variveis para conter os valores da expresso acima:

>> caixa_de_bombom = 50
caixa_de_bombom =
50
>> saco_de_bala = 20
saco_de_bala =
20
>> credito = 35
credito =
35

O mesmo resultado pode ser obtido assim:

>> total = caixa_de_bombom * 4 + saco_de_bala * 2 - credito
total =
205

Qual ser o preo dos produtos comprados?

>> media = (caixa_de_bombom * 4 + saco_de_bala * 2) / 6
media =
40

O quadro a seguir mostra as operaes aritmticas elementares:

Operao Operao Operao Operao Smbolo Smbolo Smbolo Smbolo Exempl Exempl Exempl Exemplo oo o
Adio + 3 + 44 3 + 44 3 + 44 3 + 44
Subtrao - 33.3 33.3 33.3 33.3 22.2 22.2 22.2 22.2
Multiplicao * 3.1415 * 2 3.1415 * 2 3.1415 * 2 3.1415 * 2
Diviso / ou \ 10 / 2 ou 12 10 / 2 ou 12 10 / 2 ou 12 10 / 2 ou 12 \ \\ \ 3 33 3
Potenciao ^ 3^4 3^4 3^4 3^4
APOSTILA DE MATLAB
2 22 2
ENGENHARIA DE PRODUO PLENA

1.2 1.2 1.2 1.2 Espao de Trabalho do Espao de Trabalho do Espao de Trabalho do Espao de Trabalho do M MM MATLAB ATLAB ATLAB ATLAB

Na figura 1 vemos a interface grfica do MATLAB.


A maioria do trabalho no MATLAB ser realizada na Janela de Comando (Command Window).
Nela os comando sero digitados. A janela Launch Pad uma maneira rpida de acessa a
documentao do MATLAB por Toolboxes. As Toolboxes so conjuntos de comandos que resolvem
problemas de reas especficas do conhecimento, tais como processamento de imagens, estatstica,
finanas, controle automtico e etc. A janela Histrico de Comando (Command History) possui uma
lista de todos os comandos que foram executados na janela de comandos. A rea de trabalho do
MATLAB configurvel pelo menu View.

O MATLAB guarda na memria do computador as variveis que foram utilizadas sendo possvel
ver as suas caractersticas. Veja o exemplo a seguir:

>> whos
Name Size Bytes Class
caixa_de_bombom 1x1 8 double array
credito 1x1 8 double array
media 1x1 8 double array
saco_de_bala 1x1 8 double array
total 1x1 8 double array
Grand total is 5 elements using 40 bytes



APOSTILA DE MATLAB
3 33 3
ENGENHARIA DE PRODUO PLENA
Para limpar a memria vasta utilizar o seguinte comando:

>> clear

Pode-se repetir um comando selecionando-o na janela de histrico de comandos e com o
boto direito do mouse escolhendo a opo evaluate.

1.3 1.3 1.3 1.3 V VV Variveis, Comentrios e Formas de Interromper um Comando ariveis, Comentrios e Formas de Interromper um Comando ariveis, Comentrios e Formas de Interromper um Comando ariveis, Comentrios e Formas de Interromper um Comando

As regras para criao de variveis so:
o As variveis distinguem maisculas de minsculas, ou seja, Custo, custo e CUSTO
representam variveis diferentes;
o As variveis podem conter at 31 caracteres;
o As variveis devem comear com uma letra, seguida de letras ou algarismos. Sinais de
pontuao no so permitidos;
o Palavras reservadas do MATLAB no so permitidas.

Lista de palavras reservadas
for end if while function return elseif case otherwise
switch continue else try catch global persistent break

Para comentar comandos basta utilizar o sinal %. Veja o exemplo abaixo:

>> produto = 4 * 5 % comentario

Algumas vezes ser necessrio interromper um comando que est demorando muito para
concluir. Para interromper basta pressionar CTRL + C CTRL + C CTRL + C CTRL + C.

1.4 1.4 1.4 1.4 Nmeros Complexos Nmeros Complexos Nmeros Complexos Nmeros Complexos

Com MATLAB muito fcil trabalhar com nmeros complexos. Veja os exemplos a seguir:

>> c1 = 1 - 2i % o i representa a parte imaginaria de c1
c1 =
1.0000 - 2.0000i
>> c2 = 3*(2-sqrt(-1)*3)
c2 =
6.0000 - 9.0000i
>> c3 = sqrt(-2)
c3 =
0 + 1.4142i
>> c4 = 6 + sin(.5)*j
c4 =
6.0000 + 0.4794i

As operaes aritmticas bsicas podem ser aplicadas livremente aos nmeros complexos.
Veja o exemplo a seguir:

>> c5 = c1 * c2 - c3 / c4 % aritmetica sobre numeros complexos
c5 =
-12.0187 -21.2342i
APOSTILA DE MATLAB
4 44 4
ENGENHARIA DE PRODUO PLENA

Obtendo a parte real e imaginria de um nmero complexo:

>> r_c5 = real(c5) % obtendo a parte real de c5
r_c5 =
-12.0187
>> i_c5 = imag(c5) % obtendo a parte imaginaria de c5
i_c5 =
-21.2342

1.5 1.5 1.5 1.5 Aritmtica de Ponto Flutuante Aritmtica de Ponto Flutuante Aritmtica de Ponto Flutuante Aritmtica de Ponto Flutuante

Os valores numricos no MATLAB so representados em aritmtica de preciso dupla utilizando
uma representao interna binria (base 2). Devido a limitaes do modelo de representao
numrica, nem todos os nmeros so representados exatamente. Alm disso, existem limites mximo
e mnimo na representao de valores pelo computador. Veja os exemplos a seguir:

>> format long % exibe os numeros com maior precisao
>> realmax % maior numero real que pode ser representado
ans =
1.797693134862316e+308
>> realmin % menor numero real que pode ser representado
ans =
2.225073858507201e-308

Observe a seguir que, se fizermos a conta na mo, os trs resultados sero o mesmo, ou seja,
zero. Entretanto, no MATLAB isso no ocorre devido a limitaes do modelo interno de representao
numrica.

>> 0.42 - 0.5 + 0.08
ans =
-1.387778780781446e-017
>> 0.08 - 0.5 + 0.42
ans =
0
>> 0.08 + 0.42 - 0.5
ans =
0

A avaliao de funes sofre o mesmo problema, ou seja, sen(0) = sen() = 0, mas no MATLAB:

ans =
0
>> sin(0)
ans =
0
>> sin(pi)
ans =
1.224646799147353e-016

Dica importante 1: Dica importante 1: Dica importante 1: Dica importante 1: Para saber como funciona um comando, utilize o help do MATLAB.
Experimente!

>> help format

APOSTILA DE MATLAB
5 55 5
ENGENHARIA DE PRODUO PLENA
Dica im Dica im Dica im Dica importante 2: portante 2: portante 2: portante 2: Abra o Help do MATLAB (menu Help > Matlab Help). No Help do MATLAB
escolha a aba Contents, expanda o ramo MATLAB > Reference > Matlab Function Reference e, na
janela da direita, escolha Elementary Math Functions. Agora vamos fazer alguns exerccios.

Dica importante 3: Dica importante 3: Dica importante 3: Dica importante 3: Para fazer log da sesso de trabalho armazenando todos os comando e os
resultados dos mesmos, utilize o comando diary.

Dica importante 4: Dica importante 4: Dica importante 4: Dica importante 4: A lista de todos os diretrios onde se encontram os arquivos do MATLAB
chamada de caminho de busca do MATLAB ou MATLABPATH. Para configurar o path do MATLAB do
escolha File > set Path. Para exibir o contedo de MATLABPATH execute o comando matlabpath matlabpath matlabpath matlabpath.

1.6 1.6 1.6 1.6 Exerccios: Exerccios: Exerccios: Exerccios:

Calcule:
a) x = (2
1/2
)/2
b) y = Arco sen(x)
c) y_graus = converta y em Graus
d) y = (3
2
+ 4
2
)
1/2

e) resto de 23/4
f) teste as funes round, floor, ceil e fix para o nmero 2.6
g) Veja o contedo da memria (use whos)
h) Limpe o contedo da memoria (use clear)
i) Ache a parte real e imaginria da soma dos nmeros c1 = 1.08 2.067i e c2 = 0.99 + 3.4j
j) Ache o valor absoluto (abs) de c1 + c2.



APOSTILA DE MATLAB
6 66 6
ENGENHARIA DE PRODUO PLENA

2. 2. 2. 2. A AA ARQUIVOS RQUIVOS RQUIVOS RQUIVOS M MM M DE DE DE DE C CC COMANDOS OMANDOS OMANDOS OMANDOS

2.1. 2.1. 2.1. 2.1. Como Utilzar Arquivos M Como Utilzar Arquivos M Como Utilzar Arquivos M Como Utilzar Arquivos M

Em algumas situaes mais conveniente ter um arquivo de comandos do que ficar digitando
cada varivel e seu respectivo valor na janela de comandos do MATLAB. Veja o exemplo a seguir:

% lista de material escolar #1
% quantidade de cada item
caderno = 3;
caneta = 3;
lapiseira = 1;
% custo de cada item
c_caderno = 20.0;
c_caneta = 2.5;
c_lapiseira = 3.5;
% total de itens
itens = caderno + caneta + lapiseira
% custo total
custo = c_caderno * caderno + c_caneta * caneta + c_lapiseira * lapiseira
% custo medio
custo_medio = custo / itens

Repare que o contedo do arquivo idntico ao que seria digitado na linha de comando do
MATLAB. O ponto e virgula (;) no final da linha significa que o comando no ter o resultado exibido na
sada padro.

Exerccio:
a) Defina um diretrio qualquer no seu computador como o diretrio de trabalho
incluindo-o no MATLABPATH (use o menu File > set Path).
b) Verifique se o MATLABPATH foi configurado corretamente.

>> matlabpath

c) Crie um arquivo Exemplo2_1.m contendo o exemplo anterior.
d) Execute o arquivo:

>> Exemplo2_1

Observe que o resultado no estava formatado de forma adequada. Isso pode ser corrigido
com o comando format. interessante tambm que o programador fornea os dados de entrada. Isso
ser resolvido com o comando input.
APOSTILA DE MATLAB
7 77 7
ENGENHARIA DE PRODUO PLENA

Veja o exemplo adaptado:

% lista de material escolar #1
% quantidade de cada item
format bank % exibe os nmeros com duas casas decimais
caderno = input('Quantidade de cadernos: ');
caneta = input('Quantidade de canetas: ');
lapiseira = input('Quantidade de lapiseiras: ');
% custo de cada item
c_caderno = 20.0
c_caneta = 2.5
c_lapiseira = 3.5
% total de itens
itens = caderno + caneta + lapiseira
% custo total
custo = c_caderno * caderno + c_caneta * caneta + c_lapiseira * lapiseira
% custo medio
custo_medio = custo / itens

2.2. 2.2. 2.2. 2.2. Exerccios Exerccios Exerccios Exerccios
a) Teste no exemplo anterior (Exemplo2_2.m) o comando echo. Use echo on no incio do
arquivo e echo off no final. Execute e veja o resultado.
b) Pesquise e utilize o comando disp.
APOSTILA DE MATLAB
8 88 8
ENGENHARIA DE PRODUO PLENA

3. 3. 3. 3. O OO OPERAES COM PERAES COM PERAES COM PERAES COM V VV VETORES E ETORES E ETORES E ETORES E M MM MATRIZES ATRIZES ATRIZES ATRIZES

3.1 3.1 3.1 3.1 Vetores Simples Vetores Simples Vetores Simples Vetores Simples

Uma caracterstica marcante do MATLAB a facilidade na manipulao de vetores e matrizes.
Veja como exemplo a avaliao da seguinte funo:

y = sen(x), 0 x

No computador, o domnio de x discreto e pode ser representado como um vetor. Como
esse vetor pode ser escrito no MATLAB?

>> x = [0 .1*pi .2*pi .3*pi .4*pi .5*pi .6*pi .7*pi .8*pi .9*pi pi]
x =
Columns 1 through 4
0 0.31416 0.62832 0.94248
Columns 5 through 8
1.2566 1.5708 1.885 2.1991
Columns 9 through 11
2.5133 2.8274 3.1416

3.2 3.2 3.2 3.2 Vetores Simples Vetores Simples Vetores Simples Vetores Simples

Observe que x um vetor linha, ou seja, possui uma linha e 11 colunas. Como obter o sexto
elemento de x? Veja a seguir:

>> x(6)
ans =
1.5708

Veja que em MATLAB as posies do vetor so numeradas a partir da posio 1 e no de zero
como na maioria das linguagens de programao. Para obter um intervalo de valores, de 2 a 7, por
exemplo:

>> x(2:7)
ans =
Columns 1 through 4
0.31416 0.62832 0.94248 1.2566
Columns 5 through 6
1.5708 1.885

Para obter os valores de x da posio 8 at o final faz-se:

>> x(8:end)
ans =
2.1991 2.5133 2.8274 3.1416
E para obter o segundo, o quarto e o oitavo elementos, nessa ordem?

>> x([2 4 8])
ans =
0.31416 0.94248 2.1991

APOSTILA DE MATLAB
9 99 9
ENGENHARIA DE PRODUO PLENA

3.3 3.3 3.3 3.3 Construo de Vetores Construo de Vetores Construo de Vetores Construo de Vetores

Como fazer no caso de o vetor da seo 3.1 ter 100 elementos, ao invs de 11 elementos? O
mesmo vetor pode ser gerado assim:

>> x = (0:0.1:1)*pi
x =
Columns 1 through 4
0 0.31416 0.62832 0.94248
Columns 5 through 8
1.2566 1.5708 1.885 2.1991
Columns 9 through 11
2.5133 2.8274 3.1416

De outro modo:

>> x = linspace(0,pi,11)
x =
Columns 1 through 4
0 0.31416 0.62832 0.94248
Columns 5 through 8
1.2566 1.5708 1.885 2.1991
Columns 9 through 11
2.5133 2.8274 3.1416

A sintaxe do comando linspace :

linspace(primeiro_valor, ultimo_valor, numero_de_valores)

E para o caso de ser necessria uma seqncia logartmica? Nesse caso pode-se utilizar o
comando logspace. Veja o exemplo a seguir:

>> l = logspace(0,2,11)
l =
Columns 1 through 4
1 1.5849 2.5119 3.9811
Columns 5 through 8
6.3096 10 15.849 25.119
Columns 9 through 11
39.811 63.096 100

A sintaxe do comando logspace :

logspace(primeiro_expoente, ultimo_expoente, numero_de_valores)

E para gerar um vetor coluna, ou seja, vrias linhas e apenas uma coluna? Veja o exemplo a
seguir:

>> c = (1:0.5:5)'
c =
1
1.5
2
2.5
3
APOSTILA DE MATLAB
10 10 10 10
ENGENHARIA DE PRODUO PLENA
3.5
4
4.5
5

O operador aspas simples () representa a transposio de um vetor. Para um vetor de
nmeros complexos temos:

>> a = 1:5
a =
1 2 3 4 5
>> a = a + a*i
a =
Columns 1 through 3
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i
Columns 4 through 5
4.0000 + 4.0000i 5.0000 + 5.0000i

A transposta do vetor a ser:

>> a'
ans =
1.0000 - 1.0000i
2.0000 - 2.0000i
3.0000 - 3.0000i
4.0000 - 4.0000i
5.0000 - 5.0000i

Repare que o operador () retorna a transposio do complexo conjugado, ou seja, troca o
sinal da parte imaginria. Para fazer a transposio de um vetor de nmeros complexos sem alterar o
sinal da parte imaginria usa-se o operador (.), conforme mostrado a seguir:

>> b = a.'
b =
1.0000 + 1.0000i
2.0000 + 2.0000i
3.0000 + 3.0000i
4.0000 + 4.0000i
5.0000 + 5.0000i

Outra maneira de gerar vetores coluna utilizar o separador o separador de colunas, ou seja,
o sinal de ponto e vrgula (;). Veja o exemplo a seguir:

>> d = [1 2; 3 4; 5 6]
d =
1 2
3 4
5 6
Tambm vlido fazer assim:

a =
1 2
>> b = [3 4]
b =
3 4
>> c = [5 6]
c =
5 6
APOSTILA DE MATLAB
11 11 11 11
ENGENHARIA DE PRODUO PLENA
>> d = [a; b; c]
d =
1 2
3 4
5 6

3.4 3.4 3.4 3.4 Matemtica Vetor x Escalar e Vetor x Vetor Matemtica Vetor x Escalar e Vetor x Vetor Matemtica Vetor x Escalar e Vetor x Vetor Matemtica Vetor x Escalar e Vetor x Vetor

A multiplicao de um vetor por um escalar, aproveitando o vetor d definido na seo anterior,
pode ser realizada assim:

>> s = 2 + d
s =
3 4
5 6
7 8

Observe que o valor 2 foi adicionado a todos os elementos do vetor.

Um exemplo envolvendo outras operaes bsicas:

>> r = 2 * s - s / 3
r =
5.0000 6.6667
8.3333 10.0000
11.6667 13.3333

Agora algumas operaes entre vetores. Lembrando o bvio: os vetores devem ser
compatveis. Dadas duas matrizes g e h compatveis para a soma e a subtrao, temos:

>> g = [1 3 5 7; 9 11 13 15; 17 19 21 23]
g =
1 3 5 7
9 11 13 15
17 19 21 23

>> h = [10 8 6 4; 2 0 -2 -4; 10 12 14 16]
h =
10 8 6 4
2 0 -2 -4
10 12 14 16

A soma:

>> s = g + h
s =
11 11 11 11
11 11 11 11
27 31 35 39

A subtrao:

>> d = g - h
d =
-9 -5 -1 3
APOSTILA DE MATLAB
12 12 12 12
ENGENHARIA DE PRODUO PLENA
7 11 15 19
7 7 7 7

A multiplicao elemento a elemento realizada pelo operador (.*), conforme exemplificado a
seguir:

>> m = d.*h

m =

-90 -40 -6 12
14 0 -30 -76
70 84 98 112

Assim como a diviso elemento a elemento:

>> q = g./h % diferente de g.\h = h./g
q =
0.1000 0.3750 0.8333 1.7500
4.5000 Inf -6.5000 -3.7500
1.7000 1.5833 1.5000 1.4375

Repare que g.\h == h./g, ou seja:

>> g./h == h.\g
ans =
1 1 1 1
1 1 1 1
1 1 1 1

Observe que a diviso de matrizes uma operao totalmente diferente da diviso elemento a
elemento mostrada anteriormente. Ou seja,

g / h g * h
-1
g \ h h * g
-1


Discutiremos um pouco mais de lgebra matricial em um captulo parte.

Como elevar todos os elementos de uma matriz ao quadrado? Veja o exemplo a seguir:

>> p = g.^2
p =
1 9 25 49
81 121 169 225
289 361 441 529

Mas a seguinte tentativa leva a um erro:

>> p = g^2
??? Error using ==> ^
Matrix must be square.

Pois essa operao equivale a multiplicar q por q. Para isso as dimenses tem que ser
compatveis!
APOSTILA DE MATLAB
13 13 13 13
ENGENHARIA DE PRODUO PLENA

Mas possvel elevar 2, por exemplo, a uma matriz qualquer:

>> p = 2.^g
p =
2 8 32 128
512 2048 8192 32768
131072 524288 2097152 8388608

3.5 3.5 3.5 3.5 Matrizes Padro Matrizes Padro Matrizes Padro Matrizes Padro

No MATLAB h comandos para criar algumas matrizes que so muito utilizadas. Por exemplo,
para criar uma matriz repleta de uns (1s), pode-se utilizar:

>> u = ones(3)
u =
1 1 1
1 1 1
1 1 1

Para criar uma matriz de zeros com dimenso 3 x 2:

>> z = zeros(2, 3)
z =
0 0 0
0 0 0

Igualmente pode-se utilizar, por exemplo, ones(2, 3) para criar uma matriz 2 x 3 repleta de
uns e zeros(4) para criar uma matriz 4x4 repleta de zeros.

Para saber as dimenses de uma matriz, pode-se utilizar o comando:

>> size(z)
ans =
3 2

Pode-se tambm obter facilmente uma matriz identidade:

>> i = eye(3)
i =
1 0 0
0 1 0
0 0 1

>> i = eye(2, 4)
i =
1 0 0 0
0 1 0 0

>> i = eye(4, 2)
i =
1 0
0 1
0 0
0 0
APOSTILA DE MATLAB
14 14 14 14
ENGENHARIA DE PRODUO PLENA

Pode-se obter tambm matrizes de nmeros aleatrios:

>> s = rand(1,4)
s =
0.9501 0.2311 0.6068 0.4860

A funo diag pode ser usada para criar matrizes diagonais conforme mostrado a seguir:

>> a = 1:4
a =
1 2 3 4

>> d = diag(a)
d =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4

>> d = diag(a, 1)
d =
0 1 0 0 0
0 0 2 0 0
0 0 0 3 0
0 0 0 0 4
0 0 0 0 0

>> d = diag(a, -2)
d =
0 0 0 0 0 0
0 0 0 0 0 0
1 0 0 0 0 0
0 2 0 0 0 0
0 0 3 0 0 0
0 0 0 4 0 0


3.6 3.6 3.6 3.6 Manipulao de Vetores e Matrizes Manipulao de Vetores e Matrizes Manipulao de Vetores e Matrizes Manipulao de Vetores e Matrizes

Seja a matriz A dada por:

>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9

Para atribuir o valor 10 ao elemento da terceira linha e terceira coluna, por exemplo, faz-se:

>> A(3, 3) = 10
A =
1 2 3
4 5 6
7 8 10


APOSTILA DE MATLAB
15 15 15 15
ENGENHARIA DE PRODUO PLENA
E se executarmos o comando A(2 , 6) = 20, o que ocorre? Veja a execuo a seguir:

>> A(2, 6) = 2
A =
1 2 3 0 0 0
4 5 6 0 0 20
7 8 10 0 0 0

Repare que mais trs colunas foram acrescentadas matriz e preenchidas com zeros, exceto a
posio (2, 6), que foi preenchida com 20.

Recuperando o vetor A, obtemos:

>> A = [1 2 3; 4 5 6; 7 8 9]

Vamos montar um vetor B que contm todas as linhas de A em ordem decrescente e as
colunas de b com a ordem mantida. H trs maneiras de fazer isso:

>> B = A(3:-1:1, 1:3)
B =
7 8 9
4 5 6
1 2 3

>> B = A(end:-1:1, 1:3)
B =
7 8 9
4 5 6
1 2 3

>> B = A(3:-1:1, :)
B =
7 8 9
4 5 6
1 2 3

Agora vejamos um pouco de ordenao de vetores e matrizes. Dado o vetor aleatrio x:

>> x = randperm(10)
x =
7 1 3 6 2 5 9 4 8 10

A ordenao crescente de x obtida assim:

>> xc = sort(x)
xc =
1 2 3 4 5 6 7 8 9 10

Pode-se tambm obter os ndices dos elementos ordenados.

>> [xc id] = sort(x)
xc =
1 2 3 4 5 6 7 8 9 10
id =
2 5 3 8 6 4 1 9 7 10

APOSTILA DE MATLAB
16 16 16 16
ENGENHARIA DE PRODUO PLENA
Como funciona a ordenao de matrizes? Veja o exemplo a seguir:

>> A = [randperm(6); randperm(6); randperm(6); randperm(6)]
A =
5 2 1 4 6 3
2 4 6 3 5 1
4 5 3 2 6 1
3 1 5 2 4 6

>> [Ac, id] = sort(A)
Ac =
2 1 1 2 4 1
3 2 3 2 5 1
4 4 5 3 6 3
5 5 6 4 6 6
id =
2 4 1 3 4 2
4 1 3 4 2 3
3 2 4 2 1 1
1 3 2 1 3 4

A matriz A foi ordenada por linhas! Tambm possvel forar a ordenao por colunas
(segunda dimenso):

>> Ac = sort(A, 2)
Ac =
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6

Analogamente, a ordenao por linhas pode ser obtida assim:

>> Ac = sort(A, 1)
Ac =
2 1 1 2 4 1
3 2 3 2 5 1
4 4 5 3 6 3
5 5 6 4 6 6

A busca de elementos em vetor ou em matriz possvel com o comando find. Veja os
exemplos a seguir:

>> x = -3:3
x =
-3 -2 -1 0 1 2 3

>> k = find(abs(x)>1)
k =
1 2 6 7

O comando acima retorna o vetor K contendo todos os ndices de x que satisfazem condio
abs(x) > 1.

Para a matriz A, find retorna os vetores i e j contendo, respectivamente, os nmeros da linha
e da coluna dos elementos de A que satisfazem condio A>4:
APOSTILA DE MATLAB
17 17 17 17
ENGENHARIA DE PRODUO PLENA

>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9

>> [i, j] = find(A>4)
i =
3
2
3
2
3
j =
1
2
2
3
3

Para obter o valor mximo ou mnimo de um vetor procede-se assim:

>> v = rand(1,5)
v =
0.4784 0.5548 0.1210 0.4508 0.7159

>> max_v = max(v)
max_v =
0.7159

>> min_v = min(v)
min_v =
0.1210

Para obter o mximo ou o mnimo de uma matriz, faz-se:

>> M = rand(4, 6)
M =
0.6208 0.5692 0.9316 0.6273 0.6552 0.5947
0.7313 0.6318 0.3352 0.6991 0.8376 0.5657
0.1939 0.2344 0.6555 0.3972 0.3716 0.7165
0.9048 0.5488 0.3919 0.4136 0.4253 0.5113

>> [mx, id] = max(M)
mx =
0.9048 0.6318 0.9316 0.6991 0.8376 0.7165
id =
4 2 1 2 2 3

>> [mn, id] = min(M)
mn =
0.1939 0.2344 0.3352 0.3972 0.3716 0.5113
id =
3 3 2 3 3 4

No exemplo acima se obteve, respectivamente, o maior e o menor valor de cada coluna,
acompanhados de seus ndices. Para obter o valor mximo ou mnimo pode-se fazer:

APOSTILA DE MATLAB
18 18 18 18
ENGENHARIA DE PRODUO PLENA
>> max_v = max(mx)
max_v =
0.9048

>> min_v = min(mn)
min_v =
0.1939


3.7 3.7 3.7 3.7 Funes para Manipular Vetores e Matrizes Funes para Manipular Vetores e Matrizes Funes para Manipular Vetores e Matrizes Funes para Manipular Vetores e Matrizes

A seguir algumas funes para manipulao de vetores e matrizes:

>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9

>> flipud(A) % gira a matriz de cima para baixo
ans =
7 8 9
4 5 6
1 2 3

>> fliplr(A) % gira a matriz da esquerda para a direita
ans =
3 2 1
6 5 4
9 8 7

>> rot90(A) % gira a matriz 90 graus no sentido anti-horario
ans =
3 6 9
2 5 8
1 4 7

>> rot90(A,2) % gira a matriz 2*90 graus no sentido anti-horario
ans =
9 8 7
6 5 4
3 2 1

>> triu(A) % extrai a parte triangular superior
ans =
1 2 3
0 5 6
0 0 9

>> tril(A) % extrai a parte triangular inferior
ans =
1 0 0
4 5 0
7 8 9

>> tril(A) - diag(diag(A)) % parte triangular inferior sem diagonal
ans =
0 0 0
4 0 0
7 8 0
APOSTILA DE MATLAB
19 19 19 19
ENGENHARIA DE PRODUO PLENA

4. 4. 4. 4. O OO OPERADORES PERADORES PERADORES PERADORES R RR RELACIONAIS E ELACIONAIS E ELACIONAIS E ELACIONAIS E L LL LGICOS GICOS GICOS GICOS

4.1. 4.1. 4.1. 4.1. Operadores R Operadores R Operadores R Operadores Relacionais elacionais elacionais elacionais

Os operadores relacionais no MATLAB incluem todos os operadores lgicos habituais:

Operador Operador Operador Operador Descrio Descrio Descrio Descrio
< Menor que
<= Menor ou igual a
> Maior que
>= Maior ou igual a
== Igual (no confundir com =)
~= Diferente de

Exemplo: Dois vetores, A e B, so criados. No primeiro experimento vf contem 0 quando
elemento de A correspondente menor ou igual a 4 e contem 1 quando o elemento correspondente
maior do que 4. No segundo experimento, vf s contm zeros pois, para elementos de mesma posio
em A e B, no h igualdade.

>> A = 1:9, B = 9 - A
A =
1 2 3 4 5 6 7 8 9
B =
8 7 6 5 4 3 2 1 0

>> vf = A>4 % elementos de A maiores que 4
vf =
0 0 0 0 1 1 1 1 1

>> vf = (A==B)
vf =
0 0 0 0 0 0 0 0 0

4.2. 4.2. 4.2. 4.2. O OO OPERADORES PERADORES PERADORES PERADORES L LL LGICOS GICOS GICOS GICOS

Os operadores lgicos so:

Operador Lgico Operador Lgico Operador Lgico Operador Lgico Descrio Descrio Descrio Descrio
& E
| OU
~ ~~ ~ NO

Exemplo: Negao de um resultado.

>> A = 1:9, B = 9 A

APOSTILA DE MATLAB
20 20 20 20
ENGENHARIA DE PRODUO PLENA
>> vf = A>4 % elementos de A maiores que 4
vf =
0 0 0 0 1 1 1 1 1

>> vf = ~(A>4)
vf =
1 1 1 1 0 0 0 0 0


Exemplo: Gerao de um sinal descontnuo. Digite os comando a seguir e observe o resultado
(grfico abaixo).

>> x = linspace(0, 10, 100); % gera dados
>> y = sin(x); % calcula o seno
>> z = (y>=0).*y; % atribui zero aos valores negativos de sen(x)
>> z = z + 0.5*(y<0); % quando sen(x) for negativo acrescenta 1/2
>> z = (x<=8).*z; % atribui zero aos valores maiores que 8
>> plot(x,z)
>> xlabel('x'), ylabel('z=f(x)'), title('Um sinal descontinuo')















APOSTILA DE MATLAB
21 21 21 21
ENGENHARIA DE PRODUO PLENA

4.3. 4.3. 4.3. 4.3. P PP PRECEDNCIA DE RECEDNCIA DE RECEDNCIA DE RECEDNCIA DE O OO OPERADORES PERADORES PERADORES PERADORES

extremamente importante saber a precedncia dos operadores em MATLAB. Na tabela a seguir
mostra-se a ordem de execuo dos mesmos do mais forte para o mais fraco.

Operador Operador Operador Operador Nvel de precedncia Nvel de precedncia Nvel de precedncia Nvel de precedncia
Parnteses () Maior
Transposio (.), transposio conjugada (), potncia (.^),
potncia de matriz (^)

Sinal positivo(+), sinal negativo (-), negao (~)
Multiplicao (.*), multiplicao matricial (*),diviso direita
(./), diviso esquerda (.\), diviso matricial direita (/),
diviso matricial esquerda (\)

Adio (+), subtrao (-)
Dois pontos (:)
Menor que (<), menor ou igual a (<=), maior que (>), maior
ou igual a (>=), igual a (==), diferente de (~=)

E lgico (&)
OU lgico (|) Menor


4.4 4.4 4.4 4.4 Exerccios Exerccios Exerccios Exerccios

a) Pesquise no Help do MATLAB os comandos xor, any e all. Faa um teste com cada um
deles.
b) Pesquisa as funes isXXX. Existe alguma que verifica se um elemento numrico?



APOSTILA DE MATLAB
22 22 22 22
ENGENHARIA DE PRODUO PLENA
5. 5. 5. 5. C CC CONTROLE DE ONTROLE DE ONTROLE DE ONTROLE DE F FF FLUXO LUXO LUXO LUXO

O MATLAB permite a criao de cinco estruturas de tomada de deciso ou controle de fluxo:
laos for, laos while e estruturas if-else-end e switch-case, e blocos try-catch.

5.1 5.1 5.1 5.1 Laos for Laos for Laos for Laos for

A sintaxe do comando for :

for x = vetor
comandos ...
end

Exemplo 1 - Veja um exemplo simples:

>> for n = 1:10
x(n) = sin(n*pi/10);
end

>> x % o resultado
x =
Columns 1 through 6
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 7 through 10
0.8090 0.5878 0.3090 0.0000

Exemplo 2 - Fazendo um lao com decremento:

>> for n = 10:-1:1 % loop com decremento de n
x(n) = sin(n*pi/10);
end

>> x
x =
Columns 1 through 6
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 7 through 10
0.8090 0.5878 0.3090 0.0000

Exemplo 3 - Iterando por um vetor representado por uma varivel:

>> vetor = randperm(10)
vetor =
8 2 10 7 4 3 6 9 5 1
>> for n = vetor
x(n) = sin(n*pi/10);
end

>> x
x =
Columns 1 through 6
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511

Columns 7 through 10
0.8090 0.5878 0.3090 0.0000

APOSTILA DE MATLAB
23 23 23 23
ENGENHARIA DE PRODUO PLENA

Exemplo 4 - Gerando uma matriz:

>> for n = 1:5
for m = 5:-1:1
A(n,m) = n^2 + m^2;
end
disp(n)
end
1
2
3
4
5

>> A
A =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50

Exemplo 5 O mesmo resultado do exemplo 1 pode ser obtido pelos seguintes comandos:

>> n = 1:10;
>> x = sin(n*pi/10)

x =
Columns 1 through 6
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 7 through 10
0.8090 0.5878 0.3090 0.0000

Exemplo 6 O mesmo resultado do exemplo 4 pode ser obtido da seguinte forma:

>> n = 1:5;
>> m = 1:5;
>> [nn, mm] = meshgrid(n,m);
>> A = nn.^2 + mm.^2
A =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50

Como regra geral, os comandos vetorizados (exemplos 5 e 6) so mais eficientes do que os
laos exibidos nos exemplos anteriores.

5.2 5.2 5.2 5.2 Laos while Laos while Laos while Laos while

A sintaxe do comando while a seguinte:

while (expresso)
comandos ...
end
APOSTILA DE MATLAB
24 24 24 24
ENGENHARIA DE PRODUO PLENA

Vejamos um exemplo que calcula o menor nmero que pode ser adicionado a 1 tal que o
resultado seja maior que 1 usando preciso finita. Esse nmero representado no MATLAB pela
varivel eps (minscula). O nosso eps ser maisculo (EPS).

>> num = 0; EPS = 1;
>> while (1+EPS)>1
EPS = EPS/2; % divide sucessivamente por 2 at que EPS seja
insignificante
num = num + 1;
end
>> num % nmero de iteraes
num =
53
>> EPS = 2*EPS % multiplica por 2, pois EPS no representvel ...
EPS =
2.2204e-016

O comando while apresenta as mesmas restries de desempenho que o comando for.

5.3 5.3 5.3 5.3 Estruturas if Estruturas if Estruturas if Estruturas if- -- -else else else else- -- -end end end end

A sintaxe do comando if-else-end mais simples :

if expresso
comandos ...
end

Caso haja uma condio negativa, pode-se utilizar:

if expresso
comandos ...
else
outros comandos ...
end

Se houver mais de duas alternativas, pode-se utilizar a sintaxe:

if expresso1
comandos ...
elseif expresso2
outros comandos (se a expresso2 for verdadeira)...
elseif expresso3
outros comandos (se a expresso3 for verdadeira)
elseif expresso4
.
.
.
else
caso nenhuma expresso anterior seja verdadeira
end




APOSTILA DE MATLAB
25 25 25 25
ENGENHARIA DE PRODUO PLENA

Como exemplo, o clculo do EPS utilizando while ao invs do for:

>> EPS = 1;
>> for num = 1:1000
EPS = EPS/2;
if (1+EPS)<=1
EPS = EPS*2
break
end
end
EPS =
2.2204e-016
>> num
num =
53

APOSTILA DE MATLAB
26 26 26 26
ENGENHARIA DE PRODUO PLENA

6. 6. 6. 6. A AA ARQUIVOS RQUIVOS RQUIVOS RQUIVOS M MM M DE DE DE DE F FF FUNES UNES UNES UNES

A criao de arquivos M de funes no MATLAB uma tarefa simples e intuitiva, ou seja, segue
as regras que, de maneira geral, esto presentes em muitas linguagens de programao. Vamos a um
exemplo simples:

6.1 6.1 6.1 6.1 Primeiro Exemplo Primeiro Exemplo Primeiro Exemplo Primeiro Exemplo

Exemplo 1 Criar uma funo que faa o clculo do EPS utilizando um dos mtodos
apresentados no captulo anterior:
Passo 1: No menu do MATLAB escolha a opo File > New > M-File.
Passo 2: Digite o cdigo a seguir:

function EPS = calcula_EPS(limite)
EPS = 1;
for num = 1:limite
EPS = EPS/2;
if (1+EPS)<=1
EPS = EPS*2;
break
end
end

Passo 3: Salve o arquivo com o nome calcula_EPS.m calcula_EPS.m calcula_EPS.m calcula_EPS.m. O nome da funo deve ser idntico ao
nome do arquivo.
Passo 4: Na janela de comandos do MATLAB experimente:

>> x = calcula_EPS(100)
x =
2.2204e-016

Algumas consideraes:
1- O arquivo sempre comea com function;
2- EPS o nome da varivel de retorno;
3- O sinal de atribuio indica que, ao final da execuo, a varivel EPS receber valor
calculado pela funo calcula_EPS;
4- O nome da funo calcula_EPS;
5- A funo recebe o argumento limite;
6- Os comandos do MATLAB funcionam dentro do arquivo M da mesma forma que na linha de
comando.

6.2 6.2 6.2 6.2 Segundo Exemplo Segundo Exemplo Segundo Exemplo Segundo Exemplo

Exemplo 2 Criar uma funo que recebe como parmetro os coeficientes de uma equao de
segundo grau e retorna a soluo da mesma:
Passo 1: No menu do MATLAB escolha a opo File > New > M-File.
Passo 2: Digite o cdigo a seguir:

APOSTILA DE MATLAB
27 27 27 27
ENGENHARIA DE PRODUO PLENA
function [x1, x2] = avalia_eq_2g(a, b, c)
if nargin ~= 3
error('sao necessarios 3 argumentos numericos')
end
delta = b*b - 4 * a * c;
display(delta)
x1 = (-b + sqrt(delta))/2*a;
x2 = (-b - sqrt(delta))/2*a;

Passo 3: Salve o arquivo com o nome avalia avalia avalia avalia_ __ _eq_2g eq_2g eq_2g eq_2g.m .m .m .m. O nome da funo deve ser idntico ao
nome do arquivo.

Algumas consideraes:
1- H nesta funo duas variveis de retorno, x1 e x2;
2- A varivel nargin contm o nmero de parmetros de entrada;
3- A funo error exibe uma mensagem caso nargin seja diferente de 3;
4- A funo display exibe o valor de delta.

6.3 6.3 6.3 6.3 Terceiro Exemplo Terceiro Exemplo Terceiro Exemplo Terceiro Exemplo

Exemplo 3 A funo calcula_centroide_Paralelepipedo recebe dois vetores contendo
(cada um) as coordenadas espaciais x, y e z dos vrtices diametralmente opostos de um
paraleleppedo e retorna as coordenadas do centride do mesmo. H uma validao para o nmero de
parmetros e uma validao para o caso de os vrtices fornecidos no formarem uma diagonal do
paraleleppedo.

Usando o passo a passo do exemplo 2, crie e execute esta funo na janela de comandos do
MATLAB:

function [xc, yc, zc] = calcula_centroide_Paralelepipedo(v1, v2)
if (nargin ~= 2)
error('Parametros necessarios: v1 (vertice qualquer)')
error(' v2 (vertice diagonal oposto)')
end
if (v1(1) - v2(1) == 0 | v1(2) - v2(2) == 0 | v1(3) - v2(3) == 0)
error('Parametros necessarios: v1 e v2 nao formam diagonal')
end
xmin = min( v1(1), v2(1)); % obtem x minimo
xmax = max( v1(1), v2(1)); % obtem x maximo
xc = xmin + (xmax - xmin)/2; % calcula x do centroide

ymin = min( v1(2), v2(2)); % obtem x minimo
ymax = max( v1(2), v2(2)); % obtem x maximo
yc = ymin + (ymax - ymin)/2; % calcula x do centroide

zmin = min( v1(3), v2(3)); % obtem x minimo
zmax = max( v1(3), v2(3)); % obtem x maximo
zc = zmin + (zmax - zmin)/2; % calcula x do centroide




APOSTILA DE MATLAB
28 28 28 28
ENGENHARIA DE PRODUO PLENA
7. 7. 7. 7. E EE EXECU XECU XECU XECUO DE O DE O DE O DE F FF FUNES COM UNES COM UNES COM UNES COM EVAL EVAL EVAL EVAL E E E E FEVAL FEVAL FEVAL FEVAL

Em algumas situaes, para a execuo de uma funo, a o nome e parmetros da funo so
passados a uma outra funo. Isso denominado avaliao de uma funo. Em MATLAB h duas
maneiras de fazer a avaliao de funes: usando a funo eval ou a funo feval. A
diferena entre as duas que eval chama todo o interpretador de comandos do MATLAB para
executar a string, enquanto feval avalia apenas a funo. Consequentemente, feval muito
mais eficiente, principalmente se a funo precisar ser executada vrias vezes como parte de
algum processo iterativo.

7.1 7.1 7.1 7.1 Primeiro Primeiro Primeiro Primeiro Exemplo Exemplo Exemplo Exemplo Avaliao padro Avaliao padro Avaliao padro Avaliao padro (sem eval ou feval) (sem eval ou feval) (sem eval ou feval) (sem eval ou feval)

Seja a funo definida como:

>> minhafun = 100 * (y - x^2)^2 + (1 - x)^2; % avaliao teclando <ENTER>

>> minhafun
minhafun =
31.4000

7.2 7.2 7.2 7.2 Segundo Exemplo Segundo Exemplo Segundo Exemplo Segundo Exemplo Avaliao Avaliao Avaliao Avaliao com eval com eval com eval com eval

Seja a funo minhafun definida como:

>> minhafun = '100 * (y - x^2)^2 + (1 - x)^2';

Definindo os parmetros x e y:

>> x = 1.2;
>> y = 2;

Verificando o contedo de minhafun:

>> minhafun
minhafun =
100 * (y - x^2)^2 + (1 - x)^2

Finalmente a avaliao:

>> a = eval(minhafun)
a =
31.4000

APOSTILA DE MATLAB
29 29 29 29
ENGENHARIA DE PRODUO PLENA

7.3 7.3 7.3 7.3 Terceiro Exemplo Terceiro Exemplo Terceiro Exemplo Terceiro Exemplo Avaliao com Avaliao com Avaliao com Avaliao com f ff feval eval eval eval

Para usar feval primeiro necessrio gerar uma verso inline de minhafun. Deve-se fazer
isso, pois feval precisa receber como parmetro a lista de parmetros de minhafun. O passo
a passo mostrado a seguir:


Define a funo:

>> minhafun = '100 * (y - x^2)^2 + (1 - x)^2';

Converte para funo in-line:

>> minhafuni = inline(minhafun, 'x', 'y') % converte para funcao in-line
minhafuni =
Inline function:
minhafuni(x,y) = 100 * (y - x^2)^2 + (1 - x)^2

Avalia funo com parmetros:

>> a = feval(minhafuni, x, y)
a =
31.4000

>> b = feval(minhafuni, -1.2, 0)
b =
212.2000

Quais so os parmetros da funo?

>> argnames(minhafuni)
ans =
'x'
'y'

APOSTILA DE MATLAB
30 30 30 30
ENGENHARIA DE PRODUO PLENA


8. 8. 8. 8. F FF FUNES SOBRE UNES SOBRE UNES SOBRE UNES SOBRE C CC CONJUNTOS ONJUNTOS ONJUNTOS ONJUNTOS, ,, , B BB BITS E ITS E ITS E ITS E C CC CONVERSO ENTRE ONVERSO ENTRE ONVERSO ENTRE ONVERSO ENTRE B BB BASES ASES ASES ASES

8.1 8.1 8.1 8.1 Fun Fun Fun Funes es es es sobre Conjuntos sobre Conjuntos sobre Conjuntos sobre Conjuntos

Frequentemente necessrio comparar dois conjuntos. No MATLAB h a funo isequal, que
desempenha esta tarefa para vetores, variveis e estruturas multidimensionais.

Para demonstrar o teste a igualdade entre vetores, veja o exemplo a seguir:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Comparando vetores e variveis com isequal:

>> a = rand(2,5); % vetor aleatrio de distribuio uniforme

>> b = randn(2,5); % vetor aleatrio de distribuio normal

>> isequal(a,b) % a e b NO so iguais
ans =
0

>> isequal(a,a) % a e b so iguais
ans =
1

Para strings tambm funciona:

>> a = 'testando com strings';

>> b = 'testando com strings';

>> isequal(a,b) % igualdade de strings de caracteres
ans =
1

Mas,

>> c = 'TESTANDO COM STRINGS';

>> isequal(a,c) % igualdade de strings de caracteres
ans =
0

Para eliminar duplicidades de um conjunto utiliza-se o comando unique. Veja o exemplo a
seguir:

Exemplo 2 Exemplo 2 Exemplo 2 Exemplo 2 Eliminando duplicidades com unique:

>> a = [2:2:8; 4:2:10]
a =
2 4 6 8
4 6 8 10

APOSTILA DE MATLAB
31 31 31 31
ENGENHARIA DE PRODUO PLENA

>> unique(a) % elementos distintos ordenados em coluna
ans =
2
4
6
8
10

A funo ismember determina se um elemento pertence a um conjunto:

Exemplo Exemplo Exemplo Exemplo 3 33 3 Verificando se um elemento pertence a um conjunto com ismember:

>> a = 1:9
a =
1 2 3 4 5 6 7 8 9

>> b = 2:2:9
b =
2 4 6 8

>> ismember(a,b) % que elementos de a estao em b?
ans =
0 1 0 1 0 1 0 1 0

>> ismember(b,a) % que elementos de b estao em a?
ans =
1 1 1 1

O teste pode tambm ser feito com matrizes:

>> A = eye(3)
A =
1 0 0
0 1 0
0 0 1

>> B = ones(3)
B =
1 1 1
1 1 1
1 1 1

>> ismember(A,B) % elementos de A que estao em B?
ans =
1 0 0
0 1 0
0 0 1

>> ismember(B,A) % elementos de B que estao em A?
ans =
1 1 1
1 1 1
1 1 1

H outras operaes de aritmtica de conjuntos, tais como union, intersect, setdiff e
setxor.


APOSTILA DE MATLAB
32 32 32 32
ENGENHARIA DE PRODUO PLENA

Exemplo 4 Exemplo 4 Exemplo 4 Exemplo 4 Testando outras operaes de aritmtica de conjuntos:

>> a, b % reapresentando dados anteriores
a =
1 2 3 4 5 6 7 8 9
b =
2 4 6 8

>> union(a,b) % unio de elementos de a com elementos de b
ans =
1 2 3 4 5 6 7 8 9

>> intersect(a,b) % interseco de a com b
ans =
2 4 6 8

>> setxor(a,b) % esto em a ou em b, mas no na interseco de a com b
ans =
1 3 5 7 9

>> setdiff(a,b) % a menos b
ans =
1 3 5 7 9

>> setdiff(b,a) % b menos a
ans =
[]

8.2 8.2 8.2 8.2 Funes sobre Bits Funes sobre Bits Funes sobre Bits Funes sobre Bits

O MATLAB permite operaes lgicas bit a bit dos inteiros com ponto flutuante. O maior valor
inteiro que pode ser representado :

>> bitmax
ans =
9.0072e+015

Que equivale a 2
53
1. Mudando a representao para hexadecimal:

>> format hex

>> bitmax
ans =
433fffffffffffff

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Algumas operaes bit a bit:

>> a = (2^24) 1 % dado de entrada
a =
416fffffe0000000

>> dec2bin(a) % representao do dado de entrada em binrio
ans =
111111111111111111111111


APOSTILA DE MATLAB
33 33 33 33
ENGENHARIA DE PRODUO PLENA

>> b = 123456789 % dado de entrada
b =
419d6f3454000000

>> dec2bin(b) % representao do dado de entrada em binrio
ans =
111010110111100110100010101

>> bitand(a,b) % a & b (bit a bit)
ans =
4156f34540000000

>> dec2bin(ans) % representao resultado em binrio
ans =
10110111100110100010101

Para um melhor entendimento do que aconteceu, os nmeros a, b e ans so colocados na
tabela a seguir. Repare o resultado obtido atravs da operao E LGICO BIT A BIT.

a aa a
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
b bb b
1 1 1 0 1 0 1 1 0 1 1 1 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1
ans ans ans ans
0 0 0 0 1 0 1 1 0 1 1 1 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1

Continuando com os exemplos:

>> bitor(a,b) % ou bit a bit
ans =
419ffffffc000000

>> dec2bin(ans)
ans =
111111111111111111111111111

>> bitxor(a,b) % ou exclusive bit a bit
ans =
419e90cba8000000

>> dec2bin(ans)
ans =
111101001000011001011101010

>> bitget(b,13) % obtm o dcimo terceiro bit de b
ans =
0000000000000000

>> dec2bin(ans)
ans =
0

>> bitset(b,13) % define o dcimo terceiro bit de b como 1
ans =
419d6f7454000000

>> dec2bin(ans)
ans =
111010110111101110100010101

APOSTILA DE MATLAB
34 34 34 34
ENGENHARIA DE PRODUO PLENA

8.3 8.3 8.3 8.3 Converses Converses Converses Converses de Base de Base de Base de Base

O MATLAB possui diversas funes de converso de nmeros decimais para strings de
caracteres contendo estes nmeros em outras bases. Vejamos alguns exemplos:

>> dec2bin(64) % converte 64 decimal para binrio
ans =
1000000

>> class(ans) % tipo da resposta
ans =
char

>> bin2dec(ans) % volta para a representao decimal
ans =
64

>> class(ans)
ans =
double

possvel converter decimal para hexadecimal:

>> class(ans)
ans =
double

>> a = dec2hex(1023) % decimal para hexadecimal
a =
3FF

>> class(a) % tipo da resposta
ans =
char

>> a = hex2dec(a) % hexadecimal para decimal
a =
1023

>> class(a) % tipo da resposta
ans =
double

APOSTILA DE MATLAB
35 35 35 35
ENGENHARIA DE PRODUO PLENA

9. 9. 9. 9. T TT TEMPO EMPO EMPO EMPO

O MATLAB possui diversas funes para manipulao de dados relativos medio de tempo.
possvel fazer vrias operaes aritmticas com datas e horas, imprimir calendrios e procurar dias
especficos.

9.1 9.1 9.1 9.1 Datas e Horas Atuais Datas e Horas Atuais Datas e Horas Atuais Datas e Horas Atuais

A funo clock fornece a data e hora em um vetor. Por exemplo:

>> format short g

>> clock % 18/202007 15:10: 57.437
ans =
2007 2 18 15 10 57.437

A data hora atual pode ser obtida como um nico nmero atravs do comando now:

>> format long

>> now
ans =
7.330916349945718e+005

Os dois resultados representam a mesma informao.

A funo date fornece uma representao em string da data atual:

>> date
ans =
18-Feb-2007

9.2 9.2 9.2 9.2 Converso de Formatos Converso de Formatos Converso de Formatos Converso de Formatos

Como vimos na seo anterior, o MATLAB possui trs maneiras de representar datas: (1) nmero
de data de preciso dupla, (2) textos (strings de caracteres) e (3) vetor numrico. As operaes
matemticas com datas so realizadas com a data no formato numrico (1), ou como vetor (2), mas a
compreenso do seu valor praticamente impossvel nesses formatos. Portanto necessrio
converter datas do formato numrico par um formato string (3). O comando datestr foi projetado
para esse fim.

>> help datestr

DATESTR String representation of date.
DATESTR(D,DATEFORM) converts a serial data number D (as returned by
DATENUM) or a free format date string into a date string with a
format specified by format number or string DATEFORM (see table below).
By default, DATEFORM is 1, 16, or 0 depending on whether D contains
dates, times or both. Date strings with 2 character years are interpreted
to be within the 100 years centered around the current year.
APOSTILA DE MATLAB
36 36 36 36
ENGENHARIA DE PRODUO PLENA

DATESTR(D,DATEFORM,PIVOTYEAR) uses the specified pivot year as the
starting year of the 100-year range in which a two-character year
resides. The default pivot year is the current year minus 50 years.
DATEFORM = -1 uses the default format.

DATEFORM number DATEFORM string Example
0 'dd-mmm-yyyy HH:MM:SS' 01-Mar-2000 15:45:17
1 'dd-mmm-yyyy' 01-Mar-2000
2 'mm/dd/yy' 03/01/00
3 'mmm' Mar
4 'm' M
5 'mm' 03
6 'mm/dd' 03/01
7 'dd' 01
8 'ddd' Wed
9 'd' W
10 'yyyy' 2000
11 'yy' 00
12 'mmmyy' Mar00
13 'HH:MM:SS' 15:45:17
14 'HH:MM:SS PM' 3:45:17 PM
15 'HH:MM' 15:45
16 'HH:MM PM' 3:45 PM
17 'QQ-YY' Q1-96
18 'QQ' Q1
19 'dd/mm' 01/03
20 'dd/mm/yy' 01/03/00
21 'mmm.dd,yyyy HH:MM:SS' Mar.01,2000 15:45:17
22 'mmm.dd,yyyy' Mar.01,2000
23 'mm/dd/yyyy' 03/01/2000
24 'dd/mm/yyyy' 01/03/2000
25 'yy/mm/dd' 00/03/01
26 'yyyy/mm/dd' 2000/03/01
27 'QQ-YYYY' Q1-1996
28 'mmmyyyy' Mar2000

See also DATE, DATENUM, DATEVEC, DATETICK.

Vejamos algumas aplicaes do comando datestr:

>> t = now % obtm data atual
t =
7.3309e+005

>> datestr(t) % obtm data atual como texto
ans =
18-Feb-2007 15:27:25

>> class(ans) % verifica tipo de ans
ans =
char

>> datestr(t,12) % obtm data atual no formato mmmyy
ans =
Feb07

>> datestr(t,23) % obtm data atual no formato mm/dd/yyyy
ans =
02/18/2007


APOSTILA DE MATLAB
37 37 37 37
ENGENHARIA DE PRODUO PLENA

>> datestr(t,24) % obtm data atual no formato dd/mm/yyyy
ans =
18/02/2007

>> datestr(t,13) % obtm hora atual no formato HH:MM:SS
ans =
15:27:25

H comandos para converter de string para caracteres (datenum) e de string para um vetor
data (datavet). Pesquise esses comandos.

9.3 9.3 9.3 9.3 Funes de Data Funes de Data Funes de Data Funes de Data

A funo weekday fornece o dia da semana a partir de um texto ou de um nmero de data. o
MATLAB usa a conveno de que domingo = 1 e sbado = 7.

>> [d, w] = weekday(now)
d =
1
w =
Sun

O ltimo dia do ms pode ser descoberto usando eomday:

>> eomday(2000,2) % ano bissexto, ms de fevereiro
ans =
29

>> eomday(2001,2) % ano no bissexto, ms de fevereiro
ans =
28

A funo calendar pode gerar um calendrio para qualquer ms e ano e mostra-lo na janela
de comando ou armazenar o resultado em uma matrix:

>> calendar(now) % exibindo na janela de comando
Feb 2007
S M Tu W Th F S
0 0 0 0 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 0 0 0
0 0 0 0 0 0 0

>> x = calendar(now) % armazenando em uma matriz
x =
0 0 0 0 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 0 0 0
0 0 0 0 0 0 0



APOSTILA DE MATLAB
38 38 38 38
ENGENHARIA DE PRODUO PLENA

9.4 9.4 9.4 9.4 Funes de Cron Funes de Cron Funes de Cron Funes de Crono oo ometragem metragem metragem metragem

Em algumas ocasies pode ser necessrio cronometrar uma ou mais operaes. Nesse caso
podem-se utilizar os comandos tic (liga o cronmetro) e toc (liga o cronmetro).

>> tic; plot(rand(50,5)); toc
elapsed_time =
0.797

>> tic; plot(rand(50,5)); toc
elapsed_time =
0.047

Repare a diferena de tempo entre as duas execues consecutivas. A segunda muito mais
rpida (cerca de 5% do tempo total da primeira), pois a janela grfica j est carregada na memria.

Outra maneira de cronometrar utilizando a funo cputime, que contabiliza o tempo de
processamento (em segundos) desde o incio da sesso MATLAB.

>> t0 = cputime; plot(rand(50,5)); cputime-t0
ans =
0.156

9.5 9.5 9.5 9.5 Datas e Horas em Grficos Datas e Horas em Grficos Datas e Horas em Grficos Datas e Horas em Grficos

O MATLAB possui uma funo chamada datetick que automatiza a tarefa de incluso de textos
de tempo ou data eixos de grficos. Monte os exemplos a seguir em arquivos .M de funo:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Grfico de populao. Salve como graficoPop.m graficoPop.m graficoPop.m graficoPop.m:

function graficoPop
tempo = [1900:10:2000]'
populacao = [ 75.995; 102.202; 105.323; 108.345; 110.456;
115.403; 120.300; 121.233; 123.324; 126.300; 127.343]
plot(datenum(tempo,1,1), populacao)
datetick('x', 'yyyy') % quatro digitos para o ano
title('Populacao por ano')

Exemplo Exemplo Exemplo Exemplo 2 22 2 Grfico de vendas. Salve como vendas vendas vendas vendas.m .m .m .m:

function vendas
ano = [1998 1998 1999*ones(1,12)]'
mes = [ 11 12 (1:12)]'
venda = [1.1 1.4 0.5 0.9 1.2 1.5 1.7 ...
1.0 2.2 2.4 2.0 2.2 2.5 2.0]'
bar(datenum(ano,mes,1), venda)
datetick('x', 'mmmyy')
ylabel('R$ Milhoes')
xlabel('Ano/mes')
title('Vendas mensais')

Adapte a funo vendas para receber, ano, ms e venda como parmetros.
APOSTILA DE MATLAB
39 39 39 39
ENGENHARIA DE PRODUO PLENA

10. 10. 10. 10. LGEBRA LGEBRA LGEBRA LGEBRA M MM MATRICIAL ATRICIAL ATRICIAL ATRICIAL

Embora o MATLAB aceite matrizes de n dimenses, a lgebra matricial definida apenas para
matrizes de uma ou duas dimenses. Um problema fundamental da lgebra linear a soluo de
sistemas de equaes. De modo geral, a soluo depende da relao entre o nmero de equaes e
incgnitas do seguinte modo:
o Sistema possvel e determinado: nmero de equaes igual ao nmero de incgnitas
(apenas uma soluo);
o Sistema impossvel (sobredeterminado): nmero de equaes maior do que o nmero de
incgnitas (no h soluo para o sistema) e
o Sistema possvel e indeterminado: nmero de equaes menor do que o nmero de
incgnitas (nmero infinito de solues).

10.1 10.1 10.1 10.1 Sistemas de Equaes Lineares Sistemas de Equaes Lineares Sistemas de Equaes Lineares Sistemas de Equaes Lineares

Estudaremos a seguir o teste e solues de um sistema possvel e determinado Estudaremos a seguir o teste e solues de um sistema possvel e determinado Estudaremos a seguir o teste e solues de um sistema possvel e determinado Estudaremos a seguir o teste e solues de um sistema possvel e determinado. Seja o sistema
de equaes na forma matricial definido por:

1 2 3 X1 366
4 5 6 * X2 = 804
7 8 0 X3 351

A * x = y A * x = y A * x = y A * x = y

Expressando esse sistema de equaes no MATLAB, temos:

>> A = [1 2 3; 4 5 6; 7 8 0]
A =
1 2 3
4 5 6
7 8 0

>> y = [ 366; 804; 351 ]
y =
366
804
351

Antes de resolver o sistema, precisamos saber se ele tem soluo nica. Para verificar isso,
basta testar se o posto de A igual ao posto da matriz aumentada [ A y ]:

>> rank(A)
ans =
3
>> rank([A y])
ans =
3
APOSTILA DE MATLAB
40 40 40 40
ENGENHARIA DE PRODUO PLENA

O sistema acima possvel e determinado! Para resolv-lo podemos utilizar duas tcnicas: (1)
calculando a inversa de A, ou (2) utilizando o operador de diviso esquerda.

Mtodo 1: Calculado a inversa de A:

>> x = inv(A)*y
x =
25
22
99

Essa abordagem deve ser evitada por razes internas do MATLAB. O clculo da inversa envolve
muitas operaes de ponto flutuante.

Mtodo 2: Utilizando a diviso esquerda:

>> x = A \ y
x =
25
22
99

Porque utilizamos a diviso esquerda?

A * x = y A * x = y A * x = y A * x = y A AA A
- -- -1 11 1
* A * x = A * A * x = A * A * x = A * A * x = A
- -- -1 11 1
* y * y * y * y I * x = A I * x = A I * x = A I * x = A

\ \\ \ y y y y x = A x = A x = A x = A \ \\ \ y y y y

possvel resolver esse sistema utilizando diviso direita?

A * x = y A * x = y A * x = y A * x = y (A * x) (A * x) (A * x) (A * x) = y = y = y = y x xx x * * * * A AA A = y = y = y = y x x x x * * * * A AA A * ( * ( * ( * (A AA A) ) ) )
- -- -1 11 1
= y = y = y = y * ( * ( * ( * (A AA A) ) ) )
- -- -1 11 1

x xx x * I * I * I * I = = = = y y y y / / / / A AA A x xx x = = = = y y y y / // / A AA A

Assim, no MATLAB:

>> v = y' / A'
v =
25 22 99
>> x = v'
x =
25
22
99

Quando utilizado algum mtodo numrico para o clculo da soluo de um sistema matricial
(caso do MATLAB), interessante tambm conhecer o nmero de condio da matriz de coeficientes.
Quanto mais prximo de um maior ser a preciso do clculo (veja help cond).

>> cond(A)
ans =
35.106

APOSTILA DE MATLAB
41 41 41 41
ENGENHARIA DE PRODUO PLENA
Apensa para efeito de comparao, veja o nmero de condio da matriz abaixo (que no
produz uma soluo numrica consistente):

>> B = [1 1 1; 1 1 1; 1 1 1000]
B =
1 1 1
1 1 1
1 1 1000

>> cond(B)
ans =
1.3269e+017

>> x = B \ y
Warning: Matrix is singular to working precision.
x =
Inf
Inf
Inf

>> rank(B) % duas linhas LD (linearmente dependentes)
ans =
2

Logo, para um sistema ser possvel e determinado (uma e apenas uma soluo) basta que a
matriz de coeficientes, A, e a matriz aumentada, [A y] possuam posto completo e que o nmero de
condio seja prximo de um.

Outra maneira de testar a viabilidade/inviabilidade de um sistema calcular o determinante da
matriz quadrada:

>> det(A) % determinante diferente de zero, posto completo
ans =
27

>> det(B) % determinante igual a zero, posto incompleto.
ans =
0

Para o caso de sistemas sobredeterminados Para o caso de sistemas sobredeterminados Para o caso de sistemas sobredeterminados Para o caso de sistemas sobredeterminados (impossve (impossve (impossve (impossveis is is is) )) ), ou seja, cujo nmero de equaes
maior do que o nmero de incgnitas pode ser til encontrar soluo que minimiza o quadrado da
norma do resduo ou erro definido por e = A * x e = A * x e = A * x e = A * x y yy y. Essa soluo muito til na prtica sendo
conhecida como soluo dos quadrados mnimos.

Veja o exemplo a seguir:

>> A = [1 2 3; 4 5 6; 7 8 0; 2 5 8] % 4 equaes e 3 incgnitas
A =
1 2 3
4 5 6
7 8 0
2 5 8
APOSTILA DE MATLAB
42 42 42 42
ENGENHARIA DE PRODUO PLENA

>> y = [366 804 351 514]' % novo vetor direito
y =
366
804
351
514

>> x = A \ y % soluo dos quadrados mnimos
x =
247.9818
-173.1091
114.9273

>> e = A * x - y % calculando o erro de norma mnima
e =
-119.4545
11.9455
0.0000
35.8364

>> norm(e) % calculando a norma do erro
ans =
125.2850

Quando h menos equaes do que incgnitas, isto , quando o sistema indeterminado Quando h menos equaes do que incgnitas, isto , quando o sistema indeterminado Quando h menos equaes do que incgnitas, isto , quando o sistema indeterminado Quando h menos equaes do que incgnitas, isto , quando o sistema indeterminado, o
nmero de solues infinito. Dentre essas solues, duas so facilmente obtidas pelo o MATLAB. So
elas:
o O vetor x com o maior nmero de zeros, que pode ser obtido utilizando-se o operador de
diviso (\ ou /) e
o O vetor x com a menor norma possvel, que pode ser obtido calculando-se a sua
pseudoinversa atravs do comando pinv.

Observe o exemplo a seguir:

>> A = A' % definindo 3 equaes e 4 incgnitas
A =
1 4 7 2
2 5 8 5
3 6 0 8

>> y = y(1:3) % definindo um vetor y compatvel
y =
366
804
351

>> x = A \ y % encontrando a soluo com o maior numero de zeros
x =
0
-165.9000
99.0000
168.3000

>> xn = pinv(A) * y % encontrando a soluo de norma mnima
xn =
30.8182
-168.9818
99.0000
APOSTILA DE MATLAB
43 43 43 43
ENGENHARIA DE PRODUO PLENA
159.0545

>> norm(x) % encontrando a norma Euclidiana de x
ans =
256.2200

>> norm(xn) % verificando que xn possui norma menor que x
ans =
254.1731

Alm da soluo de sistemas de equaes, h muitos outras funes no MATLAB para
manipulao de matrizes. Sua documentao pode ser facilmente acessa pelo help do MATLAB (menu
Help > Matlab Help Help > Matlab Help Help > Matlab Help Help > Matlab Help) buscando-se pelas sentenas (1) matrices, elementary functions matrices, elementary functions matrices, elementary functions matrices, elementary functions e (2) matrices, matrices, matrices, matrices,
specialized functions specialized functions specialized functions specialized functions.


10.2 10.2 10.2 10.2 Matrizes Esparsas Matrizes Esparsas Matrizes Esparsas Matrizes Esparsas

Em muitas aplicaes prticas, so geradas matrizes que contm apenas alguns poucos
elementos no nulos. Essas matrizes so ditas esparsas esparsas esparsas esparsas. Para eliminar o armazenamento de
elementos iguais a zero, comum se armazenar apenas os elementos diferentes de zero de uma
matriz esparsa e dois conjuntos de ndices, identificando as posies das linhas e colunas do
elemento no nulo.

Matrizes esparsas so criadas a partir da funo sparse. Por exemplo:

>> As = sparse(1:10, 1:10, ones(1,10))
As =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
(6,6) 1
(7,7) 1
(8,8) 1
(9,9) 1
(10,10) 1

Tambm possvel criar uma matriz esparsa a partir de uma matriz densa:

>> As = sparse(eye(10))
As =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
(6,6) 1
(7,7) 1
(8,8) 1
(9,9) 1
(10,10) 1


APOSTILA DE MATLAB
44 44 44 44
ENGENHARIA DE PRODUO PLENA
Esse mtodo no recomendado, pois implica na criao da matriz densa (eye(10)) primeiro,
causando utilizao de muito recurso de memria.

Para converter uma matriz esparsa em densa, basta utilizar o comando full:

>> A = full(As)
A =
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1

Comparando a quantidade de recurso utilizado pela mesma matriz, esparsa e densa, temos:

>> clear % limpa a memria

>> B = eye(2000); % cria matriz identidade densa de 200 x 200

>> Bs = sparse(B);

>> whos
Name Size Bytes Class
B 2000x2000 32000000 double array
Bs 2000x2000 32004 sparse array

Grand total is 4002000 elements using 32032004 bytes

Repare que, embora ambas as matrizes possuam dimenso 2000 x 2000, a matriz esparsa
ocupa apenas 0,1 % do espao ocupado pela matriz densa.

H vrias funes para soluo de sistemas envolvendo matrizes esparsas. Consulto o help do
MATLAB (menu Help > Matlab Help Help > Matlab Help Help > Matlab Help Help > Matlab Help) buscando-se pela sentena sparse matrix sparse matrix sparse matrix sparse matrix.

APOSTILA DE MATLAB
45 45 45 45
ENGENHARIA DE PRODUO PLENA

11. 11. 11. 11. A AA ANLISE DE NLISE DE NLISE DE NLISE DE D DD DADOS ADOS ADOS ADOS

O MATLAB capaz de executar vrias anlises estatsticas em conjuntos de dados. Por
conveno, os conjuntos de dados so armazenados em matrizes orientadas por colunas. Isso
significa que, a menos que seja especificado o contrrio, cada coluna da matriz representa uma
varivel diferente, e as linhas representam amostras distintas ou observaes.


11.1 11.1 11.1 11.1 An An An Anlise Estatstica Bsica lise Estatstica Bsica lise Estatstica Bsica lise Estatstica Bsica

Anlise estatstica normalmente envolve um conjunto grande de dados, por exemplo, a
cotao de trs moedas diferentes (dlar, euro e libra) no ms de janeiro (31 dias) produz um
conjunto de 4 x 31 = 124 dados. Digitar todos esses dados se torna uma tarefa impraticvel,
principalmente se pensarmos em intervalos de tempo maiores (um ano, por exemplo!). A seguir,
alguns exemplos:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Importao de dados do Excel:

Dia Dia Dia Dia/jan /jan /jan /jan- -- -2006 2006 2006 2006 Do Do Do Dol ll llar lar lar lar Euro Euro Euro Euro Libra Libra Libra Libra
1 11 1 2,10 2,10 2,10 2,10 2,70 2,70 2,70 2,70 3,20 3,20 3,20 3,20
2 22 2 2,12 2,12 2,12 2,12 2,80 2,80 2,80 2,80 3, 3, 3, 3,30 30 30 30
3 33 3 2,16 2,16 2,16 2,16 2,90 2,90 2,90 2,90 3,32 3,32 3,32 3,32
4 44 4 2,09 2,09 2,09 2,09 3,10 3,10 3,10 3,10 3,27 3,27 3,27 3,27
5 55 5 2,11 2,11 2,11 2,11 3,00 3,00 3,00 3,00 3,27 3,27 3,27 3,27
6 66 6 2,13 2,13 2,13 2,13 3,05 3,05 3,05 3,05 3,27 3,27 3,27 3,27
7 77 7 2,17 2,17 2,17 2,17 2,90 2,90 2,90 2,90 3,27 3,27 3,27 3,27
8 88 8 2,23 2,23 2,23 2,23 2,80 2,80 2,80 2,80 3,27 3,27 3,27 3,27
9 99 9 2,40 2,40 2,40 2,40 2,85 2,85 2,85 2,85 3,27 3,27 3,27 3,27
10 10 10 10 2,27 2,27 2,27 2,27 2,79 2,79 2,79 2,79 3,30 3,30 3,30 3,30
11 11 11 11 2,39 2,39 2,39 2,39 2,67 2,67 2,67 2,67 3,33 3,33 3,33 3,33
12 12 12 12 2,90 2,90 2,90 2,90 2,74 2,74 2,74 2,74 3,37 3,37 3,37 3,37
13 13 13 13 2,17 2,17 2,17 2,17 2,70 2,70 2,70 2,70 3,27 3,27 3,27 3,27
14 14 14 14 2,39 2,39 2,39 2,39 3,05 3,05 3,05 3,05 3,27 3,27 3,27 3,27
15 15 15 15 2,17 2,17 2,17 2,17 2,90 2,90 2,90 2,90 3,30 3,30 3,30 3,30
16 16 16 16 2,23 2,23 2,23 2,23 2,74 2,74 2,74 2,74 3,37 3,37 3,37 3,37
17 17 17 17 2,12 2,12 2,12 2,12 2,70 2,70 2,70 2,70 3,27 3,27 3,27 3,27
18 18 18 18 2,17 2,17 2,17 2,17 3,05 3,05 3,05 3,05 3,32 3,32 3,32 3,32
19 19 19 19 2,39 2,39 2,39 2,39 2,90 2,90 2,90 2,90 3,32 3,32 3,32 3,32
20 20 20 20 2,23 2,23 2,23 2,23 2,85 2,85 2,85 2,85 3,32 3,32 3,32 3,32
21 21 21 21 2,17 2,17 2,17 2,17 2,74 2,74 2,74 2,74 3,30 3,30 3,30 3,30
22 22 22 22 2,23 2,23 2,23 2,23 2,85 2,85 2,85 2,85 3,37 3,37 3,37 3,37
23 23 23 23 2,12 2,12 2,12 2,12 2,70 2,70 2,70 2,70 3,37 3,37 3,37 3,37
24 24 24 24 2,17 2,17 2,17 2,17 3,05 3,05 3,05 3,05 3,27 3,27 3,27 3,27
25 25 25 25 2,12 2,12 2,12 2,12 2,74 2,74 2,74 2,74 3,37 3,37 3,37 3,37
26 26 26 26 2,23 2,23 2,23 2,23 2,90 2,90 2,90 2,90 3,27 3,27 3,27 3,27
27 27 27 27 2,39 2,39 2,39 2,39 2,85 2,85 2,85 2,85 3,37 3,37 3,37 3,37
28 28 28 28 2,12 2,12 2,12 2,12 2,85 2,85 2,85 2,85 3,27 3,27 3,27 3,27
29 29 29 29 2,17 2,17 2,17 2,17 2,74 2,74 2,74 2,74 3,27 3,27 3,27 3,27
30 30 30 30 2,23 2,23 2,23 2,23 3,05 3,05 3,05 3,05 3,37 3,37 3,37 3,37
31 31 31 31 2,17 2,17 2,17 2,17 2,70 2,70 2,70 2,70 3,30 3,30 3,30 3,30
APOSTILA DE MATLAB
46 46 46 46
ENGENHARIA DE PRODUO PLENA

Para importar esses dados para o ambiente do MATLAB basta utilizar a ferramenta Import Import Import Import
Wizard Wizard Wizard Wizard disponvel atravs do menu File > Import Data File > Import Data File > Import Data File > Import Data. O conjunto de dados acima deve estar em um
arquivo no formato .xls .xls .xls .xls (formato do Excel). Como sugesto utilize o nome cota cota cota cotaca ca ca cao oo o- -- -jan jan jan jan- -- -200 200 200 2007 77 7.xls .xls .xls .xls.
Aps acionar a funo Import Data Import Data Import Data Import Data, uma tela do Import Wizard Import Wizard Import Wizard Import Wizard parecida com a figura abaixo surgir
na sua tela:



Basta concluir o processo de importao pressionando o boto Finish Finish Finish Finish. A matriz principal que
conter os dados foi denominada data pela prpria ferramenta de importao. Para acessar os dados
importados, basta executar na janela de comando:

>> data
data =
1.0000 2.1000 2.7000 3.2000
2.0000 2.1200 2.8000 3.3000
3.0000 2.1600 2.9000 3.3200
4.0000 2.0900 3.1000 3.2700
5.0000 2.1100 3.0000 3.2700
6.0000 2.1300 3.0500 3.2700
. . . .
. . . .
. . . .
. . . .
29.0000 2.1700 2.7400 3.2700
30.0000 2.2300 3.0500 3.3700
31.0000 2.1700 2.7000 3.3000


APOSTILA DE MATLAB
47 47 47 47
ENGENHARIA DE PRODUO PLENA

Exemplo 2 Exemplo 2 Exemplo 2 Exemplo 2 Criando um grfico a partir dos dados importados. Crie o arquivo M de funo
abaixo (grafico_cotacao.m grafico_cotacao.m grafico_cotacao.m grafico_cotacao.m):

function grafico_cotacao(mes, cotacao)
if ( nargin ~= 2 )
erro ('Parametros esperados:')
erro (' vetor mes: 31 dias')
erro (' vetor cotacao 31 x 3')
end
plot(mes,cotacao)
xlabel(' Dia do mes')
ylabel(' Dollar, Euro, Libra')
title(' Cotacao Jan/2007')

A execuo na janela de comandos do MATLAB fica assim:

>> grafico_cotacao(data(:,1),data(:,2:4))

O resultado pode ser observado abaixo:



Alm do grfico, algumas operaes bsicas podem ser realizadas sobre o conjunto de dados
(varivel data).

Obtendo a mdia aritmtica com o comando mean:

>> cotacao_media = mean(data(:,2:4)) % dollar, euro e libra
cotacao_media =
2.2277 2.8503 3.3035

APOSTILA DE MATLAB
48 48 48 48
ENGENHARIA DE PRODUO PLENA

Exemplo 3 Exemplo 3 Exemplo 3 Exemplo 3 - -- - Calculando o desvio de cada cotao diria com relao sua respectiva mdia:

>> desvio_cotacao = data(:,2:4) - ones(31,1)*cotacao_media
desvio_cotacao =
-0.1277 -0.1503 -0.1035
-0.1077 -0.0503 -0.0035
-0.0677 0.0497 0.0165
-0.1377 0.2497 -0.0335
. . .
. . .
. . .
. . .
-0.0577 -0.1103 -0.0335
0.0023 0.1997 0.0665
-0.0577 -0.1503 -0.0035

Esse clculo pode ser realizado percentualmente:

>> desvio_cotacao = (data(:,2:4) - ones(31,1)*cotacao_media) ./
(ones(31,1)*cotacao_media) * 100

desvio_cotacao =
-5.7341 -5.2739 -3.1345
-4.8364 -1.7655 -0.1074
-3.0408 1.7429 0.4980
-6.1830 8.7596 -1.0155
. . .
. . .
. . .
. . .
-2.5919 -3.8705 -1.0155
0.1014 7.0054 2.0115
-2.5919 -5.2739 -0.1074

Exemplo 4 Exemplo 4 Exemplo 4 Exemplo 4 Calculando a cotao mxima por moeda e entre as moedas:

>> maximo = max(data(:,2:4)) % cotacao maxima de cada moeda
maximo =
2.9000 3.1000 3.3700

>> max_geral = max(maximo) % maior cotacao de todas
max_geral =
3.3700

Exemplo 5 Exemplo 5 Exemplo 5 Exemplo 5 - -- - Calculando o desvio padro, a mediana, a covarincia e coeficientes de
correlao:

>> desvio_padrao = std(data(:,2:4))
desvio_padrao =
0.1567 0.1306 0.0440

>> mediana = median(data(:,2:4))
mediana =
2.1700 2.8500 3.3000



APOSTILA DE MATLAB
49 49 49 49
ENGENHARIA DE PRODUO PLENA

>> covariancia = cov(data(:,2:4))
covariancia =
0.0246 -0.0023 0.0025
-0.0023 0.0170 -0.0008
0.0025 -0.0008 0.0019

>> coeficientes_correl = corrcoef(data(:,2:4))
coeficientes_correl =
1.0000 -0.1142 0.3675
-0.1142 1.0000 -0.1348
0.3675 -0.1348 1.0000

Exemplo Exemplo Exemplo Exemplo 6 66 6 - -- - Calculando a diferena entre cotaes consecutivas, dia(n+1) dia(n):

>> var_cot_dia = diff(data(:,2:4))

var_cot_dia =

0.0200 0.1000 0.1000
0.0400 0.1000 0.0200
-0.0700 0.2000 -0.0500
0.0200 -0.1000 0
. . .
. . .
. . .
. . .
0.0500 -0.1100 0
0.0600 0.3100 0.1000
-0.0600 -0.3500 -0.0700

Exemplo Exemplo Exemplo Exemplo 7 77 7 Aplicao de filtros. Neste caso ser aplicado um filtro de mdia de comprimento
ser aplicado a cada coluna. O filtro definido a seguir:

4 * 4 * 4 * 4 * y yy yn nn n = x = x = x = xn nn n + x + x + x + xn n n n 1 1 1 1 + x + x + x + x n n n n 2 22 2 + x + x + x + x n n n n 3 33 3, , , , ou y yy yn nn n = ( = ( = ( = (x xx xn nn n + x + x + x + xn n n n 1 1 1 1 + x + x + x + x n n n n 2 22 2 + x + x + x + x n n n n 3 33 3) )) ) / // / 4 44 4

>> filter(ones(1,4),4,data(:,2:4))
ans =
0.5250 0.6750 0.8000
1.0550 1.3750 1.6250
1.5950 2.1000 2.4550
2.1175 2.8750 3.2725
. . .
. . .
. . .
. . .
2.2275 2.8350 3.2950
2.2275 2.8725 3.3200
2.1725 2.8350 3.3025


APOSTILA DE MATLAB
50 50 50 50
ENGENHARIA DE PRODUO PLENA

12. 12. 12. 12. I II INTERPOLAO DE NTERPOLAO DE NTERPOLAO DE NTERPOLAO DE D DD DADOS ADOS ADOS ADOS

A interpolao uma maneira de estimar o valor de uma funo entre valores dados por
alguma tabela de pontos. A interpolao uma ferramenta valiosa quando no se pode calcular
rapidamente a funo nos valores intermedirios desejados.

12.1 12.1 12.1 12.1 Interpolao Unidimensional Interpolao Unidimensional Interpolao Unidimensional Interpolao Unidimensional

Dentre os mtodos existentes, a interpolao linear a mais simples. Ela amplamente
utilizada pelo MATLAB para a representao de grficos. Por mais complicado que parea o grfico, no
MATLAB ele representado por uma sucesso de segmentos de reta. Veja o exemplo a seguir:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Dois grficos da mesma funo representados com nmeros de pontos
diferentes. Repare que quando o nmero de pontos aumenta, o grfico tende a ficar mais suave:

>> x1 = linspace(0, 2*pi, 60); % sessenta pontos de 0 a 2*pi
>> x2 = linspace(0, 2*pi, 6); % seis pontos de 0 a 2*pi
>> plot(x1, sin(x1), x2, sin(x2), '--')
>> xlabel('x'), ylabel('sen(x)')
>> title('Interpolacao Linear')







APOSTILA DE MATLAB
51 51 51 51
ENGENHARIA DE PRODUO PLENA

Exemplo Exemplo Exemplo Exemplo 2 22 2 Nesse exemplo estudaremos a relao entre o nvel de percepo do som pelo
ouvido humano e a freqncia do som. A freqncia e o nvel relativo de presso so dados por:

>> Hz = [20:10:100 200:100:1000 1500 2000:1000:10000]; % freqncias em Hz

>> nps = [76 66 59 49 43 40 38 22 14 9 6 3.5 2.5 1.4 0.7 0 -1 -3 ...
-8 -7 -2 2 7 9 11 12]; % nvel de presso do som em dB

Ambos os vetores esto disponveis no arquivo freq_npl.m freq_npl.m freq_npl.m freq_npl.m. Basta executar o arquivo:

>> freq_npl

>> whos
Name Size Bytes Class
Hz 1x28 224 double array
nps 1x28 224 double array
Grand total is 56 elements using 448 bytes

Com os dados carregados, vamos represent-los graficamente usando um eixo x logartmico:

>> semilogx(Hz, nps, '-o')

>> xlabel('frequencia, Hz'), ylabel('nivel relativo de pressao do som, dB')

>> title('Limiar da audicao humana'), grid on

O resultado pode ser visto a seguir:



APOSTILA DE MATLAB
52 52 52 52
ENGENHARIA DE PRODUO PLENA

O grfico anterior mostra que a audio humana mais sensvel a freqncias em torno de 3
kHz.

Exemplo Exemplo Exemplo Exemplo 3 33 3 Estimar de diferentes maneiras o nvel de presso do som na freqncia 2.5 kHz:

>> s = interp1(Hz, nps, 2.5e3, 'linear') % interpolao linear
s =
-5.5000

>> s = interp1(Hz, nps, 2.5e3, 'cubic') % interpolao cbica
s =
-6.0488

>> s = interp1(Hz, nps, 2.5e3, 'spline') % interpolao splines cbicas
s =
-5.8690

>> s = interp1(Hz, nps, 2.5e3, 'nearest') % interp. pelo vizinho mais prximo
s =
-8

A interpolao linear o padro do MATLAB, pois fornece resultados relativamente bons e com
rapidez. A interpolao pelo vizinho mais prximo, embora tenha dado um resultado muito fora da
faixa nesse exemplo, pode ser utilizada com segurana quando o nmero de pontos muito grande.
A interpolao por splines cbicas a que oferece o melhor resultado, mas possui o maior custo de
processamento.

Exemplo Exemplo Exemplo Exemplo 4 44 4 Uma das atribuies mais comuns da interpolao com splines cbicas a
suavizao de dados. Vamos utilizar esse recurso para olhar com uma lupa o intervalo de freqncia
de 2,5 kHz a 3,5 kHz:

>> Hzi = linspace(2e3, 5e3); % olhando bem de perto o mnimo

>> npsi = interp1(Hz, nps, Hzi, 'spline'); % interpolando perto do mnimo

>> i = find(Hz >= 2e3 & Hz <= 5e3); % determinando os ndices dos dados
% originais perto do mnimo

>> semilogx(Hz(i), nps(i), '--o', Hzi, npsi) % representando graficamente
% dados velhos e novos

>> xlabel('frequencia, Hz')

>> ylabel('nivel relativo de pressao do som, dB')

>> title('Liminar da Audicao Humana')

>> grid on


O resultado visto a seguir:

APOSTILA DE MATLAB
53 53 53 53
ENGENHARIA DE PRODUO PLENA


Agora possvel fazer uma estimativa melhor da freqncia de maior sensibilidade:

>> [nps_min, i] = min(npsi) % mnimo e ndice do mnimo
nps_min =
-8.4245
i =
45

>> Hz_min = Hzi(i) % freqncia no mnimo
Hz_min =
3.3333e+003

Ou seja, o ouvido humano mais sensvel freqncia de 3,33 kHz.

12.2 12.2 12.2 12.2 Interpolao Bidimensional Interpolao Bidimensional Interpolao Bidimensional Interpolao Bidimensional

A interpolao bidimensional interpola funes de duas variveis, z = f(x,y).

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Um processo de levantamento topogrfico submarino feito por radar embarcado
em uma aeronave produz uma grade de pontos (x, y, z) em que cada coordenada (x, y) se encontra a
0,5 km uma da outra. Essa impreciso conseqncia da velocidade do vo e limitaes de
processamento embarcado na aeronave. O resultado armazenado no arquivo topologia_sub.m topologia_sub.m topologia_sub.m topologia_sub.m,
mostrado a seguir:




APOSTILA DE MATLAB
54 54 54 54
ENGENHARIA DE PRODUO PLENA

% topologia_sub.m
% dados de profundidade do oceano (malha de 250m)
x = 0:.5:4; % eixo x
y = 0:.5:6; % eixo y
z = [ 2100 2099 2100 2099 2100 2099 2099 2099 2100
2100 2099 2099 2099 2100 2099 2100 2099 2099
2099 2099 2098 2098 2100 2099 2100 2100 2100
2100 2098 2097 2097 2099 2100 2100 2100 2099
2101 2100 2098 2098 2100 2102 2103 2100 2100
2102 2103 2101 2100 2102 2106 2104 2101 2100
2099 2102 2100 2100 2103 2108 2106 2101 2099
2097 2099 2100 2100 2102 2105 2103 2101 2100
2100 2102 2103 2101 2102 2103 2102 2100 2099
2100 2102 2103 2102 2101 2101 2100 2099 2099
2100 2100 2101 2101 2100 2100 2100 2099 2099
2100 2100 2100 2100 2100 2099 2099 2099 2099
2100 2100 2100 2099 2099 2100 2099 2100 2099 ];

Na janela de comando do MATLAB:

>> topologia_sub, whos % executa o arquivo topologia_sub

>> mesh(x,y,z) % grfico 3D

>> xlabel('eixo X, km')

>> ylabel('eixo Y, km')

>> zlabel('profundidade do oceano, m')

>> title('Medidas de profundidade do oceano')


APOSTILA DE MATLAB
55 55 55 55
ENGENHARIA DE PRODUO PLENA

Exemplo Exemplo Exemplo Exemplo 2 22 2 se quisermos obter uma estimativa da profundidade em um dado ponto?
Podemos utilizar a funo interp2 para realizar esta tarefa. Como exemplo, queremos estimar a
profundidade a nas coordenadas (x = 1,75 e y = 1,85). Na janela de comando, temos:

>> format long g
>> zi = interp2(x, y, z, 1.75, 1.85, 'linear') % interpolacao linear
zi =
2100.6

>> zi = interp2(x, y, z, 1.75, 1.85, 'cubic') % interpolacao cubica
zi =
2100.672

>> zi = interp2(x, y, z, 1.75, 1.85, 'splines') % interpolacao com splines
zi =
2100.71115186761

>> zi = interp2(x, y, z, 1.75, 1.85, 'nearest') % interpolacao vizinho mais
% proximo
zi =
2101

Exemplo Exemplo Exemplo Exemplo 3 33 3 A baixa amostragem do levantamento realizado torna o grfico muito agudo em
alguns pontos. Mais uma vez, a interpolao pode ser utilizada para melhorar (suavizar) a aparncia
do grfico (a rotina completa est no arquivo graf_topologia_sub.m graf_topologia_sub.m graf_topologia_sub.m graf_topologia_sub.m):

Passo 1: Interpolar em uma escala mais refinada.

>> xi = linspace(0,4,30); % eixo x refinado

>> yi = linspace(0,6,40); % eixo y refinado

Passo 2: Para cada valor em xi, desejamos fazer interpolaes sobre os valores em yi, ou
seja, desejamos criar uma malha de todos os pares (xi, yi) e depois interpolar cada um desses pares.
Para criar esses pares utilizaremos o comando meshgrid. Veja o exemplo a seguir:

>> xteste = 1:5
xteste =
1 2 3 4 5

>> yteste = 6:9
yteste =
6 7 8 9

>> [xx, yy] = meshgrid(xteste, yteste)
xx =
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

yy =
6 6 6 6 6
7 7 7 7 7
8 8 8 8 8
9 9 9 9 9
APOSTILA DE MATLAB
56 56 56 56
ENGENHARIA DE PRODUO PLENA

Aplicando o meshgrid ao problema original, temos:

>> [xxi, yyi] = meshgrid(xi, yi); % malha de todas as combinaes

>> size(xxi) % xxi possui 40 linhas, cada uma delas contendo xi
ans =
40 30

>> size(yyi) % yyi possui 30 colunas, cada uma delas contendo yi
ans =
40 30

Passo 3: Com a malha de interpolao definida, a profundidade do oceano pode agora ser
interpolada na escala refinada:

>> [xxi, yyi] = meshgrid(xi, yi); % malha de todas as combinaes

>> size(xxi) % xxi possui 40 linhas, cada uma delas contendo xi
ans =
40 30

>> size(yyi) % yyi possui 30 colunas, cada uma delas contendo yi
ans =
40 30

>> zzi = interp2(x, y, z, xxi, yyi, 'spline'); % interp. na malha xxi, yyi

>> size(zzi) % zzi do mesmo tamanho que xxi e yyi
ans =
40 30

Passo 4: Gerar o grfico contendo para efeito de comparao os dados interpolados com os
dados originais (representados por o).

>> zzi = interp2(x, y, z, xxi, yyi, 'cublic'); % interpolao

>> size(zzi) % zzi e do mesmo tamanho que xxi e yyi

>> mesh(xxi, yyi, zzi) % grfico dos dados suavizados

>> hold on % mantem o estado atual do grfico

>> [xx, yy] = meshgrid(x, y); % malha dos dados originais

>> plot3(xx, yy, z + 0.1, 'ok') % dados originais levemente elevados para
% mostrar os ns

>> hold off

>> xlabel('eixo X, km'), ylabel('eixo Y, km'), zlabel('profundidade, m')

>> title('Relevo submarino suavizado')

APOSTILA DE MATLAB
57 57 57 57
ENGENHARIA DE PRODUO PLENA

O resultado mostrado a seguir:


APOSTILA DE MATLAB
58 58 58 58
ENGENHARIA DE PRODUO PLENA

13. 13. 13. 13. P PP POLINMIOS OLINMIOS OLINMIOS OLINMIOS

O MATLAB possui diversas funes para a manipulao de polinmios. Veremos algumas a
seguir.

13.1 13.1 13.1 13.1 Razes Razes Razes Razes

Encontra os valores para os quais um polinmio igual a zero, ou seja, encontrar as suas
razes, muito simples no MATLAB.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Seja o seguinte polinmio:

x xx x
4 44 4
12 x 12 x 12 x 12 x
3 33 3
+ 0 x + 0 x + 0 x + 0 x
2 22 2
+ 25 x + 25 x + 25 x + 25 x
1 11 1
+ 11 + 11 + 11 + 116 x 6 x 6 x 6 x
0 00 0


Para achar a raiz desse polinmio, precisamos primeiro representa-lo no ambiente do MATLAB:

>> p = [1 -12 0 25 116 ]
p =
1 -12 0 25 116

Os coeficientes devem ser ordenados de acordo com o grau da varivel independente por
ordem decrescente e os coeficientes nulos tambm devem ser representados:

A raiz do polinmio encontrada pela funo roots:

>> r = roots(p)
r =
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i

Exemplo Exemplo Exemplo Exemplo 2 22 2 Dadas as razes de um polinmio, possvel obter o referido polinmio:

>> format short g

>> pp = poly(r)
pp =
1 -12 -1.7764e-014 25 116

>> pp(abs(pp) < 1e-12) = 0 % elimina os componentes residuais
pp =
1 -12 0 25 116

13.2 13.2 13.2 13.2 Multiplicao, Adio e Diviso Multiplicao, Adio e Diviso Multiplicao, Adio e Diviso Multiplicao, Adio e Diviso

A multiplicao de polinmios realizada atravs da funo conv (convoluo entre
polinmios).

APOSTILA DE MATLAB
59 59 59 59
ENGENHARIA DE PRODUO PLENA

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Multiplicar os polinmios a(x) = a(x) = a(x) = a(x) = x xx x
3 33 3
+ + + + 2 x 2 x 2 x 2 x
2 2 2 2
+ ++ + 3 x + 4 3 x + 4 3 x + 4 3 x + 4 e b(x) = b(x) = b(x) = b(x) = x xx x
3 33 3
+ 4 + 4 + 4 + 4 x xx x
2 2 2 2
+ 9 x + + 9 x + + 9 x + + 9 x + 16 16 16 16:

>> a = [1 2 3 4], b = [1 4 9 16];

>> c = conv(a, b)
c =
1 6 20 50 75 84 64

O MATLAB no possui uma funo especfica para a adio de polinmios. O operador padro
de soma pode ser usado para esse fim.

Exemplo Exemplo Exemplo Exemplo 2 22 2 Somar os polinmios a(x) = a(x) = a(x) = a(x) = x xx x
3 33 3
+ + + + 2 x 2 x 2 x 2 x
2 2 2 2
+ ++ + 3 x + 4 3 x + 4 3 x + 4 3 x + 4 e b(x) = b(x) = b(x) = b(x) = x xx x
3 33 3
+ 4 + 4 + 4 + 4 x xx x
2 2 2 2
+ 9 x + 16 + 9 x + 16 + 9 x + 16 + 9 x + 16:

>> d = a + b
d =
2 6 12 20

Exemplo Exemplo Exemplo Exemplo 3 33 3 Somar os polinmios c cc c(x) = (x) = (x) = (x) = x xx x
6 66 6
+ 6 + 6 + 6 + 6 x xx x
5 5 5 5
+ 20 x + 20 x + 20 x + 20 x
4 44 4
+ 50 x + 50 x + 50 x + 50 x
3 33 3
+ 75 x + 75 x + 75 x + 75 x
2 22 2
+ 84 x + 84 x + 84 x + 84 x + 64 + 64 + 64 + 64 e d dd d(x) (x) (x) (x)
= == = 2 2 2 2 x xx x
3 33 3
+ + + + 6 66 6 x xx x
2 2 2 2
+ + + + 12 12 12 12 x + x + x + x + 20 20 20 20:

>> e = c + [0 0 0 d]
e =
1 6 20 52 81 96 84

A diviso de polinmios pode ser realizada com a funo deconv.

Exemplo Exemplo Exemplo Exemplo 4 44 4 Dividir o polinmio c cc c(x) = (x) = (x) = (x) = x xx x
6 66 6
+ 6 + 6 + 6 + 6 x xx x
5 5 5 5
+ 20 x + 20 x + 20 x + 20 x
4 44 4
+ 50 x + 50 x + 50 x + 50 x
3 33 3
+ 75 x + 75 x + 75 x + 75 x
2 22 2
+ 84 x + 84 x + 84 x + 84 x + 64 + 64 + 64 + 64 por b(x) b(x) b(x) b(x)
= == = x xx x
3 33 3
+ 4 + 4 + 4 + 4 x xx x
2 2 2 2
+ 9 x + 16 + 9 x + 16 + 9 x + 16 + 9 x + 16:

>> [q, r] = deconv(c, b) % resulta em a(x) com resto zero
q =
1 2 3 4
r =
0 0 0 0 0 0 0

13.3 13.3 13.3 13.3 Derivadas e Integrais Derivadas e Integrais Derivadas e Integrais Derivadas e Integrais

A derivada de um polinmio pode ser obtida pela funo polyder.

Exemplo Exemplo Exemplo Exemplo 1 11 1 Derivar o polinmio c cc c(x) = (x) = (x) = (x) = x xx x
6 66 6
+ 6 + 6 + 6 + 6 x xx x
5 5 5 5
+ 20 x + 20 x + 20 x + 20 x
4 44 4
+ ++ + 50 x 50 x 50 x 50 x
3 33 3
+ 75 x + 75 x + 75 x + 75 x
2 22 2
+ 84 x + 84 x + 84 x + 84 x + 64 + 64 + 64 + 64:

>> c
c =
1 6 20 50 75 84 64

>> derivada = polyder(c)
derivada =
6 30 80 150 150 84
APOSTILA DE MATLAB
60 60 60 60
ENGENHARIA DE PRODUO PLENA

Exemplo Exemplo Exemplo Exemplo 2 22 2 Integra o polinmio derivada derivada derivada derivada(x) = (x) = (x) = (x) = 6 66 6 x xx x
5 5 5 5
+ 30 x + 30 x + 30 x + 30 x
4 44 4
+ 80 x + 80 x + 80 x + 80 x
3 33 3
+ 150 x + 150 x + 150 x + 150 x
2 22 2
+ 84 + 84 + 84 + 84, utilizando
a constante 64:

>> integral = polyint(derivada, 64) % recupera o polinmio c(x)
integral =
1 6 20 50 75 84 64


13.4 13.4 13.4 13.4 Clculo de Polinmios Clculo de Polinmios Clculo de Polinmios Clculo de Polinmios

O clculo de polinmios consiste em avaliar o polinmio para um intervalo definido. A funo
do que faz esse trabalho polyval.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Avaliar o polinmio p pp p(x) = (x) = (x) = (x) = 2 22 2 x xx x
3 3 3 3
+ 3 x + 3 x + 3 x + 3 x
2 22 2
- -- - 10 x 10 x 10 x 10 x 15 15 15 15 na faixa de intervalos [-5, 5]:

>> p = [ 2 3 -10 -15 ]; % o polinmio

>> x = linspace(-5,5); % o intervalo de avaliao

>> v = polyval(p, x); % calculando p para os valores de x

>> plot(x,v) % grafico dos resultados

>> xlabel('x')

>> ylabel('2x{^3} + 3x{^2} - 10x - 15')

>> title('Avaliao de p(x) = 2x{^3} + 3x{^2} - 10x - 15')



APOSTILA DE MATLAB
61 61 61 61
ENGENHARIA DE PRODUO PLENA

13.5 13.5 13.5 13.5 Ajuste de Curvas Ajuste de Curvas Ajuste de Curvas Ajuste de Curvas

Em diversas reas do conhecimento, necessrio adaptar um curva com dados obtidos
experimentalmente. A curva escolhida pode passar pelos pontos dados ou passar prximo a eles. Na
situao mais comum, a curva e escolhida de maneira que a soma dos quadrados dos erros nos
pontos dados seja minimizada, resultando no ajuste de curvas por quadrados mnimos quadrados mnimos quadrados mnimos quadrados mnimos. Embora o
ajuste de curvas por quadrados mnimos possa ser feito utilizando qualquer conjunto de funes
base, mais comum e direto utilizar-se de uma srie de potncias truncada, ou seja, um polinmio.

No MATLAB, a funo polyfit ajusta curvas pelo mtodo dos quadrados mnimos. Vejamos o
exemplo a seguir:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Obter curvas que aproximam um conjunto de pontos obtidos experimentalmente
utilizando polinmios de grau 1, 2 e outros:

Seja o conjunto de dados a seguir (arquivo ajuste_curva.m ajuste_curva.m ajuste_curva.m ajuste_curva.m):

>> x = [ 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];

>> y = [-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2 ];

Calculando a curva para um polinmio de grau um (regresso linear), temos:

>> n = 1;

>> p = polyfit(x, y, n)
p =
10.3185 1.4400

O resultado o polinmio p(x) = 10.3185 x + 1.4400 p(x) = 10.3185 x + 1.4400 p(x) = 10.3185 x + 1.4400 p(x) = 10.3185 x + 1.4400. Comparando esse resultado com os
dados reais, temos:

>> xi = linspace(0, 1, 100);

>> yi = polyval(p, xi);

>> plot(x, y, '-o', xi, yi, '--')

>> xlabel('x'), ylabel('y=f(x)')

>> title('Aproximacao por regressao linear')

O grfico que compara a aproximao linear com o conjunto real de pontos visto a seguir:
APOSTILA DE MATLAB
62 62 62 62
ENGENHARIA DE PRODUO PLENA

O mesmo processo pode ser realizado para uma aproximao de grau 2:

>> n = 2;

>> p = polyfit(x, y, n)
p =
-9.8108 20.1293 -0.0317

O resultado o polinmio p(x) = p(x) = p(x) = p(x) = - -- -9.8108 x 9.8108 x 9.8108 x 9.8108 x
2 22 2
+ 20.1293 x + 20.1293 x + 20.1293 x + 20.1293 x - -- - 0.0317 0.0317 0.0317 0.0317. Comparando esse
resultado com os dados reais, temos:

>> xi = linspace(0, 1, 100);

>> yi = polyval(p, xi);

>> plot(x, y, '-o', xi, yi, '--')

>> xlabel('x'), ylabel('y=f(x)')

>> title('Aproximacao quadrtica')

O grfico mostrado a seguir:
APOSTILA DE MATLAB
63 63 63 63
ENGENHARIA DE PRODUO PLENA

Sugesto: tentar um ajuste com polinmio de ordem 10 (visto que a amostra real possui 11
pontos). Essa abordagem interessante? Justifique.
APOSTILA DE MATLAB
64 64 64 64
ENGENHARIA DE PRODUO PLENA

14. 14. 14. 14. O OO OTIMIZAO TIMIZAO TIMIZAO TIMIZAO

Otimizao, no contexto aqui apresentado se refere ao processo de determinao de pontos
onde uma funo y = g(x) assume valores especficos ou extremos. Um problema clssico encontrar
os zeros de uma funo. O pacote bsico do MATLAB resolve esse problema para funes
unidimensionais. Para achar zeros em funes multidimensionais necessrio o Toolbox de
Otimizao. Outro problema comum, mas de soluo no trivial, a localizao de mximos e
mnimos de funes. Nesse caso o pacote bsico do MATLAB atende para uma e muitas dimenses.

14.1 14.1 14.1 14.1 Determinao do Zero Determinao do Zero Determinao do Zero Determinao do Zero

A obteno de zeros de funes unidimensionais no MATLAB feita com o comando fzero.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Encontrando os zeros para a funo de Humps:

Humps(x) = 1 / [(x Humps(x) = 1 / [(x Humps(x) = 1 / [(x Humps(x) = 1 / [(x - -- - 0,3) 0,3) 0,3) 0,3)
2 22 2
+ 0,01] + 1 / [(x + 0,01] + 1 / [(x + 0,01] + 1 / [(x + 0,01] + 1 / [(x - -- - 0,9) 0,9) 0,9) 0,9)
2 22 2
+ 0,04] + 0,04] + 0,04] + 0,04] - -- - 6 66 6

Na janela de comando:

>> x = linspace(-.5, 1.5);

>> y = humps(x);

>> plot(x, y), grid on, title('Funcao de Humps')


APOSTILA DE MATLAB
65 65 65 65
ENGENHARIA DE PRODUO PLENA

Por inspeo visual, os zeros da funo de Humps esto prximos de 1,3 e -0,2.

Atravs da funo fzero, podemos encontrar uma aproximao melhor para esses zeros:

>> format long % melhor preciso
>> x = fzero('humps', 1.3) % obtendo o zero prximo de 1.3
x =
1.29954968258482

>> humps(x) % testando...
ans =
0

A seguir, a varivel valor conter o resultado de humps(x), evitando a necessidade de fazer a
chamada explicita da funo para testar o valor x (zero estimado).

>> [x, valor] = fzero('humps', -0.2) % obtendo o zero prximo de -0.2
x =
-0.13161801809961
valor =
8.881784197001252e-016

A funo fzero tambm pode ser chamada para um intervalo, desde que haja troca de sinal no
mesmo, conforme mostrado a seguir:

>> [x, valor] = fzero('humps', [-2, 0]) % intervalo correto (troca de sinal)
x =
-0.13161801809961
valor =
0

>> [x, valor] = fzero('humps', [0, 1.2]) % sem troca de sinal no intervalo
??? Error using ==> fzero
The function values at the interval endpoints must differ in sign.

Para um melhor acompanhamento das funes de otimizao (padro e da Toolbox de
Otimizao), existem alguns parmetros que podem ser definidos a critrio do usurio. Por exemplo:
a funo fzero possui os parmetros definveis Display e TolX, que permitem,
respectivamente, o controle da quantidade de detalhes a ser exibido no momento da execuo da
funo e estabelece a tolerncia para a resposta final (a menor tolerncia possvel eps). Esses
parmetros so manipulados pelas funes optimset e optimget.

Exemplo Exemplo Exemplo Exemplo 2 22 2 Utilizando o parmetro definvel Display da funo fzero para exibir as
iteraes realizadas pela funo fzero:

>> options = optimset('Display' , 'iter'); % mostra iteracao
>> [x, valor] = fzero('humps', [-2, 0], options)

Func-count x f(x) Procedure
1 -2 -5.69298 initial
2 0 5.17647 initial
3 -0.952481 -5.07853 interpolation
4 -0.480789 -3.87242 interpolation
APOSTILA DE MATLAB
66 66 66 66
ENGENHARIA DE PRODUO PLENA
5 -0.240394 -1.94304 bisection
6 -0.120197 0.28528 bisection
7 -0.135585 -0.0944316 interpolation
8 -0.131759 -0.00338409 interpolation
9 -0.131618 1.63632e-006 interpolation
10 -0.131618 -7.14819e-010 interpolation
11 -0.131618 0 interpolation
Zero found in the interval: [-2, 0].

x =
-0.13161801809961
valor =
0

Exemplo Exemplo Exemplo Exemplo 3 33 3 Utilizando o parmetro definvel TolX da funo fzero para realizar iteraes
com tolerncia de 0,01:

>> options = optimset('Display' , 'iter', 'TolX', .01); % mostra iterao
>> [x, valor] = fzero('humps', [-2, 0], options)

Func-count x f(x) Procedure
1 -2 -5.69298 initial
2 0 5.17647 initial
3 -0.952481 -5.07853 interpolation
4 -0.480789 -3.87242 interpolation
5 -0.240394 -1.94304 bisection
6 -0.120197 0.28528 bisection
7 -0.140197 -0.201336 interpolation
Zero found in the interval: [-2, 0].

x =
-0.14019723625381
valor =
-0.20133569692829

Para mais opes consulte a documentao das funes optimset e optimget no help do
MATLAB.

14.2 14.2 14.2 14.2 Minimizao em Uma Dimenso Minimizao em Uma Dimenso Minimizao em Uma Dimenso Minimizao em Uma Dimenso

Em muitas aplicaes particularmente interessante determinar os extremos de uma funo,
ou seja, seus mximos (picos) e mnimos (vales). Matematicamente, esses extremos so encontrados
de forma analtica, determinando-se onde a derivada (inclinao) da curva igual a zero. H,
entretanto, caso em que muito difcil ou impossvel determinar analiticamente os extremos de uma
funo. Nesses casos necessrio procurar os extremos das funes analiticamente.

O MATLAB possui duas funes que desempenha essa funo, fminbnd e fminsearsh. Essas
duas funes encontram mnimos de funes unidimensionais e dimenso n, respectivamente. Uma
vez que o mximo de f(x) o mximo de f(x) o mximo de f(x) o mximo de f(x) igual ao mnimo de mnimo de mnimo de mnimo de f(x) f(x) f(x) f(x), fminbnd e fminsearch podem ser utilizadas
para encontrar tanto os mnimos quanto os mximos.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Observando o grfico da funo de Humps da seo 14.1, percebe-se que h um
mximo perto de 0,3 e um mnimo perto de 0,6. Atravs de fminbnd, esses extremos podem ser
encontrados com maior preciso, conforme mostramos a seguir:
APOSTILA DE MATLAB
67 67 67 67
ENGENHARIA DE PRODUO PLENA

>> format long g

>> options = optimset('Display', 'iter');

% procurando o mnimo
>> [xmin, valor] = fminbnd('humps', 0.5, 0.8, options) % intervalo [0.5, 0.8]
Func-count x f(x) Procedure
1 0.61459 11.4103 initial
2 0.68541 11.9288 golden
3 0.57082 12.7389 golden
4 0.638866 11.2538 parabolic
5 0.637626 11.2529 parabolic
6 0.637046 11.2528 parabolic
7 0.637008 11.2528 parabolic
8 0.636975 11.2528 parabolic
Optimization terminated successfully: ...

xmin =
0.637008211963619
valor =
11.2527541258777

% procurando o mximo (o mesmo que o mnimo de humps(x))
>> [xmax, valor] = fminbnd('-humps(x)', 0.2, 0.4, options) % de [0.2, 0.4]
Func-count x f(x) Procedure
1 0.276393 -91.053 initial
2 0.323607 -91.4079 golden
3 0.352786 -75.1541 golden
4 0.300509 -96.5012 parabolic
5 0.300397 -96.5014 parabolic
6 0.300364 -96.5014 parabolic
7 0.300331 -96.5014 parabolic
Optimization terminated successfully: ...

xmax =
0.300364137900245
valor =
-96.5014072438705

Repare que o valor do mximo , na verdade, +96,5, pois o clculo foi feito com Humps.

14.3 14.3 14.3 14.3 Minimizao Minimizao Minimizao Minimizao em em em em Dimenses Mais Elevadas Dimenses Mais Elevadas Dimenses Mais Elevadas Dimenses Mais Elevadas

A funo fminsearch aplica um algoritmo simples para minimizar uma funo de vrias
variveis, ou seja, fminsearch tenta encontrar o mnimo de f(x), onde f(x) uma funo escalar de
um argumento vetorial x. O algoritmo implementado por fminsearch o Simplex, de Nelder-Mead.

Para ilustrar a utilizao de fminsearsh, veja o exemplo a seguir:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Achar o mnimo da funo de Rosembrock:

f(x) = 100 (x f(x) = 100 (x f(x) = 100 (x f(x) = 100 (x2 22 2 x xx x1 11 1
2 22 2
) )) )
2 22 2
+ (1 + (1 + (1 + (1 x xx x1 11 1) )) )
2 22 2

Vamos primeiro visualizar a funo em 3 dimenses, utilizando o eixo x para a varivel x1 e o
eixo y para a varivel x2:
APOSTILA DE MATLAB
68 68 68 68
ENGENHARIA DE PRODUO PLENA


% rosembrock.m
x = [-1.5:0.125:1.5]; % intervalo da varivel x1
y = [-.6:0.125:2.8]; % intevalo da varivel x2
[X, Y] = meshgrid(x, y); % malha de todos os x e y
Z = 100.*(Y - X.*X).^2 + (1 - X).^2; % funo de Rosembrock
mesh(X, Y, Z) % grafico 3D de Rosembrock
hidden off
xlabel('x(1)'), ylabel('x(2)'), title('Funcao de Rosembrock')
hold on
plot3(1, 1, 1, 'k.', 'markersize', 30) % marcando o ponto de mnimo
hold off


Para encontrar o mnimo, ilustrado no grfico anterior em (1, 1), devemos reescrever a funo
em termos de x1 = x(1) x1 = x(1) x1 = x(1) x1 = x(1) e x2 = x(2) x2 = x(2) x2 = x(2) x2 = x(2). Faremos isso no seguinte arquivo M:

% rosembrock.m
function f=rosembrock(x)
% Funo de Rosembrock
f = 100.*(x(2) - x(1).*x(1)).^2 + (1 - x(1)).^2; % funo de Rosembrock

Utilizando esse arquivo M de funo, fminsearch produz:

>> [xmin, fxmin, conv, saida] = fminsearch('rosembrock', [-1.9, 2])
xmin =
1.0000166688948 1.00003447386277
fxmin =
4.06855153506342e-010
conv =
1
saida =
APOSTILA DE MATLAB
69 69 69 69
ENGENHARIA DE PRODUO PLENA
iterations: 114
funcCount: 210
algorithm: 'Nelder-Mead simplex direct search'

Usando opes, podemos tornar o resultado mais acurado. Fazemos isso aumentando a
tolerncia do clculo da funo com o opo TolFun e a tolerncia de x com TolX:

>> options = optimset('Display', 'none', 'TolFun', 1e-8, 'TolX', 1e-8);
>> [xmin, fxmin, conv, saida] = fminsearch('rosembrock', [-1.9, 2], options)
xmin =
1.00000000126077 1.0000000023079
fxmin =
6.1538588433611e-018
conv =
1
saida =
iterations: 144
funcCount: 266
algorithm: 'Nelder-Mead simplex direct search'

Repare que com o aumento da tolerncia (que antes era o valor padro de 1e-4), o nmero de
iteraes aumentou e a preciso do resultado tambm.

14.4 14.4 14.4 14.4 Questes Prticas Questes Prticas Questes Prticas Questes Prticas

Para aumentar a eficincia da computao numrica e melhorar as chances de convergncia do
algoritmo de busca de zeros e extremos usando o MATLAB, algumas sugestes:

1- Comece com uma boa aproximao inicial.
2- Se componentes da soluo esto separados por vrias ordens de magnitude, considere a
possibilidade de escalon-los para melhorar a eficincia e preciso da iterao.
3- Se o problema complicado, divida-o em problemas mais simples.
4- Tenha certeza que a funo no vai retornar nmeros complexos, Inf ou NANs.
5- Evite funes descontnuas.
APOSTILA DE MATLAB
70 70 70 70
ENGENHARIA DE PRODUO PLENA

15. 15. 15. 15. I II INTEGRAO E NTEGRAO E NTEGRAO E NTEGRAO E D DD DIFERENCIAO IFERENCIAO IFERENCIAO IFERENCIAO

A integrao e a diferenciao so ferramentas fundamentais do Clculo. O MATLAB possui
funes para aproximar numericamente a integrao e a inclinao de uma funo quando esta
fornecida em um arquivo M ou como uma funo in-line.

15.1 15.1 15.1 15.1 Integrao Integrao Integrao Integrao

A integrao pode ser realizada pela aproximao de uma funo por trapzios definidos a
intervalos constantes em relao ao eixo x.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Aproximao trapezoidal da funo de Humps (arquivo integral_trap.m integral_trap.m integral_trap.m integral_trap.m):

% integral_trap.m
x1 = -1:.17:2; % intervalo de 17 trapzios
y1 = humps(x1);
x2 = linspace(-1,2,100); % intervalo de 100 trapzios
y2 = humps(x2);
plot(x1, y1, 'ko:', x2, y2, 'b-'), hold on
x = linspace(-1,2);
y = zeros(1, size(x,2));
plot(x, y, 'k-') % eixo x
for i=1:18 % lados dos trapezios
plot([x1(i) x1(i)], [0 y1(i)], 'k:')
end
hold off

O grfico resultante mostrado a seguir:

APOSTILA DE MATLAB
71 71 71 71
ENGENHARIA DE PRODUO PLENA
Repare que a representao tracejada da funo de Humps uma aproximao da
representao com trao contnuo da mesma funo. A integral aproximada pode ser calculada por:

>> format long

>> area1 = trapz(x1, y1) % rea da aproximao com 17 trapzios
area1 =
25.91740000817554

>> area2 = trapz(x2, y2) % rea da aproximao com 100 trapzios
area2 =
26.34473119524596

Exemplo Exemplo Exemplo Exemplo 2 22 2 Calcule e exiba em grfico a funo I(x) = f(x) dx, para x em [x1, x] usando a
funo cumtrapz (arquivo integral_ integral_ integral_ integral_acumula acumula acumula acumula.m .m .m .m):

% integral_acumula.m
x = linspace(-1, 2, 100);
y = humps(x);
z = cumtrapz(x, y);
size(z)
plotyy(x, y, x, z)
grid on
xlabel('x'), ylabel('humps(x) e integral de humps(x)')
title('Integral cumulativa de humps(x)')

O grfico resultante mostrado a seguir:


No eixo y direita est a escala de valores da funo Humps, no eixo y esquerda
encontramos a escala de valores da integral da funo de Humps, I(x):

APOSTILA DE MATLAB
72 72 72 72
ENGENHARIA DE PRODUO PLENA

Melhor preciso pode ser obtida se a aproximao trapezoidal puder variar o intervalo de x de
acordo com as caractersticas da funo (maiores inclinaes pedem uma diminuio na altura do
trapzio, menores inclinaes pedem um aumento na altura). No confundir altura do trapzio com a
sua base (nas figura do exemplo 1, as base esto na vertical). O MATLAB possui as funes quad e
quadl que fazem esses ajustes automaticamente, resultado em maior preciso nos clculos.

Exemplo Exemplo Exemplo Exemplo 3 33 3 Calculo da integral da funo de Humps com maior preciso utilizando quad e
quadl:

>> format long

>> z(end) % valor final de cumtrapz (preciso de 4 dgitos significativos)
ans =
26.34473119524596

>> quad('humps', -1, 2) % preciso de 8 dgitos significativos
ans =
26.34496049276723

>> quadl('humps', -1, 2) % preciso de 8 dgitos significativos
ans =
26.34496047137897

No MATLAB tambm possvel resolver numericamente integrais duplas do tipo

I(x) = I(x) = I(x) = I(x) = f(x,y) dxdy f(x,y) dxdy f(x,y) dxdy f(x,y) dxdy. .. .

Para isso o MATLAB disponibiliza a funo dblquad.

Exemplo Exemplo Exemplo Exemplo 4 44 4 Seja a funo z definida no arquivo M a seguir (arquivo func_xy func_xy func_xy func_xy.m .m .m .m):

% func_xy.m
function z = func_xy(x, y)
z = sin(x).*cos(y) + 1;

A representao grfica ser feita atravs dos comandos a seguir (arquivo gr gr gr gra aa afico_func_xy.m fico_func_xy.m fico_func_xy.m fico_func_xy.m):

% grafico_func_xy.m
x = linspace(0, pi, 20);
y = linspace(-pi, pi, 20);
[xx, yy] = meshgrid(x, y);
zz = func_xy(xx, yy);
mesh(xx, yy, zz)
xlabel('x'), ylabel('y')
title('Grafico func_xy')


APOSTILA DE MATLAB
73 73 73 73
ENGENHARIA DE PRODUO PLENA



A integral (volume sobre a superfcie) pode ser calculada como:

>> area = dblquad('func_xy', 0, pi, -pi, pi)
area =
19.73920880217871

>> erro = (area - 2*pi^2)/2*pi^2 % o valor exato da integral e 2*pi^2
erro =
-1.753193928004989e-014


15.2 15.2 15.2 15.2 Diferenciao Diferenciao Diferenciao Diferenciao

Comparada integrao, a diferenciao numrica muito mais complicada. A integrao
descreve uma propriedade global da funo, enquanto a diferenciao representa a inclinao de uma
funo em um ponto. Como conseqncia, a diferenciao muito mais sensvel a pequenas
variaes na funo. Particularmente, a diferenciao numrica deve ser evitada sempre que possvel,
principalmente se os dados a serem derivados so obtidos experimentalmente. Nesse caso, melhor
realizar um ajuste de curva polinomial, usando quadrados mnimos, e depois derivar o polinmio
resultante.

Veremos a seguir um exemplo de diferenciao numrica que utiliza essa estratgia.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Diferenciao de uma curva obtida por ajuste de pontos usando o mtodo dos
quadrados mnimos:

APOSTILA DE MATLAB
74 74 74 74
ENGENHARIA DE PRODUO PLENA

Seja o conjunto de dados a seguir (arquivo ajuste_curva.m ajuste_curva.m ajuste_curva.m ajuste_curva.m):

>> x = [ 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];

>> y = [-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2 ];

Realizando a aproximao para um polinmio de segunda ordem:

>> n = 2;

>> p = polyfit(x, y, n)
p =
-9.8108 20.1293 -0.0317

O resultado o polinmio p(x) = p(x) = p(x) = p(x) = - -- -9.8108 x 9.8108 x 9.8108 x 9.8108 x
2 22 2
+ 20.1293 x + 20.1293 x + 20.1293 x + 20.1293 x - -- - 0.0317 0.0317 0.0317 0.0317. Comparando esse
resultado com os dados reais, temos:

>> xi = linspace(0, 1, 100);

>> yi = polyval(p, xi);

>> plot(x, y, '-o', xi, yi, '--')

>> xlabel('x'), ylabel('y=f(x)')

>> title('Aproximacao quadrtica')

>> hold on % o grfico ainda no est concludo

A diferenciao do polinmio feita com o uso do comando polyder:

>> pder = polyder(p)
pder =
-19.62167832167830 20.12929370629370

>> yder = polyval(pder, xi); % gera pontos da derivada para exibir grfico

>> plot(xi, yder, 'k:')

>> xlabel('x'), ylabel('y=f(x) e df(x)/dx')

>> hold off

A seqncia completa de comandos que gera o grfico a seguir est no arquivo derivada.m derivada.m derivada.m derivada.m. A
amostragem de pontos est representada pelo sinal o, a curva obtida por ajuste de quadrados
mnimos est representada em traos longos e a sua derivada em traos curtos.







APOSTILA DE MATLAB
75 75 75 75
ENGENHARIA DE PRODUO PLENA


Quando os dados so bidimensionais, a funo gradient utiliza diferenas centradas para
estimar a inclinao em dada direo, em cada ponto tabulado. Vejamos o prximo exemplo:

Exemplo Exemplo Exemplo Exemplo 2 22 2 Calcular e representar graficamente o gradiente de uma funo elementar do
MATLAB (funo peaks):

Todo o procedimento a seguir est documentado no arquivo gradiente.m gradiente.m gradiente.m gradiente.m, mostrado a seguir.

% gradiente.m
[x, y, z] = peaks(20); % funo elementar bidimensional
figure(1), mesh(x, y, z) % grfico de peaks
size(x)
size(y)
size(z)
dx = x(1,2) - x(1,1) % espaamento na direo x
dy = y(2,1) - y(1,1) % espaamento na direo y
[dzdx, dzdy] = gradient(z, dx, dy); % calcula o gradiente
size(dzdx)
size(dzdy)
figure(2), contour(x, y, z) % exibe os contornos
hold on
quiver(x, y, dzdx, dzdy) % representa as setas (direo do crescimento)
hold off
title('Gradiente da funcao peaks')

Os dois grficos produzidos so exibidos a seguir:
APOSTILA DE MATLAB
76 76 76 76
ENGENHARIA DE PRODUO PLENA
Funo peaks:



Gradiente de peaks:

APOSTILA DE MATLAB
77 77 77 77
ENGENHARIA DE PRODUO PLENA

18. 18. 18. 18. G GG GRFICOS RFICOS RFICOS RFICOS B BB BIDIMENSIONAIS IDIMENSIONAIS IDIMENSIONAIS IDIMENSIONAIS

At o momento, um grande nmero de grficos foi apresentado. Nesse captulo detalharemos
alguns recursos relativos a grficos em duas dimenses.

18.1 18.1 18.1 18.1 Uso do Comando plot Function Uso do Comando plot Function Uso do Comando plot Function Uso do Comando plot Function

Veremos a seguir alguns exemplos de utilizao do comando plot: :: :

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Criando um grfico com seno e co-seno:

>> x = linspace(0, 2*pi, 30);

>> y = sin(x);

>> z = cos(x);

>> plot(x,y,x,z)

>> title('Seno e co-seno')







APOSTILA DE MATLAB
78 78 78 78
ENGENHARIA DE PRODUO PLENA
18.2 18.2 18.2 18.2 Estilos de Linha, Marcadores e Cores Estilos de Linha, Marcadores e Cores Estilos de Linha, Marcadores e Cores Estilos de Linha, Marcadores e Cores

Alguns estilos de linha, marcadores e cores podem ser usados para diferenciar diferentes
funes representados no mesmo grfico. Veja o exemplo a seguir.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Melhorando o grfico da seo 18.1:

>> plot(x, y, 'b:p', x, z, 'k-', x, 1.25*z, 'm+')

Para conhecer as opes do comando plot, faa:

>> help plot


18.3 18.3 18.3 18.3 Grades, Eixos, Legendas e Ttulos Grades, Eixos, Legendas e Ttulos Grades, Eixos, Legendas e Ttulos Grades, Eixos, Legendas e Ttulos

O comando grid on adiciona linhas de grade ao grfico, tornando a sua leitura mais vivel. O
comando grid off desabilita a exibio das linhas de grade.

O comando box on habilita a exibio da caixa de eixos (essa opo o padro do MATLAB). O
comando box off desabilita a exibio da caixa de eixos.

Podemos atribuir nomes aos eixos horizontal e vertical usando, respectivamente, os comandos
xlabel e ylabel.

O comando axis([xmin xmax ymin ymax]) define os valores mnimo e mximo dos eixos
com base nos valores fornecidos pelo vetor linha.
APOSTILA DE MATLAB
79 79 79 79
ENGENHARIA DE PRODUO PLENA
O comando title adiciona uma linha de ttulo ao grfico. possvel inserir um texto em
qualquer posio do grfico com o comando text(x, y, texto). Vejamos um exemplo:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Melhorando o grfico da seo 18.2:

>> x = linspace(0, 2*pi, 30);

>> y = sin(x);

>> z = cos(x);

>> w = 1.5 .* y;

>> plot(x, y, 'b:p', x, z, 'k-', x, 1.25*z, 'm+')

>> box off

>> grid on

>> axis([-1, 7, -2, 2])

>> text(2.5, 0.7, 'sen(x)')

>> xlabel('eixo x')

>> ylabel('eixo y')

>> title('grafico experimental')





APOSTILA DE MATLAB
80 80 80 80
ENGENHARIA DE PRODUO PLENA

18.4 18.4 18.4 18.4 Grficos Mltiplos Grficos Mltiplos Grficos Mltiplos Grficos Mltiplos

No MATLAB possvel adicionar novos grficos utilizando o comando hold, que quando ligado
(hold on) capaz de desenhar um novo grfico sem sobrescrever o primeiro. Para que o novo grfico
substitua o anterior (padro do MATLAB), use o comando hold off.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Repetir o grfico da seo 18.3 apenas adicionado novos grficos usando o
comando hold:

>> x = linspace(0, 2*pi, 30);
>> y = sin(x);
>> z = cos(x);
>> w = 1.5 .* y;
>> plot(x, y, 'b:p') % observe o resultado gerado at aqui
>> hold on
>> box off
>> grid on
>> text(2.5, 0.7, 'sen(x)')
>> axis([-1, 7, -2, 2])
>> plot(x, z, 'k-') % observe o resultado gerado at aqui
>> xlabel('eixo x')
>> ylabel('eixo y')
>> title('grafico experimental')
>> plot(x, w, 'm+') % observe o resultado gerado at aqui
>> hold off

Essa seqncia de comandos est salva no arquivo graf_mult.m graf_mult.m graf_mult.m graf_mult.m.

18.5 18.5 18.5 18.5 Figuras Mltiplas Figuras Mltiplas Figuras Mltiplas Figuras Mltiplas

O MATLAB suporta naturalmente que cada grfico seja exibido em figuras (janelas) diferentes.
Para obter esse efeito deve-se usar o comando figure(n), onde n o nmero da figura. Para criar uma
figura nova, entre com um nmero indito para a sesso corrente de execuo do MATLAB. As figuras
podem ser fechadas com o comando close(n), onde n o nmero da figura.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Adaptar o arquivo graf_mult.m graf_mult.m graf_mult.m graf_mult.m para que cada grfico seja exibido em uma janela
sepadada (resuldado no arquivo graf_mult_janela.m graf_mult_janela.m graf_mult_janela.m graf_mult_janela.m):

% graf_mult_janela.
x = linspace(0, 2*pi, 30);
y = sin(x);
z = cos(x);
w = 1.5 .* y;
APOSTILA DE MATLAB
81 81 81 81
ENGENHARIA DE PRODUO PLENA
% grafico 1: y = sin(x)
figure(1), plot(x, y, 'b:p') % figure(1): abra janela 1
grid on
text(2.5, 0.7, 'sen(x)')
axis([0, 6, -2, 2])
xlabel('eixo x')
ylabel('eixo y')
title('grafico experimental sen(x)')
% grafico 2: z = cos(x)
figure(2), plot(x, z, 'k-') % figure(2): abra janela 2
grid on
text(1, 0.7, 'cos(x)')
axis([0, 6, -2, 2])
xlabel('eixo x')
ylabel('eixo y')
title('grfico experimental cos(x)')
% grafico 3: w = 1.5*sen(x)
figure(3), plot(x, w, 'm+') % figure(3): abra janela 3
grid on
text(2.2, 1.4, '1.5 sen(x)')
axis([0, 6, -2, 2])
xlabel('eixo x')
ylabel('eixo y')
title('grfico experimental 1.5*sen(x)')

18.6 18.6 18.6 18.6 Subgrficos Subgrficos Subgrficos Subgrficos

O MATLAB possibilita que vrios grficos sejam inseridos na mesma figura atravs do comando
subplot(m,n,p). Os grficos so exibidos em uma matriz m x n e o grfico ativo est na p-sima
posio.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Usar o comando subplot para exibir os grficos sen(x) sen(x) sen(x) sen(x), cos(x) cos(x) cos(x) cos(x), 2*sen(x)*cos(x) 2*sen(x)*cos(x) 2*sen(x)*cos(x) 2*sen(x)*cos(x) e
sen(x)/(cos(x) + eps) sen(x)/(cos(x) + eps) sen(x)/(cos(x) + eps) sen(x)/(cos(x) + eps). Arquivo subplot.m subplot.m subplot.m subplot.m:

% subgraficos.m
x = linspace(0, 2*pi, 30);
y = sin(x);
z = cos(x);
a = 2*sin(x).*cos(x);
b = sin(x)./(cos(x) + eps);
% primeiro grafico (alto, esquerda) de uma grade 2x2
subplot(2, 2, 1)
plot(x, y), axis([0 2*pi -1 1]), title('sen(x)')
APOSTILA DE MATLAB
82 82 82 82
ENGENHARIA DE PRODUO PLENA

% segundo grafico (alto, direita) de uma grade 2x2
subplot(2, 2, 2)
plot(x, z), axis([0 2*pi -1 1]), title('cos(x)')
% terceiro grafico (abaixo, esquerda) de uma grade 2x2
subplot(2, 2, 3)
plot(x, a), axis([0 2*pi -1 1]), title('2sen(x)cos(x)')
% quarto grafico (abaixo, direita) de uma grade 2x2
subplot(2, 2, 4)
plot(x, b), axis([0 2*pi -20 20]), title('sen(x)/(cos(x)')

A seguir, o resultado:

18.7 18.7 18.7 18.7 Grficos Bidimensionais Especializados Grficos Bidimensionais Especializados Grficos Bidimensionais Especializados Grficos Bidimensionais Especializados

No MATLAB possvel exibir grficos de setor (comando pie), barras (comando bar), barras em
trs dimenses (funo bar3), barras horizontais (funo barh), barras em 3d horizontais (funo
bar3h), em forma de escada (funo stairs), em forma de hastes (funo stem) e outros.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Grfico em forma de setor:

>> a = [ .5 1 1.6 1.2 .8 2.1 ];
>> pie(a, a==max(a)); % exibe o grafico e destaca a maior fatia
>> title('Matriculados por curso')
>> legend('Filosofia', 'Ciencia Computacao.', 'Administracao', ...
'Ciencias Contabeis', 'Marketing', 'Engenharia de Producao')
APOSTILA DE MATLAB
83 83 83 83
ENGENHARIA DE PRODUO PLENA



Exemplo Exemplo Exemplo Exemplo 2 22 2 Grfico em barra e escada. Arquivo gr gr gr gra aa aficos_barra.m ficos_barra.m ficos_barra.m ficos_barra.m:

% graficos_barra.m
x = -2.9:0.2:2.9;
y = exp(-x.*x);
subplot(2, 2, 1)
bar(x,y)
title('barra bidimensional')
subplot(2, 2, 2)
bar3(x, y, 'r')
title('barra tribidimensional')
subplot(2, 2, 3)
stairs(x, y, 'k')
title('escada')
subplot(2, 2, 4)
barh(x, y, 'b')
title('barra horizontal')

APOSTILA DE MATLAB
84 84 84 84
ENGENHARIA DE PRODUO PLENA

Exemplo Exemplo Exemplo Exemplo 3 33 3 Grfico mostrando barra de erros:





APOSTILA DE MATLAB
85 85 85 85
ENGENHARIA DE PRODUO PLENA

Veja o cdigo que produz o grfico anterior (arquivo gr gr gr gra aa aficos_barra ficos_barra ficos_barra ficos_barra_erro _erro _erro _erro.m .m .m .m) )) ):

% graficos_barra_erro.m
x = linspace(0, 2, 21);
y = erf(x); % funo de erro de x
e = rand(size(x))/10; % e contem valores de erro aleatrios
errorbar(x, y, e)
title ('grfico com barra de erro')

Exemplo Exemplo Exemplo Exemplo 4 44 4 Grfico em hastes:

>> z = randn(30, 1); % dados aleatrios

>> stem(z, '-') % grfico em hastes

>> set(gca, 'YGrid', 'on')% coloca grades em Y

>> title('grafico em haste')

O grfico:






APOSTILA DE MATLAB
86 86 86 86
ENGENHARIA DE PRODUO PLENA

19. 19. 19. 19. G GG GRFICOS RFICOS RFICOS RFICOS T TT TRIDIMENSIONAIS RIDIMENSIONAIS RIDIMENSIONAIS RIDIMENSIONAIS

No MATLAB possvel exibir grficos em trs dimenses. Podem ser usadas cores para
representar uma quarta dimenso.

19.1 19.1 19.1 19.1 Grficos de Linha Grficos de Linha Grficos de Linha Grficos de Linha

Os grficos de linha so representados com a funo plot3. Vejamos alguns exemplos:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Grfico hlice (arquivo helice.m helice.m helice.m helice.m):

% helice.m
t = linspace(0, 10*pi);
plot3(sin(t), cos(t), t)
xlabel('sen(t)'), ylabel('cos(t)'), zlabel('t')
text(0, 0, 0, 'Origem')
grid on
title('Helice')
v = axis % exibe os eixos




APOSTILA DE MATLAB
87 87 87 87
ENGENHARIA DE PRODUO PLENA

Os grficos de linha so representados com a funo plot3. Vejamos alguns exemplos:

19.2 19.2 19.2 19.2 Funes Funes Funes Funes E EE Escala scala scala scalares de Duas Variveis res de Duas Variveis res de Duas Variveis res de Duas Variveis

Seja a funo z = f(x, y) z = f(x, y) z = f(x, y) z = f(x, y), onde x e y so variveis independentes:

No MATLAB, z zz z uma matriz que pode ser descrita em funo das matrizes x x x x e y yy y assim:

z(i,:) = f(x, y(i)) e z(:,j) = f(x(j), y)

Ou seja, a i ii i- -- -sima sima sima sima linha de z est associada i ii i- -- -sima sima sima sima linha de y yy y e a j jj j- -- -sima sima sima sima coluna de z zz z est
associada a j jj j- -- -sima sima sima sima coluna de x xx x. O MATLAB oferece o comando meshgrid para executar esse processo:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Entendendo o funcionamento do comando meshgrid:

>> x = -3:3 % intervalo do eixo x
x =
-3 -2 -1 0 1 2 3

>> y = 1:5 % intervalo do eixo y
y =
1 2 3 4 5

>> [X , Y] = meshgrid(x, y)
X =
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3
Y =
1 1 1 1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3 3
4 4 4 4 4 4 4
5 5 5 5 5 5 5

Repare que meshgrid repetiu x xx x em cada uma das 5 linhas de y yy y e repetiu y yy y em cada uma das 7
colunas de x xx x. Dados X XX X e Y YY Y, se z = f(x, y) = (x + y) z = f(x, y) = (x + y) z = f(x, y) = (x + y) z = f(x, y) = (x + y)
2 22 2
, a matriz de valores que define a superfcie
tridimensional dada por:

>> Z = (X + Y).^2
Z =
4 1 0 1 4 9 16
1 0 1 4 9 16 25
0 1 4 9 16 25 36
1 4 9 16 25 36 49
4 9 16 25 36 49 64

Exibindo o grfico:

>> mesh(X, Y, Z)
APOSTILA DE MATLAB
88 88 88 88
ENGENHARIA DE PRODUO PLENA

19.3 19.3 19.3 19.3 Grficos de Rede Grficos de Rede Grficos de Rede Grficos de Rede

Os grficos de rede so definidos por meio de coordenadas z dos pontos correspondentes a
uma grade retangular no plano x-y. Muitos exemplos desse tipo foram exibidos at aqui.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Esferas (arquivo esferas.m esferas.m esferas.m esferas.m):


O arquivo:
% esferas.m
[ X, Y, Z ]= sphere(12);
subplot(1, 2, 1)
mesh(X, Y, Z), title('Opaco')
hidden on
APOSTILA DE MATLAB
89 89 89 89
ENGENHARIA DE PRODUO PLENA
axis square off
subplot(1, 2, 2)
mesh(X, Y, Z), title('Transparente')
hidden off
axis square off

Exemplo Exemplo Exemplo Exemplo 2 2 2 2 - -- - Variaes do comando mesh: (1) grfico de rede com curvas de nvel (funo
meshc) e (2) grfico de rede com plano no nvel zero (funo meshz).

>> [X, Y, Z] = peaks(30);

>> figure(1), meshc(X, Y, Z) % grafico de rede com curvas de nvel

>> title('grafico de rede com curvas de nivel')

>> figure(2), meshz(X, Y, Z) % grafico de rede plano no nivel zero

>> title('grafico de rede com um plano zero')



APOSTILA DE MATLAB
90 90 90 90
ENGENHARIA DE PRODUO PLENA


19.4 19.4 19.4 19.4 Grficos de Superfcie Grficos de Superfcie Grficos de Superfcie Grficos de Superfcie

O grfico de superfcie parecido com o grfico de rede, exceto que no grfico de superfcie
os espaos entre as linhas so preenchidos. Esses grficos so gerados usando a funo surf.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Tipos diferentes de grfico de superfcie (arquivo graf_superficie.m graf_superficie.m graf_superficie.m graf_superficie.m):

% graf_superficie.m
[X, Y, Z] = peaks(20);
figure(1), surf(X, Y, Z)
xlabel('eixo X'), ylabel('eixo Y'), zlabel('eixo Z')
title('grafico de superficie')
figure(2), surf(X, Y, Z)
shading flat
xlabel('eixo X'), ylabel('eixo Y'), zlabel('eixo Z')
title('grafico de superficie com shading flat')
figure(3), surf(X, Y, Z)
shading interp
xlabel('eixo X'), ylabel('eixo Y'), zlabel('eixo Z')
title('grafico de superficie com shading interpolado')



APOSTILA DE MATLAB
91 91 91 91
ENGENHARIA DE PRODUO PLENA







APOSTILA DE MATLAB
92 92 92 92
ENGENHARIA DE PRODUO PLENA




APOSTILA DE MATLAB
ENGENHARIA DE PRODUO PLENA

B BB BIBLIOGRAFIA IBLIOGRAFIA IBLIOGRAFIA IBLIOGRAFIA

1) Hanselman, Duane e Littlefield, Bruce; M MM MATLAB ATLAB ATLAB ATLAB 6 66 6 C CC CURSO URSO URSO URSO C CC COMPLETO OMPLETO OMPLETO OMPLETO; ;; ; Pearson Education; Rio de
Janeiro, 2003.
2) Gustafsson, Fredrik; Bergman, Niclas; M MM MATLAB ATLAB ATLAB ATLAB FOR FOR FOR FOR E EE ENGINEERS NGINEERS NGINEERS NGINEERS E EE EXPLAINED XPLAINED XPLAINED XPLAINED; ;; ; Pearson Education; Rio de
Janeiro, 2003. Springer, 1a edio, maro de 2003.