You are on page 1of 95

APOSTILA DE MATLAB

ENGENHARIA DE PRODUÇÃO PLENA
















M MM MATLAB ATLAB ATLAB ATLAB








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

ENGENHARIA DE PRODUÇÃO PLENA

ÍNDICE:
MÓDULO I
1. RECURSOS BÁSICOS DO MATLAB E AMBIENTE DO MATLAB
2. ARQUIVOS M DE COMANDOS
3. OPERANDO COM VETORES E MATRIZES
4. OPERADORES LÓGICOS E RELACIONAIS
5. CONTROLE DE FLUXO
MÓDULO II:
6. ARQUIVOS M DE FUNÇÕES
7. EXECUÇÃO DE FUNÇÕES COM EVAL E FEVAL
8. FUNÇÕES SOBRE CONJUNTOS, BITS E CONVERSÃO ENTRE BASES
9. TEMPO
10. ÁLGEBRA MATRICIAL
MÓDULO III:
11. ANÁLISE DE DADOS
12. INTERPOLAÇÃO
13. POLINÔMIOS
14. OTIMIZAÇÃO
15. INTEGRAÇÃO E DIFERENCIAÇÃO
MÓDULO IV:
16. GRÁFICOS BIDIMENSIONAIS
17. GRÁFICOS TRIDIMENSIONAIS
18. INTERFACE GRÁFICA COM O USUÁRIO (GUI)

APOSTILA DE MATLAB
1 11 1
ENGENHARIA DE PRODUÇÃO PLENA

1. 1. 1. 1. R RR RECURSOS ECURSOS ECURSOS ECURSOS B BB BÁSICOS 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 operações básicas, ou seja, as operações
básicas da matemática. Em seguida vamos conhecer um pouco o espaço de trabalho do MATLAB,
algumas variáveis especiais, comentários, números complexos, aritmética de ponto flutuante e
funções matemáticas.

1.1 1.1 1.1 1.1 Matemática Elementar Matemática Elementar Matemática Elementar Matemática Elementar

Seja a expressão:

50 x 4 + 20 x 2 – 35 = 205.
No ambiente MATLAB a mesma expressão seria avaliada assim:

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

Podemos definir variáveis para conter os valores da expressão 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 preço dos produtos comprados?

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

O quadro a seguir mostra as operações aritméticas elementares:

Operação Operação Operação Operação Símbolo Símbolo Símbolo Símbolo Exempl Exempl Exempl Exemplo oo o
Adição + 3 + 44 3 + 44 3 + 44 3 + 44
Subtração - 33.3 33.3 33.3 33.3 – –– – 22.2 22.2 22.2 22.2
Multiplicação * 3.1415 * 2 3.1415 * 2 3.1415 * 2 3.1415 * 2
Divisão / ou \ 10 / 2 ou 12 10 / 2 ou 12 10 / 2 ou 12 10 / 2 ou 12 \ \\ \ 3 33 3
Potenciação ^ 3^4 3^4 3^4 3^4
APOSTILA DE MATLAB
2 22 2
ENGENHARIA DE PRODUÇÃO PLENA

1.2 1.2 1.2 1.2 Espaço de Trabalho do Espaço de Trabalho do Espaço de Trabalho do Espaço de Trabalho do M MM MATLAB ATLAB ATLAB ATLAB

Na figura 1 vemos a interface gráfica do MATLAB.


A maioria do trabalho no MATLAB será realizada na Janela de Comando (Command Window).
Nela os comando serão digitados. A janela Launch Pad é uma maneira rápida de acessa a
documentação do MATLAB por Toolboxes. As Toolboxes são conjuntos de comandos que resolvem
problemas de áreas específicas do conhecimento, tais como processamento de imagens, estatística,
finanças, controle automático e etc. A janela Histórico de Comando (Command History) possui uma
lista de todos os comandos que foram executados na janela de comandos. A área de trabalho do
MATLAB é configurável pelo menu View.

O MATLAB guarda na memória do computador as variáveis que foram utilizadas sendo possível
ver as suas características. 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 PRODUÇÃO PLENA
Para limpar a memória vasta utilizar o seguinte comando:

>> clear

Pode-se repetir um comando selecionando-o na janela de histórico de comandos e com o
botão direito do mouse escolhendo a opção evaluate.

1.3 1.3 1.3 1.3 V VV Variáveis, Comentários e Formas de Interromper um Comando ariáveis, Comentários e Formas de Interromper um Comando ariáveis, Comentários e Formas de Interromper um Comando ariáveis, Comentários e Formas de Interromper um Comando

As regras para criação de variáveis são:
o As variáveis distinguem maiúsculas de minúsculas, ou seja, Custo, custo e CUSTO
representam variáveis diferentes;
o As variáveis podem conter até 31 caracteres;
o As variáveis devem começar com uma letra, seguida de letras ou algarismos. Sinais de
pontuação não são permitidos;
o Palavras reservadas do MATLAB não são 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á necessário 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 Números Complexos Números Complexos Números Complexos Números Complexos

Com MATLAB é muito fácil trabalhar com números 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 operações aritméticas básicas podem ser aplicadas livremente aos números 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 PRODUÇÃO PLENA

Obtendo a parte real e imaginária de um número 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 Aritmética de Ponto Flutuante Aritmética de Ponto Flutuante Aritmética de Ponto Flutuante Aritmética de Ponto Flutuante

Os valores numéricos no MATLAB são representados em aritmética de precisão dupla utilizando
uma representação interna binária (base 2). Devido a limitações do modelo de representação
numérica, nem todos os números são representados exatamente. Além disso, existem limites máximo
e mínimo na representação 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 mão, os três resultados serão o mesmo, ou seja,
zero. Entretanto, no MATLAB isso não ocorre devido a limitações do modelo interno de representação
numérica.

>> 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 avaliação de funções 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 PRODUÇÃO 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 exercícios.

Dica importante 3: Dica importante 3: Dica importante 3: Dica importante 3: Para fazer log da sessão 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 diretórios 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 conteúdo de MATLABPATH execute o comando matlabpath matlabpath matlabpath matlabpath.

1.6 1.6 1.6 1.6 Exercícios: Exercícios: Exercícios: Exercícios:

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 funções round, floor, ceil e fix para o número 2.6
g) Veja o conteúdo da memória (use whos)
h) Limpe o conteúdo da memoória (use clear)
i) Ache a parte real e imaginária da soma dos números 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 PRODUÇÃO 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 situações é mais conveniente ter um arquivo de comandos do que ficar digitando
cada variável 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 conteúdo do arquivo é idêntico ao que seria digitado na linha de comando do
MATLAB. O ponto e virgula (;) no final da linha significa que o comando não terá o resultado exibido na
saída padrão.

Exercício:
a) Defina um diretório qualquer no seu computador como o diretório 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 não estava formatado de forma adequada. Isso pode ser corrigido
com o comando format. É interessante também que o programador forneça os dados de entrada. Isso
será resolvido com o comando input.
APOSTILA DE MATLAB
7 77 7
ENGENHARIA DE PRODUÇÃO PLENA

Veja o exemplo adaptado:

% lista de material escolar #1
% quantidade de cada item
format bank % exibe os números 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. Exercícios Exercícios Exercícios Exercícios
a) Teste no exemplo anterior (Exemplo2_2.m) o comando echo. Use echo on no início 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 PRODUÇÃO PLENA

3. 3. 3. 3. O OO OPERAÇÕES COM PERAÇÕES COM PERAÇÕES COM PERAÇÕES 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 característica marcante do MATLAB é a facilidade na manipulação de vetores e matrizes.
Veja como exemplo a avaliação da seguinte função:

y = sen(x), 0 ≤ x ≤ π

No computador, o domínio 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 posições do vetor são numeradas a partir da posição 1 e não de zero
como na maioria das linguagens de programação. 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 posição 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 PRODUÇÃO PLENA

