Você está na página 1de 181

2 aa EDIO

Curso de
MATLAB 5.1

Revista e Ampliada

Introduo Soluo de Problemas de Engenharia

Faculdade de
Engenharia

Laboratrio de
Engenharia Eltrica

Programa Prodenge / Sub-Programa Reenge


Universidade do Estado do Rio de Janeiro

Curso de MATLAB

AGRADECIMENTOS
Estas notas sobre o uso da verso 5.1 do MATLAB so o resultado do trabalho
persistente dos alunos da Faculdade de Engenharia da UERJ, bolsistas de iniciao
Tecnolgica do Projeto REENGE - Joana Figueiredo Konte, Jorge Lus Pinheiro
Teixeira, Pat Evie Alves - e da estagiria Luciana Faletti que se encarregaram de dar
corpo segunda edio de um curso de Introduo Soluo de Problemas de
Engenharia usando a metodologia da Profa. Delores M. Etter, autora da obra
Engeneering Problem Solving with MATLAB que inspirou, de perto, a confeco desta
apostila. A este grupo entusiasmado de jovens, aderiram outros estagirios do
Laboratrio de Engenharia Eltrica, como Hlio Justino Mattos Filho. A todos eles os
cumprimentos pelo xito e pela forma como se envolveram de corpo e alma na execuo
das tarefas. O sucesso obtido na implementao de ambos os cursos no sem dvida
fruto de uma obra isolada. Dela participaram, com entusiasmo a equipe tecnicoadministrativa do Laboratrio de Engenharia Eltrica, cujos membros contriburam com
a dedicao que lhes peculiar, atravs do suporte e infra-estrutura e o envolvimento
direto com os alunos e com a coordenao do projeto. Um muito obrigado equipe
formada pelos funcionrios Alberto Avelar Santiago, Andr Vallim Stachlewski, Jos
Emlio Gomes, Jair Medeiros Jnior, Joo Elias Souza da Costa, Luiz Roberto Franco
Fagundes Filho, Marcos Augusto Mafra, Antnio Marcos Medeiros Corra, Sueli
Ferreira dos Santos e pela Srta. Carla Aparecida Caldas de Almeida, do curso de PsGraduao latu-senso em Engenharia Mecatrnica da UERJ. Uma palavra de
reconhecimento especial ao diretor Dr. Nival Nunes de Almeida, coordenador geral do
REENGE, pelo apoio e pelo incentivo dado viabilizao de inmeras atividades no
mbito da faculdade como um todo e do LEE em particular. Profa. Maria Eugnia
Mosconi de Golveia, vice-diretora da faculdade de Engenharia uma palavra de gratido
pelo empenho em viabilizar juntamente com o diretor as solicitaes de estgio interno
no LEE. Ao grupo de colaboradores silenciosos da administrao pelo apoio nas
atividades no mbito de suas competncias, o obrigado sincero da Orientao do
trabalho. Ao CNPq que patrocinou as bolsas que permitiram este trabalho mediante os
recursos alocados pela FINEP, o nosso agradecimento.

_______________________________
Bernardo Severo da Silva Filho
Orientador e chefe do Lab. De Engenharia Eltrica

Curso de MATLAB

ndice
1 INTRODUO SOLUO DE PROBLEMAS

2 MATRIZES, VETORES E ESCALARES

2.1 Definindo matrizes no MATLAB


Mtodo Simples
Arquivos MAT e ASCII
Operador dois pontos
Comando Input
Imprimindo matrizes
Comando format
Comando disp
Comando fprintf

5
6
6
8
8
11
11
12
12

2.2 Grficos X-Y


Aplicao Soluo de Problemas: Anlise de um tnel de vento

13
15

3 CLCULOS FUNDAMENTAIS E MATRIZES ESPECIAIS

16

3.1 Valores Especiais e Matrizes Especiais


Magic Square
Matriz de Zeros
Matriz de ums
Matriz identidade
Tringulo de Pascal

16
17
17
17
17
17

3.2 Operaes entre escalares


Hierarquia em operaes aritmticas
Limites Computacionais

18
19
21

3.3 Operaes de Conjuntos


Aplicao soluo de problemas: Ecos em sinais de comunicao

21
25

3.4 Funes Elementares


Funes matemticas elementares
Funes trigonomtricas
Funes hiperblicas
Funes de Arquivos M
Aplicao soluo de problemas: sinais de sonar

29
30
31
32
32
34

3.5 Nmeros Complexos


Operaes aritmticas com complexos
Coordenadas polares e retangulares

36
37
37

II

Curso de MATLAB
4 CONTROLE DE FLUXO
4.1 Operadores lgicos e relacionais

40
40

4.2 Tomada de decises


Estrutura if-then-else

42
42

4.3 Loop FOR


Comando break
Aplicao soluo de problemas: fibras ticas

45
47
47

4.4 Loop WHILE


Aplicao soluo de problemas: equilbrio de temperatura

49
50

5 MEDIDAS ESTATSTICAS

54

5.1

Funes para anlise de dados


Desvio mdio, varincia e desvio padro
Comando sort
Histograma
Aplicao soluo de problemas: anlise do sinal de voz

56
56
60
61
64

5.2

Nmeros Aleatrios
Funo nmero aleatrio
Funo Densidade de Probabilidade
Modelo uniforme
Modelo normal
Histograma: comando hist
Aplicao Soluo de Problemas: simulador de vo

66
66
66
68
68
71
73

5.3

Relao Sinal/Rudo
Energia de um sinal
Clculo de SNR
Adicionando um rudo a um sinal existente

75
75
76
77

6 OPERAES COM MATRIZES


6.1 Operaes com matrizes
Matriz transposta
Somatrio de produtos
Comando sum
Multiplicao de matrizes
Matriz Power
Matriz inversa
Determinante
Aplicao Soluo de Problemas: peso molecular de protenas

79
79
79
79
80
80
81
81
82
82

III

Curso de MATLAB

6.2 Manipulao com matrizes


Comando rot90
Comando fliplr
Comando flipud
Comando reshape
Comando diag
Comando triu
Comando tril
Aplicao Soluo de Problemas: alinhamento de imagens
7 GRFICOS
7.1

84
84
84
84
85
85
86
87
87
91

Grficos X-Y
Coordenadas retangulares
Legendas

91
91
91

7.2 Grficos Polares


Coordenadas Polares
Transformaes retangular/polar
Grficos de barras e degrau

92
92
93
94

7.3 Opes

94

7.4 Grficos 3D
Aplicao Soluo de Problemas: trajetria de um satlite
8 SOLUES DE SISTEMAS DE EQUAES LINEARES

97
100
101

8.1 Interpretao Grfica

101

8.2 Soluo usando operaes matriciais


Diviso de matrizes
Matriz Inversa
Aplicao Soluo de Problemas: anlise de um circuito eltrico

103
104
104
105

9 INTERPOLAO E AJUSTE DE CURVAS


9.1 Interpolao
Interpolao linear
Funo table1
Funo table2
Comando spline
Aplicao Soluo de Problemas: brao robtico

106
106
107
107
109
110
112

IV

Curso de MATLAB

9.2 Ajuste de curvas


Regresso Linear
Comando polyfit
Comando polyval
10 ANLISE POLINOMIAL

113
113
114
115
116

10.1 Avaliao do polinmio


Comando polyval
Operaes Aritmticas
Aplicao Soluo de Problemas: bales meteorolgicos

116
116
117
118

10.2 Razes de polinmios

120

11 INTEGRAO NUMRICA E DIFERENCIAO

122

11.1 Integrao Numrica


Regra Trapezoidal e Regra de Simpson
Comando Quadratura
Aplicao Soluo de Problemas: anlise de escoamento de um leo num oleoduto

122
122
122
123

11.2 Diferenciao Numrica


Derivao por expresso de diferena
Comando diff

125
126
127

12 EQUAES DIFERENCIAIS ORDINRIAS

129

12.1 Equaes Diferenciais Ordinrias de Primeira Ordem

129

12.2 Mtodo de Runge-Kutta


Aproximao de Primeira Ordem (mtodo de Euler)
Comando ODE
Aplicao soluo de problemas: acelerao de uma turbina UDF numa aeronave

130
130
131
133

12.3 Equaes Diferenciais de Ordens Superiores

135

13 FATORAO E DECOMPOSIO DE MATRIZES

137

13.1 Autovalores e autovetores


Aplicao soluo de problemas: adaptador para reduo de rudos

137
141

13.2 Decomposio e Fatorao

143

Curso de MATLAB
Fatorao Triangular
Fatorao QR
14 PROCESSAMENTO DE SINAIS

143
144
146

14.1 Anlise no domnio da freqncia

146

14.2 Anlise de filtros


Funo de Transferncia Analgica
Funo de Transferncia Digital

149
149
151

14.3 Implementao de Filtros Digitais

153

14.4 Projetos de Filtros Digitais


Filtros IIR
Filtros FIR
Aplicao soluo de problemas: filtros para separao de canais

155
156
157
158

15 MATEMTICA SIMBLICA

161

15.1

Expresses Simblicas
Representaes de Expresses Simblicas no MATLAB

161
162

15.2

Variveis Simblicas

163

15.3

Operaes em expresses simblicas

165

15.4

Operaes Algbricas Padro


Operaes Avanadas

166
167

15.5

Funes de Converso

169

15.6

Derivao e Integrao

170

15.7

Transformadas
Transformada de Laplace
Transformada de Fourier
Transformada Z

171
173
173
174

VI

Curso de MATLAB

Captulo 1 Uma Introduo Soluo de Problemas


A soluo de problemas parte essencial no somente dos cursos de engenharia mas
tambm dos cursos de Matemtica, Fsica, Qumica e Cincia da Computao. Logo, importante
uma base slida em soluo de problemas. Tambm de grande auxlio um embasamento suficiente
para trabalhar em todas estas reas, para que no tenhamos que aprender uma tcnica para
problemas de matemtica, e uma tcnica diferente para problemas de fsica, e assim por diante. A
tcnica de soluo de problemas que apresentamos trabalhos para problemas de engenharia e pode
ser seguida de perto para resolver problemas em outras reas; mas, supe-se que estamos usando o
MATLAB para ajudar a resolv-los.
O processo ou metodologia para resoluo de problemas que usaremos ao longo do texto
possui cinco passos:
1.
2.
3.
4.
5.

Enunciar o problema claramente.


Descreva a informao de entrada e sada.
Trabalhar o problema manualmente.
Desenvolver uma soluo MATLAB.
Testar a soluo usando uma variedade de grupo de dados.

Descreveremos cada um dos passos usando o exemplo do clculo da distncia entre dois pontos
em um plano.
1. ENUNCIADO DO PROBLEMA
O primeiro passo enunciar o problema claramente. extremamente importante que o
enunciado seja conciso para evitar desentendimentos. Para este exemplo, o enunciados do problema
:
Calcule a distncia em linha reta entre dois pontos num plano.
2. DESCRIO ENTRADA/SADA
O segundo passo descrever cuidadosamente a informao que dada para resolver o problema
e ento identificar os valores a serem calculados. Estes itens representam a entrada e a sada para o
problema e agregadamente podem ser chamados entrada/sada, ou I/0. Para muitos problemas, til
usar um diagrama que mostra a entrada e a sada. Algumas vezes, este tipo de diagrama chamado
de caixa preta porque no estamos definindo para este ponto todos os passos para determinar a
sada, mas estamos mostrando a informao que usada para calcular a sada. Para este exemplo,
poderamos usar o diagrama na figura 1.1.

Cap. 1 - Uma Introduo Soluo de Problemas

Curso de MATLAB

ponto 1

distncia entre os pontos

ponto 2

Figura 1.1 Diagrama I/O

3. EXEMPLO MANUAL
O terceiro passo trabalhar o problema manualmente ou com uma calculadora, usando um
pequeno grupo de dados. um passo muito importante e no deve ser ignorado por mais simples
que seja o problema. um item no qual voc trabalha os detalhes da soluo do problemas. Se voc
no pode pegar um simples grupo de nmeros e calcular a sada (seja manualmente ou com uma
calculadora), ento voc no est pronto para executar o prximo passo; voc deve reler o
problemas e talvez consultar material de referncia. Uma vez que pode trabalhar o problema de um
simples grupo de dados, ento voc est pronto para desenvolver um algoritmo ou um esboo passo
a passo da soluo. Este esboo convertido para os comandos MATLAB para que possamos usar
o computador para fazer todos os clculos. O exemplo manual para o este exemplo mostrado a
seguir:
Suponha que os pontos p1 e p2 tenham as seguintes coordenadas:
p1 = (1,5), p2 = (4,7)
Queremos calcular a distncia entre dois pontos, que a hipotenusa de um tringulo
retngulo, conforme mostra a figura 1.2. Usando o Teorema de Pitgoras, podemos calcular a
distncia d com a seguinte equao:
d = s12 + s 2 2
d = (4 1) 2 + (7 5) 2
d = 13
d = 3,61

d
S2
(1,5)

(4,7)
S1

x
Figura 1.2 Distncia entre dois pontos.

Cap. 1 - Uma Introduo Soluo de Problemas

Curso de MATLAB

4. SOLUO MATLAB
No prximo captulo, falaremos sobre os comandos MATLAB. Contudo, da soluo voc pode
ver que os comandos so muito similares s equaes que foram usadas no exemplo manual. O
sinal de percentagem usado para anteceder comentrios que explicam os comandos MATLAB.
%
%
Este programa calcula e imprime
%
distncia, em linha reta, entre dois pontos.
p1 = [1,5];
% ponto 1 inicial
p2 = [4,7];
% ponto2 inicial
d = sqrt (sum ((p2-p1).^2))
% calcular distncia

5. TESTANDO
O passo final em nosso processo de soluo de problemas testar a soluo. Primeiramente,
devemos testar a soluo com os dados do exemplo manual, j que calculamos a soluo. Quando
os comandos MATLAB na soluo so executados, o computador mostra a seguinte sada:
d = 3.6056

Esta sada coincide com o valor que calculamos no exemplo manual. Se a soluo MATLAB
no coincidir com o exemplo manual, devemos rever ambas solues a fim de encontrar o erro.
Uma vez que a soluo trabalha com o exemplo manual, devemos tambm test-la com vrios
grupos de dados para certificar que a soluo vlida para outras sries de dados.

Cap. 1 - Uma Introduo Soluo de Problemas

Curso de MATLAB

Captulo 2 - Matrizes, Vetores e Escalares


A capacidade de visualizao dos dados um fator importante na soluo de problemas de
engenharia. s vezes, o dado um simples nmero como o raio de um crculo. Outras, um grupo
de coordenadas x-y-z que representam os quatro vrtices de uma pirmides com uma base triangular
no espao. Podemos representar o exemplos citados usando um tipo especial de estrutura de dados
denominada matriz. Matriz uma tabela de nmeros dispostos em m linhas e n colunas. Assim,
um simples nmero pode ser considerado uma matriz com uma linha e uma coluna, uma
coordenada x-y pode ser considerada uma matriz com uma linha e duas colunas, e um grupo de
quatro coordenadas x-y-z pode ser considerada uma matriz com quatro linhas e trs colunas. Como
exemplo, temos:

A = [ 3.5]

B = [ 1.5 3.1]

1 0
1
1
C=
1 1

0
0

0
0
0

Se uma matriz contiver m linhas e n colunas, ento conter um total de m . n elementos.


Cada elemento da matriz indicado por ndices, aij. O primeiro, i, indica a linha, o segundo, j,
indica a coluna onde o elemento se encontra. Assim, o elemento a1,2 da matriz B 3.1. Se o
nmero de linhas e colunas forem iguais, ento dizemos que a matriz uma matriz quadrada. Se a
matriz tiver apenas uma linha e uma coluna, podemos dizer que o valor um escalar, se a matriz
contiver apenas uma linha ou uma coluna, ao matriz chamada vetor-linha ou vetor-coluna,
respectivamente.
Exerccios
Responda s seguintes questes sobre esta matriz:
1.5
2.3 0.5
0.6
8.2
0.5 0.1 2.0

G = 5.7
8.2
9.0
1.5

0.5
2.4
0.5
0.5
1.2 2.3 4.5
0.5
1. Qual a ordem de G?
2. G uma matriz quadrada?
3. D as referncias para todas as posies que contm o valor 0.5.
4.

D as referncias para todas as posies que contm valores negativos.

Cap. 2 Matrizes, Vetores e Escalares

Curso de MATLAB
Definindo Matrizes no MATLAB
Suponha que queiramos agora criar as matrizes A, B e C usando o MATLAB. H vrios
mtodos de definio de matrizes no MATLAB. Vejamos cada um:
Modo mais simples:
Nome da matriz = [ a11 a12 a13 a1n ; a21 a22 a23 a2n ;

; am1 am2 am3 amn ];

Assim, as matrizes A, B e C sero representadas por:


A = [ 3.5];
B = [1.5, 3.1];
C = [-1,0,0; 1,1,0; 1,-1,0; 0,0,2];
O nome da matriz deve comear com uma letra e conter no mximo 19 caracteres que
podem ser nmeros, letras ou caracter sublinhado, e aparece ao lado esquerdo do sinal de igual. O
lado direito contm os dados entre colchetes por ordem de linhas. O ponto-e-vrgula separa as
linhas, e os valores das linhas podem estar separados por vrgulas ou por espaos. O valor pode
conter um sinal de + ou -, e um ponto decimal, mas no pode conter uma vrgula, como 32,154.
Quando definimos uma matriz, o MALTAB imprime o valor da matriz na prxima linha a
menos que coloquemos um ponto-e-vrgula depois da definio. Tente entrar com as matrizes A, B
e C sem o ponto-e-vrgula.
Voc tambm pode definir uma matriz digitando uma cada linha separadamente. Como
exemplo, a matriz C:
C = [ -1 0
1 1
1 1
0 0

0
0
0
2];

Se quisermos, por exemplo, definir um vetor-linha F com 10 valores, tambm podemos


fazer:
F = [1 52 64 197 42 42 55 82 22 109]
F = [1 52 64 197 42 42,
55 82 22 109]
Esta forma muito usada quando a linha de uma matriz extensa. Podemos terminar uma
linha com uma vrgula seguida de trs ou mais pontos, e continuar a entrar com os valores restantes
na prxima linha da rea de trabalho do MATLAB.

Cap. 2 Matrizes, Vetores e Escalares

Curso de MATLAB
Podemos tambm definir uma matriz usando outra que j definida. Por exemplo, considere
as seguintes matrizes:
B = [ 1.5 , 3.1];
S = [3.0 B];
Estes comandos equivalem a:
S = [ 3.0 1.5 3.1];
Podemos tambm mudar e adicionar valores na matriz usando um referncia entre
parnteses. Assim, o seguinte comando;
S (2) = -1.0;
Muda o segundo valor da matriz S de 1.5 para 1.0.
A ordem da matriz pode ser alterada. Se executarmos o seguinte comando:
S(4) = 5.5
Ento a matriz S ter quatro valores em vez de trs. Se executarmos o comando:
S(8) = 9.5;
Ento a matriz S ter 8 elementos, e os valores de S(5), S(6) e S(7) so automaticamente
nulos, j que no foram atribudos valores para eles.

Exerccios
Determine a ordem das matrizes a seguir. Verifique suas respostas usando o MATLAB.
1. A = [ 1, 0, 0, 0, 0, 1];
2. B = [ 2; 4; 6; 10];
3. C = [ 5 3 5 ; 6 2 3];
4. D = [ 3 4
5 7
9 10 ];

6. T = [ 4 24 9];
Q = [ T 0 T ];
7. X = [ 3 6];
8. R = [C; X, 5 ];
9. V = [ C(2,1) ; B ];
10. A(2,1) = -3;

5. E = [3 5 10 0; 0 0 0 3; 3 9 9 8];

Cap. 2 Matrizes, Vetores e Escalares

Curso de MATLAB
As matrizes tambm podem ser definidas atravs de informao armazenada em
arquivos. O MATLAB trabalha com dois tipos diferentes de arquivos: Os arquivos MAT e
os arquivos ASCII.

Os arquivos MAT
Os arquivos MAT so gerados por um programa MATLAB usando o comando
save, que contm o nome do arquivo e as matrizes que devem ser armazenadas. A extenso
.mat automaticamente adicionada ao nome do arquivo. Assim, para salvar matrizes A, B e
C, em um arquivo .mat nomeado teste_1 devemos fazer:
save teste_1 A B C;
Para recuperar as matrizes no programa MATLAB, usamos o comando:
load teste_1

Arquivos ASCII
Um arquivo ASCII que ser usado juntamente com um programa MATLAB deve
conter informao exclusivamente numrica, e cada linha do arquivo deve conter o mesmo
nmero de dados. O arquivo pode ser gerado utilizando um processador de texto ou, por
exemplo, utilizando programas como o Fortran ou ainda, por um programa MATLAB
usando a seguinte forma do comando save:
save teste_1.dat R /ascii
Cada linha da matriz R ser escrita para linhas distintas no arquivos de dados.
Recomenda-se utilizar a extenso .dat para ser mais fcil distingui-los dos arquivos MAT
e dos arquivos M.
O comando load seguido do nome do arquivo ir recuperar a informao da matriz R.
load teste_1.dat;

Operador Dois Pontos ( : )


Suponha que queiramos armazenar a primeira coluna da matriz data1 em um vetor
x, e a segunda coluna em um vetor y. O uso do operador dois pontos (:) til na criao de
matrizes ou vetores. Dependendo do argumento, pode significar todas as linhas ou todas as
colunas da matriz-referncia. Para o nosso exemplo, temos:

Cap. 2 Matrizes, Vetores e Escalares

Curso de MATLAB
data1 = [0.0,0.0; 0.1 0.2; 0.3 0.6];
x = data1 ( : , 1);
y = data1 ( : , 2 );
Os elementos do vetor x correspondem primeira coluna de data1. O segundo
comando cria um vetor y cujos elementos correspondem segunda coluna da matriz data1.
Se quisssemos criar um vetor z cujos elementos sejam os elementos da primeira linha da
matriz data1, devemos fazer:
z = data1(1, : );
Se o operador dois pontos for usado na seguinte notao:
H = 1 : 8;
A matriz H contm os valores 1, 2, 3, 4, 5, 6, 7 e 8. O operador : entre os dois
nmeros inteiros gera todos os inteiros entre os dois nmeros especificados. Se for usado
para separar trs nmeros, os dois pontos geraro valores entre o primeiro e terceiro
nmeros, usando o segundo nmero como incremento. A notao abaixo gera um vetorlinha denominado TEMPO que contm os nmeros de 0.0 a 5.0 com incrementos de 0.5:
TEMPO = 0.0 : 0.5 : 5.0;
O incremento tambm pode ser um valor negativo como:
VALORES = 10 : -1: 0;
Os elementos de VALORES so 10, 9, 8, 7, 6, 0.
O operador dois pontos pode tambm ser usado para selecionar uma sub-matriz de
uma outra matriz. Por exemplo, considere a matriz abaixo:
C = [-1,0,0;1,1,0; 1,-1,0; 0,0,2];
Se executarmos os comandos:
PARTE_1 = C ( : , 2:3);
PARTE_2 = C (3:4, 1:2);
Definimos as matrizes:
PARTE_1 = [ 0 0; 1 0; -1 0; 0 2];
PARTE_2 = [1 1; 0 0];

Cap. 2 Matrizes, Vetores e Escalares

Curso de MATLAB
Observaes:

O MATLAB reconhece uma matriz vazia. H vrias maneiras de ger-la. Como


exemplo, temos:
A=[]
B = 4: -1: 5

A expresso C ( : ) equivale a uma longa matriz coluna que contm a primeira coluna de
C, seguida pela segunda coluna de c e assim por diante.

Exerccios
Determine as ordens e o contedo das matrizes abaixo. Use a matriz G como referncia.
1,5
2,3 0,5
0,6
8, 2
0,5 0,1 2,0

G = 5,7
8,2
9,0
1,5

0,5
2,4
0,5
0,5
1, 2 2,3 4,5
0,5
Verifique suas respostas usando o MATLAB.
1. A = G (:, 2);
2. B = G (4, : );
3. C = [10 : 15];
4. D = [4:9; 1:6];
5. E = [-5,5];
6. F = [0.0:0.1:1.0];
7. T1 = G ( 4 : 5 ,1:3);
8. T2 = G (1: 2 : 5, : );

Soluo:

Cap. 2 Matrizes, Vetores e Escalares

Curso de MATLAB
Comando Input
Voc pode entrar com os valores da matriz, via teclado, utilizando o comando
input que mostra um texto e ento espera por uma entrada. Considere o comando:
z = input ( Valores de z: );
Quando este comando executado, o texto Valores de z: mostrado na tela. O usurio
pode entrar com uma expresso como [ 5.1 6.3 -18.0] o qual especifica valores para z. J
que o comando input termina com um ponto-e-vrgula, os valores de z no so imprimidos
quando o comando executado.

Imprimindo Matrizes
O modo mais simples de imprimir uma matriz entrar com seu nome. O nome da
matriz repetido, os valores da matriz sero imprimidos na prxima linha. Existem vrios
comandos que podem ser usados para alterar a sada a ser imprimida.

Comando format
Suponha os comandos abaixo:
a = [1 2 3];
c = 2*a
c=
2 4 6

T = [ 1.1 2.4 3.7];


U = 2*T
U=
2.2000 4.8000 7.4000

Por definio, se o elemento de uma matriz for um nmero inteiro, o MATLAB


apresenta o resultado como nmero inteiro. Se o elemento for um nmero real, o
MATLAB apresenta-o com cinco dgitos significativos, ou seja, quatro dgitos direita do
ponto decimal. Podemos alterar o formato numrico utilizando o comando format.

Exemplo: Seja uma varivel A que armazene a raiz quadrada de 2.


A = sqrt(2)

De acordo com o formato numrico escolhido, a varivel A pode estar apresentada sob a
forma:
Cap. 2 Matrizes, Vetores e Escalares

10

Curso de MATLAB

Comando MATLAB
Format long
Format short
Format short e
Format long e
format +
format rat
format hex

Varivel A
1.41421356237310
1.4142
1.4142e+000
1.414213562373095e+000
+
1393/985
3ff6a09e667f3bcd

Descrio
16 dgitos
5 dgitos formato numrico padro
5 dgitos - notao cientfica
16 dgitos notao cientfica
+ para valores positivos e - para
valores negativos
aproximao racional
formato hexadecimal

Comando disp
Quando quisermos exibir o contedo de uma matriz sem imprimir seu nome ou
imprimir um pequeno texto, usamos o comando disp. Assim, se a varivel temp contiver
um valor de temperatura em graus Celsius, podemos imprimir o valor em uma linha de
comando e a unidade na linha posterior:
disp(temp); disp (graus Celsius)
Se o valor de temp for 78, ento a sada ser:
78 graus Celsius

Comando fprintf
O comando fprintf nos permite imprimir textos e contedo de matrizes. Podemos
tambm especificar o formato numrico . Sua forma geral :
fprintf (formato, matriz)

O modo formato contm o texto e as especificaes que so:


%e
%f

%g

indica que os valores da matriz sero impressos em notao exponencial


indica que os valores da matriz sero impressos em notao decimal ou em notao fixa,
isto , o usurio pode especificar o nmero de algarismos significativos juntamente com
o ponto decimal.
pode indicar as duas formas acima, dependendo de qual delas ser a mais curta.
O modo matriz denota a varivel cuja matriz est armazenada.
Um simples exemplo de aplicao do comando fprintf mostrado abaixo:

Cap. 2 Matrizes, Vetores e Escalares

11

Curso de MATLAB
fprintf (A temperatura %f graus Celsius \n, temp)

A sada seria:
A temperatura 78.0000 graus Celsius
Se modificarmos o comando para esta forma:
fprintf (A temperatura \n %f graus Celsius \n, temp)
Ento, a sada seria:
A temperatura
78.0000 graus Celsius

Os formatos especficos %f, %e, e %g tambm podem conter informao para


especificar o nmero de casas decimais a imprimir e o nmero de algarismos significativos,
juntamente com o ponto decimal, conforme explicado no incio da seo. Considere o
seguinte comando:
fprintf (A temperatura

%4.1f graus Celsius \n, temp)

A sada mostrar o valor de temp com 4 algarismos, sendo que um destes ser um
ponto decimal, conforme mostramos abaixo:
A temperatura 78.0 graus Celsius

Grficos X-Y

Suponhamos que queremos plotar os valores de uma matriz em vez de imprimi-los.


Podemos usar o MATLAB para plotar grficos. Nesta seo, mostraremos como gerar um
simples grfico x-y de dados armazenados em dois vetores. Ento, sem conhecer alguns
comandos, voc pode imediatamente comear usando o MATLAB para gerar grficos.

Suponha que queira plotar os dados de temperatura a seguir coletados em uma


experincia de fsica:

Cap. 2 Matrizes, Vetores e Escalares

12

Curso de MATLAB
Tempo, s
0
1
2
3
4
5
6
7
8
9
10

Temperatura, C
54.2
58.5
63.8
64.2
67.3
71.5
88.5
90.1
90.6
89.5
90.4

Suponha tambm que os dados relativos ao tempo estejam armazenados em um


vetor denominado x, e que os relativos temperatura estejam armazenados em um vetor
denominado y. Para plotar estes pontos, simplesmente usamos o comando plot , onde x e y
so vetores-linha ou vetores-coluna.

plot (x, y)

O grfico gerado automaticamente. A prtica mostra que um bom grfico deve


incluir unidades, ttulo e uma breve descrio. Logo, podemos aperfeio-lo como os
seguintes comandos:

Title
Xlabel
Y label
Grid
Whitebg

Adiciona um ttulo ao grfico.


Inclui uma descrio na direo do eixo-x
Inclui uma descrio na direo do eixo-y
Adiciona linhas de grade ao grfico
Muda a cor de fundo do grfico para branco.

Assim,
plot (x,y),
title (Laboratrio de Fsica - Experincia 1),
xlabel (Tempo, s),
ylabel (Temperatura, graus Celsius),
grid
whitebg

Cap. 2 Matrizes, Vetores e Escalares

13

Curso de MATLAB

Os trs pontos usados depois dos quatro comandos so

usados para que o

MATLAB execute os seis comandos em uma nica vez. Para aprender mais opes para

gerar grficos x-y e outros tipos de grficos, veja o captulo 7.

Aplicao Soluo de Problemas: Anlise de Dados de um Tnel de Vento


Um tnel de vento uma cmara de teste construda para produzir diferentes
velocidades de vento, ou nmeros Mach (razo entre a velocidade do vento e a velocidade
do som). Modelos em escala precisa de aeronaves podem ser equipados sobre suportes de
medies de fora na cmara de teste, e as medidas das foras sobre o modelo podem ser
feitas para diferentes velocidades de vento e ngulos do modelo relativo direo da
velocidade. Ao final de um longo teste de tnel de vento, muitos grupos de dados so
coletados e podem ser usados para determinar o lift, drag e outras caractersticas da
performance aerodinmica do novo modelo para vrias velocidades de operao e posies.
Usamos esta aplicao vrias vezes em nossos problemas ao longo do texto. Nesta
seo, supomos que os dados coletados do teste do tnel de vento foram armazenados em
um arquivo ASCII denominado vento1.dat. Gostaramos de visualizar o grfico dos dados
para verificar se os sensores sobre o modelo em escala parecem trabalhar adequadamente.
Suponhamos que cada linha do arquivo contm um ngulo de vo em graus e um
correspondente coeficiente de lift. Para este exemplo, usamos os seguintes dados:

Cap. 2 Matrizes, Vetores e Escalares

14

Curso de MATLAB
ngulo de Vo
(graus)
Coeficiente de
Sustentao
ngulo de Vo
(graus)
Coeficiente de
Sustentao

-4

-2

10

12

14

15

-0,202

-0,050

0,108

0,264

0,421

0,573

0,727

0,880

1,027

1,150

1,195

17

18

19

20

21

1,225

1,250

1,245

1,221

1,177

Mesmo que parea simples ler e plotar os dados usando o MATLAB, usaremos a
metodologia descrita no captulo anterior para mostrar igualmente simples o processo que
nos permite estruturar nossas idias no desenvolvimento na soluo de problemas.

1. ENUNCIADO DO PROBLEMA
Gerar um grfico do ngulo de vo e coeficiente de lift.
2. DESCRIO ENTRADA/SADA
Sempre que for possvel, usaremos um diagrama I/O, conforme mostrado na figura
a seguir. Neste exemplo, lemos as informaes contidas em um arquivo e usamos o
MATLAB para plot-las. O diagrama contm um smbolo de um disquete para representar
o arquivo que a entrada (observe que colocamos o nome do arquivo abaixo do smbolo) e
um smbolo de um grfico para representar a sada, que o grfico dos dados.

vento1.dat

Diagrama I/O

3. EXEMPLO MANUAL
Apesar de ser apenas um grfico, devemos estudar superficialmente uma pequena
parte dos dados e determinar, grosseiramente, como seria o grfico correspondente. Neste
exemplo, se examinarmos os dados podemos perceber que inicialmente o coeficiente de lift
0,2 e que o mesmo cresce at alcanar um mximo de 1,25 para um ngulo de 180 . Se o
grfico que obtivermos for muito diferente do que espervamos (por exemplo, valor inicial
0,7 e um mximo de 1,177 para um ngulo de 21 graus), ento devemos novamente checar
os dados e os comandos MATLAB usados.
4. SOLUO MATLAB
5. TESTANDO

Cap. 2 Matrizes, Vetores e Escalares

15

Curso de MATLAB

Captulo 3 - Clculo Fundamentais e Matrizes Especiais