3.3 3.3 3.3 3.3 Construção de Vetores Construção de Vetores Construção de Vetores Construção de Vetores

Como fazer no caso de o vetor da seção 3.1 ter 100 elementos, ao invés 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 necessária uma seqüência logarítmica? 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, várias 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 PRODUÇÃO PLENA
3.5
4
4.5
5

O operador aspas simples (‘) representa a transposição de um vetor. Para um vetor de
números 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 transposição do complexo conjugado, ou seja, troca o
sinal da parte imaginária. Para fazer a transposição de um vetor de números complexos sem alterar o
sinal da parte imaginária 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 vírgula (;). Veja o exemplo a seguir:

>> d = [1 2; 3 4; 5 6]
d =
1 2
3 4
5 6
Também é válido 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 PRODUÇÃO PLENA
>> d = [a; b; c]
d =
1 2
3 4
5 6

3.4 3.4 3.4 3.4 Matemática Vetor x Escalar e Vetor x Vetor Matemática Vetor x Escalar e Vetor x Vetor Matemática Vetor x Escalar e Vetor x Vetor Matemática Vetor x Escalar e Vetor x Vetor

A multiplicação de um vetor por um escalar, aproveitando o vetor d definido na seção 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 operações básicas:

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

Agora algumas operações entre vetores. Lembrando o óbvio: os vetores devem ser
compatíveis. Dadas duas matrizes g e h compatíveis para a soma e a subtração, 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 subtração:

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

A multiplicação 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 divisão 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 divisão de matrizes é uma operação totalmente diferente da divisão 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 capítulo à 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 operação equivale a multiplicar q por q. Para isso as dimensões tem que ser
compatíveis!
APOSTILA DE MATLAB
13 13 13 13
ENGENHARIA DE PRODUÇÃO PLENA

Mas é possível 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 Padrão Matrizes Padrão Matrizes Padrão Matrizes Padrão

No MATLAB há comandos para criar algumas matrizes que são 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 dimensão 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 dimensões de uma matriz, pode-se utilizar o comando:

>> size(z)
ans =
3 2

Pode-se também 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 PRODUÇÃO PLENA

Pode-se obter também matrizes de números aleatórios:

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

A função 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 Manipulação de Vetores e Matrizes Manipulação de Vetores e Matrizes Manipulação de Vetores e Matrizes Manipulação 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 PRODUÇÃO PLENA
E se executarmos o comando A(2 , 6) = 20, o que ocorre? Veja a execução 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 três colunas foram acrescentadas à matriz e preenchidas com zeros, exceto a
posição (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 contém todas as linhas de A em ordem decrescente e as
colunas de b com a ordem mantida. Há três 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 ordenação de vetores e matrizes. Dado o vetor aleatório x:

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

A ordenação crescente de x é obtida assim:

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

Pode-se também 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 PRODUÇÃO PLENA
Como funciona a ordenação 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! Também é possível forçar a ordenação por colunas
(segunda dimensão):

>> 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 ordenação 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 é possível 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 à condição
abs(x) > 1.

Para a matriz A, find retorna os vetores i e j contendo, respectivamente, os números da linha
e da coluna dos elementos de A que satisfazem à condição A>4:
APOSTILA DE MATLAB
17 17 17 17
ENGENHARIA DE PRODUÇÃO 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 máximo ou mínimo 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 máximo ou o mínimo 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 máximo ou mínimo pode-se fazer:

APOSTILA DE MATLAB
18 18 18 18
ENGENHARIA DE PRODUÇÃO 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 Funções para Manipular Vetores e Matrizes Funções para Manipular Vetores e Matrizes Funções para Manipular Vetores e Matrizes Funções para Manipular Vetores e Matrizes

A seguir algumas funções para manipulação 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 PRODUÇÃO PLENA

4. 4. 4. 4. O OO OPERADORES PERADORES PERADORES PERADORES R RR RELACIONAIS E ELACIONAIS E ELACIONAIS E ELACIONAIS E L LL LÓGICOS Ó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 lógicos habituais:

Operador Operador Operador Operador Descrição Descrição Descrição Descrição
< Menor que
<= Menor ou igual a
> Maior que
>= Maior ou igual a
== Igual (não confundir com =)
~= Diferente de

Exemplo: Dois vetores, A e B, são 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ó contém zeros pois, para elementos de mesma posição
em A e B, não 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 LÓGICOS ÓGICOS ÓGICOS ÓGICOS

Os operadores lógicos são:

Operador Lógico Operador Lógico Operador Lógico Operador Lógico Descrição Descrição Descrição Descrição
& E
| OU
~ ~~ ~ NÃO

Exemplo: Negação de um resultado.

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

APOSTILA DE MATLAB
20 20 20 20
ENGENHARIA DE PRODUÇÃO 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: Geração de um sinal descontínuo. Digite os comando a seguir e observe o resultado
(gráfico 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 PRODUÇÃO PLENA

4.3. 4.3. 4.3. 4.3. P PP PRECEDÊNCIA DE RECEDÊNCIA DE RECEDÊNCIA DE RECEDÊNCIA DE O OO OPERADORES PERADORES PERADORES PERADORES

É extremamente importante saber a precedência dos operadores em MATLAB. Na tabela a seguir
mostra-se a ordem de execução dos mesmos do mais forte para o mais fraco.

Operador Operador Operador Operador Nível de precedência Nível de precedência Nível de precedência Nível de precedência
Parênteses () Maior
Transposição (.’), transposição conjugada (‘), potência (.^),
potência de matriz (^)

Sinal positivo(+), sinal negativo (-), negação (~)
Multiplicação (.*), multiplicação matricial (*),divisão à direita
(./), divisão à esquerda (.\), divisão matricial à direita (/),
divisão matricial à esquerda (\)

Adição (+), subtração (-)
Dois pontos (:)
Menor que (<), menor ou igual a (<=), maior que (>), maior
ou igual a (>=), igual a (==), diferente de (~=)

E lógico (&)
OU lógico (|) Menor


4.4 4.4 4.4 4.4 Exercícios Exercícios Exercícios Exercícios

a) Pesquise no Help do MATLAB os comandos xor, any e all. Faça um teste com cada um
deles.
b) Pesquisa as funções isXXX. Existe alguma que verifica se um elemento é numérico?



APOSTILA DE MATLAB
22 22 22 22
ENGENHARIA DE PRODUÇÃO 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 criação de cinco estruturas de tomada de decisão ou controle de fluxo:
laços for, laços while e estruturas if-else-end e switch-case, e blocos try-catch.

5.1 5.1 5.1 5.1 Laços for Laços for Laços for Laços 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 laço 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 variável:

>> 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 PRODUÇÃO 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) são mais eficientes do que os
laços exibidos nos exemplos anteriores.

5.2 5.2 5.2 5.2 Laços while Laços while Laços while Laços while

A sintaxe do comando while é a seguinte:

while (expressão)
comandos ...
end
APOSTILA DE MATLAB
24 24 24 24
ENGENHARIA DE PRODUÇÃO PLENA