As operaes de adio, subtrao, multiplicao e diviso so a maioria das operaes
fundamentais usadas por engenheiros e cientistas. Podemos executar outras operaes de rotina,
como o clculo da raiz quadrada ou o logaritmo de um valor ou a tangente de um ngulo. Estas
operaes podem ser executadas sobre um valor simples (um escalar), aplicadas a uma lista de
valores (vetor), ou aplicadas a um grupo de valores armazenados em uma matriz. Neste captulo
aprenderemos como executar todas estas operaes e funes. E tambm, aprenderemos como usar
nmeros complexos no MATLAB.

3.1

Valores Especiais e Matrizes Especiais

O MATLAB contm um grupo de constantes pr-definidas, valores e matrizes especiais


teis para uso em programas do MATLAB.

Valores Especiais

pi

O valor de automaticamente armazenado nesta varivel.

-1

i,j

Estas variveis so inicialmente agrupadas ao valor -1. Veja a seo 3.5 para
uma discusso completa sobre nmeros complexos.

inf

Esta varivel a representao do MATLAB para infinito, o qual ocorre


tipicamente como o resultado de uma diviso por zero. Uma mensagem de
aviso imprimida, se voc mostrar o resultado da diviso, o valor ser .

NaN

Ocorre em grande parte quando a expresso indefinida, como a diviso de


zero por zero.

clock

Exibe a hora atual em um vetor linha de seis elementos contendo ano, ms, dia,
hora, minute e segundos.

date

Exibe a data atual como por exemplo, 20-Jun-92.

ans

Varivel usada para armazenar valores calculados por uma expresso que
calculada mas no armazenada em uma varivel nomeada.

Not-anumber

Matrizes Especiais

O MATLAB contm um grupo de funes que geram matrizes especiais. Algumas destas
matrizes tem aplicao especfica s tcnicas numricas discutidas posteriormente.

Cap. 3 Clculos com Matrizes

16

Curso de MATLAB

Magic Square
Uma matriz magic square de ordem n uma matriz n x n constituda de nmeros inteiros
de 1 a n . Os elementos aij da matriz esto dispostos de forma tal que o somatrio de cada linha
igual ao somatrio de uma coluna.
2

Forma Geral:
Assim, para saber
apresentar:

magic (n)

matriz square magic de ordem n.

o quadrado mgico de ordem 3 , o prompt do MATLAB deve

magic (3)
Zeros
Esta funo gera uma matriz zero, isto , uma matriz cujos elemento aij so nulos.
Forma Geral:
zeros(n)
Gera uma matriz zero, quadrada, de ordem n.
zeros(m,n)
Gera uma matriz zero de ordem m x n.
Ones
A funo ones gera uma matriz cujo valor dos elementos aij unitrio.
Argumento:

ones(n)
ones(m,n)

Gera uma matriz quadrada de ordem n.


Gera uma matriz de ordem m x n.

Eye
A matriz identidade pode ser gerada pelo MATLAB atravs da funo eye. Uma matriz
identidade uma matriz escalar de qualquer ordem cujos elementos aij so iguais a 1 para i = j.
Apresenta o mesmo formato que as funes anteriores. O formato eye(n) gera uma matriz
identidade de ordem n. J o formato eye (m,n) gera uma matriz de ordem m x n .
Pascal
Cria uma matriz cujas diagonais lembram o tringulo de Pascal. Assim, se usarmos o
comando pascal(5), a seguinte matriz gerada:
1
1
1
1
1

1
2
3
4
5

1 1
1
3 4
5
6 10 15
10 20 35
15 35 70

Cap. 3 Clculos com Matrizes

17

Curso de MATLAB
3.2

Operaes entre Escalares

Clculos aritmticos so identificados usando expresses. Uma expresso pode ser to


simples como uma constante, ou pode ter matrizes e constantes combinadas com operaes
aritmticas. Nesta seo, discutiremos operaes envolvendo somente escalares. Na seo
posterior, estendemos as operaes incluindo operaes elemento por elemento entre escalares e
matrizes ou entre duas matrizes.
As operaes aritmticas entre dois escalares so mostradas na tabela 3.1. Uma expresso
pode ser resolvida e armazenada em uma varivel especfica, como no comando seguinte, o qual
especifica que os valores em a e b sero adicionados, e a soma armazenada em uma varivel x:
x=a+b
Este comando deve ser interpretado como o valor em b adicionado ao valor em a, e a
soma armazenado em x. Se ns interpretamos os comandos desta forma, ento ns preocupamos
pelo seguinte comando MATLAB vlido.
count = count + 1
bvio que esta instruo no um comando algbrico vlido, mas o MATLAB explica
que 1 adicionado ao valor em count, e o resultado ser armazenado nesta varivel. Ou seja, o valor
em count ser acrescido de 1 (ou incrementado por 1).
importante reconhecer que uma varivel pode armazenar somente um valor por vez. Por
exemplo, suponha que as seguintes instrues sero executadas seguidamente;
Time = 0.0
Time = 5.0
O valor 0.0 armazenado na varivel time quando a primeira instruo executado e ento
substitudo pelo valor 5.0 quando a segunda instruo executada.
Quando voc entra com uma expresso sem especificar uma varivel para armazenar o
resultado, o mesmo automaticamente armazenado em uma varivel denominada ans. Cada vez
que um novo valor armazenado em ans, o valor anterior perdido.

Cap. 3 Clculos com Matrizes

18

Curso de MATLAB

Tabela 3.1 Operaes aritmticas entre dois escalares


Operao
Forma
MATLAB
Algbrica
Adio
a + b
a+b
Subtrao
a - b
a-b
Multiplicao
a x b
a*b
Diviso Direita
a
a/b
b
Diviso
b
a\b
Esquerda
a
Exponenciao
ab
a^b
Hierarquia em Operaes Aritmticas
Sabendo que vrias operaes pode ser combinadas em uma simples expresso aritmtica,
importante conhecer a ordem nas quais as operaes sero executadas. A tabela 3.2 contm a
ordem de prioridade das operaes aritmticas no MATLAB. Note que esta prioridade tambm
segue a prioridade algbrica padro.
Tabela 3.2 Hierarquia em operaes aritmticas
Prioridade Operao
1
Parnteses
2
Exponenciao, esquerda direita
3
Multiplicao e Diviso, esquerda direita
4
Adio e Subtrao, esquerda direita
Suponha que queremos calcular a rea de um trapzio, e tambm suponha que a varivel
base contenha o comprimento da base e que altura_1 e altura_2 contenham as duas alturas. A rea
de um trapzio pode ser calculada usando o seguinte enunciado:
area = 0.5*h*(B + b);
Suponha que omitamos os parnteses:
area = 0.5*altura*B + b;
Este enunciado seria executado como se fosse o enunciado a seguir:
area = (0.5*altura*B) + b;
Note que embora a resposta incorreta tenha sido calculada, no h mensagens de erro
imprimidas alertando-nos quanto ao erro. Portanto, importante estar cauteloso quando
convertemos equaes para comandos do MATLAB. Adicionar parnteses extras uma maneira

Cap. 3 Clculos com Matrizes

19

Curso de MATLAB

fcil para ter certeza que os clculos so feitos na ordem que voc quer. Se uma expresso longa,
divida-a em vrias expresses. Por exemplo, considere a seguinte equao:
f = ___x3 - 2x2 + 6,3___
x2 + 0,5005x 3,14
O valor de f poderia ser calculado usando os seguintes comandos, onde x um escalar:
numerador = x^3 - 2*x^2 + x + 6.3
denominador = x^2 + 0.5005*x - 3.14
f = numerador/ denominador
melhor usar vrias equaes que so mais fceis de compreender que apenas uma, que
requer maior cuidado na hora de imaginar a ordem das operaes.

Exerccios
D os seguintes comandos do MATLAB para calcular os seguintes valores. Suponha que
as variveis nas equaes so escalares e tenham valores determinados.
1. Coeficiente de frico entre um pneu e o pavimento:
Frico = __v2__
30s
2. Fator de correo em clculo de presso:
fator = 1 + _b_ + _c_
v
v2
3. Distncia entre dois pontos:
Slope = y2 - y1
x2 - x1
4. Resistncia de um circuito paralelo:
resistncia =
1
_
1_ + 1 + 1 _
r1
r2
r3
5. Perda de presso de um cano de frico
perda = f . p. 1 . v2
d
2

Cap. 3 Clculos com Matrizes

20

Curso de MATLAB

Limites Computacionais
Para a maioria dos computadores, a escala de valores estende-se de 10-308 a 10308, o que
deve ser suficiente para acomodar grande parte dos clculos. Contudo, possvel obter resultados
que estejam fora deste alcance, como mostramos a seguir:
Suponha que executamos os seguintes comandos:
x = 2e200;
y = 1e200;
z = x*y;
Como o alcance de 10-308 a 10308, ento os valores de x e y esto dentre do limite
estabelecido. Mas, o valor de z 2e400, e este valor ultrapassa o alcance. Este erro chamado
overflow porque o expoente do resultado de uma operao aritmtica demasiadamente alto para
ser armazenado na memria do computador. No MATLAB, o resultado de um expoente overflow
infinito().
Suponha agora que executamos os seguintes comandos:
x = 2.5e-200;
y = 1e200;
z = x/y;
O erro de underflow um erro similar causado pelo expoente do resultado de uma
operao aritmtica ser pequeno demais para ser armazenado na memria do computador. Os
valores de x e y novamente esto dentro do alcance permitido, mas o valor de z deve ser 2.5e-400.
Se o expoente menor que o mnimo, causamos um erro de underflow. No MATLAB, o resultado
de underflow zero.
Sabemos que a diviso por zero uma operao invlida. Se uma expresso resulta em
uma diviso por zero no MATLAB, o resultado da diviso . O MATLAB imprimir uma
mensagem de aviso e logo a seguir o clculo continua. As operaes posteriores usam como
resultado da diviso.

3.3

Operaes de Conjuntos

Uma operao de conjunto uma operao elemento por elemento. Por exemplo, suponha
que A e B sejam vetores-linha com cinco elementos. Um modo de gerar um novo vetor C com
valores que sejam produtos dos valores correspondentes em A e B o seguinte:

Cap. 3 Clculos com Matrizes

21

Curso de MATLAB

C(1)
C(2)
C(3)
C(4)
C(5)

=
=
=
=
=

A(1)*B(1);
A(2)*B(2);
A(3)*B(3);
A(4)*B(4);
A(5)*B(5);

Estes comandos so essencialmente comandos escalares porque cada comando multiplica


um simples valor por um outro e armazena o produto em um terceiro valor. Para indicar que
executamos uma multiplicao elemento por elemento entre duas matrizes de mesma ordem,
usamos um ponto antes da operao. Assim, os cinco comandos acima podem ser substitudos pelo
seguinte:
C = A .*B;
Se omitirmos o ponto estaremos executando uma operao matricial. Operaes matriciais
o tema que ser discutido no captulo 6.
Para as operaes de adio e subtrao, as operaes de conjunto e matriciais so
idnticas, e ento no precisamos distingu-las. Contudo, as operaes de conjunto para
multiplicao, diviso e exponenciao so diferentes das operaes matriciais para multiplicao,
diviso e exponenciao e por isso devemos usar o ponto quando queremos especificar uma
operao de conjunto.
Uma operao elemento por elemento, ou operaes de conjuntos, aplicam-se no somente
para operaes entre duas matrizes de mesma ordem como tambm em operaes entre um escalar
e um no escalar. Contudo, a multiplicao de uma matriz por um escalar e a diviso esquerda de
uma matriz por um escalar podem ser escritas de modo ou de outro. Assim, os dois comandos em
cada grupo de comandos abaixo so equivalentes para uma matriz no escalar A.
B = 3*A;
B = 3.*A;
C = A/5;
C = A ./5;
As matrizes resultantes B e C tero a mesma ordem de A.
Para mostrar as operaes de conjunto para vetores, considere os seguintes vetores-linha:
A = [2 5 6]
B = [2 3 5]
Se calculamos o produto elemento a elemento de A e B usando o seguinte enunciado:
C = A.*B

Cap. 3 Clculos com Matrizes

22

Curso de MATLAB

Ento, C conter os seguintes valores:


C = [ 4 15 30]
O MATLAB tem dois operadores de diviso uma diviso que usa o smbolo /e outra
que usa o smbolo \ . O comando para diviso direita:
C = A./B;
Ir gerar um novo vetor no qual cada elemento de A dividido pelo elemento
correspondente de B. Assim, C conter os seguintes valores:
C = [1 1.667 1.2]
O comando para diviso esquerda:
C = A.\B
Ir gerar um novo vetor no qual cada elemento o elemento correspondente de B dividido
pelo elemento correspondente de A. Ento, C conter os seguintes valores:
C = [1 0.6 0.833]
A exponenciao de conjunto tambm uma operao elemento por elemento. Por
exemplo, usamos os mesmos valores para A e B, considere os comandos:
C = A.^2;
D = A.^B;
Os vetores C e D sero os seguintes:
C = [4 25 36]
D = [4 125 7776]
A operao tambm vlida para uma base escalar e um expoente vetor, como o exemplo
a seguir:
C = 3.0. ^A;
que gera um vetor com os seguintes valores;
C = [9 243 729]
Este vetor poderia tambm ser calculado com a seguinte instruo:
C = (3).^A;

Cap. 3 Clculos com Matrizes

23

Curso de MATLAB

Contudo, a instruo a seguir incorreta:


C = 3.^A;
O MATLAB supe que o ponto parte da constante 3, e ento fazer uma exponenciao
matricial, que discutiremos no captulo 6. Se inserirmos um espao antes do ponto, como se segue:
C = 3 .^A;
Ento, o comando tentaria fazer a exponenciao elemento por elemento conforme
desejvamos. Estes exemplos indicam que devemos ter cuidado quando especificarmos operaes
de conjuntos. Se no tiver certeza que o que escreveu a expresso correta, sempre teste-a com
simples exemplos como aqueles que usamos.
d = [1:5; -1: -1: -5];
z = ones(2,5)
s=dz
p = d.*s
sq = d.^3;
Os valores destas matrizes so mostrados a seguir:
1 1 1 1 1
2
3
4
5
1
z=
d=

1 1 1 1 1
1 2 3 4 5
1
2
3
4
0
s=

2 3 4 5 6

0 2 6 12 20
p=

2 6 12 20 30

8
27
64
125
1
sq =

1 8 27 64 125

Exerccios
D os valores no vetor C depois execute os seguintes enunciados, onde A e B contm os
valores mostrados. Cheque suas respostas usando o MATLAB.
A = [2 -1 5 0]

B = [3 2 -1 4]

1. C = A B;
2. C = B + A - 3;
3. C = 2*A + A.^B;
Cap. 3 Clculos com Matrizes

24

Curso de MATLAB

4.
5.
6.
7.
8.

C = B./ A;
C = B.\A;
C = A.^B;
C = (2).^B + A;
C = 2*B/3.0.*A;

Soluo de Problemas Aplicados Engenharia: Ecos em Sinais de Comunicao


Uma interessante pesquisa est sendo feita atualmente para desenvolver sistemas de
computadores que respondam a comandos verbais. O projeto do tal sistema supe que o microfone
colhe o comando de voz e tem uma representao ntida da fala. Infelizmente, sensores como os
microfones apresentam distores, denominadas rudo. Os sistemas com comunicaes duas vias
tambm raramente tem ecos que so inadvertidamente introduzidos pela instrumentao. Por essa
razo, um sistema reconhecedor de voz deve ser capaz de executar algum processamento do sinal de
voz para remover algumas das distores e componentes indesejveis, tal como os ecos, tentando
antes reconhecer as palavras. Como forma de testar um programa que foi projetado para remover
ecos, devemos estar aptos a gerar um sinal digital e adicionar ecos ao mesmo. Podemos ento
avaliar a performance do programa que suposta para remover os ecos. Nesta seo, definimos
sinais digitais, e ento desenvolveremos um programa MATLAB para adicionar ecos a um sinal
digital.
Sinais Digitais
Um sinal uma funo (normalmente em relao ao tempo) que representa informao.
Esta informao ou dado so coletados com um sensor. Alguns dos mais comuns tipos de sensores
so microfones, que medem acstica ou dados sonoros (como a fala); sismmetro, que mede
intensidade de tremor de terra; fotoclulas, que medem a intensidade da luz; termistores, o qual
medem a temperatura; e osciloscpios, que medem tenses. Os sensores so normalmente
conectados outra pea da instrumentao chamada conversor analgico-digital (A/D), que amostra
o sinal periodicamente e grava o tempo e os valores do sinal que possam ser armazenados em um
arquivo de dados. O sinal original normalmente uma funo contnua (ou analgica); a seqncia
de valores coletados do sinal original denominada sinal digital. A figura 3.1 contm um exemplo
de sinal analgico coletado de um sinal contnuo. O sinal analgico composto de um grupo de
coordenadas x-y e assim poderiam facilmente ser armazenadas em um arquivo de dados, e ento ler
um programa MATLAB. Quando plotamos um sinal analgico, geralmente ligamos os pontos com
segmentos de reta em vez de plotar apenas os pontos.

Cap. 3 Clculos com Matrizes

25

Curso de MATLAB

Figura 3,1 Sinal Analgico ou contnuo

Figura 3..2 Amostra ou Sinal Digital

Gerando ecos em um sinal


Um eco de um sinal representado por uma verso atenuada do sinal original e que ocorre
atrasado no tempo em relao ao sinal original. Por exemplo, a figura 3.3 contm um sinal original
s(t) no primeiro esquema. O segundo esquema contm um eco do sinal original que foi atenuado
aproximadamente 50% (ou 0,5) do sinal original. O terceiro esquema contm um eco do sinal
original atenuado em 30% e atrasado 5 segundos em relao ao sinal original; este um ROLLED
eco porque os valores do eco so negativos do eco esperado. O quarto esquema contm o sinal
original mais os dois ecos adicionados ao mesmo.

Cap. 3 Clculos com Matrizes

26

Curso de MATLAB

s(t)

t, segundos

t, segundos

s(t) + Ecos1

t, segundos

t, segundos

Eco 1

Eco 2

Figura 3.3 O sinal original e os ecos.

Suponha que um sinal original foi coletado um perodo de 10 segundos, com um intervalo
de tempo de amostragem de 0,1 segundos. O seguinte grupo de coordenadas foram coletados no
primeiro segundo, e todos os valores do sinal depois estes valores foram zerados:
Tempo(s)
Valor do sinal

0,0
0,0

0,1
0,5

0,2
1,0

0,3
1,5

0,4
2,0

0,5
2,5

0,6
3,0

0,7
3,5

0,8
4,0

0,9
4,5

1,0
5,0

Escreva um programa do MATLAB que gera um sinal que contm o sinal original com
trs ecos adicionados ao mesmo. O primeiro eco atenuado em 0,5 e atrasado em 2 segundos; o
segundo eco tem um tempo de atraso de 4 segundos e atenuado em 0,3 segundos; o terceiro eco
atrasado em 7,5 segundos e atenuado em 0,1. Plote o grfico do sinal original e o sinal com ecos
em um arquivo MAT denominado eco.mat.

1. ENUNCIADO DO PROBLEMA
Dado um sinal original, gerar um novo sinal contendo o sinal original mais trs ecos
especficos adicionados a ele.

2. DESCRIO ENTRADA/SADA
O retngulo tracejado contm uma figura detalhada do processo de gerao de ecos do
sinal de entrada [sn]. Este sinal atrasado e multiplicado por um fator escalar (representado pelo
tringulo) para gerar cada eco. Ento, o sinal original e todos os ecos que so adicionados juntos
em um novo sinal [gn], o qual plotado e armazenado um arquivo de dados chamado eco.mat.

Cap. 3 Clculos com Matrizes

27

Curso de MATLAB

atraso 2s
0,5
[sn]

eco.mat

atraso 4s
-0,3

[gn]
atraso7,5s

0,1

Figura 3.4 Diagrama entrada / sada

3. EXEMPLO MANUAL
Para um exemplo manual, usamos os trs primeiros valores do sinal original:
Tempo (s) Valor do sinal
0,0
0,0
0,1
0,5
0,2
1,0
Os ecos especficos ento tem os seguintes valores (no-nulos):
Tempo,s
2,0
2,1
2,2

Valor do sinal
(0,5) . (0,0) = 0,0
(0,5) . (0,5) = 0,25
(0,5) . (1,0) = 0,5

Tempo,s
4,0
4,1
4,2

Valor do sinal
(- 0,3) . (0,0) = 0,0
(- 0,3) . (0,5) = - 0,15
(- 0,3) . (1,0) = - 0,3

Tempo,s
2,0
2,1
2,2

Valor do sinal
(0,1) . (0,0) = 0,0
(0,1) . (0,5) = 0,05
(0,1) . (1,0) = 0,1
A soma do sinal original mais os trs ecos so mostrados na figura 3.5.

Cap. 3 Clculos com Matrizes

28

Curso de MATLAB

Figura 3.5 Sinal Original mais os


trs ecos.

3.4

Funes Elementares

As expresses aritmticas raramente requerem outros clculos que no sejam a adio,


subtrao, multiplicao, diviso, e exponenciao. Por exemplo, muitas expresses requerem o
uso de logaritmos, exponenciais, e funes trigonomtricas. O MATLAB nos permite usar funes
para executar estes tipos de clculos em vez de nos exigirem calcul-los usando operaes
aritmticas bsicas. Por exemplo, se quisermos calcular o seno de um ngulo e armazenar o
resultado em b, podemos usar o seguinte comando:
b = sin(angle);

A funo sin supe que o argumento est em radianos. Se o argumento contm um valor
em graus, podemos convert-lo de graus para radianos dentro da funo referncia:
b = sin (angle*pi/180);

Poderamos tambm fazer a converso em comandos separados:


angle_radians = angle*pi/180;
b = sin(angle_radians);

Estes comandos so vlidos se angle um escalar ou se angle uma matriz. Se angle for
uma matriz, ento a funo ser aplicada elemento por elemento aos valores na matriz.
Agora que j vimos vrios exemplos de funes, iniciaremos uma reviso das regras
relativa s funes. Uma funo uma referncia que representa uma matriz. Os argumentos ou
parmetros da funo esto contidos em parnteses seguindo do nome da funo. Uma funo pode
no conter argumentos, um argumento ou muitos argumentos, dependendo de sua definio. Por
exemplo, pi uma funo que no tem argumento; quando usamos a funo referncia pi, o valor
Cap. 3 Clculos com Matrizes

29

Curso de MATLAB

para pi automaticamente substitui a funo referncia. Se uma funo contm mais que um
argumentos, muito importante dar os argumentos em ordem correta. Algumas funes tambm
exigem que os argumentos estejam unidades especficas. Por exemplo, as funes trigonomtricas
supem que os argumentos esto em radianos. No MATLAB, algumas funes usam o nmero de
argumentos para determinar a sada da funo. Por exemplo, a funo zeros pode ter um ou dois
argumentos, pelos quais determinamos a sada.
Uma funo referncia no pode ser usada ao lado esquerdo de um sinal de igualdade,
desde que este represente um valore e no uma varivel. Funes podem aparecer direita de um
sinal de igualdade e em expresses. Uma funo de referncia pode tambm ser parte do
argumento de uma outra funo de referncia. Por exemplo, o seguinte comando calcula o
logaritmo do valor absoluto de x:
log_x = log(abs(x))

Quando uma funo usada para calcular o argumento de uma outra funo, tenha certeza
de fechar o argumento de cada funo em seu prprio grupo de parnteses. Esta acomodao da
funo tambm chamada composio de funes. Nomes de funes devem estar em letras
minsculas a menos que o case sensitivy esteja desativado.
Agora discutiremos vrias categorias de funes que so freqentemente usadas em
clculos de engenharia. Outras funes sero apresentadas no decorrer dos captulos to logo
debatermos tpicos relevantes.

Funes Matemticas Elementares


As funes matemticas elementares incluem funes para executar um nmero de
clculos comuns como o clculo de valor absoluto e a raiz quadrada. Alm disso, tambm
inclumos um grupo de funes usadas em arredondamentos. Mostraremos a seguir uma lista destas
funes com uma breve descrio:
abs (x)

Calcula o valor absoluto de x.

sqrt(x)
round(x)
fix(x)
floor(x)
ceil(x)
sign(x)

Calcula a raiz quadrada de x.


Arredonda o valor de x para o inteiro mais prximo.
Arredonda o valor de x para o inteiro mais prximo de zero.
Arredonda o valor de x para o inteiro mais prximo de -
Arredonda o valor de x para o inteiro mais prximo de
Se x menor que zero, a funo retorna ao valor 1; se x for igual a
zero, retorna ao valor zero; caso contrrio, a funo retorna ao valor 1.
Retorna o resto da diviso x/y. Por exemplo, rem (25,4) 1, e rem
(100,21) 16.
Esta funo retorna ao valor de ex, onde e a base para logaritmo natural

Rem(x,y)
Exp(x)

Cap. 3 Clculos com Matrizes

30

Curso de MATLAB

ou aproximadamente 2.718282.
Retorna a ln x, o logaritmo natural de x para a base e.
Retorna a log10x, ou seja, o logaritmo de x na base 10.

log(x)
Log10(x)

Exerccios
Calcule as seguintes expresses, e ento verifique sua resposta no MATLAB.
1. round (-2.6)
2. fix(-2.6)
3. floor(-2.6)
4. ceil(-2.6)
5. sign(-2.6)
6. abs(round(-2.6))
7. sqrt(floor(10.7))
8. rem(15,2)
9. floor(ceil(10.8))
10. log10(100) + log10(0.001)
11. abs(-5.5)
12. round([0:0.3:2,1:0.74:4])
Funes Trigonomtricas
As funes trigonomtricas supem que os ngulos estejam representados em radianos.
Para converter para graus ou de graus para radianos, use as seguintes converses, sabendo que 180
= radianos:
ngulo_graus = ngulo_radianos*(180/pi);
ngulo_radianos = ngulo_graus*(pi/180);
A seguir uma lista de funes trigonomtricas com uma breve descrio:
sin(x)
cos(x)
tan(x)
asin(x)

Calcula o seno de x, em radianos.


Calcula o cosseno de x, em radianos.
Calcula a tangente de x, em radianos.
Calcula o arcoseno de x, onde x deve estar entre 1 e 1. A funo
apresenta um ngulo em radianos entre - /2 e /2.
acos(x)
Calcula o arcocosseno de x, onde x deve estar entre 1 e 1. A funo
apresenta um ngulo em radianos entre 0 e .
atan(x)
Calcula o arcotangente de x, onde x deve estar entre 1 e 1. A funo
apresenta um ngulo em radianos entre - /2 e /2.
atan2(x,y)
Calcula o arcotangente do valor de y/x. A funo apresenta um ngulo
em radianos estar entre - e , dependendo dos sinais de x e y.
As outras funes trigonomtricas podem ser calculados usando as seguintes equaes:
Cap. 3 Clculos com Matrizes

31

Curso de MATLAB

sec x = 1/ cos x
csc x = 1 / sin x
cot x = 1 / tan x

Funes Hiperblicas
Funes Hiperblicas so funes de ex; as funes hiperblicas inversas so funes de ln
x. Estas funes so teis em aplicaes como o projeto de alguns tipos de filtros digitais. O
MATLAB inclui vrias funes hiperblicas, como as mostradas nesta breve descrio:
sinh(x)
cosh(x)
tanh(x)
asinh(x)
acosh(x)
atanh(x)

Calcula o seno hiperblico de x.


Calcula o cosseno hiperblico de x.
Calcula a tangente hiperblica de x.
Calcula o seno hiperblico inverso de x.
Calcula o cosseno hiperblico inverso de x.
Calcula a tangente hiperblica inversa de x.

Exerccios
D as expresses MATLAB para calcular os seguintes valores, dado o valor de x.
1.
2.
3.
4.
5.
6.

coth x
sec x
acoth x
csc x
asech x
acsc x

Funes de arquivo M
O MATLAB apresenta uma estrutura que nos permite criar funes sob a forma de
arquivos M. Como exemplo, considere uma funo que esteja em um arquivo-M denominado
circum.m:
function c = circum ( r)
% CIRCUM Circunferncia de um crculo de raio r.
%
Para matrizes, CIRCUM ( r ) retorna uma matriz
%
que contm as circunferncias de crculos com raios iguais
%
aos valores no vetor original.
c = pi*2*r;

Assim, se o prompt do MATLAB apresentar:


Cap. 3 Clculos com Matrizes

32

Curso de MATLAB

r = [0 1.4 pi];
a = circum (r );
Os elementos da matriz A correspondero as circunferncias de crculos de raios 0, 1,4 e ,
respectivamente.
Para esta funo tambm so vlidos os comandos:
a = 5.6;
disp (circum(a))
c = [1.2 3; 5 2.3];
circum ( c) ;
Assim, circum passa a ser uma funo MATLAB assim como ones, sin e outras. A parte
comentada no arquivo circum.m usada quando digitarmos help circum no prompt do MATLAB.
H algumas regras para escrever uma funo de arquivo M:

A funo deve comear com uma linha contendo a palavra function, seguida pelo argumento de
sada, um sinal de igual, e o nome da funo. Os argumentos para a funo devem estar entre
parnteses. Esta linha define os argumentos de entrada e sada;

As primeiras linhas devem ser comentrios porque sero exibidas quando o menu help for usado
juntamente com o nome da funo , como help circum;

A nica informao retornada da funo contida nos argumentos de sada, que so,
obviamente, matrizes. Verificar se a funo inclui um comando que assegure um valor ao
argumento de sada.

Uma funo que possui mais de uma varivel de sada como por exemplo:
function [ dist, vel, acel] = motion (x)

Deve apresentar as variveis de sada dentro de colchetes. Alm disso, todos os valores devem
ser calculados dentro da funo.
Uma funo que tenha mltiplos argumentos de entrada deve listar os argumentos no comando
function, como mostramos no exemplo a seguir, que tem dois argumentos de entrada:
function error = mse (w,d)

As variveis especiais nargin e nargout podem ser usadas para determinar o nmero de
argumentos de entrada passadas para uma funo e o nmero de argumentos de sada solicitados
quando a funo chamada.

Cap. 3 Clculos com Matrizes

33

Curso de MATLAB
Soluo de Problemas Aplicados Engenharia: Sinais de Sonar
O estudo do sonar (sound navigation and ranging) inclui a gerao, transmisso, e
recepo de energia sonora na gua. Dentre as aplicaes destacamos: mapeamento geolgico,
medidas de sinal biolgico, navegao submarina e explorao mineral. Um sistema sonar ativo
transmite um sinal que normalmente um sinal senoidal de freqncia conhecida. As reflexes ou
os ecos do sinal so recebidos e analisados para prover informaes sobre o meio envolvente. Um
sistema sonar passivo no transmite sinais mas coleta-os de sensores e os analisa baseado em suas
freqncias.
Nesta seo, descreveremos as senides, j que um sinal bsico usando em sistemas
sonar. Depois, desenvolveremos um programa MATLAB para gerar um sinal sonar.
Gerao de um Sinal Senoidal
Uma senide uma funo seno escrita em funo do tempo:
g(t) = sen (2ft)
onde f a freqncia da senide em ciclos por segundo, ou Hertz(Hz).
Se a freqncia de uma senide for 5 HZ, teremos:
g(t) = sen (25t) = sen (10t)
Ento haver cinco ciclos da senide em um segundo, ou seja, a freqncia de uma senide
5 HZ. O perodo P de uma senide o intervalo de tempo que corresponde a um ciclo; portanto,
o perodo desta senide 0,2 segundos. A relao entre perodo e freqncia dada por
f = 1/ P
onde f a freqncia em Hz e P o perodo em segundos.
Se a senide multiplicada por um escalar A, a equao pode ser escrita nesta forma:
g(t) = Asen (2ft)
O escalar tambm chamado de amplitude da senide. Uma senide com um ngulo de
fase em radianos pode ser escrita como:
g(t) = Asen (2ft + )
Se o ngulo de fase for igual a /2 radianos, a senide poder ser escrita sob termos de
uma funo seno ou cosseno, e pode ou no incluir um ngulo de fase.
Cap. 3 Clculos com Matrizes

34

Curso de MATLAB

Gerando um sinal sonar


Conforme j dito, um dos tipos de sinais usados em sistemas de sonar um sinal senoidal.
As senides podem ser representadas pela equao:
onde :
2E

cos(2fc),
0 t PD
s (t ) = PD

0
para os demais ins tan tes

E a energia transmitida,
PD a durao do pulso em segundos,
fc a freqncia em Hertz.
Durao de um sinal sonar podem alcanar de uma frao de milisegundos a alguns
segundos; e as freqncias, de poucas centenas de Hz a dezenas de KHz dependendo do sistema e
do alcance de operao desejado.
Escreva um programa MATLAB que permita ao usurio entrar com valores de E, PD, e fc
para gerar um sinal sonar. Armazene os valores do sinal em um arquivo MAT denominado
sonar.mat. A amostragem do sinal deve cobrir a durao do pulso e conter 10 amostras de cada
perodo de x(t). Alm disso, adicione um perodo de 200 pontos de silncio depois do pulso.
1. ENUNCIADO DO PROBLEMA
Escreva um programa para gerar um sinal sonar que contenha 10 amostras de cada perodo
de uma senide especfica, cobrindo uma durao de tempo determinada.
2. DESCRIO ENTRADA/SADA
Os valores de E (energia transmitida em joules), PD (durao do pulso em segundos), e fc
(freqncia em Hz) so os valores de entrada. A sada um arquivo denominado sonar.mat, que
contm os valores de tempo e sinal para a durao do pulso sonar, como mostramos na figura 3.7.
Tambm plotamos o sinal sonar.

sonar.mat

3. EXEMPLO MANUAL

Cap. 3 Clculos com Matrizes

35

Curso de MATLAB

Para um exemplo manual, usamos os valores a seguir:


E = 500 joules
PD = 5 milisegundos (ms)
fc = 3,5 KHz
O perodo da senide 1/3500, ou aproximadamente 0,3 ms. Assim, para ter 10 amostras
por perodo, o intervalo da amostragem precisa ser aproximadamente 0,03 ms. A durao do pulso
0,5 ms, e portanto precisamos de 167 amostras do sinal:
s( t ) =

2E
cos(2f c t )
PD

s( t ) =

1000
cos(2(3500)t )
0,005

s( t ) = 447, 2 cos(23500 t )
Os primeiros valores do sinal sonar so calculados com aproximao de uma casa decimal.
t (ms) 0,00 0,03 0,06 0,09
0,12
0,15
0,18
0,21 0,24 0,27 0,30 0,33
s(t)
447,2 353,4 111,2 -177,6 -391,9 -441,7 -306,1 -42,1 239,6 420,8 425,3 251,4
Adicionaramos 200 pontos de silncio atravs de dados adicionais com seus tempos
correspondentes e valores de sinais.
4. SOLUO MATLAB

3.5

Nmeros Complexos

As solues de muitos problemas de engenharia como sistema de controle para um brao


mecnico ou anlise da estabilidade de um circuito eltrico envolvem a busca das razes de uma
equao da seguinte forma:
y = f(x)
onde as razes so os valores de x para qual y igual a zero.
Considere a forma geral para um polinmio de grau n:

a1xn + a2xn-1 + a3xn-2 + + na-1 x2 + anx + an+1 = 0


Um polinmio de grau n ter n razes, sendo que algumas podem ser razes mltiplas ou
razes complexas. Nesta seo discutiremos as operaes com nmeros complexos e as funes
MATLAB que os usam.
Cap. 3 Clculos com Matrizes

36

Curso de MATLAB

Operaes Aritmticas com Nmeros Complexos


Os comandos MATLAB reconhecem os nmeros complexos usando i para representar -1.
(O MATLAB tambm reconhece o uso de j para representar -1. Esta notao mais usada na
Engenharia Eltrica). O comando a seguir define uma varivel complexa:
x = 1 - 0.5*i;
Quando executamos operaes entre dois complexos, o MATLAB automaticamente
executa os clculos necessrios. Se uma operao for entre um nmero real e um complexo, o
MATLAB supe que a parte imaginria do nmero real igual a zero. O MATLAB inclui vrias
funes que so especficas aos nmeros complexos:
real (x)
imag(x)
conj(x)
abs(x)
angle(x)

Calcula a parte real do nmero complexo x.


Calcula a parte imaginria do nmero complexo x.
Calcula o conjugado do nmero complexo x.
Calcula o mdulo do nmero complexo x.
Calcula o ngulo usando o valor de atan2 (imag(x), real(x)), e portanto o ngulo est
entre - e .
Estas funes tornam mais fcil converter o complexo da forma polar para retangular.

Coordenadas polar e retangulares


Podemos representar um nmero complexo em um plano com eixos real e imaginrio. Os
nmeros reais representam o eixo x, e os nmeros imaginrios representam o eixo y, e os nmeros
com partes real e imaginria representam o resto do plano.
Quando representamos um nmero complexo com uma parte real e imaginria, como 2 +
i3, estamos usando uma notao retangular. A figura 3.10 mostra que o nmero complexo pode ser
escrito com um ngulo e raio r em relao origem. Esta forma chamada de notao polar, e o
ponto 2 + i3 pode ser representado em notao polar com um ngulo de 0,98 radianos e um raio3,6.
Eixo
imaginrio

(2,3)

3
2
1

Figura 3.10 Plano Complexo

1 2

Cap. 3 Clculos com Matrizes

Eixo
real

37

Curso de MATLAB

Converso
-

retangular a polar
r = a 2 + b2
b
= tan 1
a

- polar a retangular
a = r cos
b = r sen
Se x um nmero complexo, ento o mdulo e a fase podem ser calculados com os
seguintes comandos:
r = abs (x);
theta = angle (x);
Para calcular o nmero complexo usando mdulo e fase determinados, usamos o comando:
y = r*exp (i*theta);
Podemos calcular a parte real e a parte imaginria de um complexo com os comandos:
a = real (x);
b = imag (x);
Para calcular o complexo com partes real e imaginria especficas, usamos:
y = a + i*b;

Exerccios
Converter os nmeros complexos nos problemas abaixo. Verifique suas respostas usando o
MATLAB.
1.
2.
3.
4.

3 i2
i
2
0,5 + i

Cap. 3 Clculos com Matrizes

38

Curso de MATLAB

Converter os valores abaixo para forma retangular. Verifique suas respostas usando as
funes MATLAB.
5.
6.
7.
8.

ei
e i0,75
0,5 e i2,3
3,5ei3

Cap. 3 Clculos com Matrizes

39

Curso de MATLAB

Captulo 4 - Controle de Fluxo


4.1

Operadores Lgicos e Relacionais

Operadores Relacionais
O MATLAB tem operadores relacionais que podem ser usados para comparar duas
matrizes de mesma ordem ou para comparar uma matriz e um escalar, como os mostrados a seguir:
Operador
<
<=
>
>=
==
~=

Descrio
Menor que
Menor ou igual a
Maior que
Maior ou igual a
Igual a (no sentido de condio)
No igual a

A finalidade dos operadores fornecer respostas a perguntas do tipo falso/verdadeiro.


Assim, se a comparao for verdadeira, atribui-se o valor 1; se for falsa, o valor 0.
Considere a expresso lgica a seguir:
a<b
Se a e b forem escalares, ento o valor da expresso ser 1 (verdadeira) se a for menor que
b; caso contrrio, a expresso ser 0 (falsa). Se a e b forem vetores com os valores a seguir:
a = [ 2 4 6]
b = [ 3 5 1]
Ento, o valor de a < b ser o vetor [1 1 0], enquanto o valor de a ~ = b ser [1 1 1].

Operadores Lgicos
Podemos combinar expresses usando os operadores lgicos do MATLAB. Os operadores
so representados pelos seguintes smbolos.

Cap. 4 Controle de Fluxo

40

Curso de MATLAB
Operadores

Descrio

&
|
~

e
ou
no

Quando duas expresses so unidas por e ; o resultado ser 1 (verdadeiro) se ambas


expresses forem verdadeiras, para expresses unidas por ou, o resultado ser 1 (verdadeiro) se uma
ou ambas expresses forem verdadeiras. Assim, para a seguinte expresso lgica
a <b & b<c
O resultado ser 1 (verdadeiro) somente se a < b < c; e falso (0) para todos resultados
diferentes. Alm disso, a operao s ser vlida se as matrizes resultantes (a < b e b < c) tiverem
o mesmo tamanho.
Uma expresso pode conter vrios operadores lgicos, como a expresso abaixo:
~ (b = = c | b = = 5.5)
O MATLAB analisaria primeiro, as expresses b = = c e b = = 5.5 (obviamente, por causa
do uso de parnteses). O resultado seria inversamente pelo operador no. Assim, suponha b = = 3
e c = = 5. Nenhuma das expresses verdadeira, logo, a expresso b = = c | b = = 5.5 falsa.
Aplicando o operador no, o valor da expresso alterado e a mesma torna-se verdadeira.
A prioridade dos operadores lgicos, do mais alto ao mais baixo, : no, e, e ou.

Exerccios
Determine se as expresses nos problema 1 a 8 so verdadeiras ou falsas. Depois,
verifique suas respostas usando o MATLAB. Lembre que ao verific-las , voc precisa entrar com
a expresso. Suponha que as variveis tenham os valores indicados abaixo:

1.
2.
3.
4.
5.
6.
7.
8.

a = 5.5
b = 1.5
a < 10.0
a + b >= 6.5
k ~= 0
bk>a
~(a = = 3*b)
k < = k + 6
a < 10 & a > 5
abs (k) > 3 | k < b - a

Cap. 4 Controle de Fluxo

k = -3

41

Curso de MATLAB
4.2

Tomada de Decises

Estrutura If Else End


if

expresso
Comandos

End
Se a expresso lgica for verdadeira, os comandos entre if e end so executados. Como
exemplo, temos:
if a < 50
count = count +1;
sum = sum + a;
end
Suponha que a seja um escalar. Se a < 50, ento count incrementada por 1 e a
adicionada sum; caso contrrio, os comandos no sero executados. Se a no for um escalar,
ento count incrementado por 1 e a adicionada sum somente se cada elemento em a for menor
que 50.
A prxima estrutura contm um parmetro if dentro de outro parmetro if:
if

expresso 1
grupo de comandos A
if expresso 2
grupo de comandos B
end
grupo de comandos C

end
grupo de comandos D
Se a expresso 1 for verdadeira, os grupos de comandos A e C so executados. Se a
expresso 2 tambm for verdadeira, o grupo de comandos B executado antes do grupo de
comandos C. Se a expresso 1 for falsa, imediatamente salta-se para os comandos D. Como
exemplo, temos:
if a < 50
count = count + 1
sum = sum + a;
if b > a
b = 0;
end
end
Cap. 4 Controle de Fluxo

42

Curso de MATLAB
Novamente, suponha que a e b sejam escalares. Ento, se a < 50 aumentaremos count por 1
e adicionaremos a sum. Se b > a, ento b ser igual a zero. Se a no for menor que 50, ento
pula-se diretamente para o segundo end. Se a e nem b forem escalares, ento b maior que a
somente se cada par de elementos correspondentes de a e b so valores nos quais b > a. Se a ou b
um escalar, ento a matriz comparada ao escalar.

Instruo Else
Esta instruo permite que executemos um comando se a expresso lgica verdadeira e
um diferente comando se a expresso falsa. A forma geral do comando if combinada instruo
else mostrada a seguir:
if

expresso
grupo de comandos A

else
grupo de comandos B
end
Se a expresso lgica verdadeira, ento o grupo de comandos A executado. Caso
contrrio, o grupo de comandos B executado.
Como exemplo, suponha que um txi esteja passando entre dois edifcios. Considere que a
varivel d contenha a distncia do veculo ao edifcio mais prximo. Se o carro estiver a 10 metros
do edifcio, a velocidade calculada usando a seguinte equao:
velocidade = 0,425 + 0,00175d2
Se o txi estiver a uma distncia maior que 10 metros, use a equao a seguir:
velocidade = 0,625 + 0,12d 0,00025d2
Calculamos a velocidade correta com estes comandos:
if d < = 1
0
velocidade = 0.425 + 0.00175*d^2
else
velocidade = 0.625 + 0.12d 0.00025*d^2
end

Quando h muitas alternativas a serem executadas, pode ser mais difcil determinar quais
expresses lgicas devam ser verdadeiras (ou falsas) para executar cada grupo de comandos. Neste
caso, a clusula elseif freqentemente usada para simplificar o programa lgico:
Cap. 4 Controle de Fluxo

43

Curso de MATLAB
if

expresso 1
grupo de comandos A
elseif expresso 2
grupo de comandos B
elseif expresso 3
grupo de comandos C
end
Se a expresso 1 for verdadeira, somente o grupo de comandos A executado. Se a
expresso 1 for falsa e a expresso 2 for verdadeira, ento somente o segundo grupo de comandos
executado. Se as expresses 1 e 2 forem falsas e a expresso 3 for verdadeira, ento somente o
grupo de comandos C executado. Se mais de uma expresso lgica for verdadeira, a primeira que
for verdadeira determina qual grupo de comandos ser executado. Se nenhuma das expresses
lgicas forem verdadeiras, ento nenhum dos comandos dentro da estrutura if executado.

Else e elseif podem ser combinadas dentro de uma estrutura if-else-end, como mostramos
a seguir:
if

expresso 1
grupo de comandos A
elseif expresso 2
grupo de comandos B
elseif expresso 3
grupo de comandos C
else
grupo de comandos D
end
Se nenhuma das expresses lgicas forem verdadeiras, ento o grupo de comandos D
executado.

Exerccios
Nos problemas 1 a 7, d os comandos MATLAB necessrios para executar os passos
indicados. Suponha que as variveis so escalares.
1.
2.
3.
4.

Se time maior que 50, ento incremente-a por 1.


Quando a raiz quadrada de poly for menor que 0,001, imprima o valor de poly;
Se a diferena entre volt_1 e volt_2 for maior que 2, imprimir os valores de volt_1 e volt_2;
Se o valor de den for menor que 0, 003; atribua zero a result; caso contrrio, atribua a result
num dividido por dez;

Cap. 4 Controle de Fluxo

44

Curso de MATLAB
5. Se o logaritmo natural de x for maior ou igual a 10, atribua zero a time e incremente-o por
count;
6. Se dist for maior que 50 e time for maior que 10, incremente time por 2; caso contrrio,
incremente time por 5.
7. Se dist for maior ou igual a 100, incremente time por 10. Se dist estiver entre 50 e 100,
incremente time por 1. Caso contrrio incremente time por 0,5.

4.3

Loop FOR

O MATLAB contm dois comandos para gerar loops, o comando for e o comando while.
Nesta seo, discutiremos o comando for, e a seo 4.4 discutiremos o comando while.
O comando for tem a estrutura a seguir:
for

varivel = expresso
Grupo de comandos A

end
Os comandos entre as instrues for e end so executados uma vez para cada coluna da
expresso matricial. A cada iterao, a varivel atribuda para a prxima coluna da matriz, isto ,
durante o i-simo ciclo do loop, temos que varivel = expresso matricial (: , i ). Veja o exemplo a
seguir:
Suponha que temos um grupo de valores que representam a distncia de um txi da torre
mais prxima. Queremos gerar um vetor que contenha as respectivas velocidades. Se o txi est a
10 metros do edifcio, usamos a equao:
velocidade = 0,425 + 0,00175d2
Se o txi estiver a uma distncia maior que 10 metros, use a equao a seguir:
velocidade = 0,625 + 0,12d 0,00025d2
Como a escolha da equao da velocidade depende do valor de d, devemos determinar
separadamente d(1), d(2), e assim por diante. Contudo, no queremos o mesmo para calcular
velocidade(1), velocidade(2) e assim por diante. Logo, usaremos um loop, com a varivel usada
como subscrito.
Na primeira soluo, supomos que existiam 25 elementos no vetor d..

Cap. 4 Controle de Fluxo

45

Curso de MATLAB
for d = 1:25
if d < = 10
velocidade = 0.425 + 0.00175*d^2
else
velocidade = 0.625 + 0.12*d 0.00025*d^2
end
Na prxima soluo, supomos que o tamanho do vetor d desconhecido.
usamos a funo size para determinar o nmero de vezes que queremos executar o loop.

Contudo,

for k = 1:size (d,2)


if d(k) < = 10
velocidade = 0.425 + 0.00175*d(k)^2
else
velocidade = 0.625 + 0.12*d 0.00025*d(k)^2
end
end
As regras para um loop for so:

Se o conjunto for uma matriz vazia, o loop no ser executado. O fluxo de controle passar ao
prximo comando aps a instruo end;
Se a expresso for um escalar, o loop ser executado uma nica vez;
Se a expresso for um vetor-linha, ento a cada iterao a varivel conter o prximo valor do
vetor;
Se a expresso for uma matriz, ento a cada iterao a varivel conter a prxima coluna da
matriz;
Uma vez completo o loop for a varivel contm o ltimo valor usado.
Se o operador dois-pontos usado para definir a expresso matricial usando o formato:
for k = incio: incremento: limite
Ento o nmero de vezes que o loop executar pode ser calculado usando a equao:
lim ite incio
floor
+1
incremento

Se este valor for negativo, o loop no ser executado. Portanto, se um comando for
contiver a seguinte informao:
for k = 5: 4: 83
Ento, o nmero de vezes em que executa-se o loop ser:

Cap. 4 Controle de Fluxo

46

Curso de MATLAB

83 5
78
floor
+ 1 = floor
+ 1 = 20
4

O valor de k seria 5, depois 9, 13, e assim por diante at o valor final 81. O loop no seria
executado para k = 85 porque maior que o limite, 83.

Comando break

O comando break pode ser usado para sair de um loop antes que o mesmo seja completo.
freqentemente usado se houver um erro detectado dentro do loop.

Exerccios
Determine o nmero de vezes que o loop for definido pelos comandos a seguir so
executados. Verifique sua resposta .

1.
2.
3.
4.
5.
6.

for k = 3:20
for count = -2:14
for k = -2:-1:10
for time = 10:-1:0
for time = 10:5
for index = 52 : -12

Aplicao Soluo de Problemas: Fibras ticas


Se a luz est direcionada para o extremo de uma longa haste de vidro ou plstico, a luz ser
totalmente refletida pelas paredes, ziguezagueando e segue adiante at chegar a outra extremidade.
Este interessante fenmeno tico pode ser usado para transmitir luz e imagens regulares, de um
lugar para outro. Se guia de luz, a luz seguir a forma da haste e emergir somente na
extremidade, como mostramos na figura a seguir:

fibra tica

Cap. 4 Controle de Fluxo

47

Curso de MATLAB
A fibra tica uma fibra de vidro muito fina. Se os extremos das fibras so polidos e o
arranjo espacial o mesmo em ambos extremos (um feixe coerente), a fibra pode ser usada para
transmitir uma imagem, e o feixe chamado condutor de imagem. Se as fibras no tem o mesmo
arranjo para ambos extremos (feixe incoerente), a luz transmitida em vez da imagem, e por esta
razo chamada guia de luz. Por causa da flexibilidade das fibras ticas, as guias de luz e
condutores de imagens so usados em instrumentos projetados para permitir a observao visual de
objetos ou reas que de outro modo seriam inacessveis. Por exemplo, um endoscpio um
instrumento usado por fsicos para examinar o interior do corpo de um paciente com somente um
pequeno corte. Um endoscpio usa uma fibra tica para transmitir a luz necessria dentro do corpo
de um paciente. As fibras ticas podem ser usadas para transmitir feixes de luz LASER, o qual
pode ser usado para desobstruir artrias, quebrar pedras nos rins, e limpar cataratas.
Este fenmeno de reflexo total interna origina-se da lei de Snell e depende unicamente
dos ndices de refrao para os material considerados para guias de luz. Um guia de luz
composto de dois materiais o ncleo central e o material que o envolve, denominado de
blindagem. O material que compe o ncleo tem o ndice de refrao mais alto que o meio que o
envolve. Quando a luz incide em uma interface entre dois meios com ndices de refrao diferentes,
parte dela refletida a outra parte refratada. A quantidade de luz refratada depende dos ndices de
refrao dos materiais e o ngulo de incidncia da luz. Se a luz incidente na interface entre dois
meios provm de um material com maior ndice de refrao, ento parte da luz atravessa a interface.
O ngulo de incidncia onde a luz totalmente refletida pela superfcie chamado de ngulo crtico
c. Como o ngulo crtico depende dos ndices de refrao de dois materiais, podemos calcular este
ngulo e determinar se a luz que entra em uma haste a um ngulo particular permanecer no interior
da mesma. Suponha que n2 o ndice de refrao do meio envolvente, e n1 o ndice de refrao da
haste. Se n2 maior que n1, a haste no transmitir luz; caso contrrio, o ngulo crtico pode ser
determinado pela equao
sen c = n2 / _ n1
Escreva um programa MATLAB que determina se a luz ser ou no transmitida por dois
materiais que forma um guia. Suponha que um arquivo de dados ASCII denominado indices.dat
contenha o nmero de possveis ndices de refrao da fibra seguido pelo ndice de refrao do meio
que o envolve. O programa deve determinar se os materiais formaro um guia de luz e, ento, para
quais ngulos a luz entra no guia.
1. ENUNCIADO DO PROBLEMA
Determine se os materiais especificados formaro ou no um guia de luz. Se eles no
formarem, calcule os ngulos para o qual a luz pode entra na haste e ser transmitida.

Cap. 4 Controle de Fluxo

48

Curso de MATLAB
2. DESCRIO ENTRADA \ SADA
Como mostramos na figura abaixo, a entrada ao programa um arquivo de dados contendo
os ndices de refrao para os guias de luz em potencial. A sada uma mensagem indicando se a
luz ou no transmitida e o ngulos para quais pode entrar no guia.

Mensagem
e c

Indices.dat

3. EXEMPLO MANUAL
O ndice de refrao do ar 1,0003 e o ndice do vidro 1,5. Se formarmos um guia de luz
de vidro envolvido pelo ar, o ngulo crtico c pode ser calculado como mostramos a seguir:
c = sen 1 (n2 / n1 ) = sen 1 (1,0003 / 1,5 ) = sen 1 ( 0,66687 ) = 41, 82 0
O guia de luz transmitir luz para todos os ngulos de incidncia maiores que 41,820 .
4. SOLUO DO MATLAB

5. TESTANDO

4.4

Loops WHILE

O loop while uma importante estrutura para repetio de um grupo de comandos quando
a condio especificada for verdadeira. O formato geral para esta estrutura de controle :
while expresso
grupo de comandos A
end
Cap. 4 Controle de Fluxo

49

Curso de MATLAB

Se a expresso for verdadeira, ento o grupo de comandos A executado. Depois destes


comandos serem executados, a condio novamente questionada. Se for verdadeira, o grupo de
comandos novamente executado. Quando a condio for falsa, o controle pula para o comando
posterior ao comando end. As variveis modificadas no grupo de comandos A devem incluir as
variveis na expresso, ou o valor da expresso nunca ser mudado. Se a expresso for verdadeira
(ou um valor no-nulo), o loop torna-se um loop infinito.( Lembre-se que voc pode usar ^c para
sair um loop infinito).
Podemos mostrar que o uso de um loop while em um grupo de comandos que adicionam
valores em um vetor para uma soma at o valor negativo ser alcanado. Como todos os valores no
vetor podem ser positivos, a expresso no loop while deve acomodar a situao:
x = [ 1 2 3 4 5 6 7 8 9 ];
sum = 0;
k = 1;
while x (k) > =0 & k < size (x,2)
sum = sum + x(k);
k = k + 1;
end

Aplicao Soluo de Problemas: Equilbrio de Temperatura


O projeto de novos materiais para o aperfeioamento das caractersticas do fluxo de ar
acerca dos veculos envolve a anlise dos materiais para no somente o fluxo de ar mas tambm
para propriedades como a distribuio de temperatura. Neste problema, consideramos a
distribuio em uma fina placa metlica tal que esta alcance um ponto de equilbrio trmico. A
placa projetada para ser usada em uma aplicao na qual as temperaturas de todos os quatro lados
da placa metlica estejam a temperaturas constantes ou a temperaturas isotrmicas. A temperatura
para os outros pontos da placa uma funo da temperatura dos pontos envolventes. Se
considerarmos as placas para serem semelhantes a uma grade, ento uma matriz poderia ser usada
para armazenar as temperaturas dos pontos correspondentes sobre a placa. A figura abaixo mostra
uma grade para uma placa que est sendo analisada com seis medidas de temperatura ao longo dos
lados e oito temperaturas ao longo das partes superior e inferior. Os pontos isotrmicos nos quatros
lados so sombreados. Um total de 48 valores de temperaturas esto representados.

Cap. 4 Controle de Fluxo

50

Curso de MATLAB

direita

esquerda

superior

inferior

Grade de uma placa metlica


As temperaturas isotrmicas sobre os quatro lados seriam especificadas; supomos que os
lados superior, esquerdo e direito so mantidos mesma temperatura enquanto que o lado inferior
da placa mantida a uma temperatura diferente. Os pontos restantes so inicialmente selecionados
para uma temperatura arbitrria, normalmente zero. A nova temperatura de cada ponto interno
calculado como a mdia das quatro temperaturas envolventes (veja a figura a seguir) e dada por:

T0 = T1 + T2 + T3 + T4
4

T1

T4

T0

T0

T2

T3

Pontos que envolvem T0

Depois de calcular a nova temperatura para um ponto interno, a diferena entre a antiga e a
temperatura recente calculada. Se a mudana de temperatura for maior que algum valor de
tolerncia especificado, a placa j no est em equilbrio trmico, e o processo inteiro repetido.

Cap. 4 Controle de Fluxo

51

Curso de MATLAB
Usamos as duas matrizes para as temperaturas, uma das antigas temperaturas e uma das
recentes temperaturas. Precisamos de duas matrizes porque supomos que a temperatura muda para
todos os pontos que ocorrem simultaneamente, sempre que as calculamos. Se usarmos uma nica
matriz, estaramos atualizando informao sem que antes estivssemos com a informao antiga.
Por exemplo, suponha que estamos calculando a nova temperatura para a posio (3, 3). O novo
valor a mdia das temperaturas nas posies (2, 3), (3, 2), (3, 4), e (4, 3). Quando calculamos a
nova temperatura para a posio (3, 4), novamente calculamos uma mdia, mas queremos usar o
antigo valor na posio (3, 3), e no o seu valor atualizado.
Portanto, usamos uma matriz de temperaturas antigas para calcular uma matriz de novas
temperaturas e para determinar se alguma temperatura muda acima da tolerncia. Quando
movemos as novas temperaturas para o conjunto antigo. Quando nenhuma das temperaturas muda
acima da tolerncia, supomos que o equilbrio foi alcanado, e imprimimos as temperaturas finais.

1. ENUNCIADO DO PROBLEMA
Determine os valores de equilbrio para uma placa de metal com lados isotrmicos.

2. DESCRIO ENTRADA / SADA


Como mostra a figura abaixo, a entrada o tamanho da grade da placa, as temperaturas
isotrmicas e o valor de tolerncia. A sada o grupo de temperaturas de equilbrio para a placa de
metal.

temperaturas isotrmicas
tamanho da grade

Equilbrio de
temperatura

tolerncia

3. EXEMPLO MANUAL
Tenha a certeza que compreende o processo, examinamos um simples caso, estudando
cada iterao. Supondo que a matriz contm quatro linhas e quatro colunas. As temperaturas
isotrmicas so 100 e 50, e ns iniciamos todos os pontos restantes do zero. Usamos uma
tolerncia de 40. O grupo inicial de temperaturas e as sucessivas iteraes ao equilbrio trmico
so mostradas a seguir:
Cap. 4 Controle de Fluxo

52

Curso de MATLAB

Temperaturas Iniciais
100 100 100 100
100 0
0 100
100 0
0 100
50 50 50 50

Primeira Iterao
100
100
100
50

100
50
37,5
50

100 100
50 100
37,5 100
50
50

Segunda Iterao
100
100
100
100 71,875 71,875
100 59,375 59,375
50
50
50

100
100
100
50

Como nenhuma das temperaturas alteradas entre a primeira e segunda interao


ultrapassam a tolerncia de 400, as temperaturas na segunda iterao esto tambm em equilbrio.
4. SOLUO DO MATLAB

5. TESTANDO

Cap. 4 Controle de Fluxo

53

Curso de MATLAB

Captulo 5 - Medidas Estatsticas


Analisar dados coletados de ensaios de engenharia uma parte importante da
avaliao dos mesmos. O alcance da anlise estende-se dos mais simples clculos de
dados, como a mdia aritmtica, mais complexa anlise que calcula medidas como o
desvio padro ou varincia dos dados. Medidas como estas so medidas estatsticas
porque suas propriedades no so exatas. Por exemplo, o seno de 600 uma medida
exata pois o valor sempre o mesmo toda vez que o calculamos, mas a velocidade
mxima que atingimos com o nosso carro uma medida estatstica porque varia
dependendo de parmetros como a temperatura, condies da estrada, e se estamos
nas montanhas ou no deserto. No s podemos medir as propriedades e caractersticas
de dados estatsticos como tambm usar o computador para gerar seqncias de
valores (nmeros aleatrios) com caractersticas especficas.
Neste captulo,
aprenderemos a usar as funes para anlise de dados do MATLAB e a gerar
seqncias de nmeros aleatrios com caractersticas especficas.

5.1

Funes para Anlise de Dados

Para se estudar o desempenho de duas companhias corretoras de aes,


selecionou-se de cada uma delas amostras aleatrias das aes negociadas. Para cada
ao selecionada, computou-se a porcentagem de lucro apresentada durante um
perodo de tempo. Os dados esto a seguir:
Corretora A
Corretora B

45 60 54 62 55 70 38 48 64 55 56 55 54 59 48 65 55 60
57 55 58 50 52 59 59 55 56 61 52 53 57 57 50 55 58 54

Os grficos para os dados das corretoras A e B so mostrados abaixo para


podermos comparar os dois conjuntos de dados:

Figura 5.1 - Percentagem de lucro


apresentada pela corretora A durante 18
dias.

Figura 5.2 - Percentagem de lucro


apresentada pela corretora B durante 18
dias.

Para decidir qual corretora obteve melhor desempenho, alguns critrios


foram considerados como:

Mdia mais alta de percentagem de lucro;


Maior percentagem de lucro;
Menor variao de Percentagem de lucro;

Cap. 5 - Medidas Estatsticas

54

Curso de MATLAB

visualmente perceptvel que ao longo dos dezoito dias a corretora B


apresentou menor variao de lucro. Facilmente tambm observaramos que a
Corretora A obteve o maior percentual de lucro de aes. Contudo, no possvel
sabermos quantitativamente estas e outras informaes como a mdia de percentagem
do lucros das aes para cada corretora apenas com a observao dos grficos. Para
isso temos que calcular as grandezas necessrias para determinar qual corretora
obteve melhor desempenho.
Seria um
pouco trabalhoso se o fizssemos
manualmente. O MATLAB pode perfeitamente auxiliar-nos nestes casos porque
contm uma srie de funes que contribuem para uma anlise mais precisa dos
dados. Algumas destas funes podem ser aplicadas ao exemplo das corretoras como
as mostradas a seguir:

Qual a mdia percentual de lucro das aes durante os 18 dias de observao?


mean : calcula a mdia aritmtica de um grupo de valores. Assim, para as corretoras A
e B, temos:
mean (corretoraA)

mean (corretoraB)

ans =

ans =

55.7222

55.4444

Qual corretora alcanou a mais alta percentagem de lucros?


A funo max determina a maior percentagem de lucro em cada corretora. A
funo max determina o maior valor de um conjunto de dados.
max(corretoraA)

max(corretoraB)

ans =

ans =

70

61

E a menor percentagem?
As menores margens de lucro obtidas por cada corretora so dadas pelo
comando min .
min(corretoraA)

min(corretoraB)

ans =

ans =

38

50

Cap. 5 - Medidas Estatsticas

55

Curso de MATLAB

Qual corretora apresenta menor variao de percentual de lucro de aes?


As duas corretoras tiveram mdias bastantes prximas. Contudo, a mdia,
por ser uma medida representativa de posio central, mascara toda a informao
sobre a variabilidade dos dados das corretoras A e B. necessrio uma medida que
resuma a variabilidade de dois grupos de valores, permitindo compara-los, conforme
algum critrio estabelecido. O critrio mais comum aquele que mede a concentrao
de dados em torno de sua mdia e, as medidas mais usadas so: o desvio mdio e a
varincia.
Desvio Mdio, Varincia e Desvio Padro
Sabendo que a mdia dos valores da corretora A 55,72 , os desvios xi x
so: 10,72; - 4,28; 1.72; - 6,28; 0,72; -14,28 , Para qualquer conjunto de dados, a
soma dos desvios igual a zero. mais conveniente usarmos ou o total dos desvios
em valor absoluto ou o total dos quadrados dos desvios. Assim, teramos:
18

i= 0

x i x = 10 , 72 + 4 , 28 + 1, 72 + 6 , 28 + 0 , 72 + 14 , 28 + ... + 0 , 72 + 4 , 28 = 100 , 4436