Vejamos um exemplo que calcula o menor número que pode ser adicionado a 1 tal que o
resultado seja maior que 1 usando precisão finita. Esse número é representado no MATLAB pela
variável eps (minúscula). O nosso eps será maiúsculo (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 % número de iterações
num =
53
>> EPS = 2*EPS % multiplica por 2, pois EPS não é representável ...
EPS =
2.2204e-016

O comando while apresenta as mesmas restrições 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 expressão
comandos ...
end

Caso haja uma condição negativa, pode-se utilizar:

if expressão
comandos ...
else
outros comandos ...
end

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

if expressão1
comandos ...
elseif expressão2
outros comandos (se a expressão2 for verdadeira)...
elseif expressão3
outros comandos (se a expressão3 for verdadeira)
elseif expressão4
.
.
.
else
caso nenhuma expressão anterior seja verdadeira
end




APOSTILA DE MATLAB
25 25 25 25
ENGENHARIA DE PRODUÇÃO PLENA

Como exemplo, o cálculo do EPS utilizando while ao invés 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 PRODUÇÃO PLENA

6. 6. 6. 6. A AA ARQUIVOS RQUIVOS RQUIVOS RQUIVOS M MM M DE DE DE DE F FF FUNÇÕES UNÇÕES UNÇÕES UNÇÕES

A criação de arquivos M de funções no MATLAB é uma tarefa simples e intuitiva, ou seja, segue
as regras que, de maneira geral, estão presentes em muitas linguagens de programação. 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 função que faça o cálculo do EPS utilizando um dos métodos
apresentados no capítulo anterior:
Passo 1: No menu do MATLAB escolha a opção File > New > M-File.
Passo 2: Digite o código 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 função deve ser idêntico ao
nome do arquivo.
Passo 4: Na janela de comandos do MATLAB experimente:

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

Algumas considerações:
1- O arquivo sempre começa com function;
2- EPS é o nome da variável de retorno;
3- O sinal de atribuição indica que, ao final da execução, a variável EPS receberá valor
calculado pela função calcula_EPS;
4- O nome da função é calcula_EPS;
5- A função 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 função que recebe como parâmetro os coeficientes de uma equação de
segundo grau e retorna a solução da mesma:
Passo 1: No menu do MATLAB escolha a opção File > New > M-File.
Passo 2: Digite o código a seguir:

APOSTILA DE MATLAB
27 27 27 27
ENGENHARIA DE PRODUÇÃO 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 função deve ser idêntico ao
nome do arquivo.

Algumas considerações:
1- Há nesta função duas variáveis de retorno, x1 e x2;
2- A variável nargin contém o número de parâmetros de entrada;
3- A função error exibe uma mensagem caso nargin seja diferente de 3;
4- A função 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 função calcula_centroide_Paralelepipedo recebe dois vetores contendo
(cada um) as coordenadas espaciais x, y e z dos vértices diametralmente opostos de um
paralelepípedo e retorna as coordenadas do centróide do mesmo. Há uma validação para o número de
parâmetros e uma validação para o caso de os vértices fornecidos não formarem uma diagonal do
paralelepípedo.

Usando o passo a passo do exemplo 2, crie e execute esta função 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 PRODUÇÃO PLENA
7. 7. 7. 7. E EE EXECU XECU XECU XECUÇÃO DE ÇÃO DE ÇÃO DE ÇÃO DE F FF FUNÇÕES COM UNÇÕES COM UNÇÕES COM UNÇÕES COM EVAL EVAL EVAL EVAL E E E E FEVAL FEVAL FEVAL FEVAL

Em algumas situações, para a execução de uma função, a o nome e parâmetros da função são
passados a uma outra função. Isso é denominado avaliação de uma função. Em MATLAB há duas
maneiras de fazer a avaliação de funções: usando a função eval ou a função feval. A
diferença entre as duas é que eval chama todo o interpretador de comandos do MATLAB para
executar a string, enquanto feval avalia apenas a função. Consequentemente, feval é muito
mais eficiente, principalmente se a função precisar ser executada várias vezes como parte de
algum processo iterativo.

7.1 7.1 7.1 7.1 Primeiro Primeiro Primeiro Primeiro Exemplo Exemplo Exemplo Exemplo – –– – Avaliação padrão Avaliação padrão Avaliação padrão Avaliação padrão (sem eval ou feval) (sem eval ou feval) (sem eval ou feval) (sem eval ou feval)

Seja a função definida como:

>> minhafun = 100 * (y - x^2)^2 + (1 - x)^2; % avaliação teclando <ENTER>

>> minhafun
minhafun =
31.4000

7.2 7.2 7.2 7.2 Segundo Exemplo Segundo Exemplo Segundo Exemplo Segundo Exemplo – –– – Avaliação Avaliação Avaliação Avaliação com eval com eval com eval com eval

Seja a função minhafun definida como:

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

Definindo os parâmetros x e y:

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

Verificando o conteúdo de minhafun:

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

Finalmente a avaliação:

>> a = eval(minhafun)
a =
31.4000

APOSTILA DE MATLAB
29 29 29 29
ENGENHARIA DE PRODUÇÃO PLENA

7.3 7.3 7.3 7.3 Terceiro Exemplo Terceiro Exemplo Terceiro Exemplo Terceiro Exemplo – –– – Avaliação com Avaliação com Avaliação com Avaliação com f ff feval eval eval eval

Para usar feval primeiro é necessário gerar uma versão inline de minhafun. Deve-se fazer
isso, pois feval precisa receber como parâmetro a lista de parâmetros de minhafun. O passo
a passo é mostrado a seguir:


Define a função:

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

Converte para função 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 função com parâmetros:

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

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

Quais são os parâmetros da função?

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

APOSTILA DE MATLAB
30 30 30 30
ENGENHARIA DE PRODUÇÃO PLENA


8. 8. 8. 8. F FF FUNÇÕES SOBRE UNÇÕES SOBRE UNÇÕES SOBRE UNÇÕES SOBRE C CC CONJUNTOS ONJUNTOS ONJUNTOS ONJUNTOS, ,, , B BB BITS E ITS E ITS E ITS E C CC CONVERSÃO ENTRE ONVERSÃO ENTRE ONVERSÃO ENTRE ONVERSÃO ENTRE B BB BASES ASES ASES ASES

8.1 8.1 8.1 8.1 Funç Funç Funç Funções ões ões ões sobre Conjuntos sobre Conjuntos sobre Conjuntos sobre Conjuntos

Frequentemente é necessário comparar dois conjuntos. No MATLAB há a função isequal, que
desempenha esta tarefa para vetores, variáveis 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 variáveis com isequal:

>> a = rand(2,5); % vetor aleatório de distribuição uniforme

>> b = randn(2,5); % vetor aleatório de distribuição normal

>> isequal(a,b) % a e b NÃO são iguais
ans =
0

>> isequal(a,a) % a e b são iguais
ans =
1

Para strings também 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 PRODUÇÃO PLENA

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

A função 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 também 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 operações de aritmética de conjuntos, tais como union, intersect, setdiff e
setxor.


APOSTILA DE MATLAB
32 32 32 32
ENGENHARIA DE PRODUÇÃO PLENA

Exemplo 4 Exemplo 4 Exemplo 4 Exemplo 4 – –– – Testando outras operações de aritmética 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) % união de elementos de a com elementos de b
ans =
1 2 3 4 5 6 7 8 9

>> intersect(a,b) % intersecção de a com b
ans =
2 4 6 8

>> setxor(a,b) % estão em a ou em b, mas não na intersecção 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 Funções sobre Bits Funções sobre Bits Funções sobre Bits Funções sobre Bits

O MATLAB permite operações lógicas 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 representação para hexadecimal:

>> format hex

>> bitmax
ans =
433fffffffffffff

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Algumas operações bit a bit:

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

>> dec2bin(a) % representação do dado de entrada em binário
ans =
111111111111111111111111


APOSTILA DE MATLAB
33 33 33 33
ENGENHARIA DE PRODUÇÃO PLENA

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

>> dec2bin(b) % representação do dado de entrada em binário
ans =
111010110111100110100010101

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

>> dec2bin(ans) % representação resultado em binário
ans =
10110111100110100010101

Para um melhor entendimento do que aconteceu, os números a, b e ans são colocados na
tabela a seguir. Repare o resultado é obtido através da operação E LÓGICO 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) % obtém o décimo terceiro bit de b
ans =
0000000000000000

>> dec2bin(ans)
ans =
0

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

>> dec2bin(ans)
ans =
111010110111101110100010101

APOSTILA DE MATLAB
34 34 34 34
ENGENHARIA DE PRODUÇÃO PLENA