(x
18

i= 0

= 1 , 56 + 0 , 44 + 2 , 56 + 5 , 44 + 3 , 44 + 3 , 56 + ... + 2 , 56 + 1 , 44 = 1060 , 5294

O desvio mdio e a varincia so definidos, usando os termos acima:

DesvioMdi o =

x
i =1

(x

Varincia =

i =1

Ento, desvio mdio e a varincia dos dados da corretora A so


respectivamente 5,5802 e 58,9183. Para a corretora B, seriam 2,5556 e 9,9084. A
corretora A tem maior variabilidade em porcentagem de lucro de aes, segundo o
desvio mdio. Isto significa que o percentual de lucro de aes da corretora B mais
homogneo que o da corretora A.
Para evitar erros de interpretao a varincia uma medida que expressa
um desvio quadrtico mdio usamos o desvio padro (), que definido como a
raiz quadrada da varincia ()2. O MATLAB tem uma funo especfica para o
clculo de desvio padro denominada std . Portanto, para o exemplo das corretoras:
std(corretoraA)

std(corretoraB)

ans =7.6758

ans =3.1478

Cap. 5 - Medidas Estatsticas

56

Curso de MATLAB

Para o MATLAB, a varincia de um conjunto de dados definida por:


N

2 =

(x
k =1

N 1

onde a mdia do conjunto de valores. O denominador N 1 deve ser usado toda


vez que estivermos trabalhando com uma amostra. Quando no houver a preocupao
em saber se trabalhamos com populao ou amostra, podemos usar o denominador n.
Para grandes amostras pouca diferena far se usarmos um ou outro.
Os comandos mean, std, max e min determinam, respectivamente, a mdia, o
desvio padro, o mximo valor e o valor mnimo de um vetor. No exemplo acima,
usamos os dados da corretora A e armazenamos em um vetor denominado
corretoraA e fizemos o mesmo para a corretora B. Mas estas funes tambm so
vlidas para matrizes. Elas retornam um vetor-linha contendo, respectivamente, a
mdia, o desvio padro, o mximo valor, o mnimo valor de cada coluna. Um
exemplo de aplicao de medidas estatsticas para matrizes dado a seguir:
A JR Indstria de Alimentcios, desejando melhorar o nvel de seus
funcionrios em cargos de chefia, montou um curso experimental e indicou 15
funcionrios para sua primeira turma. Os dados referentes seo a que pertencem e
notas obtidas esto na tabela a seguir.

Usando os dados da tabela, determine:

A mdia em cada disciplina;


As menores notas em cada disciplina e os funcionrios que as obtiveram;

E,

Dispor as notas de Administrao em forma crescente;


Comparar os funcionrios das sees de Vendas e Tcnicas e determinar a maior
nota destes funcionrios em cada disciplina;
Comparar a distribuio dos dados nas disciplinas de Direito, Metodologia e
Economia.

Cap. 5 - Medidas Estatsticas

57

Curso de MATLAB

Seo
Pessoal
Pessoal
Pessoal
Pessoal
Pessoal
Tcnica
Tcnica
Tcnica
Tcnica
Tcnica
Vendas
Vendas
Vendas
Vendas
Vendas

ADM DIR
8.0
9.0
8.0
9.0
8.0
9.0
6.0
9.0
8.0
9.0
10.0 9.0
8.0
9.0
10.0 9.0
8.0
9.0
8.0
9.0
8.0
9.0
8.0
9.0
8.0
9.0
6.0
9.0
6.0
9.0

RED
8.6
7.0
8.0
8.6
8.0
8.0
9.0
8.0
10.0
7.0
9.0
7.0
8.0
9.0
4.0

ECO
8.5
8.0
8.5
8.5
9.0
8.5
8.0
7.5
8.0
8.5
7.5
7.0
7.5
7.5
8.5

ING
9.0
9.0
8.0
8.0
9.0
8.0
9.0
8.0
10.0
7.0
7.0
8.0
9.0
4.0
7.0

MET
9.0
6.5
9.0
6.0
6.5
6.0
10.0
9.0
10.0
6.5
9.0
10.0
6.0
6.0
6.0

ADM administrao
DIR direito
RED redao
ECO economia
ING ingls
MET - metodologia

Func.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Sabemos que a funo mean calcula a mdia dos elementos de um vetor. Em


uma matriz, a funo calcula um vetor linha que contm a mdia de cada coluna.
Para o exemplo do curso de aperfeioamento, podemos considerar a lista de
funcionrios e suas respectivas notas em cada disciplina, uma matriz 15 x 6, onde as
colunas representam as disciplinas do curso, facilitando o clculo da mdia da turma
em cada matria. Ento, definindo a matriz no MATLAB.
TURMA = [ 8.0
8.0
8.0
6.0
8.0
10.0
8.0
10.0
8.0
8.0
8.0
8.0
8.0
6.0
6.0

9.0 8.6
9.0 7.0
9.0 8.0
9.0 8.6
9.0 8.0
9.0 8.0
9.0 9.0
9.0 8.0
9.0 10.0
9.0 7.0
9.0 9.0
9.0 7.0
9.0 8.0
9.0 9.0
9.0 4.0

8.5
8.0
8.5
8.5
9.0
8.5
8.0
7.5
8.0
8.5
7.5
7.0
7.5
7.5
8.5

9.0
9.0
8.0
8.0
9.0
8.0
9.0
8.0
10.0
7.0
7.0
8.0
9.0
4.0
7.0

9.0
6.5
9.0
6.0
6.5
6.0
10.0
9.0
10.0
6.5
9.0
10.0
6.0
6.0
6.0];

E denominando o vetor que representa a mdia da turma em cada disciplina


de MEDIA_TURMA, temos:
MEDIA_TURMA = mean (TURMA)
Cap. 5 - Medidas Estatsticas

58

Curso de MATLAB

MEDIA_TURMA =
7.8667

9.0000

7.9467

8.0667

8.0000

7.7000

A sada do MATLAB mostra que as mdias da turma nas disciplinas de


Administrao, Direito, Redao, Economia, Ingls e Metodologia so,
respectivamente, 7.8667, 9.0000, 7.9467, 8.0667, 8.0000 e 7.7000.
Se quisssemos apenas a mdia da turma em Redao, usaramos o operador
dois pontos (:), conforme mostraremos a seguir:
MEDIA_RED = mean (TURMA (: , 3))
MEDIA_RED =
7.9467
ou ainda, a mdia dos funcionrios da seo de Pessoal em Direito:
MEDIA_PDIR = mean (TURMA(1:5, 2))
MEDIA_PDIR =
9.0000

Menores notas e os funcionrios que as obtiveram

A funo min retorna o menor valor de um vetor. Em uma matriz, a funo


retorna um vetor-linha cujos elementos so os menores valores de cada coluna. Alm
disso, apresenta a forma [y, i] = min (x) onde armazena os menores elementos de
cada coluna em um vetor y, e os ndices (respectivas linhas) no vetor i. se existirem
valores idnticos, o ndice do primeiro retornado. Logo, se usarmos esta forma da
funo min na matriz TURMA, podemos determinar a menor nota em cada disciplina
o funcionrio que a obteve. No caso, o vetor y denominar-se- GRAU_MIN.
[ GRAU_MIN, i ] = min (TURMA)
GRAU_MIN =
6

14

15

12

i=
14

Assim, o funcionrio 14 obteve a menor nota (6,0) em Administrao, o


mesmo acontece em Ingls. Observe que atribuiu-se ao funcionrio 1 o menor grau
em Direito, disciplina em que todos tiveram o mesmo grau. Conforme vimos, quando
h valores mnimos idnticos, o ndice do primeiro valor retornado. Por isso, a
atribuio do funcionrio 1.
Esta forma vlida tambm para a funo max.
Cap. 5 - Medidas Estatsticas

59

Curso de MATLAB

Notas de Administrao em Forma Ascendente

O MATLAB contm uma funo que distribui, em ordem ascendente, os


elementos de um vetor ou os elementos de cada coluna de uma matriz. Sua forma
geral :
sort(x)
Como queremos apenas as notas da turma em Administrao em ordem ascendente,
usamos a funo sort.
Porm, devemos antes selecionar a disciplina de
Administrao, utilizando o operador dois pontos ( : ),
ADM = TURMA( : , 1);
GRAU_ASC = sort (ADM)
GRAU_ASC =
Poderamos calcular diretamente
precisar definir o vetor-coluna ADM:

6
6
6
8
8
8
8
8
8
8
8
8
8
8
10
10

sem

GRAU_ASC = sort (TURMA( : , 1))


Se quisssemos somente as trs menores notas,
faramos:
GRAU_ASC = sort (TURMA( : , 1));
ASC_3 = sort (GRAU_ASC ( 1: 3 , 1))
A funo sort tambm apresenta a forma [y, I ] = sort
(x) onde os valores dispostos em forma crescente so
armazenados na matriz y e seus ndices , na matriz i.
Se x contiver valores complexos, os elementos sero
distribudos de forma ascendente de acordo com seus
valores absolutos.
Tente fazer:

[y,i] = sort (TURMA)

Comparao entre as distribuies de dados de Direito, Metodologia e


Economia.

Para auxiliar na comparao entre dados de variveis, usaremos um tipo


especial de grfico que particularmente relevante s medidas estatsticas discutidas
nesta seo. Um histograma um grfico que mostra a distribuio de um grupo de
valores. No MATLAB, o histograma calcula o nmero de valores a distribuir em 10
Cap. 5 - Medidas Estatsticas

60

Curso de MATLAB

barras igualmente espaadas entre os valores mximos e mnimo de um grupo de


valores. A forma geral para plotar um histograma mostrada a seguir:
hist (x)
onde x um vetor contendo os dados a serem usados no histograma. Se quisermos
plotar a segunda coluna em uma matriz, podemos usar o operador dois pontos como
mostrado a seguir:
hist (x ( :, 2 ))
O comando hist nos permite selecionar o nmero de barras. Portanto, se
quisermos aumentar a resoluo dos histograma tal que usemos 25 barras, em vez de
10, faremos:
hist ( x , 25)
A informao usada para plotar tambm pode ser armazenada em vetores.
Considere os seguintes comandos:
[ n , x ] = hist (GRAU_MIN);
[ n , x ] = hist (GRAU_MIN, 6);
Nenhum destes comandos plota um histograma. O primeiro comando calcula
valores para dois vetores, n e x. O vetor n contm os dados para 10 barras, e o vetor x
contm o ponto que corresponde ao meio de cada alcance da barra. O segundo
comando similar, mais armazena 6 dados em n, e 6 pontos de meio barra em x.
Estes vetores so usados geralmente em grficos do tipo bar, que ser discutido no
captulo 7.
Agora, podemos usar o histograma para comparar e indicar as diferenas
existentes entre as distribuies de dados de Direito, Metodologia e Economia.

Figura 5.3 - Histograma de Direito

Cap. 5 - Medidas Estatsticas

Figura 5.4 - Histograma de Economia

61

Curso de MATLAB

Figura 5.5 - Histograma de Metodologia

Observe as diferenas entre os histogramas. Enquanto o histograma de


Direito indica que todos os alunos obtiveram grau 9,0; em Economia, indica que
apenas 1 funcionrio conseguiu o mesmo grau e em Metodologia, quatro
funcionrios. Tambm em Metodologia, h maior percentagem de notas menores que
7,0. Podemos afirmar que as notas so mais homogneas em Direito. O que
confirmado se usarmos funes j vistas como mean e std.
Para terminar a parte de funes de anlise de dados, mais um exemplo.
Seja o quadro abaixo que mostra a taxa de juros durante os ltimos 18 meses.
Suponha que algum lhe perguntasse como acompanhar o acmulo de taxa de juros
ms a ms.
Ms/ano
Juros a.m (%)

Jan/97
1,25

Fev/97 Mar/97
1,16
1,13

Abr/97
1,12

Mai/97
1,4

Jun/97
1,16

Jul/97
1,16

Ms/ano
Juros a.m (%)

Ago/97
1,13

Set/97
1,15

Nov/97
2,04

Dez/97
1,82

Jan/98
1,65

Fev/98
0,95

Out/97
1,10

Provavelmente, voc diria que bastaria somar taxa de juros inicial, os


juros do ms seguinte e assim por diante. um exemplo tpico de soma cumulativa.
No MATLAB, a funo que corresponde soma cumulativa dos elementos
de um vetor cumsum conforme mostrado a seguir:
JUROS = [1.25 1.16 1.13 1.12 1.4 1.16 1.16 1.13 1.15 1.10 2.04 1.82 1.65 0.95];
ACUM_JUROS = cumsum (JUROS)
ACUM_JUROS =
Columns 1 through 7
1.2500

2.4100

3.5400

Cap. 5 - Medidas Estatsticas

4.6600

6.0600

7.2200

8.3800

62

Curso de MATLAB

Columns 8 through 14
9.5100 10.6600 11.7600 13.8000 15.6200 17.2700 18.2200

Logo, o primeiro elemento do vetor ACUM_JUROS 1,25 ; o segundo ser


1,25 + 1,16 ; o terceiro, 1,25 + 1,16 + 1,13 e assim por diante.
Se quisermos saber o total de juros durante este intervalo de tempo, usamos a
funo sum :
TOTAL_JUROS = sum(JUROS)
TOTAL_JUROS =
18.2200

As funes prod (x) e cumprod (x) so anlogas s funes sum (x) e


cumsum(x), onde prod(x) calcula o produto dos elementos de um vetor ou produto de
cada coluna, em uma matriz; cumprod (x) calcula o produto acumulativo dos
elementos de um vetor x.
H tambm a funo median que calcula a mediana dos elementos de um
vetor x. Mediana a realizao que ocupa a posio central da srie de observaes
quando estas esto ordenadas segundo suas grandezas (crescente ou
decrescentemente). Assim, se as cinco observaes de uma varivel, como erros de
impresso na primeira pgina forem 20, 16, 14, 8 e 19; a mediana o valor 16. Se o
nmero de observaes par, usa-se como mediana a mdia aritmtica das duas
observaes centrais. Logo, se as observaes de uma varivel, forem 20, 14, 16 e 8,
a mediana
Mediana = (14 + 16) / 2 = 15.

Exerccios
Determine as matrizes representadas pelas funes a seguir. Depois, use o MATLAB
para verificar suas respostas. Suponha que w, x, e y sejam as matrizes:
w = [ 0 3 -2 7]
x = [ 3 -1 5 7]
1
y = 2
6

Cap. 5 - Medidas Estatsticas

3
8
1

7
4
2

63

Curso de Matlab
1. max (w)
2. min(y)
3. min (w, x)
4. [ z, i ] = max(y)
5. mean (y)
6. median(w)
7. cumprod(y)
8. sort(2*w + x)
9. sort (y)
10. std (w)
11. std(x)^2
12. std (y(:, 2))
13. std (y)
15. std (y).^2

Aplicao Soluo de Problemas: Anlise do Sinal de Voz


Suponha que queiramos projetar um sistema que reconhea as palavras que representam os
dez algarismos: zero, um, dois, ..., nove. Uma das primeiras coisas que devemos fazer
analisar os dados para as dez seqncias correspondentes (ou sinais) para verificar se h algumas
medidas estatsticas nas quais possamos distingui-los. As funes para anlise de dados do
MATLAB nos permite facilmente calcular estas medidas. Podemos ento imprimir uma tabela de
medidas e procurar por aquelas que nos permita distinguir valores.
Atualmente, podemos usar sinais de voz para calcular um nmero de medidas estatsticas
que poderiam ser usadas como parte de um algoritmo de reconhecimento de dgitos. Os dados para
cada dgito contm mil valores. Escreva um programa MATLAB para ler um arquivo de dados
ASCII denominado zero.dat e calcule as seguintes informao: mdia, desvio padro, varincia, a
mdia do mdulo.
J discutimos mdia, desvio padro e varincia. A mdia quadrtica o valor mdio
quadrtico ser discutido com mais detalhes na prxima seo. A mdia dos mdulo a mdia dos
valores absolutos do conjunto de dados.

1. ENUNCIADO DO PROBLEMA
Calcular as medidas estatsticas a seguir para um sinal de voz.

Cap. 5 Medidas Estatsticas

64

Curso de Matlab

2. DESCRIO ENTRADA/SADA
O diagrama abaixo mostra o arquivo que contm os dados como a entrada e as vrias medidas
estatsticas como a sada.

Mdia
Desvio Padro
Varincia
Mdia dos Mdulos
Mdia Quadrtica
zero.dat

Figura 5.6 diagrama I/O

3. EXEMPLO MANUAL
Para um exemplo manual, suponha que um sinal contenha a seguinte seqncia de valores:
[ 2.5 8.2 -1.1 -0.2 1.5]
Usando uma calculadora, calculamos os seguintes valores:
a.
b.
13.307
c.
d.
e.

mdia = (2.5 + 8.2 - 1.1 - 0.2 + 1.5)/5 = 2.18


varincia = [(2.5 - )2 + (8.2 - )2 + (-1.1 - )2 + (-0.2 - )2 + (1.5 - )2]/4 =
desvio padro = 13.307 = 3.648
mdia quadrtica = (2.52 + 8.22 + (-1.1)2 +(-0.2)2 + 1.52)/5 = 15.398
mdia dos mdulos = ( |2.5| + |8.2| + |-1.1| + |-0.2| + | 1.5| /5 = 15.398

4. SOLUO DO MATLAB

5. TESTANDO

Cap. 5 Medidas Estatsticas

65

Curso de Matlab

5.2

Nmeros Aleatrios

Nmeros aleatrios no so definidos por uma equao. Contudo, possuem certas


caractersticas que os definem. H muitos problemas que pedem o uso de nmeros aleatrios no
desenvolvimento de uma soluo. Em alguns casos so usados para desenvolver a simulao de um
problema complexo. A simulao pode ser testada diversas vezes para analisar os resultados e cada
teste representa um repetio do experimento. Tambm usamos nmeros aleatrios para aproximar
seqncias de rudo. Por exemplo, o que ouvimos no rdio uma seqncia de rudo. Se
estivermos testando um programa que use um arquivo de entrada que representa um sinal de rdio,
poderamos gerar rudos e adicion-los ao sinal de voz ou a uma msica em seqncia para prover
mais sinais reais.
Funo Nmero Aleatrio

A funo rand no MATLAB gera nmeros aleatrios no intervalo [ 0,1]. Os nmeros


aleatrios podem ser uniformemente distribudos no intervalo [0,1] ou podem ser distribudos
normalmente, nos quais mdia e varincia so, respectivamente, 0 e 1. Um valor usado para
iniciar uma seqncia aleatria.

Rand (n)

Rand(size (A))

Retorna uma matriz de ordem n cujos elementos so nmeros aleatrios


entre 0 e 1.
Matriz com m linhas e n colunas cujos elementos so nmeros aleatrios
entre 0 e 1.
Matriz de mesma ordem que a matriz A.

Rand (uniform)
Rand (normal)

Especificam se os nmeros aleatrios desejados sero uniformemente ou


normalmente distribudos.

Rand (seed, n)
Rand (seed)

Determina n como o valor inicial de uma seqncia de nmeros aleatrios.


Retorna ao valor atual de incio do gerador de nmeros aleatrios.

Rand (m,n)

Funo Densidade de Probabilidade

Suponha que o ponteiro dos segundos de um relgio eltrico possa parar a qualquer
instante por defeitos tcnicos. Como h infinitos pontos nos quais o ponteiro pode parar, cada uma
com igual probabilidade, cada ponto teria a probabilidade de ocorrer igual a zero. Contudo,
podemos determinar a probabilidade de o ponteiro parar numa regio entre dois valores quaisquer.
Assim, a probabilidade de o ponteiro parar no intervalo entre os nmeros 9 e 12 , pois neste
intervalo corresponde a do total. Ento,
P (2700 X 3600) =

Cap. 5 Medidas Estatsticas

66

Curso de Matlab

onde X medido em graus.

Sempre poderemos achar a probabilidade de o ponteiro parar num ponto qualquer de um


intervalo, por menor que seja, compreendido entre os nmeros a e b, de forma que

P ( a X b) =

ba
3600

Construindo um histograma da varivel X:


f(x)

1/360

360

x (em graus)

Figura 5.7 histograma da varivel X

O histograma corresponde funo:

0,

f ( x ) = 1 / 360 ,

0,

X < 0

se
se
se

X < 360
x 360

0
0
0

A rea correspondente ao intervalo [a,b] indica a probabilidade de a variabilidade de a


varivel estar entre a e b. Matematicamente,

P (a X b ) =

f ( x ) dx =

1
360

dx =

b a
360 0

A funo f(x) chamada funo densidade de probabilidade (f.d.p). A f.d.p. determina a regio
onde h maior probabilidade de uma varivel X assumir um valor pertencente a um intervalo.
Cap. 5 Medidas Estatsticas

67

Curso de Matlab
Existem alguns modelos freqentemente usados para representar a f.d.p. de uma varivel
aleatria contnua como :

a) Modelo Uniforme

Definio: Uma varivel aleatria X tem distribuio uniforme com a e b (a<b) reais, se a sua
f.d.p. dada por:

,
f (x ) = b a

0,

a<x<b

se
demais

pontos .

Grfico:
f(x)

1/ (b a)

Figura 5.9 distribuio uniforme

Varincia (2)
2 = (b a)2
12

b) Modelo Normal
A varivel X tem distribuio normal com parmetros e 2 , denotada por X: (, 2),
onde - < < + e 0 < 2 < + , se sua f.d.p. dada por:

f (x ) =

Cap. 5 Medidas Estatsticas

(x )2

68

Curso de Matlab
Para - < < +.

Grfico: A curva normal particular para mdia e varincia 2.

f(Z)

-1

+1

Figura 5.9 Curva Normal Padro

Como a probabilidade de a varivel X ocorrer num intervalo, matematicamente, a rea


sob a curva, teramos valores diferentes de probabilidade para cada valor de e de . Por isso,
usamos a curva normal padro ou reduzida ( = 0, 2 = 1) ver figura acima, denotada por
N(0,1). Se X: N(,2) , ento a varivel aleatria Z com distribuio N (0, 1) definida por:
Z=X -

Exemplo: Suponha que as amplitudes de vida de dois aparelhos eltricos, D1 e D2, tenham
distribuies N(42, 36) e N(45, 9), respectivamente Se o aparelho para ser usado por um
perodo de 45 horas, qual aparelho deve ser preferido? E se for por um perodo de 49 horas?

a) 45 horas

1
T 42 45 42
P(D1 > 45) = P
>
= P( Z > ) = 0,5 0,192 = 0,308
6
6
6
T 45 45 45
P(D2 > 45) = P
>
= P( Z > 0) = 0,5
3
3
Cap. 5 Medidas Estatsticas

69

Curso de Matlab
b) 49 horas

7
T 42 49 42
>
P(D1> 49) = P
= P' Z > = 0,5 0,377= 0,123
6
6
6
4
T 45 49 45
>
P(D2 > 49) = P
= P' Z > = 0,5 0,407= 0,093
3
3
3
O comando hist pode ser usado para estimar a f.d.p. de um sinal qualquer. Se tivermos mil
valores e plotarmos o histograma, plotaremos um verso de f.d.p. para nmeros aleatrios. Antes,
aprenderemos como o MATLAB pode ser usado para gerar nmeros aleatrios uniforme ou
normalmente distribudos. Por exemplo, se quisermos gerar uma seqncia de 10 nmeros
aleatrios uniformemente distribudos entre os valores 0 e 1 , devemos fazer:
rand (seed,0)
rand (uniform)
rand (10,1)
Podemos converter um nmero r que est uniformemente distribudo entre 0 e 1 para um
valor situado entre um intervalo qualquer. Por exemplo, se quisermos gerar 10 nmeros aleatrios
uniformes entre 5 e 5, devemos primeiro gerar os nmeros entre 0 e 1. Logo em seguida,
usamos a equao:
x = (b a) . r + a
onde b e a so, respectivamente, os limites inferior e superior (no caso, 5 e 5). Assim, suponha
que armazenamos os dez nmeros aleatrios determinados anteriormente em um vetor coluna
denominado SINAL. Para convert-los em valores entre 5 e 5 usamos:
x = (10*SINAL) 5

Exerccios
Determine os comandos do MATLAB necessrios para gerar 10 nmeros aleatrios com as
caractersticas especficas. Verifique sua respostas.
Nmeros uniformemente distribudos entre 0 e 10,0
Nmeros uniformemente distribudos entre -1 e 1.
Nmeros uniformemente distribudos entre - 20 e 10.
Nmeros uniformemente distribudos entre 4,5 e 5,0
Nmeros uniformemente distribudos entre e -.
Cap. 5 Medidas Estatsticas

70

Curso de Matlab

O MATLAB tambm gera valores distribudos normalmente cuja mdia igual a zero e a
varincia, igual a 1. Se quisermos modificar estes valores para uma outra distribuio,
multiplicamos os valores pelo desvio padro da distribuio desejada e os adicionamos mdia
desta distribuio. Portanto, se r um nmero qualquer com mdia 0 e varincia 1, a equao a
seguir ir gerar um novo nmero aleatrio x com desvio padro a e mdia b:
x=a.r +b
Os comando abaixo geram nmeros normalmente distribudos com mdia 5 e varincia
igual a 2:
rand (seed,0)
rand ( normal)
s = sqrt(2)*rand (10,1) + 5

Os valores a serem impressos por este programa so:


s=
6.6475
5.8865
5.1062
5.4972
4.0150
7.3987
5.0835
7.5414
5.3734
6.2327

Funes Densidade de Probabilidade: Histograma

Conforme dito anteriormente, podemos usar um histograma para avaliar a f.d.p de um sinal
qualquer. Se tivermos mil valores, e os plotarmos, estaremos plotando uma verso da f.d.p. para os
nmeros aleatrios. Por exemplo, suponha que geramos mil nmeros aleatrios entre 0 e 1, e os
armazenamos no vetor U_VALORES. Podemos usar o comando hist para plotar a f.d.p. usando as
25 barras:
rand (uniform)
U_VALORES = rand (1000, 1)
hist (U_VALORES, 25)
Cap. 5 Medidas Estatsticas

71

Curso de Matlab

O grfico mostrado na figura abaixo. Os nmeros aleatrios esto distribudos entre 0 e


1 e a distribuio relativamente alisada.

Figura 5.10 - Histograma para nmeros aleatrios uniformemente distribudos

Suponha agora que queiramos gerar mil nmeros aleatrios distribudos normalmente (cuja
distribuio N(0,1) ) e armazen-los em um vetor coluna denominado G_VALORES. Podemos
plotar a funo com os comandos:
rand(normal)
G_VALORES = rand (1000,1);
hist (G_VALORES, 25)
O grfico correspondente mostrado a seguir. Conforme espervamos, a distribuio
atinge seu valor mximo onde a mdia igual a zero, e a maioria dos valores est entre dois desvios
padres (-2 a 2).

Figura 5.11 - Histograma para nmeros aleatrios normalmente distribudos

Cap. 5 Medidas Estatsticas

72

Curso de Matlab

E x e r c c i os

Use o MATLAB para gerar mil valores com as caractersticas desejadas. Calcule a mdia
e a varincia de mil valores, e compare-as aos valores especificados. Estes valores devem ser
semelhantes. Tambm plote um histograma dos valores, usando 25 barras.
1.
2.
3.
4.

Nmeros normalmente distribudos com = 5 e


Nmeros normalmente distribudos com = -5.5
Nmeros normalmente distribudos com = -5.5
Nmeros normalmente distribudos com = e

2 = 0,5;
e = 0,25;
e = 1,25;
= /8;

Aplicao Soluo de Problemas: Simulador de Vo


As simulaes em computadores so usadas para gerar situaes que modelam ou imitam
uma situao do mundo real. Algumas simulaes computacionais so desenvolvidas para jogos
como pquer ou damas. Para jogar, voc indica seu movimento e o computador ento selecionar
uma resposta apropriada. Outros jogos usam a computao grfica para desenvolver uma interao
tal como o uso do teclado ou do mouse para jogar. Nas simulaes mais sofisticadas, como um
simulador de vo o computador no somente responde entrada do usurio mas tambm gera
valores como temperaturas, velocidade do vento, e os locais de outras aeronaves. Os simuladores
tambm simulam emergncias que ocorrem durante o vo de uma aeronave. Se toda esta
informao gerada pelo computador for sempre a mesma srie de informao, ento o valor do
simulador seria grandemente reduzido. importante que estejamos aleatoriamente gerao de
dados. As simulaes de Monte Carlo usam nmeros aleatrios para gerar valores que modelam os
eventos.
Escreva um programa MATLAB para gerar um seqncia de nmeros aleatrios para
simular uma hora de dados de velocidade do vento, o qual atualizado a cada 10 segundos. (Uma
hora de dados ento representada por 361 valores.) De uma anlise do padro real de vento, foi
determinado que a velocidade do vento pode ser modelada como um nmero aleatrio distribudo
normalmente. A mdia e a varincia so exclusivamente para uma regio especfica e perodo do
ano e so como parmetros de entrada. Alm do mais, supe-se que o avio tem 1% de chance de
voar sob uma pequena tempestade . A durao do tempo que o avio est em uma pequena
tempestade trs minutos. Quando o plano est numa pequena tempestade, a velocidade do vento
aumenta em 10milhas por hora. Tambm, h 0.01% de chances que o avio voar para um , o qual
microrrajadas, o qual permanece por um minuto e aumenta a velocidade do vento para 50 milhas
por hora. Plote o tempo e a velocidade e salve-os em um arquivo ASCII nomeado vento_vel.dat.

Cap. 5 Medidas Estatsticas

73

Curso de Matlab

1. ENUNCIADO DO PROBLEMA
Gerar uma hora de velocidade simulada do vento usando estatsticas desenvolvidas para
rea de vo.

2. DESCRIO ENTRADA/SADA
A figura abaixo, a entrada para o programa as estatsticas do tempo no plano de vo, as
quais so representadas pelo mdia e varincia da velocidade do vento em tempo normal. A sada
o grfico e o arquivo de dados contendo os valores das velocidades do vento simuladas.

Mdia
Varincia
Incio de
Seqncia
venvlc.dat

3. EXEMPLO MANUAL
Esta simulao usa vrias seqncias diferentes de nmeros aleatrios. A velocidade do
vento um nmero aleatrio normalmente distribudo com mdia e varincia particulares. As
possibilidades de encontrar uma tempestade ou microrrajadas so dadas como valores percentuais e
podem ser modelados como nmeros uniformemente distribudos. Suporemos que ocorrer uma
tempestade se um nmero aleatrio uniforme entre 0 e 1 tiver um valor entre 0.0 e 0.01, e que
ocorrer um microrrajadas se o nmero aleatrio uniforme estiver entre 0.01 e 0.0101.

4. SOLUO MATLAB

5. TESTANDO

Cap. 5 Medidas Estatsticas

74

Curso de Matlab

5.3

Relao Sinal/Rudo

Quando a gerao de sinais usada em tcnicas de testes de engenharia, freqentemente


queremos gerar seqncias como uma senide com rudo adicionado. De rudo pode ser
especificado como uma relao sinal/rudo, ou SNR. A SNR definida em termos de energia de
um sinal . Discutiremos energia de um sinal e ento retornaremos a definio matemtica de SNR.
Energia de um Sinal

Intuitivamente, a energia uma medida da amplitude de um sinal. Quanto maiores forem


os valores da amplitude, maior a energia do sinal. Como a amplitude pode ser positiva ou
negativa, a energia definida em termos do quadrados das amplitudes, para que os valores sejam
sempre positivos. A energia em um sinal x (representado por um vetor x) pode ser avaliada pela
mdia quadrtica do sinal:
N

energia

x
k =1

2
k

Observe que isto pode ser facilmente calculado usando a funo MATLAb sum:
Energia = sum (x.^2)
pode ser mostrado que a energia em um sinal igual a soma dos quadrados da varincia e mdia:
energia = 2 + 2
No MATLAB, isto pode ser calculado com o comando a seguir:
Energia = std(x) ^2 + mean (x) ^2;
Se o sinal for uma senide, pode ser mostrado matematicamente que a energia do sinal igual a
metade do quadrado da amplitude da senide. Assim, a energia da senide 4sen2t igual a 16/2,
ou 8.

Exerccios
D os comandos do MATLAB para gerar mil valores da seqncia indicada. Calcule a energia
usando o valor mdio quadrtico e ento calcule-o usando a mdia e a varincia; os valores devem
ser semelhantes.

Cap. 5 Medidas Estatsticas

75

Curso de Matlab

1.
2.
3.
4.
5.
6.
7.

Valores uniformes entre 0 e 10;


Valores uniformes entre 2 e 4;
Valores uniformes com mdia 0 e varincia 1,0;
Valores uniformes com mdia 0.5 e varincia 4,0;
Valores normalmente com mdia 0 e varincia 2,0;
Valores normalmente com mdia 0 e varincia 0,5;
Valores normalmente com mdia 2,5 e varincia 0,5.

Clculo de SNR
Uma relao sinal/rudo a relao entre a energia em um sinal e a energia em um rudo.
Por exemplo, uma SNR de 1 especifica que a relao entre a energia do sinal e a energia do rudo
1:1. Se tivermos uma senide com uma amplitude 3 adicionada a um rudo uniforme entre 1 e 1,
podemos calcular a SNR usando as medidas de energia de dois sinais. A energia da senide 9/2, e
a energia do sinal igual a 22/12 ou 1/3. Contudo, a SNR pode ser calculada como:
SNR = 9 / 2 = 13.5
1/3
Para um sinal geral com amplitude A, e rudo uniforme entre a e b, a SNR pode ser
calculada usando os seguintes comandos MATLAB:
SNR = ( (A^2) / 2 ) / ( (b a)^2/12 );
Para ilustrar com outro exemplo, suponha que queiramos gerar 201 pontos de um sinal que
contenha uma senide de 1Hz com rudo cuja mdia 0 em uma SNR de 46. A senide deve Ter
uma amplitude de 1.5 e um ngulo de fase de 0.0, e ser uma amostra de 100 Hz (cuja mdia uma
amostra de tempo de 1/100 segundos). A SNR igual a energia da senide dividida pela energia do
rudo.
SNR = energia do sinal _ =
(1.52) / 2
= 46
energia do rudo
energia do rudo
Assim, para a energia do rudo, temos:
Energia do rudo = (1.52) /2 = 0.024
46
Como o rudo especificado para ter mdia zero, a energia do rudo igual a varincia.
Assim, a varincia do rudo 0.024. J que o rudo uniforme e tem mdia zero, ele alcana entre
a e -a. Logo, a varincia igual a (2a)2/12 e 0.024 = (2a) 2/12 ou a = 0,27.

Cap. 5 Medidas Estatsticas

76

Curso de Matlab

Podemos gerar o sinal de rudo desejado e adicion-lo senide para obter a SNR
desejada. Os comandos para gerar estes sinal so mostrados a seguir:
%
%
Gerar e plotar senide mais rudo
%
rand(seed,0);
rand (uniform);
t = 0: 0.01: 2.0;
s = 1.5*sin(2*pi*t) + (0.54*rand (1,201) 0.27);
plot (t, s),
title(Senide com rudo),
xlabel ( t, segundos),
ylabel([s(k)]),
grid
O grfico mostrado a seguir. Observe que h dois perodos do sinal em dois segundos.
Isto corresponde ao fato que a freqncia 1 Hz, de modo que perodo 1 segundo.

Adicionando rudo a um sinal existente


Suponha que queiramos adicionar um rudo a um sinal j coletado e armazenado em um arquivo de
dados. Se quisermos adicionar rudos que mantenham uma SNR especificada, precisaremos avaliar
a energia do sinal tal que possamos determinar a energia apropriada para o sinal de rudo. Uma boa
avaliao da energia de uma sinal a mdia quadrtica do valor do sinal , o qual pode ser
facilmente calculado usando o MATLAB. Podemos determinar a energia necessria para o rudo.
Cap. 5 Medidas Estatsticas

77

Curso de Matlab

Sabemos que a energia uma funo de mdia e varincia, ento precisaramos de um destes
valores especificados em ordem para determinar o outro. desejvel para o rudo ter mdia zero,
para isto supomos que no h outra informao considervel. Podemos calcular a varincia
necessria e gerar o rudo e adicion-lo ao sinal existente.

Exerccios
Gerar e plotar um sinal composto de 100 pontos de uma amostra senoidal de 5 Hz a 50 Hz mais
um rudo de mdia zero como especificado a seguir:
1.
2.
3.
4.
5.
6.

Rudo uniforme com SNR igual a 5;


Rudo uniforme com SNR igual a 1;
Rudo uniforme com SNR igual a 0,2;
Rudo normal com SNR igual a 5;
Rudo normal com SNR igual a 1;
Rudo normal com SNR igual a 0,2.

Cap. 5 Medidas Estatsticas

78

Curso de MATLAB

Captulo 6 Operaes com Matrizes


Uma matriz um conveniente meio para representar dados experimentais. Nos captulos
anteriores, ns discutimos clculos matemticos e funes que poderiam ser aplicadas elemento a
elemento presente nas matrizes. Neste captulo, ns apresentaremos um conjunto de operaes e
funes que podem ser aplicadas matrizes como um todo, ao invs de lidarmos com os elementos
individualmente. Vamos primeiro considerar um conjunto de operaes matemticas aplicados
matrizes. E depois vamos considerar um grupo de funes que ajudam na manipulao das matrizes.

6.1

Operaes com Matrizes


Matrizes Transpostas

A transposta de uma matriz uma nova matriz onde as colunas so formadas pelas linhas da
matriz original.
Exemplo 1

Podemos notar que o elemento da posio (3,1) foi movido para a posio (1,3). De fato,
quando se acha a matriz transposta de uma matriz temos a troca de elementos das posies (i,j) para
as posies (j,i).
No MATLAB a matriz transposta denotada por A'.
Somatrio de Produtos
a soma escalar de dois vetores do mesmo tamanho.
N

Somatrio de produtos = A . B =

aibi
i= j

Cap. 6 Operaes com Matrizes

79

Curso de MATLAB

Exemplo 2
A = [4 1 3] e B = [-2 5 2]
A . B = (4) . (-2) + (-1) . (5) + (3) . (2)
A . B = (-8) + (-5) + (6)
A . B = -7

Comando sum
Quando A e B forem ambos vetores linha ou ambos vetores coluna, temos que:
Somatrio de produtos = sum (A .*B);
Quando A for um vetor linha e B um vetor coluna, temos que:
Somatrio de produtos = sum (A' .*B);
Quando A for um vetor coluna e B um vetor linha, temos que:
Somatrio de produtos = sum (A .*B');

Multiplicao de Matrizes
A multiplicao de duas matrizes corresponde ao somatrio de produtos das linhas i da
primeira matriz e das colunas j da Segunda matriz. Como o somatrio de produtos requer que os
vetores tenham o mesmo nmero de elementos, ento o nmero de colunas de A deve ser igual ao
nmero de linhas de B.
Se A tem 2 linhas e 3 colunas, e B tem 3 linhas e 3 colunas, ento o produto A.B ter 2 linhas
e 3 colunas.

Exemplo 3

O primeiro elemento do produto C = A.B


(2).(-1) + (5).(-1) + (1).(5) = -2

Cap. 6 Operaes com Matrizes

80

Curso de MATLAB
Logo a matriz C ser:
2 22
C=
8 10

5
7

Neste exemplo no se pode ter B.A pois o nmero de colunas de B no igual ao nmero de
linhas de A.
No MATLAB podem ser usados os seguintes comandos:
A = [2 5 1;0 3 1];
B = [1 0 2;-1 4 2;5 2 1];
C=A*B

Matriz Power
uma matriz quando elevada a um fator. Quando se tem uma matriz quadrada e se deseja
calcular A*A, usa-se a operao A^2. Lembrando que A^4 equivale a A*A*A*A .

Matriz Inversa
Por definio o inverso de uma matriz quadrada A a matriz A-1.
Se considerarmos duas matrizes A e B:

Quando calculamos os produtos A.B e B.A e obtemos as matrizes:

Temos que as matrizes A e B so inversas, ou seja, A = B-1 e B = A-1.


No MATLAB, para obtermos uma matriz inversa devemos fornecer a matriz original A e
executar o comando inv(A).

Cap. 6 Operaes com Matrizes

81

Curso de MATLAB

Exerccios para Praticar!


Sejam as matrizes:

Calcule:
1.
2.
3.
4.
5.
6.

AB
DB
BC'
B-1 B
(AC') -1
(AC') -1(AC')

Determinante
Seja a matriz

O determinante de A = |A| definido pela expresso:


a11 . a22 a21 . a12
No MATLAB, o comando utilizado para se achar o determinante de uma matriz det(A).

Aplicao Soluo de Problema: Peso Molecular de Protenas


A seqncia de protenas a sofisticada parte do equipamento que executa a funo chave
em engenharia gentica. A seqncia pode determinar a ordem de aminocidos que caracteriza a
cadeia de protenas. Essa ordem de aminocidos que auxilia a Engenharia Gentica na
identificao do tipo de gene da protena. Enzimas so usadas para dissolver as ligaes de genes
vizinhos, e assim, separar os genes mais importantes expostos no DNA.

Cap. 6 Operaes com Matrizes

82

Curso de MATLAB
Existem vinte tipos diferentes de aminocidos. As molculas de protenas tem centenas de
aminocidos articulados em uma ordem especfica. A seqncia de aminocidos de uma molcula de
protena tem sido identificada e computada pelo peso molecular dos aminocidos.
O primeiro passo est em arquivar os dados que contero os nmeros e tipos de molculas de
aminocidos em cada molcula de protena.
Assumindo que os dados do arquivo so gerados pelas seqncias de aminocidos, cada linha
de dados do arquivo corresponde a uma protena, portanto, contendo os vinte inteiros
correspondentes aos vinte aminocidos em ordem alfabtica como na tabela.
Por esta razo, a linha contm os seguintes valores gerados pela protena:
Lys Glu Met Asp Ser Glu
00010200000110010000
O nome do arquivo ser chamado protein.dat.

1. PROBLEMA EM SI
Calcular o peso molecular de um grupo de molculas de protenas.

2.

DESCRIO DA ENTRADA E DA SADA


A figura abaixo contm um diagrama mostrando que a entrada um arquivo contendo os
aminocidos identificados em um grupo de molculas de protenas. A sada do programa so os
seus respectivos pesos moleculares.

3. SOLUO NO MATLAB
protein = [0 0 0 1 0 2 0 0 0 0 0 1 1 0 0 1 0 0 0 0;0 1 0 0 0 1 1 0 0 3 0 0 0 0 0 0 0 1 0 0];
pm = [89 175 132 132 121 146 146 75 156 131 131 174 149 165 116 105 119 203 181 117];
pesomol = protein * pm;

Cap. 6 Operaes com Matrizes

83

Curso de MATLAB
6.2

Manipulaes com Matrizes

Comando rot90
Uma matriz A pode sofrer uma rotao de 90 usando-se o comando rot90.
Exemplo 4

B = rot90(A)

C = rot90(A,2)

Comando fliplr
Esse comando troca o lado esquerdo com o direito de uma matriz.

Comando flipud
Esse comando troca a parte de cima com a parte de baixo de uma matriz.
Exemplo 5
Seja a matriz A:

Cap. 6 Operaes com Matrizes

84

Curso de MATLAB
B = fliplr(A)

C = flipud(B)

Comando reshape
Esse comando reescreve a matriz com diferente nmero de linhas e colunas.
Exemplo 6
Seja a matriz A:

No MATLAB:
A = [2 5 6 -1;3 -2 10 0];
B = reshape(A,4,2);
C = reshape(A,1,8);
Comando diag
Esse comando extrai os elementos da diagonal principal da matriz A e os coloca em um vetor
coluna. Desta forma, temos:

B = diag(A)

Cap. 6 Operaes com Matrizes

85

Curso de MATLAB

Se o comando diag for aplicado a um vetor ao invs de uma matriz com linhas e colunas,
este comando vai gerar uma matriz quadrada cuja diagonal principal ser o vetor dado.

Exemplo 7
V = [1 2 3];
A = diag(V)

Comando triu
Este comando trata uma matriz preenchendo com zeros nos lugares dos antigos elementos
localizados abaixo da diagonal principal.

Exemplo 8

B = triu(A)

Cap. 6 Operaes com Matrizes

86

Curso de MATLAB

Comando tril
similar ao comando triu, porm essa funo mantm a matriz da diagonal principal para
baixo.

Exemplo 9

B = tril(A)

Aplicao Soluo de Problema: Alinhamento de Imagem


Cada ponto de uma imagem definido como elemento de figura.
Uma boa resoluo de imagem representada por uma matriz com muitos elementos,
enquanto que uma baixa resoluo de imagem representada por uma matriz com poucos.
Por exemplo, uma boa resoluo de imagem pode ser representada por uma matriz com 1024
linhas e 1024 colunas, ou um total de mais de milhes de nmeros.
Cada valor de imagem um cdigo que representa uma determinada intensidade de luz. A
intensidade de luz pode ser codificada para representar a cor, ou pode ser codificada para representar
a variao de cor cinza.
No exemplo seguinte assumimos que a imagem representada por uma matriz com 5 linhas e
6 colunas. Assumimos tambm que cada valor da matriz se encontra de 0 a 7, representando, desta
forma, as tonalidades de cinza. O valor 0 representa o branco, o 7 representa o preto e os outros
valores representam as devidas tonalidades de cinza. A amostra que estamos tratando definida pela
matriz abaixo:

Cap. 6 Operaes com Matrizes

87

Curso de MATLAB

Vamos supor que tenhamos duas imagens de um mesmo objeto, de mesma resoluo e de um
mesmo cdigo de escala de cinza. S no sabemos se as duas imagens esto alinhadas de um mesmo
modo. Para determinar o alinhamento correto ns podemos tomar uma imagem como constante,
manipular operaes, como rotacionar, para a outra imagem, e ento comparar as duas imagens. As
imagens estaro alinhadas quando os valores representados nas matrizes forem exatamente os
mesmos.

Supondo que:

Para alinhar B com A podemos rotacionar B de 270 graus no sentido anti-horrio (ou de 90
graus no sentido horrio).
Para determinar se as duas imagens possuem os mesmos valores(ou esto alinhadas)
observando as diferenas entre os elementos correspondentes nas duas matrizes. Isto pode ser feito
utilizando os seguintes comandos no MATLAB:
dif = sum (sum (image1 - image2));

Cap. 6 Operaes com Matrizes

88

Curso de MATLAB

Infelizmente essa soma pode ser igual a zero mesmo que as matrizes no sejam as mesmas.

Considerando o par de matrizes:

dif = sum (sum (A -B));


dif = sum (sum (C));
Isto acontece porque os valores se cancelam.
Se tivssemos valores absolutos isso no ocorreria. Logo, se aps a diferena elevarmos a
matriz ao quadrado s teramos valores positivos antes da soma. Podemos fazer isso no MATLAB
atravs dos seguintes comandos:
distncia = sum (sum (image1 - image2) .^2;
Agora as duas imagens estaro alinhadas se a distncia for zero.
1. O PROBLEMA EM SI
Determinar a melhor rotao de 90 no alinhamento de duas imagens.
2. DESCRIO DA ENTRADA E DA SADA
A figura abaixo mostra um diagrama ilustrando que as duas imagens so lidas de dois arquivos e a
sada o melhor alinhamento entre as duas imagens.

Cap. 6 Operaes com Matrizes

89

Curso de MATLAB
4. UM EXEMPLO PARA AUXILIAR
Supor as duas matrizes:

Se rotacionarmos a matriz B de 0, 90, 180 e 270 no sentido anti-horrio temos


respectivamente:

Se calcularmos a distncia (ou o somatrio das diferenas entre dois elementos) C e entre
essas quatros verses de D rotacionadas, acharemos os valores 19, 7, 1 e 13 respectivamente.
Entretanto a mnima distncia 1, e o alinhamento de 180 o melhor alinhamento usando a rotao
de 90 no sentido anti-horrio

5. SOLUO NO MATLAB
load imagem1.dat
load imagem2.dat
for k = 0:3
a = rot90(imagem2,k);
distance( k + 1 ) = sum(sum(imagem1 - a) .^2));
end
[minval,minloc] = min(distance);
fprintf(Melhor Alinhamento da Imagem de %3.0f graus \ n, (minloc - 1)* 90)
fprintf((anti-horrio)\n)

Cap. 6 Operaes com Matrizes

90

Curso de MATLAB

Captulo 7 Grficos
Engenheiros usam grficos para analisar e resolver problemas e situaes. Por isso muito
importante aprendermos a interpretar e gerar grficos e suas formas. Neste captulo vamos aprender
como o MATLAB pode nos ajudar a gerar grficos.
7.1

Grficos X Y

muito comum engenheiros e cientistas usarem grficos x - y. Os dados que ns plotamos


so usualmente lidos por um arquivo ou calculados em nossos programas.
Geralmente assumimos que valores de x representam variveis independentes e que valores
de y representam variveis dependentes. Os valores de y podem ser calculados usando as funes de
x, ou os valores de x e y podem ser retirados de experincia.
Coordenadas Retangulares
Os pontos retangulares identificam os pontos no sistema de coordenadas cartesianas com
suas posies ao longo dos eixos horizontal e vertical como na figura 7.1.

Legenda
Os comandos para se adicionar ttulos, linhas de grade e inserir textos esto relacionados a
seguir:
Title(text) 0Este comando escreve ttulos no topo do grfico plotado.
Xlabel(text) 0Este comando escreve um texto abaixo do eixo x do grfico plotado.
Ylabel(text) 0 Este comando escreve um texto ao lado do eixo y do grfico plotado.
Text(x, y, text) 0Este comando escreve um texto na tela do grfico no ponto especfico das
coordenadas (x, y) usando os eixos dos grficos. Se x e y so vetores o texto escrito a cada ponto.
Text(x, y, text, sc) 0 Este comando escreve um texto na tela do grfico no ponto especificado pelas
coordenadas (x, y), assumindo que a esquina esquerda inferior (0,0), e a esquina direita superior
(1,1).
gtext(text) 0Este comando escreve um texto nas posies indicadas na tela do grfico pelo mouse.
grid 0 Este comando acrescenta grades no grfico plotado.
Cap. 7 Grficos

91

Curso de MATLAB
Comandos de plotar
Geralmente assumimos que y e x so eixos divididos com o mesmo intervalo de espao.
Esses grficos so chamados de lineares. As vezes temos que usar uma escala logartmica em um ou
ambos os eixos.
Os comandos para plotar grficos lineares e logartmico so:
plot(x, y) 0Este comando gera grficos lineares com valores de x e y, onde x representa a varivel
independente e y representa a varivel dependente.
Semilogx(x, y) 0Este comando gera grfico usando escala linear para y e escala logartmica para x.
Semilogy(x, y) 0Este comando gera grficos usando escala linear para x e escala logartmica para y.
Loglog(x, y) 0Este comando gera grficos com escala logartmica para ambos os eixos x e y.
Obs.: importante lembrar que logaritmo de valores negativos e zero no existem, logo se
tentarmos plotar um grfico semilog ou log com valores negativos ou zeros, aparecera no MATLAB
uma mensagem informando que esses valores sero omitidos do grfico.

7.2

Grficos Polares

Grficos polares so teis quando valores so representados por ngulo e grandeza


(magnitude). Por exemplo se medirmos a intensidade luminosa ao redor de uma fonte de luz,
podemos representar a informao com um ngulo fixando eixos e magnitude representando
intensidade.
Coordenadas polares
Um ponto representado em coordenadas polares por um angulo e uma magnitude r. O
valor de geralmente dado entre 0 e 2. A magnitude um valor positivo que representa a
distncia do eixo que fornece o angulo at o ponto.
O comando no MATLAB para gerar grficos polares :
polar(theta,r) 0Este comando generaliza grficos polares com ngulo (em radiano) e magnitude r
correspondente.
Exemplo: Os comando para a construo do grfico da figura 7.2;
theta = 0:2*pi / 100 : 2*pi;
r = theta / (2*pi);
polar(theta,r);

Cap. 7 Grficos

92

Curso de MATLAB

Transformao retangular / polar ; polar / retangular


s vezes devido a praticidade interessante transformarmos coordenadas de um sistema
para outro.
As equaes abaixo relacionam os sistemas polar e retangular:
a polar / retangular _________________________ x = r cos ; y = r sin ;
a retangular / polar _________________________ r = x + y ; =atan (y/x);

Exerccios
1) Converter de coordenada retangular para coordenada polar:
a) (3, -2);
b) (0.5, 1);
2) Converter de coordenada polar para coordenada retangular:
a) (, 1);
b) (2.3, 0.5);

Cap. 7 Grficos

93

Curso de MATLAB
Grficos de barras e degraus
Os grficos so similares, porm as linhas verticais que marcam o eixo x nos grficos de
barras so omitidas nos grficos de degraus.
Comandos:
bar(x, y) 0Este comando gera grficos de barras com elementos do vetor y localizados no vetor x,
contm o mesmo espao entre os valores.
stairs(y) 0Este comando gera um grfico de degraus com os elementos do vetor y localizados no
vetor x, contendo o mesmo espao entre os valores.
stairs(x,y) 0Este comando gera um grfico de degraus com os elementos do vetor y.

Exemplo: a figura 7.3 mostra um grfico de barra;

7.3

Opes

a Grficos mltiplos => Para plotar curvas mltiplas no mesmo grfico deve se usar vrios
argumentos no comando plotar como a seguir:
plot(x, y, w, z);

Cap. 7 Grficos

94

Curso de MATLAB
Quando se executa este comando a curva correspondente a x, y e a curva correspondente a
w, z so plotadas no mesmo grfico. O MATLAB seleciona linhas diferentes para as curvas plotadas.
Estilo de linha e marcao
O comando plot(x, y) nos mostra uma linha plotada representando os vetores y e x, mas
podemos selecionar outros tipos de linha. Tambm podemos selecionar plotar pontos ao invs de
linhas. A seguir as diferentes opes de linhas e marcaes:
Tipo de linha
Solid
Dashed
Dotted
Dashdot

Indicador
-:
-.

Tipo de ponto
point
plus
star
Circle
x-mark

Indicador
.
+
*

O comando a seguir representa linha slida com tipo de ponto x-mark


plot(x, y, x, y, `x`)
Podemos tambm escolher as cores que sero usadas:
Cor
Vermelho
verde
azul
Branco
Invisvel

Indicadores
r
g
b
w
i

O comando seguinte representa linha slida azul para os vetores x, y e plotando pontos vermelhos xmark:
plot(x, y, `b`, x, y, `xr`);
Escala
A escala dos eixos no matlab automtica, porm se voc quiser rearrumar a escala de seus
eixos voc pode usar o comando axis. Existe vrias formas de se usar o comando axis:
axis - Este comando congela a escala de eixos para uma subseqncia de grficos. A Segunda
execuo do comando retorna o sistema a escala automtica.
axis(v)- v um vetor de quatro elementos que contm a escala de valores,[xmin,xmax,ymin,ymax].

Cap. 7 Grficos

95

Curso de MATLAB
Esses comandos tem um uso especial quando se quer comparar curvas de diferentes grficos, ps
pode ser difcil a comparao quando as curvas possuem diferentes eixos e escalas.
Subplot
O comando subplot usado quando se quer visualizar dois ou mais grficos ao mesmo tempo.
Subplot(211), plot(x,y)
Subplot(212), plot(y,x)
Esse comando significa que teremos 2 grficos sendo o primeiro (plot(x,y)) colocado no canto
superior esquerdo da tela e o segundo colocado no canto superior direito da tela.
Controle de tela
gcf __________________ Apresenta uma janela com grfico;
clc __________________ Limpa a janela de comando;
clg __________________ Limpa a janela do grfico;

Exerccio
Gerar 12 pontos de uma funo para os valores de x comeando de x=0 e incrementando de 0.5;
y = 5x.^2 :
a) Gerar o grfico linear desta funo;
b) Gerar o grfico desta funo com escala logartmica x;
c) Gerar o grfico desta funo com escala logartmica y;
d) Gerar o grfico loglog desta funo;
e) Comparar as vantagens e desvantagens dos grficos;
Soluo:

7.4

Grficos 3D

A rede de superfcie pode ser gerada por um conjunto de valores em uma matriz. Cada
ponta na matriz representa o valor da superfcie que corresponde ao ponto na tela.
Para gerar um arquivo que representa uma superfcie 3D, primeiramente calculamos o
conjunto dos valores de x e y que representam as variveis independentes e depois calculamos os
valores de z que representa os valores da superfcie. O comando no MATLAB para plotar grficos
3D mesh(z). O comando meshgrid tem os argumentos do vetor x e y, ou seja transforma o domnio
especificado pelos vetores x e y em vetores que podem ser usados em clculos de funes de 2
variveis e construo de grfico 3D.
Cap. 7 Grficos

96

Curso de MATLAB
Exemplo:
Gerar o grfico 3D da funo -0.5 < x < 0.5 ; -0.5 < y < 0.5 ; ( Figura 7.4)
f(x ,y)= z = 1 - x- y
1 = |x + y + z|
Soluo:
[xgrid,ygrid]=meshgrid(-0.5:0.1:0.5;-0.5:0.1:0.5);
z=sqrt(abs(1 - xgrid.^2 - ygrid.^2));
mesh(z);

figura 7.4 - Grfico 3D

Quando geramos redes de superfcie 3D podemos querer escolher a posio de viso que
ser definida com os termos azimuth ( rotao horizontal ) e vertical elevation que especifica os
graus (rotao vertical ).
Exemplo:
1) Rotao horizontal ( figura 7.5 ):
Comando no MATLAB :
f(x ,y)= z = 1 - x- y
1 = |x + y + z|
Cap. 7 Grficos

97

Curso de MATLAB
Soluo:
[xgrid,ygrid]=meshgrid(-0.5:0.1:0.5;-0.5:0.1:0.5);
z=sqrt(abs(1 - xgrid.^2 - ygrid.^2));
mesh(z,[-37.5,0]);

Figura 7.5 - Rotao horizontal

2) Rotao vertical (figura 7.6):


Comando no MATLAB
f(x ,y)= z = 1 - x- y
1 = |x + y + z|
Soluo:
[xgrid,ygrid]=meshgrid(-0.5:0.1:0.5;-0.5:0.1:0.5);
z=sqrt(abs)1 - xgrid.^2 - ygrid.^2));
mesh(z,[-37.5.-30]);

Cap. 7 Grficos

98

Curso de MATLAB

Figura 7.6 - Rotao vertical


Exerccio
Gerar o grfico 3D da funo z=f(x, y)= x*exp(-x^2-y^2)
para -2 < x < 2, -2 < y < 2 :
Soluo:

Aplicao a soluo de problemas: Trajetria de um Satlite


Satlites so usados para investigar diferentes nveis de atmosfera para obter informaes
semelhantes as que so usadas para monitorar os nveis de oznio na atmosfera.
Para aumentar a bagagem cientfica de coleo de dados da parte mais elevada da atmosfera,
os satlites auxiliam sistemas de telemetria para transmisso de informao.
Nessa seo ns assumimos que temos um arquivo contendo altitude, velocidade e
acelerao, para um conjunto de dados relativos a uma trajetria de dois estgios do simulador.

Cap. 7 Grficos

99

Curso de MATLAB

1. PROBLEMA EM SI
Queremos gerar grficos desses arquivos (altitude, velocidade, acelerao) para determinar
se a performance dos dois estgios so similares.
2. DESCRIO ENTRADA / SADA:

altitude

Satlite.dat

velocidade

acelereo

3. SOLUO MATLAB

Cap. 7 Grficos

100

Curso de MATLAB

Captulo 8 - Soluo a Sistemas de Equaes Lineares


8.1

Interpretao grfica

A interpretao grfica necessria para soluo a sistemas de equaes lineares ocorrente


freqentemente em problemas de engenharia. A vrios mtodos existentes para solucionar sistemas
de equaes, mas eles envolvem operaes demoradas com grande oportunidade de erro. Entretanto
temos que entender o processo para que possamos corrigir e interpretar os resultados do
computador.
Uma equao linear com 2 variveis, semelhante a 2x - y = 3, define uma linha reta e escrita
na forma y = mx + b, onde m o coeficiente angular e b o coeficiente linear. Podemos escrever y =
2x - 3. Se tivermos 2 equaes lineares, elas podem representar 2 diferentes retas que se interceptam
em um mesmo ponto, ou elas podem representar 2 retas paralelas que nunca se interceptam ou ainda
podem representar a mesma reta. Estas possibilidades so vistas na figura 8.1.

(a) - Retas que se interceptam.

Cap. 8 Solues a Sistemas de Equaes Lineares

101

Curso de MATLAB

(b) - Retas paralelas

(c) - Retas iguais - fig8.1

Cap. 8 Solues a Sistemas de Equaes Lineares

102

Curso de MATLAB
Equaes que representam duas retas que se interceptam podem ser facilmente identificadas
porque possuem diferentes coeficientes angulares.
Exemplo: y = 2x -3 ; y = -x +3;
Equaes que representam duas retas paralelas possuem o mesmo coeficiente angular e
coeficientes lineares diferentes.
Exemplo: y = 2x - 3 ; y = 2x + 1;
Equaes que representam a mesma reta so equaes com mesmo coeficiente angular e
mesmo coeficiente linear.
Exemplo: y = 2x - 3 ; 3y = 6x - 9;
Se a equao linear contm 3 variveis x, y, z ento ela representa um plano em espao
tridimensional.
Se temos duas equaes com trs variveis, elas podem representar dois planos que se
interceptam em uma linha, ou podem representar dois planos paralelos ou ainda podem representar o
mesmo plano.
Essas idias podem ser estendidas para mais de trs variveis porm se torna difcil a
visualizao desta situao.
Em muitos sistemas de engenharia estamos interessados em determinar se existe uma soluo
comum para sistemas de equaes. Se a soluo comum existe ento podemos determina-la. Vamos
discutir dois mtodos para soluo de sistemas de equao usando MATLAB.

8.2

Soluo usando operao com matrizes


Considerando o sistema seguinte de trs equaes com trs variveis desconhecidas.
3x
-x
x

+2y
+3y
-y

-z
+2z
-z

=
=
=

10
5
-1

Podemos rescrever os sistemas de equaes usando as seguintes matrizes:


A=

3
-1
1

2
3
-1

-1
2
-1

x=

x
y
z

Cap. 8 Solues a Sistemas de Equaes Lineares

B = 10
5
-1

103

Curso de MATLAB
Usando multiplicao de matrizes, o sistemas de equaes pode ser escrito na forma:
Ax = B
Diviso de matrizes
No MATLAB, um sistema de equaes simultnea pode ser resolvido usando diviso de
matrizes. A soluo da equao da matriz Ax = B pode ser calculada usando diviso A\B.
Exemplo: Ax = B
A = [3, 2, -1; -1, 3, 2; 1, -1, -1];
B = [10; 5; -1];
x =A \ B;
O vetor x contm os seguintes valores -2; 5; -6. Para confirmar se os valores de x esto corretos
podemos multiplicar A*x e veremos que o resultado ser B.

Matriz inversa
O sistema de equaes pode ser resolvido usando matriz inversa. Por exemplo assumimos que A,
x, B so matrizes definidas a seguir:
A=

3
-1
1

2
3
-1

-1
2
-1

x=

x
y
z

B=

10
5
-1

Ento A*x = B. Suponha que multiplicamos ambos os lados da equao da matriz por A^-1 ento
temos:
A^-1*A*x =A^-1*B
Mas A^-1*A igual a matriz identidade I, ento temos:
I*x=A^-1*B ou
x = A^-1*B;
No MATLAB podemos calcular essa expresso usando o comando:
X = inv(A)*B;
Exerccios
1) Resolver os sistemas de equaes com os mtodos acima e se possvel plotar os grficos.
a)
-2x + y = -3
x + y = 3

Cap. 8 Solues a Sistemas de Equaes Lineares

104

Curso de MATLAB

b)

-2x + y = -3
-2x + y = 1

Aplicao a soluo de problemas: Anlise de circuito eltrico


A anlise de circuito eltrico freqentemente envolve o encontro de solues de conjunto de
equaes. Essas equaes so usadas para descrever as correntes que entram e que saem dos ns, ou
a voltagem em cada malha.
A figura 8.2 nos mostra um circuito com duas fontes de voltagem. As trs equaes que
descrevem a voltagem ao redor dos trs laos so:

Figura 8.2 - Circuito com duas fontes de voltagem

( R1+R2 )i1
-R2i2
+0i3
=
-R2i1
+(R2+R3+R4) i2 -R4i3 =
0i1
-R4i2
+(R4+R5)i3 =

V1
0
-V2

Problema: Calcular as trs correntes do circuito da figura 8.2 considerando os valores da


figura para R1, R2, R3, R4, R5, V1 e V2.
Entrada / Sada:

R1 R2 R3 R4 R5

i1
i2

V1 V2
i3

Cap. 8 Solues a Sistemas de Equaes Lineares

105

Curso de MATLAB

Captulo 9 - Ajuste de Curvas e Interpolao


Em diversas reas do conhecimento, com freqncia se torna necessrio descrever os
dados obtidos experimentalmente oriundos de um experimento ou fenmeno fsico. Essas
informaes podem ser tomadas como coordenadas de pontos que definem uma certa funo
analtica f(x). Podemos ainda usar estes pontos para estimar valores da funo que no estejam
dentre os iniciais. Outro problema de engenharia quando no necessrio que a funo v
diretamente para todos os pontos dados e sim, para uma estimativa mais apropriada do
comportamento da funo. H duas alternativas para resolver este problema. Na interpolao,
parte-se do pressuposto de que os dados estejam corretos e procura-se alguma maneira de descrever
o que acontece entre os pontos dados; o outro mtodo chamado de ajuste de curvas ou regresso,
que tem como objetivo achar alguma curva suave que melhor se ajuste aos dados, mas que no
necessariamente passe por quaisquer dos pontos.
9.1

Interpolao

A interpolao definida como sendo uma forma de estimar os valores de uma funo
entre aqueles dados por algum conjunto de pontos de dados. A interpolao uma ferramenta
valiosa quando no se pode calcular rapidamente a funo nos pontos intermedirios desejados. Por
exemplo isto ocorre quando os pontos de dados resultam de medies experimentais ou de
procedimentos computacionais demorados.
Nesta seo vamos apresentar dois tipos de interpolao. A interpolao linear, que
considera que os valores intermedirios caem em uma linha reta entre os pontos definidos. Neste
mtodo se torna claro que, medida em que se tm mais pontos de dados e a distncia entre eles
diminui, a interpolao linear se torna mais precisa. E a interpolao spline, que considera que
alguma curva suave se ajusta aos pontos, onde esta suposio a de que um polinmio de terceira
ordem, isto , um polinmio cbico seja usado para modelar cada segmento entre pontos
consecutivos e que a inclinao de cada polinmio cbico se ajuste nos pontos de dados.

Cap. 9 Ajuste de Curvas e Interpolao

106

Curso de MATLAB

Interpolao linear
Uma das tcnicas mais usadas para estimar o comportamento de uma determinada funo
entre dois pontos dados a interpolao linear.
Supondo que tenhamos apenas duas coordenadas de uma funo qualquer e, que podemos
estimar seu comportamento linearmente, ou seja atravs de uma reta entre esses pontos. Ento
poderemos assim determinar o comportamento da funo em qualquer ponto deste intervalo por
meio de uma simples semelhana de tringulos, onde a equao geral :
f(b)= f(a) + b - a ( f(c) - f(a) )
c-a
A interpolao linear possvel no MATLAB atravs do uso dos comandos table1 e
table2.
Comando table1
Este comando proporciona a interpolao linear em uma dimenso usando para isto uma
tabela contendo as informaes a serem trabalhadas. O primeiro argumento deste comando se
refere tabela contendo as informaes. O segundo se refere ao valor de x para o qual queremos
interpolar o valor da funo.
O comando ir at a primeira coluna da tabela e achar os dois pontos consecutivos, entre os
quais estar o nosso ponto a ser interpolado. O comando ento acha o valor da funo no ponto
escolhido. importante notar que na hora de alocar os valores na tabela, eles devem estar
ordenados crescentemente ou decrescentemente, e o valor a ser interpolado dever estar entre o
primeiro e ltimo valores da primeira coluna da tabela, caso contrrio surgir uma mensagem de
erro!

Cap. 9 Ajuste de Curvas e Interpolao

107

Curso de MATLAB
Exemplo 1
Supondo que queiramos determinar o comportamento trmico da cabea de um cilindro a
ser implementado num carro. Supondo tambm que os valores experimentais referentes ao Tempo
e a Temperatura sejam;

Tempo, s
0
1
2
3
4
5

Temp., F
0
20
60
68
77
110

Para alocarmos estas informaes devemos usar uma matriz, onde o tempo ser preenchido
na primeira coluna atravs dos seguintes comandos:
dado1(:,1) = [0,1,2,3,4,5] ;
dado2(:,2) = [0,20,60,68,77,110] ;
Podemos usar o comando table1 para interpolar a temperatura correspondente a um
determinado tempo no intervalo de 0 a 5 segundos:
y1 = table1 (dado1, 2.6);
y2 = table1 (dado1, 4.9);
Os valores correspondentes sero y1 = 64.8 e y2 = 106.7.
Supondo agora que medimos a temperatura em trs pontos do cilindro:

Tempo, s
0
1
2
3
4
5

T1
0
20
60
68
77
110

T2
0
25
62
67
82
103

T3
0
52
90
91
93
96

Guardando estas informaes numa matriz, com as informaes do tempo na primeira