8.3 8.3 8.3 8.3 Conversões Conversões Conversões Conversões de Base de Base de Base de Base

O MATLAB possui diversas funções de conversão de números decimais para strings de
caracteres contendo estes números em outras bases. Vejamos alguns exemplos:

>> dec2bin(64) % converte 64 decimal para binário
ans =
1000000

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

>> bin2dec(ans) % volta para a representação decimal
ans =
64

>> class(ans)
ans =
double

É possível 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 PRODUÇÃO PLENA

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

O MATLAB possui diversas funções para manipulação de dados relativos à medição de tempo. É
possível fazer várias operações aritméticas com datas e horas, imprimir calendários e procurar dias
específicos.

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 função 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 número através do comando now:

>> format long

>> now
ans =
7.330916349945718e+005

Os dois resultados representam a mesma informação.

A função date fornece uma representação em string da data atual:

>> date
ans =
18-Feb-2007

9.2 9.2 9.2 9.2 Conversão de Formatos Conversão de Formatos Conversão de Formatos Conversão de Formatos

Como vimos na seção anterior, o MATLAB possui três maneiras de representar datas: (1) número
de data de precisão dupla, (2) textos (strings de caracteres) e (3) vetor numérico. As operações
matemáticas com datas são realizadas com a data no formato numérico (1), ou como vetor (2), mas a
compreensão do seu valor é praticamente impossível nesses formatos. Portanto é necessário
converter datas do formato numérico 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 PRODUÇÃO 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 aplicações do comando datestr:

>> t = now % obtém data atual
t =
7.3309e+005

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

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

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

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


APOSTILA DE MATLAB
37 37 37 37
ENGENHARIA DE PRODUÇÃO PLENA

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

>> datestr(t,13) % obtém 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 Funções de Data Funções de Data Funções de Data Funções de Data

A função weekday fornece o dia da semana a partir de um texto ou de um número de data. o
MATLAB usa a convenção de que domingo = 1 e sábado = 7.

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

O último dia do mês pode ser descoberto usando eomday:

>> eomday(2000,2) % ano bissexto, mês de fevereiro
ans =
29

>> eomday(2001,2) % ano não bissexto, mês de fevereiro
ans =
28

A função calendar pode gerar um calendário para qualquer mês 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 PRODUÇÃO PLENA

9.4 9.4 9.4 9.4 Funções de Cron Funções de Cron Funções de Cron Funções de Crono oo ometragem metragem metragem metragem

Em algumas ocasiões pode ser necessário cronometrar uma ou mais operações. Nesse caso
podem-se utilizar os comandos tic (liga o cronômetro) e toc (liga o cronômetro).

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

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

Repare a diferença de tempo entre as duas execuções consecutivas. A segunda é muito mais
rápida (cerca de 5% do tempo total da primeira), pois a janela gráfica já está carregada na memória.

Outra maneira de cronometrar é utilizando a função cputime, que contabiliza o tempo de
processamento (em segundos) desde o início da sessão MATLAB.

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

9.5 9.5 9.5 9.5 Datas e Horas em Gráficos Datas e Horas em Gráficos Datas e Horas em Gráficos Datas e Horas em Gráficos

O MATLAB possui uma função chamada datetick que automatiza a tarefa de inclusão de textos
de tempo ou data eixos de gráficos. Monte os exemplos a seguir em arquivos .M de função:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Gráfico de população. 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 – –– – Gráfico 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 função vendas para receber, ano, mês e venda como parâmetros.
APOSTILA DE MATLAB
39 39 39 39
ENGENHARIA DE PRODUÇÃO PLENA

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

Embora o MATLAB aceite matrizes de n dimensões, a álgebra matricial é definida apenas para
matrizes de uma ou duas dimensões. Um problema fundamental da álgebra linear é a solução de
sistemas de equações. De modo geral, a solução depende da relação entre o número de equações e
incógnitas do seguinte modo:
o Sistema possível e determinado: número de equações igual ao número de incógnitas
(apenas uma solução);
o Sistema impossível (sobredeterminado): número de equações maior do que o número de
incógnitas (não há solução para o sistema) e
o Sistema possível e indeterminado: número de equações menor do que o número de
incógnitas (número infinito de soluções).

10.1 10.1 10.1 10.1 Sistemas de Equações Lineares Sistemas de Equações Lineares Sistemas de Equações Lineares Sistemas de Equações Lineares

Estudaremos a seguir o teste e soluções de um sistema possível e determinado Estudaremos a seguir o teste e soluções de um sistema possível e determinado Estudaremos a seguir o teste e soluções de um sistema possível e determinado Estudaremos a seguir o teste e soluções de um sistema possível e determinado. Seja o sistema
de equações 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 equações 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 solução ú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 PRODUÇÃO PLENA

O sistema acima é possível e determinado! Para resolvê-lo podemos utilizar duas técnicas: (1)
calculando a inversa de A, ou (2) utilizando o operador de divisão à esquerda.

Método 1: Calculado a inversa de A:

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

Essa abordagem deve ser evitada por razões internas do MATLAB. O cálculo da inversa envolve
muitas operações de ponto flutuante.

Método 2: Utilizando a divisão à esquerda:

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

Porque utilizamos a divisão à 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

É possível resolver esse sistema utilizando divisão à 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 método numérico para o cálculo da solução de um sistema matricial
(caso do MATLAB), é interessante também conhecer o número de condição da matriz de coeficientes.
Quanto mais próximo de um maior será a precisão do cálculo (veja help cond).

>> cond(A)
ans =
35.106