coluna:

Cap. 9 Ajuste de Curvas e Interpolao

108

Curso de MATLAB
dado2(:,1) = [ 0,1,2,3,4,5] ;
dado2(:,2) = [0,20,60,68,77,110] ;
dado2(:,3) = [0,25,62,67,82,103];
dado2(:,4) = [0,52,90,91,93,96];
Para determinar valores das temperaturas nestes trs pontos no tempo de t = 2.6s, usamos
os seguinte comando:
temps = table1 (dado2, 2.6);
Onde temps ser um vetor contendo os trs valores da temperatura: 64.8, 65.0 e 90.6.

Comando table2
Esse comando possibilita a interpolao bidimensional usando valores da primeira coluna e
da primeira linha da tabela. importante perceber que tanto os elementos da primeira coluna
quanto os elementos da primeira linha devem estar ordenados crescentemente ou decrescentemente
e que os valores de x e de y devem permanecer entre os limites da tabela.
Supomos agora que iniciamos um determinado processo incrementando uma velocidade
constante dada em rotaes por minuto, enquanto medimos a temperatura em um ponto da cabea
do cilindro. Ento, se iniciarmos o processo e incrementarmos uma velocidade 2000 rpm em 5
segundos e registrarmos os valores de temperatura. Da mesma forma podemos continuar
registrando os valores de temperaturas para os vrios valores de velocidade:

Tempo, s
0
1
2
3
4
5

V1=2000
0
20
60
68
77
110

V2=3000
0
110
180
240
310
405

V3=4000
0
176
220
349
450
503

V4=5000
0
190
285
380
510
623

V5=6000
0
240
327
428
620
785

Desta forma podemos estimar a temperatura da cabea do cilindro em qualquer tempo


entre 0 e 5 segundos, e em qualquer velocidade entre 2000 e 6000 rpm.
Ao invs de calcularmos, o que seria bem mais complicado, podemos interpolar a funo
em questo.
Podemos agora guardar estas informaes numa matriz dado3, e ento usar o comando
table2 para calcular esta informao para ns:

Cap. 9 Ajuste de Curvas e Interpolao

109

Curso de MATLAB
Note que agora ns preenchemos as linhas com as informaes da tabela, no exemplo
anterior ns preenchemos as colunas.
dado3(1,:) = [0,2000,3000,4000,5000,6000];
dado3(2,:) = [0,0,0,0,0,0];
dado3(3,:) = [1,20,110,176,190,240];
dado3(4,:) = [2,60,180,220,285,327];
dado3(5,:) = [3,68,240,349,380,428];
dado3(6,:) = [4,77,310,450,510,620];
dado3(7,:) = [5,110,405,503,623,785];
temp = table2(dado3,3.1,3800)
A resposta ser mostrada em temp = 336.68 F .

Spline

Uma spline cbica uma curva suave construda passando atravs do conjunto de pontos.
A curva entre cada par de pontos determinada por um polinmio do terceiro grau, que calculado
para fornecer uma curva suave entre os pontos ao invs de lig-los simplesmente.
Comando spline
o comando que realiza no MATLAB uma spline cbica. O primeiro argumento do
comando spline o x, o segundo o y e o terceiro contm o valor do(s) ponto(s) aonde se deseja o
valor da funo. Lembrando que novamente os valores de x devem ser ordenados ou
crescentemente ou decrescentemente, caso contrrio surgir uma mensagem de erro!

Exemplo 2
Supondo que queiramos usar a spline cbica para calcular a temperatura na cabea do
cilindro no tempo t = 2.6 segundos, podemos usar os seguintes comandos:
x = [0,1,2,3,4,5];
y = [0,20,60,68,77,110];
temp1 = spline(x,y,2.6)
O valor de temp1 ser 67.3.
Se quisermos usar estes processo para calcularmos a temperatura em diferentes momentos
podemos usar os seguintes comandos:
temp2 = spline(x,y,[2.6,4.9]);
temp2 = [67.3,105.2]

Cap. 9 Ajuste de Curvas e Interpolao

110

Curso de MATLAB
Se quisermos ainda plotar uma curva spline abrangendo um outro intervalo de valores,
podemos gerar um vetor x como o terceiro argumento do comando spline.

Exemplo 3
x = [0,1,2,3,4,5];
y = [0,20,60,68,77,110];
newx = 0: 0.1 :5;
newy = spline(x,y,newx);
axis([-1,6,-20,120]);
plot (x,y,newx,newy,x,y,o);
title ( Interpolao Spline );
xlabel( Tempo,s );
ylabel( Graus, F );
grid;

Note que na interpolao linear, o grfico de x e y percorrem as coordenadas por meio de


retas, enquanto que o grfico de newx e newy representa a spline definida por interpolao cbica.
Exerccios para Praticar!
Supondo que nossa tabela de valores seja;

Tempo,s
0,0
0,5
1,0
1,5
2,0
2,5
3,0
3,5
4,0
4,5
5,0

Temp, F
72,5
78,1
86,4
92,3
110,6
111,5
109,3
110,2
110,5
109,9
110,2

a. Gerar um grfico que compare os dois tipos de interpolao j vistos.

Cap. 9 Ajuste de Curvas e Interpolao

111

Curso de MATLAB
b. Achar os valores da temperatura correspondentes aos seguintes valores de tempo t =
[0.3,1.25,2.36,4.48] , usando a interpolao linear.
c. Achar os valores da temperatura correspondentes aos seguintes valores de tempo t =
[0.3,1.25,2.36,4.48] , usando a spline.

Aplicao Soluo de Problemas : Brao Robtico


Assim como este sistema de manipulao existem vrios outros usados em vrios tipos de
robs, que se utilizam de um avanado sistema de controle para guiar um brao robtico para a
posio desejada. Um dos anseios de um sistema de controle que o caminho percorrido pelo
brao ao se mover de um local para o outro, ao pegar ou soltar um objeto, seja feito regularmente,
evitando assim possveis trancos durante o percurso.
O caminho percorrido pelo brao ser definido atravs de coordenadas de pontos por onde
o brao ir se mover. Ento podemos utilizar a interpolao para definir uma curva suave, regida
por estas coordenadas, para mostrar o comportamento desse brao ao longo de uma trajetria.
Uma parte importante no desenvolvimento do algoritmo ou da soluo deste problema est
na considerao de situaes especiais. Neste problema ns assumimos que pontos nos quais o
brao ir passar precisaro estar na ordem para mover o brao na trajetria desejada que ser:
posio inicial, posio intermediria, posio para pegar o objeto, posio para colocar o objeto no
local desejado e finalmente posio inicial. E, consideraremos tambm que cada ponto conter trs
coordenadas: x, y(que sero as coordenadas relativas a posio inicial), e uma terceira coordenada
dizendo o cdigo da respectiva posio, de acordo com a tabela abaixo:
Cdigo
0
1
2
3

Posio
Inicial
Intermediria
Para pegar o objeto
Para deixar o objeto

Queremos ento utilizar uma spline para visualizarmos o comportamento do brao


robtico.
Mtodo para a resoluo do problema
1. PROBLEMA EM SI
Desenhar uma curva suave utilizando a interpolao por spline que pode ser usada para guiar um
brao robtico para uma determinada trajetria.

Cap. 9 Ajuste de Curvas e Interpolao

112

Curso de MATLAB
2. DESCRIO DA ENTRADA E DA SADA
A entrada constituda de um arquivo contendo as coordenadas x e y dos pontos pelos quais o
brao robtico dever passar.
A sada do programa ser a curva correspondente ao comportamento do rob ao percorrer
estes pontos.

3. SOLUO NO MATLAB

9.2

Ajuste de curvas pelo mtodo dos mnimos quadrados

Supondo que tenhamos um conjunto de pontos originados de um determinado experimento


e que queiramos plotar o seu grfico. Se tentarmos traar uma nica reta entre esses pontos,
somente um par destes pontos iro fazer parte da reta. O mtodo dos mnimos quadrados poder ser
usado neste caso para achar uma nica reta que mais se aproxime de todos os pontos. Embora essa
reta seja a melhor aproximao possvel, pode acontecer da reta no passar efetivamente por
nenhum ponto.
Note que este mtodo muito diferente da interpolao porque esta passar por todos os
pontos.
Vamos partir primeiro para a discusso do ajuste da reta para um conjunto de pontos e
depois para o ajuste do polinmio atravs do conjunto de pontos.

Regresso linear
o processo que determina a equao linear, ou seja, a funo mais aproximada do
comportamento dos pontos, que calculada atravs do somatrio dos mnimos quadrados das
distncias entre a reta e os pontos.
Como exemplo vamos ainda considerar aqueles valores de temperaturas do cilindro:
x = [0,1,2,3,4,5];
y = [0,20,60,68,77,110];
axis([-1,6,-20,120]);
Cap. 9 Ajuste de Curvas e Interpolao

113

Curso de MATLAB

Se simplesmente plotarmos o grfico atravs do comando:


plot(x,y,x,y, o);
Ele ligar os pontos. Mas, se ao invs disso, estimarmos o comportamento da funo em
y1 = 20*x, e a sim plotarmos este grfico:
plot(x,y1,x,y, o)
Para medirmos a qualidade desta estimativa, devemos determinar a distncia no eixo
vertical de cada ponto reta estimada e som-las atravs do comando sum. Observe que somamos
os quadrados das distncias para evitar que algum valor seja anulado devido aos sinais.
somadist = sum ((y - y1) .^ 2);
Para achar a reta mais perto de todos os pontos devemos achar a menor soma dos
quadrados das distncias. Para isto devemos escrever a equao geral da reta : y = mx + b.
Os valores de m e b podero ser calculados atravs do comando polyfit
Comando polyfit
Este comando acha os coeficientes do polinmio que estamos procurando. Mas, para isto
devemos especificar o grau do polinmio. Este comando possui trs argumentos: primeiro as
coordenadas x e y, e depois o grau do polinmio.
Exemplo:
x = [0,1,2,3,4,5];
y = [0,20,60,68,77,110];
coef = polyfit(x,y,1);
m = coef (1);
b = coef (2);
ybest = m*x+b;
somadist = sum ((y - ybest) .^ 2 );
axis([-1,6,-20,120]);
plot(x,ybest,x,y, o );
title (
)
xlabel (X); ylabel(Y);
grid;

Cap. 9 Ajuste de Curvas e Interpolao

114

Curso de MATLAB
Comando polyval
Este comando empregado para estimar o mnimo polinmio quadrado de um conjunto de
pontos. O primeiro argumento deste comando conter os coeficientes do polinmio, o segundo
argumento ser um vetor com os valores de x para os quais desejamos o valor da funo.
Exemplo:
ybest = polyval (coef,x);

Cap. 9 Ajuste de Curvas e Interpolao

115

Curso de MATLAB

Captulo 10 - Anlise polinomial


Este captulo traz uma srie de comandos no MATLAB para a anlise polinomial.
Primeiro vamos discutir meios de avaliar os polinmios e como trabalhar o seu comportamento.
Uma aplicao deste conceito est na modelagem da altitude e velocidade de um balo. A seguir
definiremos as razes dos polinmios.
Polinmios normalmente aparecem em aplicaes da Engenharia e na Cincia em geral
porque eles constituem ainda bons modelos para representar sistemas fsicos.
10.1

Avaliao do polinmio

Como exemplo vamos tomar o seguinte polinmio:


f(x) = 3x4 - 0.5x3 + x - 5.2
Se x assumir valores escalares, podemos escrever:
f(x) = 3*x ^4 - 0.5*x ^3 + x - 5.2;
Se x for um vetor ou uma matriz devemos escrever:
f(x) = 3* x .^4 - 0.5* x .^3 + x - 5.2;
onde o tamanho da matriz f ser o mesmo da matriz x.
Comando polyval
Este comando possui dois argumentos. O primeiro argumento contm os coeficientes do
polinmio em questo e o segundo argumento contm a matriz para a qual desejamos avaliar o
polinmio.
Exemplo 1
a = [3,-0.5,0,1,-5.2];
f = polyval(a,x);
Esses comandos tambm podem ser combinados em um s:
f = polyval([3,-0.5,0,1,-5.2],x);
O tamanho de f ter que ser igual ao tamanho de x, seja ele um escalar, vetor ou matriz.

Cap. 10 Anlise Polinomial

116

Curso de MATLAB
Supondo que queiramos o valor da funo g(x) = -x5 + 3x3 - 2.5x2 - 2.5, para x no intervalo
de[0,5]:
x:0:0.025:5;
a = [-1,0,3,-2,5,0,-2.5];
g = polyval(a,x)
Quando x for um escalar ou um vetor, polyval consegue calcular o valor da funo
operando elemento por elemento. Mas quando x for uma matriz usa-se o comando polyvalm:
f = polyvalm(a,x);
sendo a matriz x, uma matriz quadrada.

Operaes Aritmticas
Podemos trabalhar com polinmios armazenando seus coeficientes em vetores, e trabalhar
apenas com estes vetores.

Soma e subtrao

Para somar ou subtrair polinmios basta somar ou subtrair seus respectivos coeficientes. O
MATLAB no apresenta um comando especfico par somar polinmios. A soma ou subtrao
padro funciona se ambos os vetores polinomiais forem do mesmo tamanho. Somemos os
polinmios a seguir:
g(x) = x4 - 3x2 - x + 2.4
h(x) = 4x3 - 2x2 + 5x - 16
som(x) = g(x) + h(x)
sub(x) = g(x) - h(x)
Para multiplicar um polinmio por um escalar (sendo ele positivo ou negativo), basta
definir o polinmio pelos seus coeficientes e efetuar a multiplicao. Multipliquemos o polinmio:
g(x) = 3 f(x)
No MATLAB:
f = [ 3,-6,1];
g=3*f

Cap. 10 Anlise Polinomial

117

Curso de MATLAB

Multiplicao

A multiplicao polinomial efetuada por meio do comando conv (que faz a convoluo
entre dois conjuntos). A multiplicao de mais de dois polinmios requer o uso repetido de conv.
m = conv(g,h)

Diviso
No MATLAB a diviso de polinmios feita atravs do comando deconv:
[q,r] = deconv(g,h)
Esse resultado nos diz que g dividido por h nos d o polinmio de quociente q e resto r.

Aplicao Soluo de Problemas: Bales Meteorolgicos


Bales so usados para reunir problemas de temperatura e presso nas diferentes altitudes
da atmosfera. O balo consegue ganhar altitude porque nele est presente um gs de menor
densidade que o prprio ar ao seu redor. Durante o dia, devido a presena da luz solar, o gs Hlio
se expande, se tornando mais denso que o ar e assim fazendo com que o balo suba. Durante a
noite, o gs Hlio esfria e fica mais denso, e com isso o balo desce a baixa altitude. No dia
seguinte o sol novamente esquenta o gs e o balo sobe. Com o passar dos dias, esse processo gera
vrios valores de altitude que geralmente podem ser aproximados por uma equao polinomial.
Assumindo que o seguinte polinmio represente a altitude em metros, durante as primeiras
48 horas de um balo:
h(t) = -0.12 t 4 + 12 t3 -380 t 2 + 4100 t + 220
onde t medido em horas. O modelo polinomial para velocidade, obtido atravs da
derivada, em metros por hora do balo o seguinte:
v(t) = -0.48 t 3 + 36 t2 - 760 t + 4100

Mtodo para a resoluo do problema


1. PROBLEMA EM SI:
Usando o polinmio dado fazer o grfico da altitude e da velocidade do balo em questo.
E achar tambm a mxima altitude por ele atingida.

Cap. 10 Anlise Polinomial

118

Curso de MATLAB
2. DIAGRAMA ENTRADA/SADA:
Neste diagrama mostrado que no existe nenhuma entrada externa ao programa. A sada
consiste em dois grficos e na altitude mxima atingida e o seu tempo correspondente.

3. SOBRE O PROGRAMA:
Queremos que apenas o programa faa o grfico de acordo com as nossas informaes e
ento calcule o mximo valor atingido no grfico. Devemos tambm fazer que nosso programa
converta metros por hora em metros por segundo.

4. SOLUO NO MATLAB:
Vamos usar o comando polyval para gerar os pontos para formar o grfico. O comando
max usado para determinar o valor mximo da funo.

Cap. 10 Anlise Polinomial

119

Curso de MATLAB
10.2

Razes de polinmios

Achar as razes de um polinmio, isto , os valores para os quais o polinmio igual a


zero, um problema comum em muitas reas do conhecimento, como por exemplo, achar as razes
de equaes que regem o desempenho de um sistema de controle de um brao robtico, ou ainda
equaes que demonstram a arrancada ou freada brusca de um carro, ou analisando a resposta de
um motor, e analisando a estabilidade de um filtro digital.
Se assumirmos que os coeficientes (a1, a2, ...) de um polinmio so valores reais,
poderemos encontrar razes complexas.
Se um polinmio fatorado em termos lineares, fica fcil de identificar suas razes,
igualando cada termo a zero.
Um exemplo consiste no polinmio:
f(x) = x2 + x - 6,
que ao ser fatorado se torna:
f(x) = (x - 2) . (x + 3)
As razes da equao so os valores de x para os quais a funo f(x) igual a zero, ou seja,
x = 2 e x = -3.
No grfico, as razes so valores onde a funo corta o eixo x.
Um polinmio do terceiro grau tem exatamente trs razes que podem ser:
- trs razes reais;
- trs razes iguais;
- uma raiz real e duas razes iguais;
- uma raiz real e um par conjugado de razes complexas.
Se a funo f(x) for um polinmio de grau n, ela ter exatamente n razes. Estas n razes
podem conter mltiplas razes ou razes complexas.
No MATLAB, um polinmio representado por um vetor linha dos seus coeficientes em
ordem decrescente. Observe que os termos com coeficiente zero tm de ser includos. Dada esta
forma, as razes do polinmio so encontradas usando-se o comando roots do MATLAB.
J que tanto um polinmio quanto suas razes so vetores no MATLAB, o MATLAB adota
a conveno de colocar os polinmios como vetores linha e as razes como vetores coluna. Para
ilustrar este comando vamos determinar as razes do seguinte polinmio:

Cap. 10 Anlise Polinomial

120

Curso de MATLAB
f(x) = x3 - 2 x2 - 3 x + 10
No MATLAB:
p = [1,-2,-3,10];
r = roots(p)
Lembrando que estes comandos podem ser dados de um s vez:
r = roots([1,-2,-3,10]);
Os valores das razes sero: 2 + i, 2 - i e -2.
Agora, dadas as razes de um polinmio, tambm possvel construir o polinmio
associado. No MATLAB, o comando poly encarregado de executar essa tarefa.
onde o argumento do comando poly o vetor contendo as razes do polinmio que desejamos
determinar.

Exemplo 2
Sejam as razes de um polinmio -1, 1 e 3. Determinar este polinmio.
No MATLAB:
a = poly ([-1,1,3]);

Exemplo 3
Determine as razes dos seguintes polinmios e plote seu grfico, com seu eixo apropriado,
com o objetivo de verificar se o polinmio atravessa o eixo x bem nos locais das razes.
a. f(x) = x3 - 5x2 + 2x + 8
b. g(x) = x2 + 4x + 4
c. h(x) = x5 + 3x4 - 11x3 + 27x2 + 10x - 24
d. i(x) = x5 - 3x3 + 4x2 -1

Cap. 10 Anlise Polinomial

121

Curso de MATLAB

Captulo 11 - Integrao e Diferenciao Numrica


A integrao e diferenciao so conceitos fundamentais usados para resolver um grande
nmero de problemas na Engenharia e na Cincia. Enquanto muitos destes problemas se usam de
solues analticas, muitos requerem solues numricas para serem entendidos.

11.1 Integrao Numrica


A integral de uma funo f(x) no intervalo [a,b], definida como sendo a rea sob a curva
percorrida por f(x) entre a e b.
b

k=

f( x) dx
a

A avaliao numrica de uma integral tambm chamada de quadratura (enfoque


geomtrico). O MATLAB possui trs comandos para calcular a rea sob uma funo, em um
domnio finito, que so: trapz, quad e quad8.

Regra do Trapzio
Quando a rea sob a curva pode ser representada por trapzios e o intervalo [a,b], dividido
em n partes iguais, a rea aproximada poder ser calculada atravs da seguinte frmula:
Kt = b - a ( f(x0) + 2 f(x1) + ... + 2f(xn - 1) + f(xn) )
2n
onde os valores de xi representam os pontos no final da cada trapzio e x0 = a e xn = b.
A estimativa da integral melhora quando usarmos um maior nmero de componentes ( como
por exemplo trapzios), para aproximar a rea sob a curva, pois quanto menor for o intervalo da
funo a curva tende a uma reta.

Comando quadratura
O MATLAB possui dois comandos para desenvolver a integrao numrica. O comando
quad usa uma forma adaptada da regra de Simpson, enquanto o comando quad8 usa uma forma
adaptada da regra de Newton-Cotes. O comando quad8 funciona melhor em certas funes com
certos tipos de singularidades como por exemplo:

Cap. 11 Integrao e Diferenciao Numrica

122

Curso de MATLAB
1

k =

x dx
0

Lembrando que uma singularidade um ponto no qual uma funo ou sua derivada no so
definidas ou tendem para o infinito. Ambas as funes escrevem na tela uma mensagem quando
detectam uma singularidade, mas ainda assim o valor estimado da integral retornado.
A forma mais simples do comando quad requer trs argumentos: o primeiro argumento o
nome da funo no MATLAB que reconhece a funo que estamos tratando; o segundo e o terceiro
argumento so os limites inferior e superior a e b da integral.
Exemplo 1
b

k=

x dx

para a e b no negativos

K = 2 (b3 / 2 - a 3 / 2)
3
Os comandos quad e quad8 podem ainda assumir um quarto argumento que a tolerncia,
que corresponde a preciso. Se a tolerncia for omitida, o valor default 0.001 ser assumido pelo
MATLAB.

Exerccio 1
Seja a funo f(x) = | x |. Resolva as integrais abaixo usando o MATLAB e compare com os
resultados obtidos a mo.
a. int[0.6,0.5] f(x) dx
b. int[0.5,-0.5] f(x) dx
c. int[0.0,-1.0] f(x) dx

Problema Aplicado: Anlise de Escoamento de um leo num Oleoduto


A anlise do fluxo de um lquido em duto tem aplicao em muitos sistemas diferentes,
incluindo o estudo em veias e artrias no corpo humano, o sistema hidrulico de uma cidade, o
sistema de irrigao de uma fazenda, o sistema de jato de tinta de uma impressora, etc.
O atrito de um fluxo ao passar num oleoduto circular gera a chamada velocidade de perfil no
fluido.
Cap. 11 Operaes com Matrizes

123

Curso de MATLAB
O leo que est em contato com as paredes do duto no est se movendo na mesma
velocidade que o leo no centro do fluido. O diagrama abaixo mostra como a velocidade do leo
varia de acordo com o dimetro do duto e define as variveis usadas para esta anlise:

A velocidade de perfil definida pela seguinte equao:


v(r) = vmax (1 - r / r0 ) 1 / n
onde n um nmero inteiro entre 5 e 10 que define o contorno do escoamento do leo. A
velocidade mdia de escoamento do leo pode ser calculada integrando-se a velocidade de perfil no
intervalo de 0 a r0.

Os valores de vmax e de n podem ser medidos experimentalmente, e o valor de r0 o


prprio raio do tubo. Escreva um programa no MATLAB para integrar a velocidade de perfil e
assim determinar a velocidade mdio do leo no duto.
Mtodo Para a Resoluo do Problema
1. O PROBLEMA EM SI
Calcular a velocidade mdia do leo em um duto.

2. DESCRIO DA ENTRADA E SADA


Os dados experimentais que sero tomados como entrada em nosso programa so a velocidade
mxima vmax, o raio do duto r0, e o valor de n.
A sada de nosso programa ser a velocidade mdia do leo no duto.

Cap. 11 Integrao e Diferenciao Numrica

124

Curso de MATLAB

3. FORMA QUE AJUDAR NA QUESTO


Plotar um grfico da funo r (1 - r / r0)
da rea sob a curva.

1/n

e estimar o valor da integral atravs do clculo

4. SOLUO NO MATLAB

11.2 Diferenciao Numrica


A derivada de uma funo f em um ponto pode ser descrita graficamente como a inclinao da reta
que tangencia a funo naquele ponto.
Pontos da funo onde a derivada zero so chamados pontos crticos. So pontos onde a
tangente representada por uma linha horizontal e que, por isso, definem o local de mximo e de
mnimo da funo.
Podemos perceber ao analisar uma determinada funo num determinado intervalo que o
sinal da derivada pode mudar, e, se esse sinal muda, significa que dentro deste intervalo existe local
de mximo e local de mnimo.
Podemos tambm analisar uma funo pela sua derivada segunda. De modo que, se a
derivada segunda de um ponto crtico positiva, ento o valor da funo naquele ponto significa um
local de mnimo. Da mesma forma, se a derivada segunda de um ponto crtico negativa, ento a
funo possui um local de mximo.

Cap. 11 Operaes com Matrizes

125

Curso de MATLAB

Derivao por expresses de diferenas


As tcnicas de diferenciao numrica estimam a derivada de uma funo em um ponto xk
atravs da aproximao da inclinao da reta tangente curva neste ponto usando valores que a
funo assume em pontos perto de xk. Essa aproximao pode ser feita de vrios modos.
Assim, dependendo dos pontos, temos trs tcnicas:

(a)

(b)

(c)
Cap. 11 Integrao e Diferenciao Numrica

126

Curso de MATLAB
A derivada segunda pode ser achada atravs da frmula:
f (xk) = f (xk) - f (xk - 1)
(xk) - (xk - 1)

Comando diff
O comando diff calcula a diferena entre dois pontos adjacentes num vetor, gerando um
novo vetor com a diferena (Se o comando diff for aplicado a uma matriz, ele ir operar como se
cada coluna da matriz fosse um vetor).
Por exemplo, assumindo que o vetor x seja [0,1,2,3,4,5], e que o vetor y seja [2,3,1,5,8,10].
O vetor gerado por diff(x) ser [1,1,1,1,1], enquanto que o gerado por diff(y) ser [1,-2,4,3,2].
A derivada dy ser calculada por diff(y) ./ diff(x). Note que estes valores de dy estaro
corretos para ambas as formas de diferenas, backward ou forward. A diferena entre esses dois
mtodos para o clculo da derivada determinada pelos valores de x que correspondem derivada
dy. Se os valores correspondentes de x forem [1,2,3,4,5] ento dy calculado pela diferena
backward; mas se os valores de x forem [0,1,2,3,4] ento dy ser calculado pelo mtodo da
diferena forward.
Supondo que desejamos analisar a funo dada pelo seguinte polinmio:
f(x) = x5 - 3 x4 - 11 x3 + 27 x2 + 10 x - 24
Assumindo que queiramos calcular o valor de sua derivada no intervalo [-4,5], usando o
mtodo da diferena backward.
Chamando f (x) de df e, xd os valores de x da derivada.
Temos no MATLAB que:
x = -4:0.1:5;
f = x .^5 - 3 * x .^4 - 11 * x.^3 + 27 * x .^2 + 10 * x - 24;
df = diff(y) . / diff(x);
xd = x(2:length(x) );
plot(f,x)
plot(df,xd)
axis([-4 5 -800 600]);
plot(f)
axis([-4 5 -200 1400]);
plot(df)

Cap. 11 Operaes com Matrizes

127

Curso de MATLAB
Podemos marcar os locais dos pontos crticos para essa funo com os seguintes comandos:
produto = df(1 : length(df) - 1 ) .* df(2 : length(df) );
critico = xd (find (produto < 0) )
O comando find determina os ndices dos locais do produto para os quais a derivada df(k)
igual a zero; esses ndices so ento usados com o vetor contendo os valores de xd para determinar
os locais de pontos crticos.

Exerccios para Praticar !


1. Para cada polinmio abaixo, plote a funo, sua derivada primeira e sua derivada segunda, no
intervalo de [-10,10]. Depois ache os locais de mnimo, de mximo, e os pontos crticos
a. g(x) = x3 - 5x2 + 2x + 8
b. h(x) = x5 - 4x4 - 9x3 + 32x2 + 28x - 48
c. i(x) = x7 - 5x3 + 14x2 - 12

Cap. 11 Integrao e Diferenciao Numrica

128

Curso de MATLAB

Captulo 12 - Equaes Diferenciais Ordinrias


Nesta sesso iremos apresentar um grupo de equaes de primeira ordem e suas solues
analticas. Depois seguiremos com a descrio dos mtodos de Runge - Kutta para a integrao de
equaes de primeira ordem, onde ento iremos comparar as solues numricas com as analticas.
Esse captulo termina com a discusso quando se torna necessrio converter equaes diferenciais
de ordem superiores para equaes de primeira ordem.

12.1

Equaes Diferenciais Ordinrias de Primeira Ordem

A equao diferencial de primeira ordem (ODE) uma equao que pode ser escrita na
seguinte forma:
y = dy = g(x,y)
dx
onde x a varivel independente.
A soluo da equao diferencial de primeira ordem (ODE) a funo y = f(x), tal que f
(x) = g(x,y). O clculo da soluo envolve a integrao de y para obter y. A soluo de uma
equao diferencial geralmente uma famlia de funes. A condio inicial usualmente
necessria na ordem para especificar uma nica soluo. A seguir sero representadas algumas
solues analticas para equaes diferenciais ordinrias.
Enquanto que as solues analticas para as equaes diferenciais so preferenciais, muitas
vezes requerem solues muito complicadas. Para esses casos, uma tcnica numrica se torna
necessria. As tcnicas numricas mais comuns para resolver equaes diferenciais ordinrias, so
o mtodo de Euler e o mtodo de Runge-Kutta.
Tanto o mtodo de Euler quanto o mtodo de Runge-Kutta aproximam a funo utilizandose da expanso em srie de Taylor.
Lembrando que a srie de Taylor uma expanso que pode ser usada para aproximar uma
funo cujas derivadas so definidas no intervalo contendo a e b. A expanso por srie de Taylor
para f(b) :
f(b) = f(a) + (b - a) f (a) + (b - a)2 f (a) + ... + (b - a)n f(n)(a) + ...
2!
Para as equaes diferenciais de primeira ordem a serie de Taylor se torna:
f(b) f(a) + (b - a) f (a)

Cap. 12 Equaes Diferenciais Ordinrias

129

Curso de MATLAB
Para as equaes diferenciais de segunda ordem:
f(b) f(a) + (b - a) f (a) + (b - a)2 f (a)
2!
E, assim por diante.
12.2

Mtodo de Runge - Kutta

Os mtodos mais populares para a integrao da equao diferencial de primeira ordem so


os mtodos de Runge - Kutta. Esses mtodos de aproximao de uma funo se usam da expanso
por srie de Taylor. Desta forma, o mtodo de Runge - Kutta de primeira ordem se utiliza da
expanso de Taylor de primeira ordem, o mtodo de Runge - Kutta de segunda ordem se utiliza da
expanso de Taylor de segunda ordem, e, assim por diante. Lembrando que o mtodo de Euler
equivalente ao mtodo de Runge - Kutta de primeira ordem.

Mtodo de Euler
yb = ya + (b - a) ya
Esta equao estima o valor da funo yb usando uma reta tangente a funo no ponto a,
conforme mostrado na figura abaixo:

A equao diferencial usada para calcular o valor de ya.


Tendo estimado o valor da funo yb no ponto b, podemos estimar o prximo valor da
funo yc, usando:
yc = yb + (b - a) yb
Essa equao utilizar a tangente no ponto b para estimar o valor da funo no ponto c, yc,
como mostrado na figura a seguir:

Cap. 12 Equaes Diferenciais Ordinrias

130

Curso de MATLAB

preciso partir de uma condio inicial para dar incio ao processo de estimativa de outros
pontos da funo f(x).

Comando ode
O MATLAB contm dois comandos para calcular solues numricas para equaes
diferenciais ordinrias: ode23 e ode45; o comando ode23 usa o mtodo de Runge - Kutta para
equaes diferenciais de segunda e terceira ordem; o comando ode45 usa o mtodo de Runge Kutta para equaes diferenciais de quarta e quinta ordem. Os comandos ode23 e ode45 possuem
os mesmos tipos de argumentos.
A forma mais simples do comando ode23 requer quatro argumentos. O primeiro
argumento o nome da funo, definida no MATLAB, que retorna o valor da equao diferencial
y = g(x,y) quando fornecido valor para x e y. O segundo e o terceiro argumentos representam os
limites no intervalo no qual n desejamos calcular o valor da funo y = f(x). O quarto argumento
contm a condio inicial necessria para determinar a nica soluo para a equao diferencial
ordinria. Ns assumimos que esse argumento representa o valor da funo dentro do intervalo
considerado. O comando ode23 possui duas sadas: um conjunto de coordenadas x e, um conjunto
de coordenadas y correspondentes, os quais representam os pontos da funo y = f(x).
No MATLAB, primeiro temos que definir a funo a qual desejamos avaliar as equaes
diferenciais, assumindo valores escalares de entrada para x e y.

Exemplo 1
Resolver a equao y = g1(x,y) = 3x2 no intervalo [2,4], assumindo como condio inicial
f(2) = 0,5.
Soluo analtica: y = x3 - 7.5

Soluo no MATLAB:
function dy=g1(x,y)
dy=3*x^2;
Cap. 12 Equaes Diferenciais Ordinrias

131

Curso de MATLAB
[x,num_y] = ode23(g1,2,4,0.5)
anl_y^= x.^3 - 7.5;
subplot(211),plot(x,num_y,x,anl_y,o);
title(Soluo do Exemplo 1);
xlabel(X);
ylabel(y = f(x));
grid;
O grfico obtido conter a comparao entre a soluo numrica e a soluo analtica.