APOSTILA DE MATLAB
41 41 41 41
ENGENHARIA DE PRODUÇÃO PLENA
Apensa para efeito de comparação, veja o número de condição da matriz abaixo (que não
produz uma solução numérica 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 possível e determinado (uma e apenas uma solução) basta que a
matriz de coeficientes, A, e a matriz aumentada, [A y] possuam posto completo e que o número de
condição seja próximo 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 (impossíve (impossíve (impossíve (impossíveis is is is) )) ), ou seja, cujo número de equações é
maior do que o número de incógnitas pode ser útil encontrar solução que minimiza o quadrado da
norma do resíduo ou erro definido por e = A * x e = A * x e = A * x e = A * x – –– – y yy y. Essa solução é muito útil na prática sendo
conhecida como solução dos quadrados mínimos.

Veja o exemplo a seguir:

>> A = [1 2 3; 4 5 6; 7 8 0; 2 5 8] % 4 equações e 3 incógnitas
A =
1 2 3
4 5 6
7 8 0
2 5 8
APOSTILA DE MATLAB
42 42 42 42
ENGENHARIA DE PRODUÇÃO PLENA

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

>> x = A \ y % solução dos quadrados mínimos
x =
247.9818
-173.1091
114.9273

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

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

Quando há menos equações do que incógnitas, isto é, quando o sistema é indeterminado Quando há menos equações do que incógnitas, isto é, quando o sistema é indeterminado Quando há menos equações do que incógnitas, isto é, quando o sistema é indeterminado Quando há menos equações do que incógnitas, isto é, quando o sistema é indeterminado, o
número de soluções é infinito. Dentre essas soluções, duas são facilmente obtidas pelo o MATLAB. São
elas:
o O vetor x com o maior número de zeros, que pode ser obtido utilizando-se o operador de
divisão (\ ou /) e
o O vetor x com a menor norma possível, que pode ser obtido calculando-se a sua
pseudoinversa através do comando pinv.

Observe o exemplo a seguir:

>> A = A' % definindo 3 equações e 4 incógnitas
A =
1 4 7 2
2 5 8 5
3 6 0 8

>> y = y(1:3) % definindo um vetor y compatível
y =
366
804
351

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

>> xn = pinv(A) * y % encontrando a solução de norma mínima
xn =
30.8182
-168.9818
99.0000
APOSTILA DE MATLAB
43 43 43 43
ENGENHARIA DE PRODUÇÃO 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

Além da solução de sistemas de equações, há muitos outras funções no MATLAB para
manipulação de matrizes. Sua documentação pode ser facilmente acessa pelo help do MATLAB (menu
Help > Matlab Help Help > Matlab Help Help > Matlab Help Help > Matlab Help) buscando-se pelas sentenças (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 aplicações práticas, são geradas matrizes que contém apenas alguns poucos
elementos não nulos. Essas matrizes são 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 posições das linhas e colunas do
elemento não nulo.

Matrizes esparsas são criadas a partir da função 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

Também é possível 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 PRODUÇÃO PLENA
Esse método não é recomendado, pois implica na criação da matriz densa (eye(10)) primeiro,
causando utilização de muito recurso de memória.

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 memória

>> 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 dimensão 2000 x 2000, a matriz esparsa
ocupa apenas 0,1 % do espaço ocupado pela matriz densa.

Há várias funções para solução 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 sentença sparse matrix sparse matrix sparse matrix sparse matrix.

APOSTILA DE MATLAB
45 45 45 45
ENGENHARIA DE PRODUÇÃO PLENA

11. 11. 11. 11. A AA ANÁLISE DE NÁLISE DE NÁLISE DE NÁLISE DE D DD DADOS ADOS ADOS ADOS

O MATLAB é capaz de executar várias análises estatísticas em conjuntos de dados. Por
convenção, os conjuntos de dados são armazenados em matrizes orientadas por colunas. Isso
significa que, a menos que seja especificado o contrário, cada coluna da matriz representa uma
variável diferente, e as linhas representam amostras distintas ou observações.


11.1 11.1 11.1 11.1 Aná Aná Aná Análise Estatística Básica lise Estatística Básica lise Estatística Básica lise Estatística Básica

Análise estatística normalmente envolve um conjunto grande de dados, por exemplo, a
cotação de três moedas diferentes (dólar, euro e libra) no mês de janeiro (31 dias) produz um
conjunto de 4 x 31 = 124 dados. Digitar todos esses dados se torna uma tarefa impraticável,
principalmente se pensarmos em intervalos de tempo maiores (um ano, por exemplo!). A seguir,
alguns exemplos:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Importação 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 PRODUÇÃO PLENA

Para importar esses dados para o ambiente do MATLAB basta utilizar a ferramenta Import Import Import Import
Wizard Wizard Wizard Wizard disponível através 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 sugestão 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.
Após acionar a função 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 importação pressionando o botão Finish Finish Finish Finish. A matriz principal que
conterá os dados foi denominada data pela própria ferramenta de importação. 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 PRODUÇÃO PLENA

Exemplo 2 Exemplo 2 Exemplo 2 Exemplo 2 – –– – Criando um gráfico a partir dos dados importados. Crie o arquivo M de função
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 execução na janela de comandos do MATLAB fica assim:

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

O resultado pode ser observado abaixo:



Além do gráfico, algumas operações básicas podem ser realizadas sobre o conjunto de dados
(variável data).

Obtendo a média aritmética 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 PRODUÇÃO PLENA

Exemplo 3 Exemplo 3 Exemplo 3 Exemplo 3 - -- - Calculando o desvio de cada cotação diária com relação à sua respectiva média:

>> 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 cálculo 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 cotação máxima 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 padrão, a mediana, a covariância e coeficientes de
correlação:

>> 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 PRODUÇÃO 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 diferença entre cotações 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 – –– – Aplicação de filtros. Neste caso será aplicado um filtro de média 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 PRODUÇÃO PLENA

12. 12. 12. 12. I II INTERPOLAÇÃO DE NTERPOLAÇÃO DE NTERPOLAÇÃO DE NTERPOLAÇÃO DE D DD DADOS ADOS ADOS ADOS

A interpolação é uma maneira de estimar o valor de uma função entre valores dados por
alguma tabela de pontos. A interpolação é uma ferramenta valiosa quando não se pode calcular
rapidamente a função nos valores intermediários desejados.

12.1 12.1 12.1 12.1 Interpolação Unidimensional Interpolação Unidimensional Interpolação Unidimensional Interpolação Unidimensional

Dentre os métodos existentes, a interpolação linear é a mais simples. Ela é amplamente
utilizada pelo MATLAB para a representação de gráficos. Por mais complicado que pareça o gráfico, no
MATLAB ele é representado por uma sucessão de segmentos de reta. Veja o exemplo a seguir:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Dois gráficos da mesma função representados com números de pontos
diferentes. Repare que quando o número de pontos aumenta, o gráfico 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 PRODUÇÃO PLENA

Exemplo Exemplo Exemplo Exemplo 2 22 2 – –– – Nesse exemplo estudaremos a relação entre o nível de percepção do som pelo
ouvido humano e a freqüência do som. A freqüência e o nível relativo de pressão são dados por:

>> Hz = [20:10:100 200:100:1000 1500 2000:1000:10000]; % freqüências 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]; % nível de pressão do som em dB

Ambos os vetores estão disponíveis 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 logarítmico:

>> 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 PRODUÇÃO PLENA

O gráfico anterior mostra que a audição humana é mais sensível a freqüências em torno de 3
kHz.

Exemplo Exemplo Exemplo Exemplo 3 33 3 – –– – Estimar de diferentes maneiras o nível de pressão do som na freqüência 2.5 kHz:

>> s = interp1(Hz, nps, 2.5e3, 'linear') % interpolação linear
s =
-5.5000

>> s = interp1(Hz, nps, 2.5e3, 'cubic') % interpolação cúbica
s =
-6.0488

>> s = interp1(Hz, nps, 2.5e3, 'spline') % interpolação splines cúbicas
s =
-5.8690

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

A interpolação linear é o padrão do MATLAB, pois fornece resultados relativamente bons e com
rapidez. A interpolação pelo vizinho mais próximo, embora tenha dado um resultado muito fora da
faixa nesse exemplo, pode ser utilizada com segurança quando o número de pontos é muito grande.
A interpolação por splines cúbicas é a que oferece o melhor resultado, mas possui o maior custo de
processamento.

Exemplo Exemplo Exemplo Exemplo 4 44 4 – –– – Uma das atribuições mais comuns da interpolação com splines cúbicas é a
suavização de dados. Vamos utilizar esse recurso para “olhar com uma lupa” o intervalo de freqüência
de 2,5 kHz a 3,5 kHz:

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

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

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

>> 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 PRODUÇÃO PLENA


Agora é possível fazer uma estimativa melhor da freqüência de maior sensibilidade:

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

>> Hz_min = Hzi(i) % freqüência no mínimo
Hz_min =
3.3333e+003

Ou seja, o ouvido humano é mais sensível à freqüência de 3,33 kHz.

12.2 12.2 12.2 12.2 Interpolação Bidimensional Interpolação Bidimensional Interpolação Bidimensional Interpolação Bidimensional

A interpolação bidimensional interpola funções de duas variáveis, z = f(x,y).

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Um processo de levantamento topográfico 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 imprecisão é conseqüência da velocidade do vôo e limitações 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 PRODUÇÃO 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) % gráfico 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 PRODUÇÃO PLENA