Exemplo 2
Resolver a equao y = g2(x,y) = 2xcos2 y no intervalo [0,2], assumindo como
condio inicial f(0) = /4.
Soluo analtica: y = tan-1 (x2 + 1)
Soluo no MATLAB:
function dy=g2(x,y)
dy=2*x*cos(y)^2;
[x,num_y] = ode23(g2,0,2,pi/4)
anl_y = atan(x*x+1);
subplot(211),plot(x,num_y,x,anl_y,o);
title(Soluo do Exemplo 2);
xlabel(X);
ylabel(y = f(x));
grid;

O nmero de pontos calculados para a funo y = f(x) pelo comando ode23 ou ode45
determinado pelo MATLAB.
Os comandos ode23 e ode45 podem tambm ser usados com dois parmetros adicionais.
O quinto parmetro pode ser usado para especificar a tolerncia que estar relacionada com o
tamanho do passo. O valor default para a tolerncia de 0.001 para o ode23 e 0.000001 para o
ode45. O sexto parmetro pode ser usado para requerer que a funo escreva na tela
imediatamente os resultados chamado trao. O valor default zero, especificando nenhum trao
para os resultados.

Cap. 12 Equaes Diferenciais Ordinrias

132

Curso de MATLAB
Exerccios para praticar!
1. Seja a equao:
y = ga(x,y) = -y
a) Assumindo como condio inicial f(0) = -3.0, resolva, no MATLAB, essa equao
diferencial no intervalo de [0,2] e plote o grfico com os valores correspondentes de y.
b) Sendo y = -3 e-x , a soluo analtica para esta equao, faa um novo grfico que
compare a soluo analtica com a numrica.

Problema Aplicado: Acelerao de uma turbina UDF numa aeronave


Uma avanada turbina chamada de ventilador no canalizado (UDF) uma das novas
tecnologias mais promissoras que tem sido desenvolvida para o futuro transporte de aeronaves.
Turbinas, que tm sido usadas por dcadas, combinam o poder e a confiabilidade dos motores a jato
com a eficincia dos propulsores. Eles constituem uma importante melhoria dos antigos
propulsores movidos a pisto. Suas aplicaes tm sido limitadas a pequenas aeronaves do tipo
comutador, isto porque eles no so to rpidos, nem poderosos quanto as turbinas usadas em
grandes aeronaves. Esse tipo de turbina(UDF) implica em avanos significantes na tecnologia de
propulso. Novos materiais, aerodinmica e velocidades de alta rotao habilitam esta turbina a
voar to rpido quanto as turbinas a jato, e com grande aproveitamento de combustvel. A UDF
tambm menos barulhenta que o sistema convencional de turbinas.
Durante um teste de vo de uma turbina UDF de uma aeronave, o motor levado para um
nvel de 40 Newton, o que significa os 20 Kg da aeronave tendo alcanado uma velocidade de 180
m/s. As vlvulas de regulao do motor so ento levadas para atingir um nvel de 60 Newtons, e a
aeronave comea a acelerar.
A equao diferencial que determina a acelerao da aeronave :
a = T - 0,000062 v2
m
onde:
a = dv
dt
T = nvel atingido em Newtons
m = massa em kg
v = velocidade em m/s
Cap. 12 Equaes Diferenciais Ordinrias

133

Curso de MATLAB

Escreva no MATLAB um programa para determinar a nova velocidade depois de uma


mudana no nvel do motor atravs do grfico da soluo para a equao diferencial.

Mtodo para a resoluo do problema


1. O PROBLEMA EM SI
Calcular a nova velocidade atingida pela aeronave depois de uma mudana no nvel do motor.
2. DESCRIO DA ENTRADA E DA SADA
Como entrada ns temos a equao diferencial que define a acelerao da aeronave.
Como sada, ns desejamos o grfico da velocidade e da acelerao.

3. SOLUO NO MATLAB
Podemos usar o comando ode23 para avaliar a nossa equao diferencial. A soluo dessa
equao diferencial nos fornecer valores de velocidade, os quais podero ser usados para
determinar os valores da acelerao. Ns podemos ento traar ambos os grficos de velocidade
e acelerao num intervalo de 4 minutos para observar suas mudanas. A velocidade dever
aumentar e ento estabilizar num novo valor, enquanto que a acelerao dever diminuir at
chegar a zero.
4. PROGRAMA

Cap. 12 Equaes Diferenciais Ordinrias

134

Curso de MATLAB
12.3

Equaes Diferenciais Ordinrias de Ordens Superiores

Equaes diferenciais de ordens superiores podem ser escritas como um sistema


constitudo por um conjunto de equaes diferenciais de primeira ordem usando a mudana de
variveis.