Exemplo Exemplo Exemplo Exemplo 2 22 2 – –– – se quisermos obter uma estimativa da profundidade em um dado ponto?
Podemos utilizar a função 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 gráfico muito agudo em
alguns pontos. Mais uma vez, a interpolação pode ser utilizada para melhorar (suavizar) a aparência
do gráfico (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 interpolações 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 PRODUÇÃO PLENA

Aplicando o meshgrid ao problema original, temos:

>> [xxi, yyi] = meshgrid(xi, yi); % malha de todas as combinações

>> 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 interpolação definida, a profundidade do oceano pode agora ser
interpolada na escala refinada:

>> [xxi, yyi] = meshgrid(xi, yi); % malha de todas as combinações

>> 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 gráfico contendo para efeito de comparação os dados interpolados com os
dados originais (representados por ‘o’).

>> zzi = interp2(x, y, z, xxi, yyi, 'cublic'); % interpolação

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

>> mesh(xxi, yyi, zzi) % gráfico dos dados suavizados

>> hold on % mantem o estado atual do gráfico

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

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

>> 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 PRODUÇÃO PLENA

O resultado é mostrado a seguir:


APOSTILA DE MATLAB
58 58 58 58
ENGENHARIA DE PRODUÇÃO PLENA

13. 13. 13. 13. P PP POLINÔMIOS OLINÔMIOS OLINÔMIOS OLINÔMIOS

O MATLAB possui diversas funções para a manipulação de polinômios. Veremos algumas a
seguir.

13.1 13.1 13.1 13.1 Raízes Raízes Raízes Raízes

Encontra os valores para os quais um polinômio é igual a zero, ou seja, encontrar as suas
raízes, é muito simples no MATLAB.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Seja o seguinte polinômio:

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 polinômio, 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 variável independente por
ordem decrescente e os coeficientes nulos também devem ser representados:

A raiz do polinômio é encontrada pela função 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 raízes de um polinômio, é possível obter o referido polinômio:

>> 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 Multiplicação, Adição e Divisão Multiplicação, Adição e Divisão Multiplicação, Adição e Divisão Multiplicação, Adição e Divisão

A multiplicação de polinômios é realizada através da função conv (convolução entre
polinômios).

APOSTILA DE MATLAB
59 59 59 59
ENGENHARIA DE PRODUÇÃO PLENA

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Multiplicar os polinômios 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 não possui uma função específica para a adição de polinômios. O operador padrão
de soma pode ser usado para esse fim.

Exemplo Exemplo Exemplo Exemplo 2 22 2 – –– – Somar os polinômios 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 polinômios 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 divisão de polinômios pode ser realizada com a função deconv.

Exemplo Exemplo Exemplo Exemplo 4 44 4 – –– – Dividir o polinômio 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 polinômio pode ser obtida pela função polyder.

Exemplo Exemplo Exemplo Exemplo 1 11 1 – –– – Derivar o polinômio 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 PRODUÇÃO PLENA

Exemplo Exemplo Exemplo Exemplo 2 22 2 – –– – Integra o polinômio 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 polinômio c(x)
integral =
1 6 20 50 75 84 64


13.4 13.4 13.4 13.4 Cálculo de Polinômios Cálculo de Polinômios Cálculo de Polinômios Cálculo de Polinômios

O cálculo de polinômios consiste em avaliar o polinômio para um intervalo definido. A função
do que faz esse trabalho é polyval.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Avaliar o polinômio 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 polinômio

>> x = linspace(-5,5); % o intervalo de avaliação

>> 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('Avaliação de p(x) = 2x{^3} + 3x{^2} - 10x - 15')



APOSTILA DE MATLAB
61 61 61 61
ENGENHARIA DE PRODUÇÃO 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, é necessário adaptar um curva com dados obtidos
experimentalmente. A curva escolhida pode passar pelos pontos dados ou passar próximo a eles. Na
situação 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 mínimos quadrados mínimos quadrados mínimos quadrados mínimos. Embora o
ajuste de curvas por quadrados mínimos possa ser feito utilizando qualquer conjunto de funções
base, é mais comum e direto utilizar-se de uma série de potências truncada, ou seja, um polinômio.

No MATLAB, a função polyfit ajusta curvas pelo método dos quadrados mínimos. Vejamos o
exemplo a seguir:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Obter curvas que aproximam um conjunto de pontos obtidos experimentalmente
utilizando polinômios 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 polinômio de grau um (regressão linear), temos:

>> n = 1;

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

O resultado é o polinômio 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 gráfico que compara a aproximação linear com o conjunto real de pontos é visto a seguir:
APOSTILA DE MATLAB
62 62 62 62
ENGENHARIA DE PRODUÇÃO PLENA

O mesmo processo pode ser realizado para uma aproximação de grau 2:

>> n = 2;

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

O resultado é o polinômio 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 quadrática')

O gráfico é mostrado a seguir:
APOSTILA DE MATLAB
63 63 63 63
ENGENHARIA DE PRODUÇÃO PLENA

Sugestão: tentar um ajuste com polinômio de ordem 10 (visto que a amostra real possui 11
pontos). Essa abordagem é interessante? Justifique.
APOSTILA DE MATLAB
64 64 64 64
ENGENHARIA DE PRODUÇÃO PLENA

14. 14. 14. 14. O OO OTIMIZAÇÃO TIMIZAÇÃO TIMIZAÇÃO TIMIZAÇÃO

Otimização, no contexto aqui apresentado se refere ao processo de determinação de pontos
onde uma função y = g(x) assume valores específicos ou extremos. Um problema clássico é encontrar
os zeros de uma função. O pacote básico do MATLAB resolve esse problema para funções
unidimensionais. Para achar zeros em funções multidimensionais é necessário o Toolbox de
Otimização. Outro problema comum, mas de solução não trivial, é a localização de máximos e
mínimos de funções. Nesse caso o pacote básico do MATLAB atende para uma e muitas dimensões.

14.1 14.1 14.1 14.1 Determinação do Zero Determinação do Zero Determinação do Zero Determinação do Zero

A obtenção de zeros de funções unidimensionais no MATLAB é feita com o comando fzero.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Encontrando os zeros para a função 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 PRODUÇÃO PLENA

Por inspeção visual, os zeros da função de Humps estão próximos de 1,3 e -0,2.

Através da função fzero, podemos encontrar uma aproximação melhor para esses zeros:

>> format long % melhor precisão
>> x = fzero('humps', 1.3) % obtendo o zero próximo de 1.3
x =
1.29954968258482

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

A seguir, a variável valor conterá o resultado de humps(x), evitando a necessidade de fazer a
chamada explicita da função para testar o valor x (zero estimado).

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

A função fzero também 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 funções de otimização (padrão e da Toolbox de
Otimização), existem alguns parâmetros que podem ser definidos a critério do usuário. Por exemplo:
a função fzero possui os parâmetros definíveis ‘Display’ e ‘TolX’, que permitem,
respectivamente, o controle da quantidade de detalhes a ser exibido no momento da execução da
função e estabelece a tolerância para a resposta final (a menor tolerância possível é eps). Esses
parâmetros são manipulados pelas funções optimset e optimget.

Exemplo Exemplo Exemplo Exemplo 2 22 2 – –– – Utilizando o parâmetro definível ‘Display’ da função fzero para exibir as
iterações realizadas pela função 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 PRODUÇÃO 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 parâmetro definível ‘TolX’ da função fzero para realizar iterações
com tolerância de 0,01:

>> options = optimset('Display' , 'iter', 'TolX', .01); % mostra iteração
>> [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 opções consulte a documentação das funções optimset e optimget no help do
MATLAB.

14.2 14.2 14.2 14.2 Minimização em Uma Dimensão Minimização em Uma Dimensão Minimização em Uma Dimensão Minimização em Uma Dimensão

Em muitas aplicações é particularmente interessante determinar os extremos de uma função,
ou seja, seus máximos (picos) e mínimos (vales). Matematicamente, esses extremos são encontrados
de forma analítica, determinando-se onde a derivada (inclinação) da curva é igual a zero. Há,
entretanto, caso em que é muito difícil ou impossível determinar analiticamente os extremos de uma
função. Nesses casos é necessário procurar os extremos das funções analiticamente.

O MATLAB possui duas funções que desempenha essa função, fminbnd e fminsearsh. Essas
duas funções encontram mínimos de funções unidimensionais e dimensão n, respectivamente. Uma
vez que o máximo de f(x) o máximo de f(x) o máximo de f(x) o máximo de f(x) é igual ao mínimo de mínimo de mínimo de mínimo de – –– –f(x) f(x) f(x) f(x), fminbnd e fminsearch podem ser utilizadas
para encontrar tanto os mínimos quanto os máximos.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Observando o gráfico da função de Humps da seção 14.1, percebe-se que há um
máximo perto de 0,3 e um mínimo perto de 0,6. Através de fminbnd, esses extremos podem ser
encontrados com maior precisão, conforme mostramos a seguir:
APOSTILA DE MATLAB
67 67 67 67
ENGENHARIA DE PRODUÇÃO PLENA

>> format long g

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

% procurando o mínimo
>> [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 máximo (o mesmo que o mínimo 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 máximo é, na verdade, +96,5, pois o cálculo foi feito com –Humps.

14.3 14.3 14.3 14.3 Minimização Minimização Minimização Minimização em em em em Dimensões Mais Elevadas Dimensões Mais Elevadas Dimensões Mais Elevadas Dimensões Mais Elevadas

A função fminsearch aplica um algoritmo simples para minimizar uma função de várias
variáveis, ou seja, fminsearch tenta encontrar o mínimo de f(x), onde f(x) é uma função escalar de
um argumento vetorial x. O algoritmo implementado por fminsearch é o Simplex, de Nelder-Mead.

Para ilustrar a utilização de fminsearsh, veja o exemplo a seguir:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Achar o mínimo da função 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 função em 3 dimensões, utilizando o eixo x para a variável x1 e o
eixo y para a variável x2:
APOSTILA DE MATLAB
68 68 68 68
ENGENHARIA DE PRODUÇÃO PLENA


% rosembrock.m
x = [-1.5:0.125:1.5]; % intervalo da variável x1
y = [-.6:0.125:2.8]; % intevalo da variável x2
[X, Y] = meshgrid(x, y); % malha de todos os x e y
Z = 100.*(Y - X.*X).^2 + (1 - X).^2; % função 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 mínimo
hold off


Para encontrar o mínimo, ilustrado no gráfico anterior em (1, 1), devemos reescrever a função
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)
% Função de Rosembrock
f = 100.*(x(2) - x(1).*x(1)).^2 + (1 - x(1)).^2; % função de Rosembrock

Utilizando esse arquivo M de função, 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 PRODUÇÃO PLENA
iterations: 114
funcCount: 210
algorithm: 'Nelder-Mead simplex direct search'

Usando opções, podemos tornar o resultado mais acurado. Fazemos isso aumentando a
tolerância do cálculo da função com o opção ‘TolFun’ e a tolerância 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 tolerância (que antes era o valor padrão de 1e-4), o número de
iterações aumentou e a precisão do resultado também.

14.4 14.4 14.4 14.4 Questões Práticas Questões Práticas Questões Práticas Questões Práticas

Para aumentar a eficiência da computação numérica e melhorar as chances de convergência do
algoritmo de busca de zeros e extremos usando o MATLAB, algumas sugestões:

1- Comece com uma boa aproximação inicial.
2- Se componentes da solução estão separados por várias ordens de magnitude, considere a
possibilidade de escaloná-los para melhorar a eficiência e precisão da iteração.
3- Se o problema é complicado, divida-o em problemas mais simples.
4- Tenha certeza que a função não vai retornar números complexos, Inf ou NANs.
5- Evite funções descontínuas.
APOSTILA DE MATLAB
70 70 70 70
ENGENHARIA DE PRODUÇÃO PLENA

15. 15. 15. 15. I II INTEGRAÇÃO E NTEGRAÇÃO E NTEGRAÇÃO E NTEGRAÇÃO E D DD DIFERENCIAÇÃO IFERENCIAÇÃO IFERENCIAÇÃO IFERENCIAÇÃO

A integração e a diferenciação são ferramentas fundamentais do Cálculo. O MATLAB possui
funções para aproximar numericamente a integração e a inclinação de uma função quando esta é
fornecida em um arquivo M ou como uma função in-line.

15.1 15.1 15.1 15.1 Integração Integração Integração Integração

A integração pode ser realizada pela aproximação de uma função por trapézios definidos a
intervalos constantes em relação ao eixo x.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Aproximação trapezoidal da função 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 trapézios
y1 = humps(x1);
x2 = linspace(-1,2,100); % intervalo de 100 trapézios
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 gráfico resultante é mostrado a seguir:

APOSTILA DE MATLAB
71 71 71 71
ENGENHARIA DE PRODUÇÃO PLENA
Repare que a representação tracejada da função de Humps é uma aproximação da
representação com traço contínuo da mesma função. A integral aproximada pode ser calculada por:

>> format long

>> area1 = trapz(x1, y1) % área da aproximação com 17 trapézios
area1 =
25.91740000817554

>> area2 = trapz(x2, y2) % área da aproximação com 100 trapézios
area2 =
26.34473119524596

Exemplo Exemplo Exemplo Exemplo 2 22 2 – –– – Calcule e exiba em gráfico a função I(x) = ∫f(x) dx, para x em [x1, x] usando a
função 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 gráfico resultante é mostrado a seguir:


No eixo y à direita está a escala de valores da função Humps, no eixo y à esquerda
encontramos a escala de valores da integral da função de Humps, I(x):

APOSTILA DE MATLAB
72 72 72 72
ENGENHARIA DE PRODUÇÃO PLENA

Melhor precisão pode ser obtida se a aproximação trapezoidal puder variar o intervalo de x de
acordo com as características da função (maiores inclinações pedem uma diminuição na altura do
trapézio, menores inclinações pedem um aumento na altura). Não confundir altura do trapézio com a
sua base (nas figura do exemplo 1, as base estão na vertical). O MATLAB possui as funções quad e
quadl que fazem esses ajustes automaticamente, resultado em maior precisão nos cálculos.

Exemplo Exemplo Exemplo Exemplo 3 33 3 – –– – Calculo da integral da função de Humps com maior precisão utilizando quad e
quadl:

>> format long

>> z(end) % valor final de cumtrapz (precisão de 4 dígitos significativos)
ans =
26.34473119524596

>> quad('humps', -1, 2) % precisão de 8 dígitos significativos
ans =
26.34496049276723

>> quadl('humps', -1, 2) % precisão de 8 dígitos significativos
ans =
26.34496047137897

No MATLAB também é possível 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 função dblquad.

Exemplo Exemplo Exemplo Exemplo 4 44 4 – –– – Seja a função 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 representação gráfica será feita através 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 PRODUÇÃO PLENA



A integral (volume sobre a superfície) 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 Diferenciação Diferenciação Diferenciação Diferenciação

Comparada à integração, a diferenciação numérica é muito mais complicada. A integração
descreve uma propriedade global da função, enquanto a diferenciação representa a inclinação de uma
função em um ponto. Como conseqüência, a diferenciação é muito mais sensível a pequenas
variações na função. Particularmente, a diferenciação numérica deve ser evitada sempre que possível,
principalmente se os dados a serem derivados são obtidos experimentalmente. Nesse caso, é melhor
realizar um ajuste de curva polinomial, usando quadrados mínimos, e depois derivar o polinômio
resultante.

Veremos a seguir um exemplo de diferenciação numérica que utiliza essa estratégia.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Diferenciação de uma curva obtida por ajuste de pontos usando o método dos
quadrados mínimos:

APOSTILA DE MATLAB
74 74 74 74
ENGENHARIA DE PRODUÇÃO 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 aproximação para um polinômio de segunda ordem:

>> n = 2;

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

O resultado é o polinômio 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 quadrática')

>> hold on % o gráfico ainda não está concluído

A diferenciação do polinômio é 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 gráfico

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

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

>> hold off

A seqüência completa de comandos que gera o gráfico 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
mínimos está representada em traços longos e a sua derivada em traços curtos.







APOSTILA DE MATLAB
75 75 75 75
ENGENHARIA DE PRODUÇÃO PLENA


Quando os dados são bidimensionais, a função gradient utiliza diferenças centradas para
estimar a inclinação em dada direção, em cada ponto tabulado. Vejamos o próximo exemplo:

Exemplo Exemplo Exemplo Exemplo 2 22 2 – –– – Calcular e representar graficamente o gradiente de uma função elementar do
MATLAB (função 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); % função elementar bidimensional
figure(1), mesh(x, y, z) % gráfico de peaks
size(x)
size(y)
size(z)
dx = x(1,2) - x(1,1) % espaçamento na direção x
dy = y(2,1) - y(1,1) % espaçamento na direção 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 (direção do crescimento)
hold off
title('Gradiente da funcao peaks')

Os dois gráficos produzidos são exibidos a seguir:
APOSTILA DE MATLAB
76 76 76 76
ENGENHARIA DE PRODUÇÃO PLENA
Função peaks:



Gradiente de peaks:

APOSTILA DE MATLAB
77 77 77 77
ENGENHARIA DE PRODUÇÃO PLENA

18. 18. 18. 18. G GG GRÁFICOS RÁFICOS RÁFICOS RÁFICOS B BB BIDIMENSIONAIS IDIMENSIONAIS IDIMENSIONAIS IDIMENSIONAIS

Até o momento, um grande número de gráficos foi apresentado. Nesse capítulo detalharemos
alguns recursos relativos a gráficos em duas dimensões.

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 utilização do comando plot: :: :

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Criando um gráfico 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 PRODUÇÃO 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
funções representados no mesmo gráfico. Veja o exemplo a seguir.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Melhorando o gráfico da seção 18.1:

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

Para conhecer as opções do comando plot, faça:

>> help plot


18.3 18.3 18.3 18.3 Grades, Eixos, Legendas e Títulos Grades, Eixos, Legendas e Títulos Grades, Eixos, Legendas e Títulos Grades, Eixos, Legendas e Títulos

O comando grid on adiciona linhas de grade ao gráfico, tornando a sua leitura mais viável. O
comando grid off desabilita a exibição das linhas de grade.

O comando box on habilita a exibição da caixa de eixos (essa opção é o padrão do MATLAB). O
comando box off desabilita a exibição 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 mínimo e máximo dos eixos
com base nos valores fornecidos pelo vetor linha.
APOSTILA DE MATLAB
79 79 79 79
ENGENHARIA DE PRODUÇÃO PLENA
O comando title adiciona uma linha de título ao gráfico. É possível inserir um texto em
qualquer posição do gráfico com o comando text(x, y, ‘texto’). Vejamos um exemplo:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Melhorando o gráfico da seção 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 PRODUÇÃO PLENA

18.4 18.4 18.4 18.4 Gráficos Múltiplos Gráficos Múltiplos Gráficos Múltiplos Gráficos Múltiplos

No MATLAB é possível adicionar novos gráficos utilizando o comando hold, que quando ligado
(hold on) é capaz de desenhar um novo gráfico sem sobrescrever o primeiro. Para que o novo gráfico
substitua o anterior (padrão do MATLAB), use o comando hold off.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Repetir o gráfico da seção 18.3 apenas adicionado novos gráficos 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 seqüência 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 Múltiplas Figuras Múltiplas Figuras Múltiplas Figuras Múltiplas

O MATLAB suporta naturalmente que cada gráfico seja exibido em figuras (janelas) diferentes.
Para obter esse efeito deve-se usar o comando figure(n), onde n o número da figura. Para criar uma
figura nova, entre com um número inédito para a sessão corrente de execução do MATLAB. As figuras
podem ser fechadas com o comando close(n), onde n é o número 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 gráfico 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 PRODUÇÃO 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('gráfico 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('gráfico experimental 1.5*sen(x)')

18.6 18.6 18.6 18.6 Subgráficos Subgráficos Subgráficos Subgráficos

O MATLAB possibilita que vários gráficos sejam inseridos na mesma figura através do comando
subplot(m,n,p). Os gráficos são exibidos em uma matriz m x n e o gráfico ativo está na p-ésima
posição.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Usar o comando subplot para exibir os gráficos 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 PRODUÇÃO 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 Gráficos Bidimensionais Especializados Gráficos Bidimensionais Especializados Gráficos Bidimensionais Especializados Gráficos Bidimensionais Especializados

No MATLAB é possível exibir gráficos de setor (comando pie), barras (comando bar), barras em
três dimensões (função bar3), barras horizontais (função barh), barras em 3d horizontais (função
bar3h), em forma de escada (função stairs), em forma de hastes (função stem) e outros.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Gráfico 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 PRODUÇÃO PLENA



Exemplo Exemplo Exemplo Exemplo 2 22 2 – –– – Gráfico 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 PRODUÇÃO PLENA

Exemplo Exemplo Exemplo Exemplo 3 33 3 – –– – Gráfico mostrando barra de erros:





APOSTILA DE MATLAB
85 85 85 85
ENGENHARIA DE PRODUÇÃO PLENA

Veja o código que produz o gráfico 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); % função de erro de x
e = rand(size(x))/10; % e contem valores de erro aleatórios
errorbar(x, y, e)
title ('gráfico com barra de erro')

Exemplo Exemplo Exemplo Exemplo 4 44 4 – –– – Gráfico em hastes:

>> z = randn(30, 1); % dados aleatórios

>> stem(z, '-') % gráfico em hastes

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

>> title('grafico em haste')

O gráfico:






APOSTILA DE MATLAB
86 86 86 86
ENGENHARIA DE PRODUÇÃO PLENA

19. 19. 19. 19. G GG GRÁFICOS RÁFICOS RÁFICOS RÁFICOS T TT TRIDIMENSIONAIS RIDIMENSIONAIS RIDIMENSIONAIS RIDIMENSIONAIS

No MATLAB é possível exibir gráficos em três dimensões. Podem ser usadas cores para
representar uma quarta dimensão.

19.1 19.1 19.1 19.1 Gráficos de Linha Gráficos de Linha Gráficos de Linha Gráficos de Linha

Os gráficos de linha são representados com a função plot3. Vejamos alguns exemplos:

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Gráfico hélice (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 PRODUÇÃO PLENA

Os gráficos de linha são representados com a função plot3. Vejamos alguns exemplos:

19.2 19.2 19.2 19.2 Funções Funções Funções Funções E EE Escala scala scala scalares de Duas Variáveis res de Duas Variáveis res de Duas Variáveis res de Duas Variáveis

Seja a função z = f(x, y) z = f(x, y) z = f(x, y) z = f(x, y), onde x e y são variáveis independentes:

No MATLAB, z zz z é uma matriz que pode ser descrita em função 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 superfície
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 gráfico:

>> mesh(X, Y, Z)
APOSTILA DE MATLAB
88 88 88 88
ENGENHARIA DE PRODUÇÃO PLENA

19.3 19.3 19.3 19.3 Gráficos de Rede Gráficos de Rede Gráficos de Rede Gráficos de Rede

Os gráficos de rede são 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 PRODUÇÃO 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 - -- - Variações do comando mesh: (1) gráfico de rede com curvas de nível (função
meshc) e (2) gráfico de rede com plano no nível zero (função meshz).

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

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

>> 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 PRODUÇÃO PLENA


19.4 19.4 19.4 19.4 Gráficos de Superfície Gráficos de Superfície Gráficos de Superfície Gráficos de Superfície

O gráfico de superfície é parecido com o gráfico de rede, exceto que no gráfico de superfície
os espaços entre as linhas são preenchidos. Esses gráficos são gerados usando a função surf.

Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 – –– – Tipos diferentes de gráfico de superfície (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 PRODUÇÃO PLENA







APOSTILA DE MATLAB
92 92 92 92
ENGENHARIA DE PRODUÇÃO PLENA




APOSTILA DE MATLAB
ENGENHARIA DE PRODUÇÃO 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 edição, março de 2003.