Exemplo 3
Vamos considerar uma equao diferencial linear de segunda ordem:
y= g(x,y,y) = y(1 - y2) - y
Primeiro vamos definir duas novas funes:
u1(x) = y
u2(x) = y
Ns ento obtemos esse sistema de um conjunto de equaes diferenciais de primeira
ordem:
u1 = y = g(x, u2, u1) = u1(1 - u22) - u2
u2 = u1
O sistema contendo as equaes diferenciais de primeira ordem pode ser resolvido pelo
MATLAB atravs do comando ode. Entretanto, a funo que usada para avaliar a equao
diferencial deve calcular os valores das equaes diferenciais de primeira ordem em um vetor. A
condio inicial dever tambm ser um vetor contendo uma condio inicial para cada equao
diferencial de primeira ordem: yn-1,yn-2, ..., y,y.
Para resolver as equaes desenvolvidas no exemplo anterior, primeiro temos que definir a
funo para calcular os valores das equaes diferenciais de primeira ordem:
function u_primo = eqns2(x,u)
u_primo(1) = u(1)*(1 - u(2)^2 - u(2);
u_primo(2) = u(1);

Ento, para resolver o sistema de equaes diferenciais de primeira ordem no intervalo


[0,20] usando as condies iniciais y(0) = 0.0 e y(0) = 0.25, podemos seguir os seguintes passos:

Cap. 12 Equaes Diferenciais Ordinrias

135

Curso de MATLAB

inicial = [0 0.25];
[x,num_x] = ode23(eqns2,0,20,inicial);
subplot(211), plot(x,num_y(:,1))
title(Primeira Derivada de y);
xlabel(x);grid;
subplot(212), plot(x,num_y(:,2))
title(y);
xlabel(x);grid;

Cap. 12 Equaes Diferenciais Ordinrias

136

Curso de MATLAB

Captulo 13 - Decomposio e Fatorizao de Matrizes


Este captulo contm algumas das mais avanadas caractersticas de matrizes que so
utilizadas na resoluo de certos tipos de problemas de engenharia. O primeiro tpico, autovalores e
autovetores, aparece em inmeras aplicaes. Depois de definir autovalores e autovetores e ilustrar
suas propriedades com um exemplo simples, a funo eig apresentada para computao usando
ambas. Uma aplicao que utilizada para demostrar como autovalores e autovetores so utilizados
para analisar a performance de algoritmos de adaptadores para reduo de rudos. O resto do
captulo continua com decomposio e fatorizao que podem ser aplicados para a matriz A.
13.1 Autovalores e Autovetores
Assuma que A uma matriz quadrada n x n. Seja X um vetor de uma coluna e n linhas e
seja um escalar. Considere a seguinte equao:
AX = X

(13.1)

Ambos os lados dessa equao so iguais com uma coluna de vetores com n linhas. Se X
completada com zeros, ento esta equao verdadeira para algum valor de , mas esta uma
soluo trivial.
Os valores de para que X no seja completado com zeros so descritos pelos autovalores
da matriz A, e os valores correspondentes de X so descritos pelos autovetores da matriz A.
A equao (13.1) pode ser utilizada para determinar a seguinte equao:
( A - I ) X = 0

(13.2)

onde I uma matriz identidade de n x n elementos. Esta equao representa um conjunto de


equaes homogneas enquanto o lado direito da equao for igual a zero. Este conjunto de
equaes homogneas possui solues que no so triviais. A soluo s trivial quando o
determinante for igual a zero.
det (A - I ) = 0

(13.3)

A equao (13.3) representa uma equao que referida a equao caracterstica da matriz
A. A soluo desta equao obtida com os autovalores da matriz A.
Em muitas aplicaes, desejvel selecionar os autovetores como tal QQT = I, onde Q
uma matriz cujas colunas so os autovetores. Este conjunto de autovetores representa um conjunto
ortogonal, enquanto significa que ambos so normalizados e que eles so mutuamente ortogonais.
(Um conjunto de vetores ortonormal se o produto de vetores for igual a unidade, e o produto de
um vetor com outro for zero.)

Cap. 13 Decomposio e Fatorizao de Matrizes

137

Curso de MATLAB
Para ilustrar estas relaes entre a matriz A e estes autovalores e autovetores consideremos a
matriz A :
0.50 0.25
A=

0.25 0.50
Os autovalores podem ser obtidos usando a equao caracterstica:
0.25
det ( A - I ) = det 0.5
0.25
0.5

= 2 - + 0.1875
=0
Esta equao pode ser facilmente resolvida usando equao quadrtica e obtemos o = 0.25
e 1 = 0.75. (Se a matriz A tiver mais de 2 linhas e 2 colunas, determinar os auto- valores na mo
pode se tornar uma formidvel tarefa.) Os autovalores podem ser determinados utilizando os
autovalores da equao (13.2), usando o valor 0,25:
ou
0.25 x 1 0
0.5 - 0.25
=
0.25
0.5 - 0.25 x 2 0

0.25 0.25 x 1 0
0.25 0.25 x = 0

2
Mas este par de equaes nos d a seguinte equao:
x1 = - x2
Portanto, existem uma infinidade de autovetores que podem ser associados com o autovalor
0.25. Alguns desses autovetores so demonstrados agora:
1
1

5
- 5

0.2
- 0.2

Similarmente, pode se obter os autovetores de autovalor 0.75, que possui a seguinte relao:
x1 = x2

Cap. 13 Decomposio e Fatorizao de Matrizes

138

Curso de MATLAB
De novo obtemos uma infinidade de autovetores, como:
1.5
1.5

5
- 5

0.2
- 0.2

Para determinar um conjunto ortonormal de autovetores para um exemplo simples


precisamos lembrar de como selecionar os autovetores, como QQT = I. Portanto consideremos o
seguinte:
c
QQ T = 1
c1

c2
c 2

c2 + c2
= 1 2 22
- c1 + c 2

c1
c
2

- c1
- c 2

- c12 + c 22

c12 + c 22

1 0
=

0 1
Resolvendo o conjunto de equaes obtemos:
c12 = c 22 = 0.5
Ento c1 = c2 = 0.707 ou 0.707. Assim eles possuem vrias variaes para os mesmos
valores, que podem ser utilizados para determinar o conjunto ortonormal de autovetores. Ns
escolhemos o seguinte:
1 2 1
Q=
- 1 2 1

Os clculos para se obter os autovalores de um conjunto associado de autovetores


ortonormais podem ser relativamente simples para uma matriz 2x2. Entretanto evidente que fica
muito difcil se aumentarmos o tamanho da matriz.
A funo eig possui um argumento da matriz A. Esta funo pode ser usada para retornar
um vetor coluna que contenha apenas autovalores, como:
lambda = eig (A)

Cap. 13 Decomposio e Fatorizao de Matrizes

139

Curso de MATLAB
A funo pode tambm ser usada para executar uma tarefa dupla. Neste caso para
retornarmos duas matrizes quadradas: uma contm autovetores (X) como coluna e a outra contm
autovalores () na diagonal:
[Q,d] = eig (A)
Os valores de Q e d so como QQT = I e AQ = Qd.
Ns podemos ilustrar a funo eig com um exemplo:
A = [0.50, 0.25; 0.25, 0.50]
[Q,d] = eig (A)
Os valores de Q e d so obtidos:
1 2 1
Q=
- 1 2 1

0.25 0.00
d=

0.00 0.75
Podemos facilmente verificar que QQT = I e AQ = Qd.

Pratique!
Consideremos a matriz A:
4 3 0
3 6 2

0 2 4
Use o MATLAB para responder as questes:
1.
2.
3.
4.

Determine 1, 2, 3, os trs autovalores de A


Determine um conjunto ortonormal de autovetores, X1, X2, X3
Verifique se det(AX - I) = 0 para os autovalores obtidos
Demonstre que AQ = Qd

Cap. 13 Decomposio e Fatorizao de Matrizes

140

Curso de MATLAB

Aplicao em Soluo de Problemas: Adaptador p/ Reduo de Rudo


Este equipamento utilizado para reduzir o efeito de interferncia de rudos em um sinal.
Por exemplo, um microfone que utilizado para gravar sinais de voz de um grande auditrio. Outro
microfone usado na parte de trs do auditrio para colher principalmente os sinais de rudo.
Atravs das tcnicas para cancelamento de rudos, as caractersticas do sinal de rudo podem ser
determinadas usando o sinal de dois microfones. Os adaptadores so utilizados para reduzir o rudo
oriundo da parte de trs do auditrio, para poderem ser transmitidos para a sala de controle. Este
processo resulta num sinal limpo e uma melhor comunicao .
Os algoritmos para os adaptadores esto acima do nvel deste texto, mas a performance e a
velocidade do algoritmo dependem das caractersticas dos sinais de entrada. Estas caractersticas
determinam a superfcie multidimensional quadrtica para que obtenhamos um valor mnimo. Este
mnimo determinado ajustando o algoritmo para um ponto de partida para um nico mnimo. Se a
superfcie quadrtica tem um contorno circular o algoritmo no necessrio. A matriz R pode ser
computada a partir dos sinais de entrada, e os autovalores da matriz R iro determinar o tipo de
superfcie de contorno a ser utilizada. Se os autovalores forem iguais, a superfcie circular. Quanto
maior a variao dos autovalores, mais elptica ser a superfcie. Os autovetores representam o eixo
principal da superfcie. Portanto para determinar a velocidade e a performance do algoritmo do
adaptador com certeza do tipo de dados e para analisar a superfcie, ns precisamos determinar os
autovalores e autovetores da matriz R.
Escreva um programa para ler os valores da matriz com o nome dataR.mat, e depois calcule
os autovalores e autovetores.

1. DESCRIO DO PROBLEMA
Calcule os autovalores e autovetores de uma matriz.
2. DESCRIO DOS DADOS DE ENTRADA E SADA
A entrada o arquivo dataR.mat e a sada so os autovalores e autovetores da matriz.
3. EXEMPLO MANUAL
Assumamos que a matriz de entrada seja:
0.50 0.25
R=

0.25 0.50
Como no exemplo que tratamos anteriormente sabemos que os autovalores so 0.25 e 0.75. Os
autovetores so:

Cap. 13 Decomposio e Fatorizao de Matrizes

141

Curso de MATLAB

1 2
V1 =

1 2
1
V2 =
1

Como os autovalores no so iguais, sabemos que a superfcie quadrtica no possui um


contorno circular e que a performance do adaptador ser lenta e menos precisa.

4. SOLUO MATLAB
Neste programa usaremos um loop para imprimir os autovalores e autovetores.
load dataR;
[Q,d] = eig (R)
[m,n] = size(R)
for k = 1: m
fprintf ( Autovalor %4.0f = %7.2f \n, k, d ( k, k ) );
disp (Autovetor correspondente)
disp (Q(:,k) )
end

5. TESTANDO
A sada do programa ser:
Autovalor 1 =
0.25
Autovetor correspondente
0.7071 -0.7071
Autovalor 2 =
0.75
Autovetor correspondente
0.7071
0.7071
Este exemplo um exemplo simples ao tratar de cancelamento de sinais, pois quando se
filtra os sinais usados em comunicao com satlites, a matriz R possui milhares de linhas e
colunas.

Cap. 13 Decomposio e Fatorizao de Matrizes

142

Curso de MATLAB
13.2 DECOMPOSIO e FATORIZAO
Nesta seo iremos apresentar trs tipos de decomposio e fatorizao de matrizes que
podem ser utilizados para a soluo de problemas que contenham matrizes. Algumas dessas
tcnicas decompe a matriz em um produto de outras matrizes. O uso do produto fatorial reduz o
nmero de clculos necessrios para a computao de muitas matrizes. Muitas tcnicas numricas
que utilizam matrizes, as convertem em forma de decomposio e fatorizao.
Fatorizao Triangular
A fatorizao triangular expressa uma matriz quadrada como um produto de duas matrizes
triangulares uma matriz inferior superior e uma matriz triangular superior. Esta fatorizao
conhecida como fatorizao LU (lower-upper).
Esta fatorizao muito usada para simplificar matrizes computacionais. Este um dos
passos para se determinar o determinante de uma matriz muito grande, como tambm a matriz
inversa e para a soluo de equaes lineares simultneas.
A fatorizao pode ser realizada comeando com uma matriz quadrada e uma matriz
identidade de mesmo tamanho. Operaes de linhas e colunas so realizadas na matriz A para
reduzi-la a forma triangular superior; as mesmas operaes so realizadas na matriz identidade para
transform-la na forma triangular inferior.
Para ilustrar pegamos as matrizes A e B:
2 1
1

A = - 2 5 3
1 3 0

3 2
1

B = - 2 6 1
2
5 7

Usando a fatorizao LU obtemos:


3
- 0.5 1 0 2 5

A= 1
0 0 0 0.5 0.5
0.5 1 1 0
2
0

- 0.5 0 1 2 6 1
B = 1
0 0 0 1 8
- 1 1 0 0
0 2.5

A funo lu do MATLAB executa esta fatorizao, e especificada da seguinte forma:


[L,U] = lu ( A ) ;
O fator inferior colocado na matriz L e o superior na matriz U. O produto de L e U igual
a A. Veja o exemplo:
A = [ 1, 2, -1; -2, -5, 3; -1, 3, 0 ];
[LA,UA] = lu ( A );
B = [ 1, 3, 2; -2, -6, 1; 2, 5, 7 ];
[LB,UB] = lu ( B );
Cap. 13 Decomposio e Fatorizao de Matrizes

143

Curso de MATLAB
Como resultado obtemos:
- 0.5 1 0
LA = 1
0 0
0.5 1 1

3
2 5

UA = 0 0.5 0.5
0
2
0

- 0.5 0 1
LB = 1
0 0
- 1 1 0

2 6 1
UB = 0 1 8
0
0 2.5

facilmente verificvel que: A = (LA)(UA) e B = (LB)(UB).

Fatorizao QR
Esta tcnica de fatorizao feita a partir do produto de uma matriz ortonormal e de uma
matriz triangular superior. (Lembrando que uma matriz ortonormal quando QQT=I). No
necessrio que a matriz A seja quadrada.
A menor soluo para um sistema indeterminado AX=B a
quadrado RX=QTB.

soluo de um sistema

A funo qr do MATLAB executa esta fatorizao, e especificada da seguinte forma:


[Q,R] = qr (A)
Para uma matriz A m x n, tamanho de Q n x n, e o tamanho de R m x n.

Decomposio de valor singular


O SVD (singular value decomposition) um outro mtodo para a fatorizao de matrizes
ortogonais. Esta a decomposio mais confivel, mas isto pode requerer dez vezes mais tempo
que a fatorizao QR. A decomposio SVD decompes a matriz num produto dos fatores de outras
trs matrizes: A= USV ,onde U e V so matrizes ortogonais e S diagonal. Os valores da matriz
diagonal so chamados de valores singulares e por isso a decomposio recebe este nome. O
nmero de valores singulares diferentes de zero igual ao rank da matriz.
A funo svd do MATLAB executa esta fatorizao, e especificada da seguinte forma:
[U,S,V] = svd (A)

Cap. 13 Decomposio e Fatorizao de Matrizes

144

Curso de MATLAB
Sumrio MATLAB
eig
lu
or
svd

calcula os autovalores e autovetores de uma matriz


calcula a decomposio LU de uma matriz
calcula a decomposio ortonormal de uma matriz
calcula a decomposio SVD de uma matriz

Cap. 13 Decomposio e Fatorizao de Matrizes

145

Curso de MATLAB

Captulo 14 Processamento de Sinais


Este captulo discute algumas funes que so relacionadas a processamento de sinais.
Essas funes foram divididas em quatro categorias: anlise do domnio da freqncia e domnio do
tempo, anlise de filtros, implementao de filtros e projeto de filtros.
Embora este captulo discuta tanto a anlise do processamento de sinais analgicos e digitais
ser dada maior nfase no processamento de sinais digitais ou DSP.
14.1 Anlise no Domnio da Freqncia
Recordemos que o sinal analgico uma funo contnua (f(t)) que representa uma
informao, como por exemplo, um sinal de voz, o sinal da presso sangnea e sinais ssmicos.
Para o processamento de sinais por um computador, o sinal analgico precisa ser amostrado num
perodo de T segundos, gerando assim, um sinal digital com uma seqncia de valores derivados do
sinal analgico original. Representamos o sinal digital como um sinal contnuo com a seguinte
notao:
f k = f (kT)
O sinal digital uma seqncia de amostragens representadas por: [ f k ]
O tempo que normalmente se escolhe para comear a amostragem e o zero e assim o
primeiro intervalo de amostragem f 0. Ento se o sinal amostrado com uma freqncia de 100
Hz, os primeiros trs valores correspondentes ao sinal analgico so:
f 0 = f ( 0T ) = f ( 0.0 )
f 1 = f ( 1T ) = f ( 0.01 )
f 2 = f ( 2T ) = f ( 0.02 )
Estamos acostumados a ver os sinais digitais derivados de analgicos como uma seqncia
de pontos, mas quando ns plotamos um sinal digital os pontos so conectados por segmentos de
linha. Utilizamos o eixo Y para representar [ f k ] ou f (kT), que o sinal digital.
Os ndices do MATLAB comeam sempre com 1, como x(1), x(2) e assim por diante.
Entretanto os ndices para processamento de sinais utilizados so sempre valores negativos, como h
2, h 1, h 0 e assim por diante. importante que as equaes sejam escritas na mesma forma para
que o usurio no se confunda.
Os sinais podem ser analisados de suas formas domnio do tempo e domnio da
freqncia. O domnio do tempo representado por valores reais e o domnio da freqncia por
valores complexos, que por sua vez, podem ser representados por senides, que compem o sinal.

Cap. 14 Processamento de Sinais

146

Curso de MATLAB
A transformada discreta de Fourier (DFT) usada para converter um sinal digital no
domnio do tempo em um conjunto de pontos no domnio da freqncia. A entrada da transformada
um conjunto de N valores de tempo [ f k ] : o algoritmo calculado como um conjunto de valores
complexos [F K] que representam a informao no domnio da freqncia.
O algoritmo da transformada utiliza um nmero de clculos muito grande, por isso
utilizamos a Transformada de Fourier, que tambm converte o sinal no tempo para o domnio da
freqncia.
A funo fft do MATLAB calcula a transformada de Fourier. Esta funo pode ser usada
para uma ou duas entradas. Se entrarmos com um sinal simples no domnio do tempo obteremos
como resposta um sinal contendo nmeros complexos, que representam o domnio da freqncia.
Se o nmero de valores no domnio do tempo for igual a potncia de 2, usaremos o mtodo
da transformada de Fourier. Se no, usaremos o mtodo DFT.
Os valores no domnio da freqncia gerados pela funo fft correspondem a uma
freqncia de separao de 1/NT Hz, onde N o nmero de amostras e T o perodo da funo. Seja
N=32, T=0.001, os valores de freqncia mostrados sero 0 Hz, 1/0.032Hz e 2/0.032 Hz e assim
por diante.
Consideremos o seguinte exemplo:
N = 64;
T = 1/128;
k = 0 : N-1;
f = sin(2*pi*20*k*T);
F = fft(f);
magF = abs (F);
plot (k, magF), title (Magnitude de F(k)),...
xlabel (k), ylabel (| F ( k )|),grid

Figura 1 Magnitude de Fk

Cap. 14 Processamento de Sinais

147

Curso de MATLAB

Neste grfico podemos notar a simetria gerada pela periodicidade da FFT; e da onda
senoidal.
Podemos plotar tambm a magnitude de FK pela freqncia em hertz(Hz).
hertz = k*(1/(N*T));
plot(hertz(1:N/2),magF(1:N/2)),...
title(Magnitude de F(k)),...
xlabel (Hz), ylabel (| F ( k )|),grid

Figura 2 Magnitude de Fk em hertz

A funo ifft faz a transformada inversa de Fourier, ou seja, calcula o domnio do tempo [ f
k ] a partir de valores complexos [ FK ].
O mtodo FFT uma ferramenta poderosa quando se trabalha com sinais digitais. Nossa
discusso foi focada na magnitude de FK , mas tambm muito importante obtermos a fase de FK.
Pratique!
Gere 128 pontos para os seguintes sinais. Plote o sinal no domnio do tempo. Usando o
mtodo da transformada de Fourier gere e plote o sinal no domnio da freqncia. Use a escala de
Hz no eixo X. Assuma a taxa de amostragem de 1KHz. Verifique se os picos ocorrem onde era
esperado para o domnio da freqncia.
1.
2.
3.
4.

f k = 2 sin(250kT)
g k = cos(250kT) - sin(200kT)
h k = 5 - cos(1000kT)
m k = 4 sin(250kT - /4)

Cap. 14 Processamento de Sinais

148

Curso de MATLAB
14.2 Anlise de Filtros
A funo de transferncia de um sistema analgico descrita como H(s) e de um sistema
digital como H(z). Estas funes de transferncias descrevem o efeito do sistema a um sinal de
entrada, e tambm o efeito de filtragem do sistema.
Como a funo de transferncia de um filtro define o efeito do filtro em termos de
freqncia, podemos usar esta funo de transferncia para descrever uma faixa de freqncia. Por
exemplo, um filtro passa baixa ir deixar passar todas as freqncias abaixo da freqncia de corte
estabelecida. O passa banda ir deixar passar a banda de freqncia especificada. E o corta banda
ir remover a banda de freqncia especificada.
Podemos definir a atuao dos filtros em 3 regies bsicas: banda de passagem, banda de
transio e banda de corte. Estas regies so definidas pela freqncia de corte wc e pela freqncia
de rejeio wr.
Como uma funo de transferncia uma funo complexa, a anlise dos filtros incluem
grficos de magnitude e fase. Para isso utilizam-se as funes abs, angle e unwrap.
Adicionalmente, as funes freqs e freqz podem ser usadas para se achar os valores das funes
H(s) e H(z) como nos exemplos a seguir.
Funo de Transferncia Analgica
Um filtro analgico definido pela funo de transferncia H(s) onde s = jw. Na forma geral
a funo de transferncia H(s) a seguinte:
H(s) = B(s)
A(s)

(14.1)

= b 0 s n + b1 s n-1 + b2 s n-2 + ... + b n


a 0 s n + a1 s n-1 + a2 s n-2 + ... + a n
Esta funo de transferncia corresponde a ordem n dos filtros analgicos.
H(s) =

0.5279
s + 1.0275s + 0.5279
2

s2
s 2 + 0.1117 s + 0.0062
1.05s
H(s) = 2
s + 1.05s + 0.447
H(s) =

H(s) =

Cap. 14 Processamento de Sinais

s 2 + 2.2359
s 2 + 2.3511s + 2.2359

149

Curso de MATLAB
A funo freqs calcula os valores de uma funo complexa H(s), usando 3 argumentos de
entrada. O primeiro um vetor contendo os coeficientes do polinmio B(s) da Equao 14.1; o
segundo um vetor contendo os coeficientes do polinmio A(s); e o terceiro um vetor com o valor
da freqncia em rps. Em geral, colocamos o alcance da freqncia para comear no zero e
inclumos todos os parmetros do filtro.
Programa:
W1 = 0:0.05:5.0;
B1 = [0.5279];
A1 = [1,1.0275,0.5279];
H1s = freqs(B1,A1,W1);
W2 = 0:0.001:0.3;
B2 = [1,0,0];
A2 = [1,0.1117,0.0062];
H2s = freqs(B2,A2,W2);
W3 = 0:0.01:10;
B3 = [1.05,0];
A3 = [1,1.05,0.447];
H3s = freqs(B3,A3,W3);
W4 = 0:0.005:5;
B4 = [1,0,2.2359];
A4 = [1,2.3511,2.2359];
H4s = freqs(B4,A4,W4);
clg
subplot (221),plot(W1,abs(h1s)),title(Filtro H1(s)),...
xlabel (w,rps), y;label(Magnitude), grid
subplot (222),plot(W2,abs(h2s)),title(Filtro H2(s)),...
xlabel (w,rps), y;label(Magnitude), grid
subplot (223),plot(W3,abs(h3s)),title(Filtro H3(s)),...
xlabel (w,rps), y;label(Magnitude), grid
subplot (224),plot(W4,abs(h4s)),title(Filtro H4(s)),...
xlabel (w,rps), y;label(Magnitude), grid
A fase de um filtro pode ser obtida utilizando-se a funo able ou a unwrap. Como a fase
de um nmero complexo um ngulo em radianos, o ngulo est restrito ao intervalo 2. Esta
funo, utiliza o intervalo de - a e quando estes limites so ultrapassados gerada uma
descontinuidade.
A funo unwrap remove as descontinuidades quando introduzimos a funo angle.
Como no exemplo: unwrap(angle(H)).

Cap. 14 Processamento de Sinais

150

Curso de MATLAB
Funo de Transferncia Digital
A funo de transferncia digital definida por H(z) onde z = e
de transferncia H(z) a seguinte:

jwt

. Na forma geral a funo

H(z) = B(z)
A(z)

(14.2)

H(s) = b 0 + b1 z -1 + b2 z -2 + ... + b n z - n
a 0 + a1 z -1 + a2 z -2 + ... + a n z - n
Esta funo de transferncia corresponde a ordem n dos filtros digitais.
H1 ( z) =

0.2066 + 0.4131z -1 + 0.2066z -2


1 - 0.3695z -1 + 0.1958z -2

H 2 ( z) =

0.894 - 1.789z -1 + 0.894z -2


1 - 1.778z -1 + 0.799z -2

H 3 ( z) =

0.42 - 0.42z -2
1 - 0.443z -1 + 0.159z -2

H 4 ( z) =

0.5792 + 0.4425z -1 + 0.5792z -2


1 + 0.4425z -1 + 0.1584z -2

Se o denominador da funo de transferncia for igual a 1, o filtro um FIR(resposta finita


ao impulso) e se for diferente de 1 o filtro um IIR(resposta infinita ao impulso). Ambos so muito
utilizados no processamento de sinais digitais.
A funo freqz calcula os valores de uma funo complexa H(z), usando 3 argumentos de
entrada. O primeiro um vetor contendo os coeficientes do polinmio B(z) da Equao 14.2; o
segundo um vetor contendo os coeficientes do polinmio A(z); e o terceiro para especificar o
nmero de valores de freqncias normalizadas que se quer no intervalo de 0 a . Este nmero de
pontos define a resoluo. Atravs deste ajuste da resoluo podemos determinar os tipos de filtros
e as freqncias crticas.

Cap. 14 Processamento de Sinais

151

Curso de MATLAB

Programa:
B1 = [0.2066,0.4131,0.2066];
A1 = [1,-0.3695,0.1958];
[H1z,w1T] = freqz(B1,A1,100);

B2 = [0.894,-1.789,0.894];
A2 = [1,-1.778,0.799];
[H2z,w2T] = freqz(B2,A2,100);
B3 = [0.42,0,-0.42];
A3 = [1,-0.443,0.159];
[H3z,w3T] = freqz(B3,A3,100);
B4 = [0.5792,0.4425,0.5792];
A4 = [1,0.4425,0.1584];
[H41z,w1T] = freqz(B4,A4,100);
clg
subplot (221),plot(w1T,abs(H1z)),title(Fitro H1(z)),...
xlabel (w,rps), y;label(Magnitude), grid
subplot (222),plot(w2T,abs(H2z)),title(Fitro H2(z)),...
xlabel (w,rps), y;label(Magnitude), grid
subplot (223),plot(w3T,abs(H3z)),title(Fitro H3(z)),...
xlabel (w,rps), y;label(Magnitude), grid
subplot (224),plot(w4t,abs(H4z)),title(Fitro H4(z)),...
xlabel (w,rps), y;label(Magnitude), grid
A fase de um filtro digital pode ser plotada usando-se a funo angle ou a unwrap.

Pratique !
Para estas funes de transferncia, plote a magnitude. Use freqncia normalizada no eixo
X para filtros digitais.
1. H(s) =

s2
s 2 + 2s + 1

Cap. 14 Processamento de Sinais

152

Curso de MATLAB

2. H(s) =

0.707z - 0.707
z - 0.414

3. H(s) = - 0.163 - 0.058z -1 + 0.116z -2 + 0.2z -3 + 0.116z -4 - 0.058z -5 - 0.163z -6


4. H(s) =

5s + 1
s + 0.4s + 1
2

14.3 Implementao de Filtros Digitais


Filtros analgicos so implementados com componentes eletrnicos como resistores e
capacitores. Os filtros digitais so implementados por software. Os filtros digitais podem ser
representados por funes de transferncia ou equaes diferenciais.
A relao entre o sinal de entrada x
diferencial, que est escrita na forma geral:

N2

N3

k = - N1

k =1

yn =

e o sinal de sada y

descrita pela equao

b k xn k - a k y n k

Exemplos:
y n = 0.04x n -1 + 0.17x n -2 + 0.25x n -3 + 0.17x n -4 + 0.04x n -5
y n = 0.42x n - 0.42x n -2 + 0.44x n -1 - 0.16x n -2
y n = 0.33x n +1 + 0.33x n + 0.33x n -1
As trs equaes diferenciais representam diferentes tipos de filtros. A sada do primeiro
depende somente dos valores anteriores do sinal de entrada. O segundo filtro requer valores no
apenas de entrada mas tambm os valores anteriores da sada. O terceiro filtro depende apenas dos
valores de entrada. Porm os valores de entrada necessrios so os posteriores e isso pode ser
problemtico quando os dados so adquiridos em tempo real. Estes filtros so FIR porque os
denominadores so iguais a 1.
A funo filter do MATLAB assume a equao diferencial na seguinte forma:
N2

N3

k =0

k =1

y n = b k xn k - a k yn k
que corresponde a seguinte funo de transferncia:
Cap. 14 Processamento de Sinais

153

Curso de MATLAB

H(z) = B(z)
A(z)
H(s) = b 0 + b1 z -1 + b2 z -2 + ... + b n z - n
a 0 + a1 z -1 + a2 z -2 + ... + a n z - n
Os dois primeiros argumentos da funo filter so vetores com os coeficientes de [bk] e de
[ak]. O terceiro argumento o sinal de entrada.
Exemplo1:
B = [0.0,0.04,0.17,0.25,0.17,0.04];
A = [1];
Y = filter(B,A,x);
Exemplo2:
B = [0.42,0.0,-0.42];
A = [-0.44,0.16];;
Y = filter(B,A,x);
Ns podemos usar a funo filter para o terceiro filtro porque a equao no est ajustada
na forma geral usada pela funo. A terceira equao precisa comear em k=0 e no em k= -1.
Neste caso implementamos o filtro utilizando um vetor aritmtico. Assumindo um sinal de entrada
x constri-se um vetor x, que pode calcular o sinal de sada correspondente usando a seguinte
forma:
N = length(x);
y(1) = 0.33*x(1) + 0.33*x(2)
for n=2:N-1
y(n) = 0.33*x(n+1) + 0.33*x(n) + 0.33*x(n-1);
end
y(N) = 0.33*x(N-1) + 0.33*x(N);
Uma outra forma a seguinte:
N = length(x);
y(1) = 0.33*x(1) + 0.33*x(2);
y(2:N-1) = 0.33*x(3:N) + 0.33*x(2:N-1) + 0.33*x(1:N-2);
y(N) = 0.33*x(N-1) + 0.33*x(N);

Cap. 14 Processamento de Sinais

154

Curso de MATLAB
Pratique !
A seguinte funo de transferncia foi projetada para deixar passar freqncias entre
500Hz e 1500Hz, de um sinal de at 5KHz.
H(z) =

0.42z2 0.42 .
z2 0.443z + 0.159

Use os seguintes sinais de entrada no filtro. Plote a entrada e a sada do filtro no mesmo
grfico e determine o efeito do filtro no sinal de entrada.
1.
2.
3.
4.

x k = sin(21000kT)
x k = 2 cos(2100kT)
x k = -sin(22000kT)
x k = cos(21600kT)

14.4 Projeto de Filtros Digitais


A discusso ser separada em duas tcnicas: uma para filtros IIR e outra para filtros FIR.
Projeto de Filtros IIR usando protocolos analgicos
O MATLAB possui quatro tipos de filtros digitais baseados em projetos de filtros
analgicos. Os filtros Butterworth so usados como passa-banda e corta-banda, os filtros Chebyshev
Tipo I so usados com ripple na banda de passagem, os filtros Chebyshev Tipo II so usados com
ripple na banda de corte. Os filtros elpticos possuem uma faixa de transio mais definida que o
filtro Butterworth com as mesmas especificaes.
As funes para se projetar filtros IIR digitais que usam protocolos analgicos possuem o
seguinte formato:
[B,A] = butter (N,Wn);
[B,A] = cheby1butter (N,Rp,Wn);
[B,A] = cheby2utter (N,Rs,Wn);
[B,A] = ellip (N,Rp,Rs,Wn);
O argumento de entrada representa a ordem do filtro (N), o ripple (Rs e Rp), e a freqncia
de corte normalizada (Wn). Os vetores de sada B e A so os vetores da expresso geral para filtros
IIR e podem ser utilizados para se achar a funo de transferncia ou a equao diferencial.
Para se projetar filtros passa-banda os argumentos das funes so os mesmos do passa-baixa.
Entretanto o vetor Wn precisa conter 2 elementos que representam as freqncias normalizadas
especificadas da banda de freqncia, como Wn(1) e Wn(2).

Cap. 14 Processamento de Sinais

155

Curso de MATLAB
Para se projetor filtros passa-alta, um parmetro adicional com o nome high precisa ser adicionado
e ficam assim as novas formas:
[B,A] = butter (N,Wn,high);
[B,A] = cheby1butter (N,Rp,Wn,high);
[B,A] = cheby2utter (N,Rs,Wn,high);
[B,A] = ellip (N,Rp,Rs,Wn,high);
Para se projetar filtros corta-banda, os argumentos so os mesmos dos filtros passa-alta, mas com o
termo stop ao invs de high. O argumento Wn precisa ser um vetor que contenha 2 valores
definem a banda de freqncia como Wn(1) e Wn(2) para serem rejeitadas.
Para ilustrar estas funes supomos que precisemos projetar um filtro passa-alta Chebyshev Tipo II
de ordem 6. Ns queremos como limite de passabanda um ripple de 0,1 ou 20db. O filtro para ser
usado para um sinal de at 1KHz. A freqncia de corte de 300HZ e a freqncia normalizada
de 300/500 ou 0.6. Os comandos para o projeto deste filtro e para plotar a magnitude caracterstica
so os seguintes:

[B,A] = cheby2 (6,20,0.6,high);


[H,wT] = freqz (B,A,100);
T = 0.001;
hertz = wT/(2*pi*T);
plot (hertz, abs(H)), title(Filtro Passaalta),...
xlabel (Hz), ylabel (Magnitude),grid
Para aplicar neste filtro um sinal x basta usar a seguinte instruo:
Y = filter (B,A,x);
Projeto de um Filtro IIR
O MATLAB possui uma funo para projetar filtros com o mtodo Yule-Walker. Esta
tcnica de projeto pode ser usada para projetar formas arbitrrias, possibilitando projetar respostas
freqenciais multibandas.
O comando para projetar um filtro com esta funo o seguinte:
[B,A] = yulewalk(n,f,m);
Os vetores de sada B e A contm os coeficientes de n ordem do filtro IIR. Os vetores f e m
especificam as caractersticas freqncia-magnitude do filtro. As freqncias em f precisam
comear em 0, terminando em 1 e serem crescentes. A magnitude m precisa corresponder com a
freqncia f, e representa a magnitude esperada para a freqncia correspondente. O exemplo a
seguir nos mostra um projeto de um filtro com dois passabandas e que plota a magnitude de
resposta na freqncia normalizada.
Cap. 14 Processamento de Sinais

156

Curso de MATLAB

m = [0 0 1 1 0 0 1 1 0 0 ];
f = [0 .1 .2 .3 .4 .5 .6 .7 .8 1];
[B,A] = yulewalk (12,f,m);
[H,wT] = freqz(B,A,100);
plot (f,m,wT/pi,abs (H)),...
title(Filtro IIR com dois passabandas),...
xlabel (Freqncia Normalizada),...
ylabel (Magnitude), grid
Projeto Direto de um Filtro FIR
Os filtros FIR so projetados pelo MATLAB usando o mtodo de Parks-McClellan que usa
o algoritmo de troca de Remez. Lembrando que os filtros FIR necessitam apenas do vetor B, pois o
denominador igual a 1. Portanto a funo Remez calcula apenas um nico vetor, como mostrado a
seguir:
B = remez (n,f,m);
O primeiro argumento define a ordem do filtro, e os valores de f e m so similares ao da
tcnica do filtro de Yule-Walker.
O exemplo a seguir nos mostra um projeto de um filtro com dois passabandas e que plota a
magnitude de resposta na freqncia normalizada.
m = [0 0 1 1 0 0 1 1 0 0 ];
f = [0 .1 .2 .3 .4 .5 .6 .7 .8 1];
B = remez (50,f,m);
[H,wT] = freqz(B,[1],100);
plot (f,m,wT/pi,abs (H)),...
title(Filtro FIR com dois passabandas),...
xlabel (Freqncia Normalizada),...
ylabel (Magnitude), grid
Pratique!
Use as funes do MATLAB descritas nesta seo para projetar os seguintes filtros. Plote a
magnitude do filtro projetado para confirmar se as caractersticas esto corretas.
1. Filtro IIR passabaixa com corte de 75Hz, onde usa-se uma freqncia de at 500Hz.(Use um
filtro de ordem 5)
2. Filtro IIR passaalta com corte de 100Hz, onde usa-se uma freqncia de at 1KHz.(Use um
filtro de ordem 6)
3. Filtro FIR passabaixa com corte de 75Hz, onde usa-se uma freqncia de at 500Hz.(Use um
filtro de ordem 40)
Cap. 14 Processamento de Sinais

157

Curso de MATLAB
4. Filtro FIR passabanda com faixa de freqncia entre 100Hz e 200Hz, onde usa-se uma
freqncia de at 1KHz.(Use um filtro de ordem 80)

Aplicao na Soluo de Problemas: Filtros para Separao de Canais


Imagens coletadas de uma nave espacial ou de satlites que circundam a terra so enviadas
para a terra como um fluxo de dados. Estes fluxos de dados so convertidos em sinais digitais que
contm informaes que podem ser recombinadas e assim reconstruir as imagens originais.
Informaes coletadas por outros sensores tambm so transmitidas para a terra. A freqncia do
sinal de informao do sensor depende dos tipos de dados que esto sendo medidos.
Tcnicas de modulao podem ser usadas para mover o contedo da freqncia para a
banda de freqncia especificada. Desta forma o sinal pode conter sinais mltiplos ao mesmo
tempo. Por exemplo, supomos que queremos enviar 3 sinais em paralelo. O primeiro sinal contm
componentes entre 0 e 100Hz, o segundo sinal contm componentes entre 500 e 1KHz, e o terceiro
contm componentes entre 2KHz e 5KHz.
O sinal contendo estas trs componentes de at 10KHz. Para separar estas trs
componentes precisamos de um filtro passabaixa com corte de 100HZ, um passabanda com faixa de
500Hz a 1KHz, e um passa alta com corte de 2KHz. A ordem dos filtros precisa ser suficientemente
grande para gerar um pequena banda de transio para que a componente de uma freqncia no
contamine as outras componentes.
1. DESCRIO DO PROBLEMA
Projete trs filtros para serem usados com um sinal de at 10KHz. Um filtro um passabaixa
com corte de 100HZ, um passabanda com faixa de 500Hz a 1KHz, e um passa alta com corte
de 2KHz.

2. DESCRIO DOS DADOS DE ENTRADA E SADA


No h valores de entrada para este problema. Os valores de sada so coeficientes dos vetores
que definem os trs filtros H1(z), H2(z) e H3(z), como na figura a seguir:

Figura 4 Diagrama de I/O

Cap. 14 Processamento de Sinais

158

Curso de MATLAB
3. EXEMPLO MANUAL
O espectro abaixo nos mostra a amostra de freqncia com os trs sinais filtrados, Ns
usaremos os filtros Butterworth. Precisaremos experimentar vrias ordens para sabermos se as
bandas de transio no iro interferir uma nas outras.

Figura 4 Espectro de faixa dos filtros

4. SOLUO MATLAB
O seguinte programa MATLAB determina os valores da freqncia normalizada para as
freqncias de corte pela funo butter. Depois de calculados os coeficientes para os filtros, ns
usamos a funo freqz para plotar as caractersticas dos filtros. Lembrando que a funo freqz
normaliza as freqncias para valores entre 0 e . Ns usamos Hz como unidade no eixo X, para
facilitar a visualizao das caractersticas dos filtros projetados.
5. TESTANDO
As magnitudes dos trs filtros so mostradas no mesmo grfico para podermos verificar se os
filtros no se sobrepem.
Sumrio MATLAB
butter
cheby1
cheby2
ellip
fft
filter
freqs
freqz
grpdelay
ifft
remez
unwrap
yulewalk

projeta um filtro digital Butterworth


projeta um filtro digital Chebyshev Tipo 1
projeta um filtro digital Chebyshev Tipo 2
projeta um filtro digital elptico
calcula a freqncia de um sinal
aplica um filtro digital em um sinal de entrada
calcula a freqncia analgica
calcula a freqncia digital
mede o grupo de retardo de um filtro digital
calcula a inversa da transformada de Fourier
projeta um filtro digital FIR
remove a descontinuidade 2 da fase angular
projeta um filtro digital IIR

Cap. 14 Processamento de Sinais

159

Curso de MATLAB

PROBLEMAS:
1. Ns usaremos a soma de senides de at 10KHz. O primeiro sinal contm uma soma de
senides com freqncias de 24Hz, 40 Hz e 75Hz. O segundo sinal contm uma soma de
senides com freqncias de 500Hz, 730 Hz e 850Hz. O terceiro sinal contm uma soma
de senides com freqncias de 3500Hz, 4000 Hz e 4200Hz. Escolha as amplitudes e
fases para estas senides. Plote 500 pontos para o sinal 1, 2 e 3 em diferentes grficos.
2. Calcule e plote a magnitude e a fase dos trs sinais do exerccio anterior. Use Hz como
unidade no eixo x .
3. Adicione trs tempos no sinal gerado no exerccio 1. Plote o sinal e sua magnitude usando
o Hz como unidade no eixo x.
4. Aplique um filtro passabaixa, um passabanda e um passaalta no sinal do problema 3 e plote
a magnitude da freqncia dos sinais de sada.
5. Para os seguintes filtros determine a banda de passagem, banda de transio e banda de
corte. Use 0.7 para determinar as freqncias de corte e use 0.1 para determinar as
freqncias de rejeio.
H(s) =

0.5279
s + 1.0275s + 0.5279

H(s) =

s2
s 2 + 0.1117 s + 0.0062

H1 ( z) =

0.2066 + 0.4131z -1 + 0.2066z -2


1 - 0.3695z -1 + 0.1958z -2

0.894 - 1.789z -1 + 0.894z -2


H 2 ( z) =
1 - 1.778z -1 + 0.799z -2
6. Projete um filtro para remover freqncias entre 500Hz e 1000Hz de um sinal de at
10KHz. Compare os resultados dos filtros elptico e do filtro Yule-Walker, ambos de
ordem 12. Plote a magnitude dos dois sinais.
7. Projete um filtro para remover freqncias entre 100Hz e 150Hz, e outro entre 500Hz e
600Hz de um sinal de at 2.5KHz. Compare os resultados usando FIR e IIR. Plote a
magnitude dos dois sinais

Cap. 14 Processamento de Sinais

160

Curso de MATLAB

Captulo 15 - Matemtica Simblica


Introduo
Agora possvel instruir ao MATLAB que manipule expresses matemticas,
sem de fato usar nmeros, que lhe permitam calcular com smbolos matemticos, alm
de nmeros. Esse processo freqentemente chamado de matemtica simblica. Aqui
esto alguns exemplos de expresses simblicas:
cos(x2)

3x2 + 5x - 1

v= d x2

f=

x2 dx

A toolbox de Matemtica Simblica uma coleo de funes para o MATLAB


usadas para manipular e resolver expresses simblicas. H diversas ferramentas para
combinar, simplificar, derivar, integrar e resolver equaes diferenciais e algbricas.
Outras ferramentas so utilizadas em lgebra linear para derivar resultados exatos para
inversas, determinantes e formas cannicas e para encontrar os autovalores de matrizes
simblicas, sem o erro introduzido pelo clculo numrico.
A aritmtica de preciso varivel que calcula simbolicamente e retorna um
resultado para qualquer grau de preciso especificado, tambm est disponvel no
MATLAB.
As ferramentas contidas na toolbox de matemtica simblica foram criadas por
meio de um poderoso programa de software chamado Maple, originalmente
desenvolvido na Universidade de Waterloo, no Canad. Quando voc pedir ao
MATLAB para executar alguma operao simblica, ele solicitar ao Maple para faz-lo
e ento retornar o resultado para a janela de comando do MATLAB. Por isso, fazer
manipulaes simblicas no MATLAB uma extenso natural do modo como voc usa
o MATLAB para processar nmeros.

15.1 Expresses Simblicas


Expresses simblicas so strings de caracteres ou conjuntos de strings de
caracteres que representam nmeros, funes, operadores e variveis. as variveis no
tm de ter valores previamente definidos. Equaes simblicas so expresses
simblicas que contm um sinal de igualdade. A aritmtica simblicas a prtica de
resoluo dessas equaes por meio da aplicao de regras conhecidas e de identidades a
determinados smbolos, exatamente da forma que voc aprendeu a resolv-las em
lgebra e clculo. Matrizes simblicas so conjuntos cujos elementos so expresses
simblicas.

Cap. 15 Matemtica Simblica

161

Curso de MATLAB

Representaes de Expresses Simblicas no MATLAB


O MATLAB representa expresses simblicas internamente como strings de
caracteres para diferenci-las de variveis numricas e operadores. Aqui esto alguns
exemplos de expresses simblicas com seus equivalentes em MATLAB:
Expresses simblicas
1_
2x n
cos(x 2) - sen (2x)

Representao no MATLAB
1 (2 * x ^ n)
cos(x ^ 2) - sin(2 * x)
sym ( [a , b ; c , d ] )

E x e r c c i o s:
1. diff(cos(x))
2. M = sym ([a,b;c,d])
3. determ(M)
Observe que, no primeiro exerccio acima, a expresso simblica foi definida
implicitamente pelo uso de aspas simples para dizer ao MATLAB que (cos(x)) seja
uma expresso simblica, em vez de uma expresso numrica, ao passo que, no segundo
exemplo, a funo sym foi usada para, explicitamente, dizer ao MATLAB que M = sym
([a,b;c,d]) uma expresso simblica. Geralmente a funo explcita sym no
necessria onde o MATLAB puder determinar, por si s o tipo de argumento.
Em MATLAB, a forma func arg equivalente a func(arg), onde func uma
funo e arg um argumento na forma de string de caracteres. Por exemplo, o
MATLAB consegue descobrir que diff cos(x) e diff (cos(x)) significam a mesma coisa,
ou seja, diff(sym(cos(x))), mas a primeira forma certamente mais fcil de ser digitada.
Contudo, a funo sym necessria. Isto fica claro no exemplo seguinte:
Exemplo
M=[a,b;c,d] M uma matriz numrica usando valores de a at d
M=[a,b;c,d] M uma string de caracteres
M=sym([a,b;c,d]) M uma matriz simblica
Aqui M foi definido de trs maneiras: numericamente (se a, b, c e d tiverem sido
predefinidos), como uma string de caracteres e como uma matriz simblica.
Cap. 15 Matemtica Simblica

162

Curso de MATLAB

Muitas funes simblicas so suficientemente avanadas para converter strings


de caracteres em expresses simblicas de forma automtica. Mas, em alguns casos, em
especial na criao de um conjunto simblico, a funo sym deve ser usada para
converter um string de caracteres especificamente em uma expresso simblica. A
forma implcita, ou seja, diff cos(x), mais til para tarefas simples que no referenciam
resultados anteriores. Contudo, a forma mais simples (sem aspas) requer um argumento
que um string de caracteres simples sem espaos em seu interior:
Exemplo
diff x^2+3*x+5
diff x^2 + 3*x + 5
Na segunda equao os espaos pressupes strings de caracteres distintos.
As expresses simblicas sem variveis so chamadas de constantes simblicas.
Quando as constantes simblicas so visualizadas, freqentemente torna-se difcil
distingui-las de nmeros inteiros.
Exemplo
f=symop((3*4-2)/5+1)
isstr(f)
A funo isstr nada mas faz do que retornar se f uma string de caracteres (1 =
sim e 0 = no). Nesse caso, f representa a constante simblica 3 no o nmero 3. O
MATLAB armazena strings de caracteres como representao ASCII de caracteres.
Consequentemente, se voc realizar uma operao numrica em um string de caracteres,
o MATLAB usa o valor ASCII de cada caractere na operao.
Exemplo
f +1

15.2 Variveis Simblicas


Quando se trabalha com expresses simblicas contendo mais de uma varivel,
uma varivel a a varivel independente, ele seleciona uma baseado na regra seguinte:
A varivel independente padro em uma expresso simblica uma letra
minscula nica, que no seja i ou j, que no faa parte de uma palavra. Se no h tal
caractere, escolhido x. Se o caractere no for nico, aquele mais prximo de x,
alfabeticamente falando, escolhido. Se houver empate, o caractere posterior no
alfabeto ser escolhido.
A varivel independente padro, algumas vezes conhecida como varivel livre, na
expresso 1 / (5+cos(x)) x; a varivel livre na expresso 3*y+z y; e a varivel
livre na expresso a+sin(t) t. A varivel simblica livre na expresso sin(pi/4) Cap. 15 Matemtica Simblica

163

Curso de MATLAB

cos(3/5) x porque esta expresso uma constante simblica, no contendo variveis


simblicas.
Voc pode pedir ao MATLAB para lhe dizer qual a varivel em uma expresso
simblica considerada por ele como a varivel independente usando a funo symvar.
Exemplo
symvar(a*x+y)
encontra a varivel simblica padro
symvar (a*t+s/(u+3)) u mais prxima de x
symvar(sin(omega)) omega no um caracter nico
symvar(3*i+4*j)
i e j so iguais a sqrt(-1)
symvar(y+3*s,t)
encontra a varivel mais prxima de t
Se symvar no encontrar uma varivel padro, usando esta regra, considerar que
ela no existe e retornar x. Isto ser verdadeiro para expresses que contenham
variveis com mltiplos caracteres, bem como constantes simblicas, as quais no
contm variveis.
Muitos comandos do a voc a opo de especificar a varivel independente, se
desejado:
Exemplo
diff(x^n)
diff(x^n,n)
diff(sin(omega))
diff(sin(omega),omega)

deriva em relao varivel padro x;


deriva em relao a n;
deriva usando a varivel padro;
especifica a varivel independente;

Exerccios
Dada cada expresso simblica, use a sintaxe do MATLAB para criar a
expresso simblica equivalente do MATLAB.
a . f = ax2 + bx + c
b. p = 3s2 + 2s + 1
4s - 2
c. r = e -2t
d. d 3x 2 + 2 x + 5
dx

Cap. 15 Matemtica Simblica

164

Curso de MATLAB

2. Encontre a varivel independente padro que retornada por symvar nas expresses
seguintes:
a . z = 3ac +4b -2
b. x = 4a + 3c + b2 + 1
c. q = r + 3k 2 + 2 p
d. f = s 3nt
e. n = 3r + 2s2 + 5

15.3 Operaes em Expresses Simblicas


Depois de criar uma expresso simblica, voc provavelmente vai querer mud-la
de alguma forma. Voc pode querer extrair parte de uma expresso, combinar duas
expresses ou achar o valor numrico de uma expresso simblica. H muitas
ferramentas simblicas que lhe permitiro realizar essas tarefas.
Quase todas as funes simblicas agem sobre expresses simblicas e conjuntos
simblicos e retornam expresses simblicas ou conjuntos. O resultado pode s vezes se
parecer com um nmero, mas uma expresso simblica representada internamente
como um string de caracteres. Conforme foi dito antes, possvel descobrir se o
resultado que parece ser um nmero um inteiro ou um string de caracteres utilizando a
funo isstr do MATLAB.

Extrao de Numeradores e Denominadores


Se sua expresso for um polinmio racional (uma razo de dois polinmios) ou
puder ser expandida em um polinmio racional (incluindo aqueles com um denominador
igual a 1), voc pode extrair o numerador e o denominador usando numden. Dadas as
expresses:
m = x2
f = ax2
b-x
g = 3 x2 + 2 x - 3
2
3
5
h = x2 + 3 + 3x
2x - 1
x-1

Cap. 15 Matemtica Simblica

165

Curso de MATLAB

k=

2x 1

3x 4

x2

numden combina e racionaliza a expresso, se necessrio, e retorna o numerador


e o denominador resultantes. As linhas de comando do MATLAB para se fazer isso so:
m = x^2
[n,d]= numden(m)
f = a*x^2 / (b - x)
[n,d]=numden(f)
g = 3/2*x^2+2/3*x-3/5
[n,d] = numden(g)
h = (x^2+3)/(2*x-1)+3*x/(x-1)
[n,d] = numden(h)
k = sym ([3/2,(2*x+1)/3;4/x^2,3*x+4])
[n,d] = numden(k)
Essa expresso , k, um conjunto simblico, numden retornou dois novos
conjuntos, n e d, onde n um conjunto de numeradores e d o conjunto de
denominadores. Se voc usar a forma s = numden(f), numden retorna apenas o
numerador dentro da varivel s.

15.4 Operaes Algbricas Padro


Diversas operaes algbricas podem ser executadas em expresses simblicas.
As funes symadd, symsub e symdiv somam, subtraem, multiplicam e dividem,
respectivamente, duas expresses, e sympow eleva uma expresso potncia da outra.
Exemplo
f = 2x2 + 3x - 5
g = x2 - x + 7

Cap. 15 Matemtica Simblica

166

Curso de MATLAB

No MATLAB:
f = 2*x^2+3*x-5
g = x^2-x+7
symadd(f,g)
symsub(f,g)
symmul(f,g)
symdiv(f,g)
sympow(f, 3*x)

%Encontra a expresso para f 3

Uma outra funo de aplicao geral permite que voc crie novas expresses a
partir de outras variveis simblicas, expresses e operadores. Symop recebe at 16
argumentos separados por vrgula, cada um dos quais pode ser uma expresso simblica,
um valor numrico ou um operador (+,-,*,/,^,(,ou)). Symop ento concatena os
argumentos e retorna expresso resultante.
Exemplo
f = cos(x)
g = sin(2*x)
symop(f, / , g , + , 3)
Todas estas operaes tambm trabalham com conjuntos de argumentos da
mesma forma.

Operaes Avanadas
O MATLAB tem a capacidade de realizar operaes mais avanadas em
expresses simblicas. A funo compose combina f(x) e g(x) em f(g(x)), a funo
finverse encontra o inverso funcional da expresso, e a funo symsum encontra o
somatrio simblico de uma expresso.
Dada as expresses:
1. f =

1
1 + x2

2. g=sen(x)
3. h =

1
1 + u2

4. k = sen(v)

Cap. 15 Matemtica Simblica

167

Curso de MATLAB

No MATLAB
f = 1/(1+x^2);
g = sin(x);
h = 1/(1+u^2);
k= sin(v);
compose(f,g)
compose(g,f)
Compose pode tambm ser usada em funes que tem variveis independentes
diferentes:
compose ( h, k, u, v)
O inverso funcional de uma expresso, digamos f(x), a expresso g(x) que
satisfaz a condio g(f(x)) = x. Por exemplo, o inverso funcional de ex ln(x), j que
ln(ex) = x.
A funo finverse retorna o inverso funcional de uma expresso e avisa a voc se
o resultado no for nico.
Exemplos
finverse (x^2)
finverse (a*x+b)
finverse (a*b+c*d-a*z,a)
A funo symsum encontra o somatrio simblico de uma expresso. H quatro
formas para a funo:
MATLAB
symsum(f)

Retorna
x 1

f ( x)
0

symsum(f, a, b)

f ( x)

symsum(f, s )

s 1

f (s )
a

symsum(f, s, a , b )

f (s )
a

Cap. 15 Matemtica Simblica

168

Curso de MATLAB

Exemplos
x 1

1.

2.

(2n 1)

3.

(2n 1)

15.5 Funes de Converso


Essa seo apresenta ferramentas para converso de expresses simblicas em
valores numricos e vice-versa.
A funo sym pode receber um argumento numrico e convert-lo em uma
representao simblica. A funo numeric faz o contrrio, converte uma constante
simblica em um valor numrico.
Exemplo
phi= (1+sqrt(5))/2
numeric (phi)
A funo eval faz com que o MATLAB calcule um string de caracteres. Dessa
forma, eval outra funo que pode ser usada para converter constante simblica em um
nmero, ou para calcular uma expresso.
Exemplo
eval(phi)
Voc j trabalhou com polinmios em MATLAB, usando vetores cujos
elementos so os coeficientes dos polinmios. A funo simblica sym2poly converte
um polinmio simblico em seu vetor de coeficientes equivalente no MATLAB. A
funo poy2sym faz o inverso e possibilita que voc especifique a varivel a ser usada na
expresso resultante.
Exemplo
f= 2*x^2+x^3-3*x+5
n=sym2poly(f)
poly2sym(n)
poly2sym(n, s)

Cap. 15 Matemtica Simblica

169

Curso de MATLAB

Substituio de Variveis
Quando se tem uma expresso simblica em x, e que queira mudar a varivel para
y, usa-se a funo subs.
Exemplo
f= a*x^2+b*x+c
subs(f, s, x)
h= subs(f, 2, x)

15.6 Derivao e Integrao


Derivao
A derivao de uma expresso simblica usa a funo diff em uma dentre as
quatro formas:
Expresso
f= a*x^3+x^2-b*x-c
diff(f)
diff(f, a)
diff(f, 2)
diff(f, a,2)

Resultado
Define uma expresso simblica
Deriva em relao ao padro (x)
Deriva f em relao a (a)
Deriva f duas vezes em relao a (x)
Deriva a funo f duas vezes em relao a (a)

A funo diff tambm opera sobre conjuntos. Se f for um vetor simblico ou


matriz, diff(f) deriva cada elemento do conjunto:
Exemplo
f= sym([a*x, b*x^2, c*x^3, d*s])
diff(f)

Integrao
A funo de integrao int(f), onde f uma expresso simblica, tenta encontrar
outra expresso simblica F tal que diff(F)=f.

Cap. 15 Matemtica Simblica

170

Curso de MATLAB

Expresso
f= sin(s+2*x)
int(f)
int(f, s)
int(f, pi/2, pi )
int(f, s, pi/2, pi)
int(f, m,n)

Resultado
Cria uma funo simblica
Integra em relao a x
Integra em relao a s
Integra em relao a x de pi/2 a pi
Integra em relao a s de pi/2 a pi
Integra em relao a x de m para n

Exerccio:
Hlio est em uma excurso com sua turma de escola, no alto do edifcio Central.
Ele pega um tomate maduro em sua mochila, debrua-se sobre a beirada do terrao e
atira-o no ar. O tomate jogado para cima, a uma velocidade inicial vo = 20m/s. O
terrao encontra-se a yo = 30 metros acima do nvel do solo. Onde estar o tomate a um
intervalo arbitrrio de t segundos mais tarde? Quando ele alcanar a altura mxima?
Que altura acima do solo o tomate conseguir alcanar? Quando o tomate atingir o
solo? Considere que no h resistncia do ar e que g = 10 m/s.

ymax
y = 30

tmax
t=0

y=0

t_plof

15.7 Transformadas
As transformadas so usadas com muita freqncia em Engenharia para mudar o
campo de referncia entre o domnio do tempo e o domnio s, domnio da freqncia ou
domnio Z. H muitas tcnicas para analisar estados de equilbrio e sistemas que sofrem
mudanas muito suaves no domnio do tempo, mas os sistemas complexos quase sempre
podem ser analisados mais facilmente em outros domnios.

Cap. 15 Matemtica Simblica

171

Curso de MATLAB

Funes Degrau e Impulso


Os problemas de Engenharia freqentemente fazem uso da funo Degrau u(t) e
impulso (t) na descrio de sistemas. A funo Degrau Ku(t - a), onde K uma
constante, definida como Ku(t - a) = 0 para t < a e Ku(t - a) = K para t >a . Eis um
grfico da funo Degrau Ku(t - a):

A funo impulso (t) a derivada da funo Degrau u(t). A funo Degrau K


(t-a) definida como K (t-a) = 0 para t < a e

K (t a)dt = K

para t =

Quando representada em grfico ela comumente representada como uma seta


de amplitude K em t = a . Eis o grfico de K (t-a):

Exemplo
u = k*Heaviside(t-a)
d = diff(u)
int(d)

Cap. 15 Matemtica Simblica

172

Curso de MATLAB

Transformada de Laplace

A Transformada de Laplace realiza a operao F(s)=

f ( )e

st

dt .

Para

transformar f(t), no domnio do tempo, em F(s), no domnio de s.


A Transformada de Laplace da funo cosseno amortecido e-at cos(wt)
encontrada usando-se a funo Laplace:
f=sym(exp(-a*t)*cos(w*t))
F= laplace(f)
pretty(F)
laplace(Dirac(t))
laplace(Heaviside(t))
As expresses podem ser transformadas novamente para o domnio do tempo,
usando-se o inverso da transformada de Laplace, invlaplace, que realiza a operao f(t).
Usando F do exemplo acima temos:
invlaplace(F)

Transformada de Fourier
A Transformada de Fourier e sua inversa so muito usadas em anlise de
circuitos para determinar as caractersticas de um sistema em ambos os domnios de
tempo e de freqncia. O MATLAB usa as funes fourier e invfourier para transformar
expresses entre domnios. A Transformada de Fourier e sua inversa so definidas
como:

F(w)=

f (t )e

jwt

dt

f(t) = 1

F ( w)e

jwt

dw

O MATLAB usa um w para representar em expresses simblicas.


Exemplo
f= t*exp(-t^2)
F= fourier(f)
invfourier(F)

Cap. 15 Matemtica Simblica

173

Curso de MATLAB

Transformada Z
As transformadas de Laplace e Fourier so usadas para analisar sistemas de
tempo contnuos. Transformadas Z, por outro lado, so usadas para analisar sistemas de
tempo discreto. A Transformada Z definida como:

F(z)= f (v) z n
n= 0

onde z um nmero complexo.


A Transformada z e a Transformada z inversa so obtidas usando-se as funes
ztrans e invztrans. O formato similar ao das funes de transformadas de Laplace e
Fourier.
Exemplo
f= 2 ^ n / 7- (-5) ^ n / 7
G= ztrans(f)
pretty(G)
invtrans(G)

Cap. 15 Matemtica Simblica

174