Introdução à Solução de Problemas de Engenharia Introdução à Solução de Problemas de Engenharia Introdução à Solução de Problemas de Engenharia

Faculdade de
Engenharia
Laboratório de
Engenharia Elétrica
Programa Prodenge / Sub-Programa Reenge
Universidade do Estado do Rio de Janeiro
Curso de
MATLAB 5.1
Curso de
MATLAB 5.1
2
a
EDIÇÃO
Revista e Ampliada
2
a
EDIÇÃO
Revista e Ampliada
Curso de MATLAB
I
AGRADECIMENTOS
Estas notas sobre o uso da versão 5.1 do MATLAB são o resultado do trabalho
persistente dos alunos da Faculdade de Engenharia da UERJ, bolsistas de iniciação
Tecnológica do Projeto REENGE - Joana Figueiredo Konte, Jorge Luís Pinheiro
Teixeira, Pat Evie Alves - e da estagiária Luciana Faletti que se encarregaram de dar
corpo à segunda edição de um curso de Introdução à Solução 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 confecção desta
apostila. A este grupo entusiasmado de jovens, aderiram outros estagiários do
Laboratório de Engenharia Elétrica, como Hélio Justino Mattos Filho. A todos eles os
cumprimentos pelo êxito e pela forma como se envolveram de corpo e alma na execução
das tarefas. O sucesso obtido na implementação de ambos os cursos não é sem dúvida
fruto de uma obra isolada. Dela participaram, com entusiasmo a equipe tecnico-
administrativa do Laboratório de Engenharia Elétrica, cujos membros contribuíram com
a dedicação que lhes é peculiar, através do suporte e infra-estrutura e o envolvimento
direto com os alunos e com a coordenação do projeto. Um muito obrigado à equipe
formada pelos funcionários Alberto Avelar Santiago, André Vallim Stachlewski, José
Emílio Gomes, Jair Medeiros Júnior, João Elias Souza da Costa, Luiz Roberto Franco
Fagundes Filho, Marcos Augusto Mafra, Antônio Marcos Medeiros Corrêa, Sueli
Ferreira dos Santos e pela Srta. Carla Aparecida Caldas de Almeida, do curso de Pós-
Graduação ‘latu-senso’ em Engenharia Mecatrônica da UERJ. Uma palavra de
reconhecimento especial ao diretor Dr. Nival Nunes de Almeida, coordenador geral do
REENGE, pelo apoio e pelo incentivo dado à viabilização de inúmeras atividades no
âmbito da faculdade como um todo e do LEE em particular. À Profa. Maria Eugênia
Mosconi de Golveia, vice-diretora da faculdade de Engenharia uma palavra de gratidão
pelo empenho em viabilizar juntamente com o diretor as solicitações de estágio interno
no LEE. Ao grupo de colaboradores silenciosos da administração pelo apoio nas
atividades no âmbito de suas competências, o obrigado sincero da Orientação 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 Elétrica
Curso de MATLAB
II
Índice
1 INTRODUÇÃO À SOLUÇÃO DE PROBLEMAS 1
2 MATRIZES, VETORES E ESCALARES 4
2.1 Definindo matrizes no MATLAB 5
Método Simples 6
Arquivos MAT e ASCII 6
Operador dois pontos 8
Comando Input 8
Imprimindo matrizes 11
Comando format 11
Comando disp 12
Comando fprintf 12
2.2 Gráficos X-Y 13
Aplicação à Solução de Problemas: Análise de um túnel de vento 15
3 CÁLCULOS FUNDAMENTAIS E MATRIZES ESPECIAIS 16
3.1 Valores Especiais e Matrizes Especiais 16
Magic Square 17
Matriz de Zeros 17
Matriz de um’s 17
Matriz identidade 17
Triângulo de Pascal 17
3.2 Operações entre escalares 18
Hierarquia em operações aritméticas 19
Limites Computacionais 21
3.3 Operações de Conjuntos 21
Aplicação à solução de problemas: Ecos em sinais de comunicação 25
3.4 Funções Elementares 29
Funções matemáticas elementares 30
Funções trigonométricas 31
Funções hiperbólicas 32
Funções de Arquivos M 32
Aplicação à solução de problemas: sinais de sonar 34
3.5 Números Complexos 36
Operações aritméticas com complexos 37
Coordenadas polares e retangulares 37
Curso de MATLAB
III
4 CONTROLE DE FLUXO 40
4.1 Operadores lógicos e relacionais 40
4.2 Tomada de decisões 42
Estrutura if-then-else 42
4.3 Loop FOR 45
Comando break 47
Aplicação à solução de problemas: fibras óticas 47
4.4 Loop WHILE 49
Aplicação à solução de problemas: equilíbrio de temperatura 50
5 MEDIDAS ESTATÍSTICAS 54
5.1 Funções para análise de dados 56
Desvio médio, variância e desvio padrão 56
Comando sort 60
Histograma 61
Aplicação à solução de problemas: análise do sinal de voz 64
5.2 Números Aleatórios 66
Função número aleatório 66
Função Densidade de Probabilidade 66
Modelo uniforme 68
Modelo normal 68
Histograma: comando hist 71
Aplicação à Solução de Problemas: simulador de vôo 73
5.3 Relação Sinal/Ruído 75
Energia de um sinal 75
Cálculo de SNR 76
Adicionando um ruído a um sinal existente 77
6 OPERAÇÕES COM MATRIZES 79
6.1 Operações com matrizes 79
Matriz transposta 79
Somatório de produtos 79
Comando sum 80
Multiplicação de matrizes 80
Matriz Power 81
Matriz inversa 81
Determinante 82
Aplicação à Solução de Problemas: peso molecular de proteínas 82
Curso de MATLAB
IV
6.2 Manipulação com matrizes 84
Comando rot90 84
Comando fliplr 84
Comando flipud 84
Comando reshape 85
Comando diag 85
Comando triu 86
Comando tril 87
Aplicação à Solução de Problemas: alinhamento de imagens 87
7 GRÁFICOS 91
7.1 Gráficos X-Y 91
Coordenadas retangulares 91
Legendas 91
7.2 Gráficos Polares 92
Coordenadas Polares 92
Transformações retangular/polar 93
Gráficos de barras e degrau 94
7.3 Opções 94
7.4 Gráficos 3D 97
Aplicação à Solução de Problemas: trajetória de um satélite 100
8 SOLUÇÕES DE SISTEMAS DE EQUAÇÕES LINEARES 101
8.1 Interpretação Gráfica 101
8.2 Solução usando operações matriciais 103
Divisão de matrizes 104
Matriz Inversa 104
Aplicação à Solução de Problemas: análise de um circuito elétrico 105
9 INTERPOLAÇÃO E AJUSTE DE CURVAS 106
9.1 Interpolação 106
Interpolação linear 107
Função table1 107
Função table2 109
Comando spline 110
Aplicação à Solução de Problemas: braço robótico 112
Curso de MATLAB
V
9.2 Ajuste de curvas 113
Regressão Linear 113
Comando polyfit 114
Comando polyval 115
10 ANÁLISE POLINOMIAL 116
10.1 Avaliação do polinômio 116
Comando polyval 116
Operações Aritméticas 117
Aplicação à Solução de Problemas: balões meteorológicos 118
10.2 Raízes de polinômios 120
11 INTEGRAÇÃO NUMÉRICA E DIFERENCIAÇÃO 122
11.1 Integração Numérica 122
Regra Trapezoidal e Regra de Simpson 122
Comando Quadratura 122
Aplicação à Solução de Problemas: análise de escoamento de um óleo num oleoduto 123
11.2 Diferenciação Numérica 125
Derivação por expressão de diferença 126
Comando diff 127
12 EQUAÇÕES DIFERENCIAIS ORDINÁRIAS 129
12.1 Equações Diferenciais Ordinárias de Primeira Ordem 129
12.2 Método de Runge-Kutta 130
Aproximação de Primeira Ordem (método de Euler) 130
Comando ODE 131
Aplicação à solução de problemas: aceleração de uma turbina UDF numa aeronave 133
12.3 Equações Diferenciais de Ordens Superiores 135
13 FATORAÇÃO E DECOMPOSIÇÃO DE MATRIZES 137
13.1 Autovalores e autovetores 137
Aplicação à solução de problemas: adaptador para redução de ruídos 141
13.2 Decomposição e Fatoração 143
Curso de MATLAB
VI
Fatoração Triangular 143
Fatoração QR 144
14 PROCESSAMENTO DE SINAIS 146
14.1 Análise no domínio da freqüência 146
14.2 Análise de filtros 149
Função de Transferência Analógica 149
Função de Transferência Digital 151
14.3 Implementação de Filtros Digitais 153
14.4 Projetos de Filtros Digitais 155
Filtros IIR 156
Filtros FIR 157
Aplicação à solução de problemas: filtros para separação de canais 158
15 MATEMÁTICA SIMBÓLICA 161
15.1 Expressões Simbólicas 161
Representações de Expressões Simbólicas no MATLAB 162
15.2 Variáveis Simbólicas 163
15.3 Operações em expressões simbólicas 165
15.4 Operações Algébricas Padrão 166
Operações Avançadas 167
15.5 Funções de Conversão 169
15.6 Derivação e Integração 170
15.7 Transformadas 171
Transformada de Laplace 173
Transformada de Fourier 173
Transformada Z 174
Curso de MATLAB
Cap. 1 - Uma Introdução à Solução de Problemas 1
Capítulo 1 – Uma Introdução à Solução de Problemas
A solução de problemas é parte essencial não somente dos cursos de engenharia mas
também dos cursos de Matemática, Física, Química e Ciência da Computação. Logo, é importante
uma base sólida em solução de problemas. Também é de grande auxílio um embasamento suficiente
para trabalhar em todas estas áreas, para que não tenhamos que aprender uma técnica para
problemas de matemática, e uma técnica diferente para problemas de física, e assim por diante. A
técnica de solução de problemas que apresentamos trabalhos para problemas de engenharia e pode
ser seguida de perto para resolver problemas em outras áreas; mas, supõe-se que estamos usando o
MATLAB para ajudar a resolvê-los.
O processo ou metodologia para resolução de problemas que usaremos ao longo do texto
possui cinco passos:
1. Enunciar o problema claramente.
2. Descreva a informação de entrada e saída.
3. Trabalhar o problema manualmente.
4. Desenvolver uma solução MATLAB.
5. Testar a solução usando uma variedade de grupo de dados.
Descreveremos cada um dos passos usando o exemplo do cálculo da distância 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 distância em linha reta entre dois pontos num plano.
2. DESCRIÇÃO ENTRADA/SAÍDA
O segundo passo é descrever cuidadosamente a informação que é dada para resolver o problema
e então identificar os valores a serem calculados. Estes itens representam a entrada e a saída para o
problema e agregadamente podem ser chamados entrada/saída, ou I/0. Para muitos problemas, é útil
usar um diagrama que mostra a entrada e a saída. Algumas vezes, este tipo de diagrama é chamado
de “caixa preta” porque não estamos definindo para este ponto todos os passos para determinar a
saída, mas estamos mostrando a informação que é usada para calcular a saída. Para este exemplo,
poderíamos usar o diagrama na figura 1.1.
Curso de MATLAB
Cap. 1 - Uma Introdução à Solução de Problemas 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 não deve ser ignorado por mais simples
que seja o problema. É um item no qual você trabalha os detalhes da solução do problemas. Se você
não pode pegar um simples grupo de números e calcular a saída (seja manualmente ou com uma
calculadora), então você não está pronto para executar o próximo passo; você deve reler o
problemas e talvez consultar material de referência. Uma vez que pode trabalhar o problema de um
simples grupo de dados, então você está pronto para desenvolver um algoritmo ou um esboço passo
a passo da solução. Este esboço é convertido para os comandos MATLAB para que possamos usar
o computador para fazer todos os cálculos. O exemplo manual para o este exemplo é mostrado a
seguir:
Suponha que os pontos p
1
e p
2
tenham as seguintes coordenadas:
p
1
= (1,5), p
2
= (4,7)
Queremos calcular a distância entre dois pontos, que é a hipotenusa de um triângulo
retângulo, conforme mostra a figura 1.2. Usando o Teorema de Pitágoras, podemos calcular a
distância d com a seguinte equação:
Figura 1.2 – Distância entre dois pontos.
ponto 1
ponto 2
distância entre os pontos
61 , 3 d
13 d
) 5 7 ( ) 1 4 ( d
2 s 1 s d
2 2
2 2
·
·
− + − ·
+ ·
d
(1,5)
(4,7)
S2
S1
x
y
Curso de MATLAB
Cap. 1 - Uma Introdução à Solução de Problemas 3
4. SOLUÇÃO MATLAB
No próximo capítulo, falaremos sobre os comandos MATLAB. Contudo, da solução você pode
ver que os comandos são muito similares às equações que foram usadas no exemplo manual. O
sinal de percentagem é usado para anteceder comentários que explicam os comandos MATLAB.
%
% Este programa calcula e imprime
% distância, em linha reta, entre dois pontos.
p1 = [1,5]; % ponto 1 inicial
p2 = [4,7]; % ponto2 inicial
d = sqrt (sum ((p2-p1).^2)) % calcular distância
5. TESTANDO
O passo final em nosso processo de solução de problemas é testar a solução. Primeiramente,
devemos testar a solução com os dados do exemplo manual, já que calculamos a solução. Quando
os comandos MATLAB na solução são executados, o computador mostra a seguinte saída:
d = 3.6056
Esta saída coincide com o valor que calculamos no exemplo manual. Se a solução MATLAB
não coincidir com o exemplo manual, devemos rever ambas soluções a fim de encontrar o erro.
Uma vez que a solução trabalha com o exemplo manual, devemos também testá-la com vários
grupos de dados para certificar que a solução é válida para outras séries de dados.
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 4

Capítulo 2 - Matrizes, Vetores e Escalares
A capacidade de visualização dos dados é um fator importante na solução de problemas de
engenharia. Às vezes, o dado é um simples número como o raio de um círculo. Outras, um grupo
de coordenadas x-y-z que representam os quatro vértices de uma pirâmides com uma base triangular
no espaço. Podemos representar o exemplos citados usando um tipo especial de estrutura de dados
denominada matriz. Matriz é uma tabela de números dispostos em m linhas e n colunas. Assim,
um simples número 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 três colunas. Como
exemplo, temos:
Se uma matriz contiver m linhas e n colunas, então conterá um total de m . n elementos.
Cada elemento da matriz é indicado por índices, a
ij
. O primeiro, i, indica a linha, o segundo, j,
indica a coluna onde o elemento se encontra. Assim, o elemento a
1,2
da matriz B é 3.1. Se o
número de linhas e colunas forem iguais, então 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.
E x e r c í c i o s
Responda às seguintes questões sobre esta matriz:
1. Qual é a ordem de G?
2. G é uma matriz quadrada?
3. Dê as referências para todas as posições que contém o valor 0.5.
4. Dê as referências para todas as posições que contém valores negativos.
A = [ 3.5] B = [ 1.5 3.1]
1
1
1
1
]
1

¸



·
2 0 0
0 1 1
0 1 1
0 0 1
C
1
1
1
1
1
1
]
1

¸

− −
− −

·
5 . 0 5 . 4 3 . 2 2 . 1
5 . 0 4 . 2 5 . 0 5 . 0
5 . 1 0 . 9 2 . 8 7 . 5
0 . 2 1 . 0 5 . 0 2 . 8
5 . 0 3 . 2 5 . 1 6 . 0
G
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 5

Definindo Matrizes no MATLAB
Suponha que queiramos agora criar as matrizes A, B e C usando o MATLAB. Há vários
métodos de definição de matrizes no MATLAB. Vejamos cada um:
Modo mais simples:
Nome da matriz = [ a
11
a
12
a
13
…a
1n
;

a
21
a
22
a
23
… a
2n
;

;

a
m1
a
m2
a
m3
… a
mn
];
Assim, as matrizes A, B e C serão 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 começar com uma letra e conter no máximo 19 caracteres que
podem ser números, letras ou caracter sublinhado, e aparece ao lado esquerdo do sinal de igual. O
lado direito contém os dados entre colchetes por ordem de linhas. O ponto-e-vírgula separa as
linhas, e os valores das linhas podem estar separados por vírgulas ou por espaços. O valor pode
conter um sinal de + ou -, e um ponto decimal, mas não pode conter uma vírgula, como 32,154.
Quando definimos uma matriz, o MALTAB imprime o valor da matriz na próxima linha a
menos que coloquemos um ponto-e-vírgula depois da definição. Tente entrar com as matrizes A, B
e C sem o ponto-e-vírgula.
Você também pode definir uma matriz digitando uma cada linha separadamente. Como
exemplo, a matriz C:
C = [ -1 0 0
1 1 0
1 –1 0
0 0 2];
Se quisermos, por exemplo, definir um vetor-linha F com 10 valores, também 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 vírgula seguida de três ou mais pontos, e continuar a entrar com os valores restantes
na próxima linha da área de trabalho do MATLAB.
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 6

Podemos também 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 também mudar e adicionar valores na matriz usando um referência entre
parênteses. 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
Então a matriz S terá quatro valores em vez de três. Se executarmos o comando:
S(8) = 9.5;
Então a matriz S terá 8 elementos, e os valores de S(5), S(6) e S(7) são automaticamente
nulos, já que não foram atribuídos valores para eles.
E x e r c í c i o s
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 ];
5. E = [3 5 10 0; 0 0 0 3; 3 9 9 8];
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;
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 7
As matrizes também podem ser definidas através de informação 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 são gerados por um programa MATLAB usando o comando
save, que contém o nome do arquivo e as matrizes que devem ser armazenadas. A extensão
.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 informação exclusivamente numérica, e cada linha do arquivo deve conter o mesmo
número 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 extensão .dat para ser mais fácil distingui-los dos arquivos MAT
e dos arquivos M.
O comando load seguido do nome do arquivo irá recuperar a informação 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 criação de
matrizes ou vetores. Dependendo do argumento, pode significar todas as linhas ou todas as
colunas da matriz-referência. Para o nosso exemplo, temos:
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 8
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 quiséssemos 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 notação:
H = 1 : 8;
A matriz H contém os valores 1, 2, 3, 4, 5, 6, 7 e 8. O operador “ : ” entre os dois
números inteiros gera todos os inteiros entre os dois números especificados. Se for usado
para separar três números, os dois pontos gerarão valores entre o primeiro e terceiro
números, usando o segundo número como incremento. A notação abaixo gera um vetor-
linha denominado TEMPO que contém os números de 0.0 a 5.0 com incrementos de 0.5:
TEMPO = 0.0 : 0.5 : 5.0;
O incremento também pode ser um valor negativo como:
VALORES = 10 : -1: 0;
Os elementos de VALORES são 10, 9, 8, 7, 6, … 0.
O operador dois pontos pode também 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];
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 9
Observações:
• O MATLAB reconhece uma matriz ‘vazia’. Há várias maneiras de gerá-la. Como
exemplo, temos:
A = [ ]
B = 4: -1: 5
• A expressão C ( : ) equivale a uma longa matriz coluna que contém a primeira coluna de
C, seguida pela segunda coluna de c e assim por diante.
E x e r c í c i o s
Determine as ordens e o conteúdo das matrizes abaixo. Use a matriz G como referência.
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, : );
Solução:
1
1
1
1
1
1
]
1

¸

− −
− −

·
5 , 0 5 , 4 3 , 2 2 , 1
5 , 0 4 , 2 5 , 0 5 , 0
5 , 1 0 , 9 2 , 8 7 , 5
0 , 2 1 , 0 5 , 0 2 , 8
5 , 0 3 , 2 5 , 1 6 , 0
G
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 10
Comando Input
Você pode entrar com os valores da matriz, via teclado, utilizando o comando
input que mostra um texto e então 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 usuário
pode entrar com uma expressão como [ 5.1 6.3 -18.0] o qual especifica valores para z. Já
que o comando input termina com um ponto-e-vírgula, os valores de z não são 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 serão imprimidos na próxima linha. Existem vários
comandos que podem ser usados para alterar a saída a ser imprimida.
Comando format
Suponha os comandos abaixo:
» a = [1 2 3]; » T = [ 1.1 2.4 3.7];
» c = 2*a » U = 2*T
c = U =
2 4 6 2.2000 4.8000 7.4000
Por definição, se o elemento de uma matriz for um número inteiro, o MATLAB
apresenta o resultado como número inteiro. Se o elemento for um número real, o
MATLAB apresenta-o com cinco dígitos significativos, ou seja, quatro dígitos à direita do
ponto decimal. Podemos alterar o formato numérico utilizando o comando format.
Exemplo: Seja uma variável A que armazene a raiz quadrada de 2.
» A = sqrt(2)
De acordo com o formato numérico escolhido, a variável A pode estar apresentada sob a
forma:
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 11
Comando MATLAB Variável A Descrição
Format long 1.41421356237310 16 dígitos
Format short 1.4142 5 dígitos – formato numérico padrão
Format short e 1.4142e+000 5 dígitos - notação científica
Format long e 1.414213562373095e+000 16 dígitos – notação científica
format + + “+” para valores positivos e “-” para
valores negativos
format rat 1393/985 aproximação racional
format hex 3ff6a09e667f3bcd formato hexadecimal
Comando disp
Quando quisermos exibir o conteúdo de uma matriz sem imprimir seu nome ou
imprimir um pequeno texto, usamos o comando disp. Assim, se a variável 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, então a saída será:
78 graus Celsius
Comando fprintf
O comando fprintf nos permite imprimir textos e conteúdo de matrizes. Podemos
também especificar o formato numérico . Sua forma geral é:
fprintf (formato, matriz)
O modo formato contém o texto e as especificações que são:
% e indica que os valores da matriz serão impressos em notação exponencial
% f indica que os valores da matriz serão impressos em notação decimal ou em notação fixa,
isto é, o usuário pode especificar o número de algarismos significativos juntamente com
o ponto decimal.
% g pode indicar as duas formas acima, dependendo de qual delas será a mais curta.
O modo matriz denota a variável cuja matriz está armazenada.
Um simples exemplo de aplicação do comando fprintf é mostrado abaixo:
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 12
fprintf (‘A temperatura é %f graus Celsius \n’, temp)
A saída seria:
A temperatura é 78.0000 graus Celsius
Se modificarmos o comando para esta forma:
fprintf (‘A temperatura é \n %f graus Celsius \n’, temp)
Então, a saída seria:
A temperatura é
78.0000 graus Celsius
Os formatos específicos %f, %e, e %g também podem conter informação para
especificar o número de casas decimais a imprimir e o número de algarismos significativos,
juntamente com o ponto decimal, conforme explicado no início da seção. Considere o
seguinte comando:
fprintf (‘A temperatura é %4.1f graus Celsius \n’, temp)
A saída 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
Gráficos X-Y
Suponhamos que queremos plotar os valores de uma matriz em vez de imprimi-los.
Podemos usar o MATLAB para plotar gráficos. Nesta seção, mostraremos como gerar um
simples gráfico x-y de dados armazenados em dois vetores. Então, sem conhecer alguns
comandos, você pode imediatamente começar usando o MATLAB para gerar gráficos.
Suponha que queira plotar os dados de temperatura a seguir coletados em uma
experiência de física:
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 13
Tempo, s Temperatura, °C
0 54.2
1 58.5
2 63.8
3 64.2
4 67.3
5 71.5
6 88.5
7 90.1
8 90.6
9 89.5
10 90.4
Suponha também 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
são vetores-linha ou vetores-coluna.
plot (x, y)
O gráfico é gerado automaticamente. A prática mostra que um bom gráfico deve
incluir unidades, título e uma breve descrição. Logo, podemos aperfeiçoá-lo como os
seguintes comandos:
Title Adiciona um título ao gráfico.
Xlabel Inclui uma descrição na direção do eixo-x
Y label Inclui uma descrição na direção do eixo-y
Grid Adiciona linhas de grade ao gráfico
Whitebg Muda a cor de fundo do gráfico para branco.
Assim,
plot (x,y), …
title (‘Laboratório de Física - Experiência 1’), …
xlabel (‘Tempo, s’), …
ylabel (‘Temperatura, graus Celsius’), …
grid
whitebg
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 14
Os três pontos usados depois dos quatro comandos são usados para que o
MATLAB execute os seis comandos em uma única vez. Para aprender mais opções para
gerar gráficos x-y e outros tipos de gráficos, veja o capítulo 7.
Aplicação à Solução de Problemas: Análise de Dados de um Túnel de Vento
Um túnel de vento é uma câmara de teste construída para produzir diferentes
velocidades de vento, ou números Mach (razão entre a velocidade do vento e a velocidade
do som). Modelos em escala precisa de aeronaves podem ser equipados sobre suportes de
medições de força na câmara de teste, e as medidas das forças sobre o modelo podem ser
feitas para diferentes velocidades de vento e ângulos do modelo relativo à direção da
velocidade. Ao final de um longo teste de túnel de vento, muitos grupos de dados são
coletados e podem ser usados para determinar o lift, drag e outras características da
performance aerodinâmica do novo modelo para várias velocidades de operação e posições.
Usamos esta aplicação várias vezes em nossos problemas ao longo do texto. Nesta
seção, supomos que os dados coletados do teste do túnel de vento foram armazenados em
um arquivo ASCII denominado vento1.dat. Gostaríamos de visualizar o gráfico dos dados
para verificar se os sensores sobre o modelo em escala parecem trabalhar adequadamente.
Suponhamos que cada linha do arquivo contém um ângulo de vôo em graus e um
correspondente coeficiente de lift. Para este exemplo, usamos os seguintes dados:
Curso de MATLAB
Cap. 2 – Matrizes, Vetores e Escalares 15
Ângulo de Vôo
(graus)
-4 -2 0 2 4 6 8 10 12 14 15
Coeficiente de
Sustentação
-0,202 -0,050 0,108 0,264 0,421 0,573 0,727 0,880 1,027 1,150 1,195
Ângulo de Vôo
(graus)
17 18 19 20 21
Coeficiente de
Sustentação
1,225 1,250 1,245 1,221 1,177
Mesmo que pareça simples ler e plotar os dados usando o MATLAB, usaremos a
metodologia descrita no capítulo anterior para mostrar é igualmente simples o processo que
nos permite estruturar nossas idéias no desenvolvimento na solução de problemas.
1. ENUNCIADO DO PROBLEMA
Gerar um gráfico do ângulo de vôo e coeficiente de lift.
2. DESCRIÇÃO ENTRADA/SAÍDA
Sempre que for possível, usaremos um diagrama I/O, conforme mostrado na figura
a seguir. Neste exemplo, lemos as informações contidas em um arquivo e usamos o
MATLAB para plotá-las. O diagrama contém um símbolo de um disquete para representar
o arquivo que é a entrada (observe que colocamos o nome do arquivo abaixo do símbolo) e
um símbolo de um gráfico para representar a saída, que é o gráfico dos dados.
3. EXEMPLO MANUAL
Apesar de ser apenas um gráfico, devemos estudar superficialmente uma pequena
parte dos dados e determinar, grosseiramente, como seria o gráfico correspondente. Neste
exemplo, se examinarmos os dados podemos perceber que inicialmente o coeficiente de lift
é –0,2 e que o mesmo cresce até alcançar um máximo de 1,25 para um ângulo de 18
0
. Se o
gráfico que obtivermos for muito diferente do que esperávamos (por exemplo, valor inicial
0,7 e um máximo de 1,177 para um ângulo de 21 graus), então devemos novamente checar
os dados e os comandos MATLAB usados.
4. SOLUÇÃO MATLAB
5. TESTANDO
vento1.dat
Diagrama I/O
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 16
Capítulo 3 - Cálculo Fundamentais e Matrizes Especiais
As operações de adição, subtração, multiplicação e divisão são a maioria das operações
fundamentais usadas por engenheiros e cientistas. Podemos executar outras operações de rotina,
como o cálculo da raiz quadrada ou o logaritmo de um valor ou a tangente de um ângulo. Estas
operações 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 capítulo
aprenderemos como executar todas estas operações e funções. E também, aprenderemos como usar
números complexos no MATLAB.
3.1 Valores Especiais e Matrizes Especiais
O MATLAB contém 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 variável.
√-1 i,j Estas variáveis são inicialmente agrupadas ao valor √-1. Veja a seção 3.5 para
uma discussão completa sobre números complexos.

inf Esta variável é a representação do MATLAB para infinito, o qual ocorre
tipicamente como o resultado de uma divisão por zero. Uma mensagem de
aviso é imprimida, se você mostrar o resultado da divisão, o valor será ∞.
Not-a-
number
NaN Ocorre em grande parte quando a expressão é indefinida, como a divisão de
zero por zero.
clock Exibe a hora atual em um vetor linha de seis elementos contendo ano, mês, dia,
hora, minute e segundos.
date Exibe a data atual como por exemplo, 20-Jun-92.
ans Variável usada para armazenar valores calculados por uma expressão que é
calculada mas não armazenada em uma variável nomeada.
• Matrizes Especiais
O MATLAB contém um grupo de funções que geram matrizes especiais. Algumas destas
matrizes tem aplicação específica às técnicas numéricas discutidas posteriormente.
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 17
Magic Square
Uma matriz magic square de ordem n é uma matriz n x n constituída de números inteiros
de 1 a n
2
. Os elementos a
ij
da matriz estão dispostos de forma tal que o somatório de cada linha é
igual ao somatório de uma coluna.
Forma Geral: magic (n) matriz square magic de ordem n.
Assim, para saber o quadrado mágico de ordem 3 , o prompt do MATLAB deve
apresentar:
magic (3)
Zeros
Esta função gera uma matriz zero, isto é, uma matriz cujos elemento a
ij
são 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 função ones gera uma matriz cujo valor dos elementos a
ij
é unitário.
Argumento: ones(n) Gera uma matriz quadrada de ordem n.
ones(m,n) Gera uma matriz de ordem m x n.
Eye
A matriz identidade pode ser gerada pelo MATLAB através da função eye. Uma matriz
identidade é uma matriz escalar de qualquer ordem cujos elementos a
ij
são iguais a 1 para i = j.
Apresenta o mesmo formato que as funções 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 triângulo de Pascal. Assim, se usarmos o
comando pascal(5), a seguinte matriz é gerada:
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 18
3.2 Operações entre Escalares
Cálculos aritméticos são identificados usando expressões. Uma expressão pode ser tão
simples como uma constante, ou pode ter matrizes e constantes combinadas com operações
aritméticas. Nesta seção, discutiremos operações envolvendo somente escalares. Na seção
posterior, estendemos as operações incluindo operações elemento por elemento entre escalares e
matrizes ou entre duas matrizes.
As operações aritméticas entre dois escalares são mostradas na tabela 3.1. Uma expressão
pode ser resolvida e armazenada em uma variável específica, como no comando seguinte, o qual
especifica que os valores em a e b serão adicionados, e a soma armazenada em uma variável 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 nós interpretamos os comandos desta forma, então nós preocupamos
pelo seguinte comando MATLAB válido.
count = count + 1
É óbvio que esta instrução não é um comando algébrico válido, mas o MATLAB explica
que 1 é adicionado ao valor em count, e o resultado será armazenado nesta variável. Ou seja, o valor
em count será acrescido de 1 (ou incrementado por 1).
É importante reconhecer que uma variável pode armazenar somente um valor por vez. Por
exemplo, suponha que as seguintes instruções serão executadas seguidamente;
Time = 0.0
Time = 5.0
O valor 0.0 é armazenado na variável time quando a primeira instrução é executado e então
substituído pelo valor 5.0 quando a segunda instrução é executada.
Quando você entra com uma expressão sem especificar uma variável para armazenar o
resultado, o mesmo é automaticamente armazenado em uma variável denominada ans. Cada vez
que um novo valor é armazenado em ans, o valor anterior é perdido.
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 19
Tabela 3.1 – Operações aritméticas entre dois escalares
Operação Forma
Algébrica
MATLAB
Adição a + b a + b
Subtração a - b a - b
Multiplicação a x b a*b
Divisão Direita a
b
a/b
Divisão
Esquerda
b
a
a\b
Exponenciação a
b
a^b
Hierarquia em Operações Aritméticas
Sabendo que várias operações pode ser combinadas em uma simples expressão aritmética,
é importante conhecer a ordem nas quais as operações serão executadas. A tabela 3.2 contém a
ordem de prioridade das operações aritméticas no MATLAB. Note que esta prioridade também
segue a prioridade algébrica padrão.
Tabela 3.2 Hierarquia em operações aritméticas
Prioridade Operação
1 Parênteses
2 Exponenciação, esquerda à direita
3 Multiplicação e Divisão, esquerda à direita
4 Adição e Subtração, esquerda à direita
Suponha que queremos calcular a área de um trapézio, e também suponha que a variável
base contenha o comprimento da base e que altura_1 e altura_2 contenham as duas alturas. A área
de um trapézio pode ser calculada usando o seguinte enunciado:
area = 0.5*h*(B + b);
Suponha que omitamos os parênteses:
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, não há mensagens de erro
imprimidas alertando-nos quanto ao erro. Portanto, é importante estar cauteloso quando
convertemos equações para comandos do MATLAB. Adicionar parênteses extras é uma maneira
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 20
fácil para ter certeza que os cálculos são feitos na ordem que você quer. Se uma expressão é longa,
divida-a em várias expressões. Por exemplo, considere a seguinte equação:
f = ___x
3
- 2x
2
+ 6,3___
x
2
+ 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 várias equações que são mais fáceis de compreender que apenas uma, que
requer maior cuidado na hora de imaginar a ordem das operações.
E x e r c í c i o s
Dê os seguintes comandos do MATLAB para calcular os seguintes valores. Suponha que
as variáveis nas equações são escalares e tenham valores determinados.
1. Coeficiente de fricção entre um pneu e o pavimento:
Fricção = __v
2
__
30s
2. Fator de correção em cálculo de pressão:
fator = 1 + _b_ + _c_
v v
2
3. Distância entre dois pontos:
Slope = y
2
- y
1
x
2
- x
1
4. Resistência de um circuito paralelo:
resistência = 1 _
1_ + 1 + 1 _
r
1
r
2
r
3
5. Perda de pressão de um cano de fricção
perda = f . p. 1 . v
2
d 2
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 21
Limites Computacionais
Para a maioria dos computadores, a escala de valores estende-se de 10
-308
a 10
308
, o que
deve ser suficiente para acomodar grande parte dos cálculos. Contudo, é possível 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 10
308
, então os valores de x e y estão 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 operação aritmética é demasiadamente alto para
ser armazenado na memória 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
operação aritmética ser pequeno demais para ser armazenado na memória do computador. Os
valores de x e y novamente estão dentro do alcance permitido, mas o valor de z deve ser 2.5e-400.
Se o expoente é menor que o mínimo, causamos um erro de underflow. No MATLAB, o resultado
de underflow é zero.
Sabemos que a divisão por zero é uma operação inválida. Se uma expressão resulta em
uma divisão por zero no MATLAB, o resultado da divisão é ∞. O MATLAB imprimirá uma
mensagem de aviso e logo a seguir o cálculo continua. As operações posteriores usam como ∞
resultado da divisão.
3.3 Operações de Conjuntos
Uma operação de conjunto é uma operação 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:
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 22
C(1) = A(1)*B(1);
C(2) = A(2)*B(2);
C(3) = A(3)*B(3);
C(4) = A(4)*B(4);
C(5) = A(5)*B(5);
Estes comandos são 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 multiplicação elemento por elemento entre duas matrizes de mesma ordem,
usamos um ponto antes da operação. Assim, os cinco comandos acima podem ser substituídos pelo
seguinte:
C = A .*B;
Se omitirmos o ponto estaremos executando uma operação matricial. Operações matriciais
é o tema que será discutido no capítulo 6.
Para as operações de adição e subtração, as operações de conjunto e matriciais são
idênticas, e então não precisamos distinguí-las. Contudo, as operações de conjunto para
multiplicação, divisão e exponenciação são diferentes das operações matriciais para multiplicação,
divisão e exponenciação e por isso devemos usar o ponto quando queremos especificar uma
operação de conjunto.
Uma operação elemento por elemento, ou operações de conjuntos, aplicam-se não somente
para operações entre duas matrizes de mesma ordem como também em operações entre um escalar
e um não escalar. Contudo, a multiplicação de uma matriz por um escalar e a divisão 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 são equivalentes para uma matriz não escalar A.
B = 3*A;
B = 3.*A;
C = A/5;
C = A ./5;
As matrizes resultantes B e C terão a mesma ordem de A.
Para mostrar as operações 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
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 23
Então, C conterá os seguintes valores:
C = [ 4 15 30]
O MATLAB tem dois operadores de divisão – uma divisão que usa o símbolo “/”e outra
que usa o símbolo “ \ ”. O comando para divisão 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 divisão esquerda:
C = A.\B
Irá gerar um novo vetor no qual cada elemento é o elemento correspondente de B dividido
pelo elemento correspondente de A. Então, C conterá os seguintes valores:
C = [1 0.6 0.833]
A exponenciação de conjunto também é uma operação 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 serão os seguintes:
C = [4 25 36]
D = [4 125 7776]
A operação também é válida 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 também ser calculado com a seguinte instrução:
C = (3).^A;
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 24
Contudo, a instrução a seguir é incorreta:
C = 3.^A;
O MATLAB supõe que o ponto é parte da constante 3, e então fazer uma exponenciação
matricial, que discutiremos no capítulo 6. Se inserirmos um espaço antes do ponto, como se segue:
C = 3 .^A;
Então, o comando tentaria fazer a exponenciação elemento por elemento conforme
desejávamos. Estes exemplos indicam que devemos ter cuidado quando especificarmos operações
de conjuntos. Se não tiver certeza que o que escreveu é a expressão correta, sempre teste-a com
simples exemplos como aqueles que usamos.
d = [1:5; -1: -1: -5];
z = ones(2,5)
s = d – z
p = d.*s
sq = d.^3;
Os valores destas matrizes são mostrados a seguir:
E x e r c í c i o s
Dê os valores no vetor C depois execute os seguintes enunciados, onde A e B contém 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;
1
]
1

¸

− − − − −
·
5 4 3 2 1
5 4 3 2 1
d
1
]
1

¸

− − − − −
·
6 5 4 3 2
4 3 2 1 0
s
1
]
1

¸

− − − − −
·
125 64 27 8 1
125 64 27 8 1
sq
1
]
1

¸

·
1 1 1 1 1
1 1 1 1 1
z
1
]
1

¸

·
30 20 12 6 2
20 12 6 2 0
p
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 25
4. C = B./ A;
5. C = B.\A;
6. C = A.^B;
7. C = (2).^B + A;
8. C = 2*B/3.0.*A;
Solução de Problemas Aplicados à Engenharia: Ecos em Sinais de Comunicação
Uma interessante pesquisa está sendo feita atualmente para desenvolver sistemas de
computadores que respondam a comandos verbais. O projeto do tal sistema supõe que o microfone
colhe o comando de voz e tem uma representação nítida da fala. Infelizmente, sensores como os
microfones apresentam distorções, denominadas ruído. Os sistemas com comunicações duas vias
também raramente tem ecos que são inadvertidamente introduzidos pela instrumentação. Por essa
razão, um sistema reconhecedor de voz deve ser capaz de executar algum processamento do sinal de
voz para remover algumas das distorções e componentes indesejáveis, 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 então
avaliar a performance do programa que é suposta para remover os ecos. Nesta seção, definimos
sinais digitais, e então desenvolveremos um programa MATLAB para adicionar ecos a um sinal
digital.
Sinais Digitais
Um sinal é uma função (normalmente em relação ao tempo) que representa informação.
Esta informação ou dado são coletados com um sensor. Alguns dos mais comuns tipos de sensores
são microfones, que medem acústica ou dados sonoros (como a fala); sismômetro, que mede
intensidade de tremor de terra; fotocélulas, que medem a intensidade da luz; termistores, o qual
medem a temperatura; e osciloscópios, que medem tensões. Os sensores são normalmente
conectados à outra peça da instrumentação chamada conversor analógico-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 função contínua (ou analógica); a seqüência
de valores coletados do sinal original é denominada sinal digital. A figura 3.1 contém um exemplo
de sinal analógico coletado de um sinal contínuo. O sinal analógico é composto de um grupo de
coordenadas x-y e assim poderiam facilmente ser armazenadas em um arquivo de dados, e então ler
um programa MATLAB. Quando plotamos um sinal analógico, geralmente ligamos os pontos com
segmentos de reta em vez de plotar apenas os pontos.
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 26
Gerando ecos em um sinal
Um eco de um sinal é representado por uma versão atenuada do sinal original e que ocorre
atrasado no tempo em relação ao sinal original. Por exemplo, a figura 3.3 contém um sinal original
s(t) no primeiro esquema. O segundo esquema contém um eco do sinal original que foi atenuado
aproximadamente 50% (ou 0,5) do sinal original. O terceiro esquema contém um eco do sinal
original atenuado em 30% e atrasado 5 segundos em relação ao sinal original; este é um ROLLED
eco porque os valores do eco são negativos do eco esperado. O quarto esquema contém o sinal
original mais os dois ecos adicionados ao mesmo.
Figura 3,1 – Sinal Analógico ou contínuo
Figura 3..2 – Amostra ou Sinal Digital
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 27
Figura 3.3 – O sinal original e os ecos.
Suponha que um sinal original foi coletado um período 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) 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1,0
Valor do sinal 0,0 0,5 1,0 1,5 2,0 2,5 3,0 3,5 4,0 4,5 5,0
Escreva um programa do MATLAB que gera um sinal que contém o sinal original com
três 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 gráfico 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 três ecos
específicos adicionados a ele.
2. DESCRIÇÃO ENTRADA/SAÍDA
O retângulo tracejado contém uma figura detalhada do processo de geração de ecos do
sinal de entrada [sn]. Este sinal é atrasado e multiplicado por um fator escalar (representado pelo
triângulo) para gerar cada eco. Então, o sinal original e todos os ecos que são adicionados juntos
em um novo sinal [gn], o qual é plotado e armazenado um arquivo de dados chamado eco.mat.
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1 2 3 4 5 6 7
t, segundos
t, segundos
t, segundos
t, segundos
s(t)
Eco 1
Eco 2
s(t) + Ecos
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 28
3. EXEMPLO MANUAL
Para um exemplo manual, usamos os três primeiros valores do sinal original:
Tempo (s) Valor do sinal
0,0 0,0
0,1 0,5
0,2 1,0
Os ecos específicos então tem os seguintes valores (não-nulos):
Tempo,s Valor do sinal
2,0 (0,5) . (0,0) = 0,0
2,1 (0,5) . (0,5) = 0,25
2,2 (0,5) . (1,0) = 0,5
Tempo,s Valor do sinal
4,0 (- 0,3) . (0,0) = 0,0
4,1 (- 0,3) . (0,5) = - 0,15
4,2 (- 0,3) . (1,0) = - 0,3
Tempo,s Valor do sinal
2,0 (0,1) . (0,0) = 0,0
2,1 (0,1) . (0,5) = 0,05
2,2 (0,1) . (1,0) = 0,1
A soma do sinal original mais os três ecos são mostrados na figura 3.5.
0,5
-0,3
0,1
atraso 2s
atraso 4s
atraso7,5s
[sn]
eco.mat
[gn]
Figura 3.4 – Diagrama entrada / saída
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 29
3.4 Funções Elementares
As expressões aritméticas raramente requerem outros cálculos que não sejam a adição,
subtração, multiplicação, divisão, e exponenciação. Por exemplo, muitas expressões requerem o
uso de logaritmos, exponenciais, e funções trigonométricas. O MATLAB nos permite usar funções
para executar estes tipos de cálculos em vez de nos exigirem calculá-los usando operações
aritméticas básicas. 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 função sin supõe que o argumento está em radianos. Se o argumento contém um valor
em graus, podemos convertê-lo de graus para radianos dentro da função referência:
b = sin (angle*pi/180);
Poderíamos também fazer a conversão em comandos separados:
angle_radians = angle*pi/180;
b = sin(angle_radians);
Estes comandos são válidos se angle é um escalar ou se angle é uma matriz. Se angle for
uma matriz, então a função será aplicada elemento por elemento aos valores na matriz.
Agora que já vimos vários exemplos de funções, iniciaremos uma revisão das regras
relativa às funções. Uma função é uma referência que representa uma matriz. Os argumentos ou
parâmetros da função estão contidos em parênteses seguindo do nome da função. Uma função pode
não conter argumentos, um argumento ou muitos argumentos, dependendo de sua definição. Por
exemplo, pi é uma função que não tem argumento; quando usamos a função referência pi, o valor
F
i
g
u
r
a

3
.
5



S
i
n
a
l

O
r
i
g
i
n
a
l

m
a
i
s

o
s
t
r
ê
s

e
c
o
s
.
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 30
para pi automaticamente substitui a função referência. Se uma função contém mais que um
argumentos, é muito importante dar os argumentos em ordem correta. Algumas funções também
exigem que os argumentos estejam unidades específicas. Por exemplo, as funções trigonométricas
supõem que os argumentos estão em radianos. No MATLAB, algumas funções usam o número de
argumentos para determinar a saída da função. Por exemplo, a função zeros pode ter um ou dois
argumentos, pelos quais determinamos a saída.
Uma função referência não pode ser usada ao lado esquerdo de um sinal de igualdade,
desde que este represente um valore e não uma variável. Funções podem aparecer à direita de um
sinal de igualdade e em expressões. Uma função de referência pode também ser parte do
argumento de uma outra função de referência. Por exemplo, o seguinte comando calcula o
logaritmo do valor absoluto de x:
log_x = log(abs(x))
Quando uma função é usada para calcular o argumento de uma outra função, tenha certeza
de fechar o argumento de cada função em seu próprio grupo de parênteses. Esta acomodação da
função é também chamada composição de funções. Nomes de funções devem estar em letras
minúsculas a menos que o “case sensitivy” esteja desativado.
Agora discutiremos várias categorias de funções que são freqüentemente usadas em
cálculos de engenharia. Outras funções serão apresentadas no decorrer dos capítulos tão logo
debatermos tópicos relevantes.
Funções Matemáticas Elementares
As funções matemáticas elementares incluem funções para executar um número de
cálculos comuns como o cálculo de valor absoluto e a raiz quadrada. Além disso, também
incluímos um grupo de funções usadas em arredondamentos. Mostraremos a seguir uma lista destas
funções com uma breve descrição:
abs (x)
Calcula o valor absoluto de x.
sqrt(x)
Calcula a raiz quadrada de x.
round(x)
Arredonda o valor de x para o inteiro mais próximo.
fix(x)
Arredonda o valor de x para o inteiro mais próximo de zero.
floor(x)
Arredonda o valor de x para o inteiro mais próximo de - ∞
ceil(x)
Arredonda o valor de x para o inteiro mais próximo de ∞
sign(x)
Se x é menor que zero, a função retorna ao valor – 1; se x for igual a
zero, retorna ao valor zero; caso contrário, a função retorna ao valor 1.
Rem(x,y)
Retorna o resto da divisão x/y. Por exemplo, rem (25,4) é 1, e rem
(100,21) é 16.
Exp(x)
Esta função retorna ao valor de e
x
, onde e é a base para logaritmo natural
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 31
ou aproximadamente 2.718282.
log(x)
Retorna a ln x, o logaritmo natural de x para a base e.
Log10(x)
Retorna a log
10
x, ou seja, o logaritmo de x na base 10.
E x e r c í c i o s
Calcule as seguintes expressões, e então 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])
Funções Trigonométricas
As funções trigonométricas supõem que os ângulos estejam representados em radianos.
Para converter para graus ou de graus para radianos, use as seguintes conversões, sabendo que 180°
= π radianos:
ângulo_graus = ângulo_radianos*(180/pi);
ângulo_radianos = ângulo_graus*(pi/180);
A seguir uma lista de funções trigonométricas com uma breve descrição:
sin(x) Calcula o seno de x, em radianos.
cos(x) Calcula o cosseno de x, em radianos.
tan(x) Calcula a tangente de x, em radianos.
asin(x) Calcula o arcoseno de x, onde x deve estar entre –1 e 1. A função
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 função
apresenta um ângulo em radianos entre 0 e π.
atan(x) Calcula o arcotangente de x, onde x deve estar entre –1 e 1. A função
apresenta um ângulo em radianos entre - π/2 e π/2.
atan2(x,y) Calcula o arcotangente do valor de y/x. A função apresenta um ângulo
em radianos estará entre - π e π, dependendo dos sinais de x e y.
As outras funções trigonométricas podem ser calculados usando as seguintes equações:
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 32
sec x = 1/ cos x
csc x = 1 / sin x
cot x = 1 / tan x
Funções Hiperbólicas
Funções Hiperbólicas são funções de e
x
; as funções hiperbólicas inversas são funções de ln
x. Estas funções são úteis em aplicações como o projeto de alguns tipos de filtros digitais. O
MATLAB inclui várias funções hiperbólicas, como as mostradas nesta breve descrição:
sinh(x) Calcula o seno hiperbólico de x.
cosh(x) Calcula o cosseno hiperbólico de x.
tanh(x) Calcula a tangente hiperbólica de x.
asinh(x) Calcula o seno hiperbólico inverso de x.
acosh(x) Calcula o cosseno hiperbólico inverso de x.
atanh(x) Calcula a tangente hiperbólica inversa de x.
E x e r c í c i o s
Dê as expressões MATLAB para calcular os seguintes valores, dado o valor de x.
1. coth x
2. sec x
3. acoth x
4. csc x
5. asech x
6. acsc x
Funções de arquivo M
O MATLAB apresenta uma estrutura que nos permite criar funções sob a forma de
arquivos M. Como exemplo, considere uma função que esteja em um arquivo-M denominado
circum.m:
function c = circum ( r)
% CIRCUM Circunferência de um círculo de raio r.
% Para matrizes, CIRCUM ( r ) retorna uma matriz
% que contêm as circunferências de círculos com raios iguais
% aos valores no vetor original.
c = pi*2*r;
Assim, se o prompt do MATLAB apresentar:
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 33
r = [0 1.4 pi];
a = circum (r );
Os elementos da matriz A corresponderão as circunferências de círculos de raios 0, 1,4 e π,
respectivamente.
Para esta função também são válidos os comandos:
a = 5.6;
disp (circum(a))
c = [1.2 3; 5 2.3];
circum ( c) ;
Assim, circum passa a ser uma função 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 função de arquivo M:
• A função deve começar com uma linha contendo a palavra function, seguida pelo argumento de
saída, um sinal de igual, e o nome da função. Os argumentos para a função devem estar entre
parênteses. Esta linha define os argumentos de entrada e saída;
• As primeiras linhas devem ser comentários porque serão exibidas quando o menu help for usado
juntamente com o nome da função , como help circum;
• A única informação retornada da função é contida nos argumentos de saída, que são,
obviamente, matrizes. Verificar se a função inclui um comando que assegure um valor ao
argumento de saída.
• Uma função que possui mais de uma variável de saída como por exemplo:
function [ dist, vel, acel] = motion (x)
Deve apresentar as variáveis de saída dentro de colchetes. Além disso, todos os valores devem
ser calculados dentro da função.
• Uma função que tenha múltiplos 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 variáveis especiais nargin e nargout podem ser usadas para determinar o número de
argumentos de entrada passadas para uma função e o número de argumentos de saída solicitados
quando a função é chamada.
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 34
Solução de Problemas Aplicados à Engenharia: Sinais de Sonar
O estudo do sonar (sound navigation and ranging) inclui a geração, transmissão, e
recepção de energia sonora na água. Dentre as aplicações destacamos: mapeamento geológico,
medidas de sinal biológico, navegação submarina e exploração mineral. Um sistema sonar ativo
transmite um sinal que é normalmente um sinal senoidal de freqüência conhecida. As reflexões ou
os ecos do sinal são recebidos e analisados para prover informações sobre o meio envolvente. Um
sistema sonar passivo não transmite sinais mas coleta-os de sensores e os analisa baseado em suas
freqüências.
Nesta seção, descreveremos as senóides, já que é um sinal básico usando em sistemas
sonar. Depois, desenvolveremos um programa MATLAB para gerar um sinal sonar.
Geração de um Sinal Senoidal
Uma senóide é uma função seno escrita em função do tempo:
g(t) = sen (2πft)
onde f é a freqüência da senóide em ciclos por segundo, ou Hertz(Hz).
Se a freqüência de uma senóide for 5 HZ, teremos:
g(t) = sen (2π5t) = sen (10πt)
Então haverá cinco ciclos da senóide em um segundo, ou seja, a freqüência de uma senóide
é 5 HZ. O período P de uma senóide é o intervalo de tempo que corresponde a um ciclo; portanto,
o período desta senóide é 0,2 segundos. A relação entre período e freqüência é dada por
f = 1/ P
onde f é a freqüência em Hz e P é o período em segundos.
Se a senóide é multiplicada por um escalar A, a equação pode ser escrita nesta forma:
g(t) = Asen (2πft)
O escalar é também chamado de amplitude da senóide. Uma senóide com um ângulo de
fase φ em radianos pode ser escrita como:
g(t) = Asen (2πft + φ )
Se o ângulo de fase for igual a π/2 radianos, a senóide poderá ser escrita sob termos de
uma função seno ou cosseno, e pode ou não incluir um ângulo de fase.
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 35
Gerando um sinal sonar
Conforme já dito, um dos tipos de sinais usados em sistemas de sonar é um sinal senoidal.
As senóides podem ser representadas pela equação:
onde :
E é a energia transmitida,
PD é a duração do pulso em segundos,
f
c
é a freqüência em Hertz.
Duração de um sinal sonar podem alcançar de uma fração de milisegundos a alguns
segundos; e as freqüências, de poucas centenas de Hz a dezenas de KHz dependendo do sistema e
do alcance de operação desejado.
Escreva um programa MATLAB que permita ao usuário entrar com valores de E, PD, e f
c
para gerar um sinal sonar. Armazene os valores do sinal em um arquivo MAT denominado
sonar.mat. A amostragem do sinal deve cobrir a duração do pulso e conter 10 amostras de cada
período de x(t). Além disso, adicione um período de 200 pontos de silêncio depois do pulso.
1. ENUNCIADO DO PROBLEMA
Escreva um programa para gerar um sinal sonar que contenha 10 amostras de cada período
de uma senóide específica, cobrindo uma duração de tempo determinada.
2. DESCRIÇÃO ENTRADA/SAÍDA
Os valores de E (energia transmitida em joules), PD (duração do pulso em segundos), e f
c
(freqüência em Hz) são os valores de entrada. A saída é um arquivo denominado sonar.mat, que
contém os valores de tempo e sinal para a duração do pulso sonar, como mostramos na figura 3.7.
Também plotamos o sinal sonar.
3. EXEMPLO MANUAL
¹
¹
¹
'
¹
≤ ≤
·
tes ins demais os para
PD t fc
PD
E
t s
tan 0
0 ), 2 cos(
2
) (
π
sonar.mat
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 36
Para um exemplo manual, usamos os valores a seguir:
E = 500 joules
PD = 5 milisegundos (ms)
f
c
= 3,5 KHz
O período da senóide é 1/3500, ou aproximadamente 0,3 ms. Assim, para ter 10 amostras
por período, o intervalo da amostragem precisa ser aproximadamente 0,03 ms. A duração do pulso
é 0,5 ms, e portanto precisamos de 167 amostras do sinal:
Os primeiros valores do sinal sonar são calculados com aproximação 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
Adicionaríamos 200 pontos de silêncio através de dados adicionais com seus tempos
correspondentes e valores de sinais.
4. SOLUÇÃO MATLAB
3.5 Números Complexos
As soluções de muitos problemas de engenharia como sistema de controle para um braço
mecânico ou análise da estabilidade de um circuito elétrico envolvem a busca das raízes de uma
equação da seguinte forma:
y = f(x)
onde as raízes são os valores de x para qual y é igual a zero.
Considere a forma geral para um polinômio de grau n:
a
1
x
n
+ a
2
x
n-1
+ a
3
x
n-2
+ … + n
a-1
x
2
+ a
n
x + a
n+1
= 0
Um polinômio de grau n terá n raízes, sendo que algumas podem ser raízes múltiplas ou
raízes complexas. Nesta seção discutiremos as operações com números complexos e as funções
MATLAB que os usam.
) t 3500 2 cos( 2 , 447 ) t ( s
) t ) 3500 ( 2 cos(
005 , 0
1000
) t ( s
) t f 2 cos(
PD
E 2
) t ( s
c
π ·
π ·
π ·
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 37
Operações Aritméticas com Números Complexos
Os comandos MATLAB reconhecem os números complexos usando i para representar √-1.
(O MATLAB também reconhece o uso de j para representar √-1. Esta notação é mais usada na
Engenharia Elétrica). O comando a seguir define uma variável complexa:
x = 1 - 0.5*i;
Quando executamos operações entre dois complexos, o MATLAB automaticamente
executa os cálculos necessários. Se uma operação for entre um número real e um complexo, o
MATLAB supõe que a parte imaginária do número real é igual a zero. O MATLAB inclui várias
funções que são específicas aos números complexos:
real (x) Calcula a parte real do número complexo x.
imag(x) Calcula a parte imaginária do número complexo x.
conj(x) Calcula o conjugado do número complexo x.
abs(x) Calcula o módulo do número complexo x.
angle(x) Calcula o ângulo usando o valor de atan2 (imag(x), real(x)), e portanto o ângulo está
entre -π e π.
Estas funções tornam mais fácil converter o complexo da forma polar para retangular.
Coordenadas polar e retangulares
Podemos representar um número complexo em um plano com eixos real e imaginário. Os
números reais representam o eixo x, e os números imaginários representam o eixo y, e os números
com partes real e imaginária representam o resto do plano.
Quando representamos um número complexo com uma parte real e imaginária, como 2 +
i3, estamos usando uma notação retangular. A figura 3.10 mostra que o número complexo pode ser
escrito com um ângulo θ e raio r em relação à origem. Esta forma é chamada de notação polar, e o
ponto 2 + i3 pode ser representado em notação polar com um ângulo de 0,98 radianos e um raio3,6.
Eixo
imaginário
Eixo
real
1 2 3 4
3
2
1
(2,3)
Figura 3.10 – Plano Complexo
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 38
Conversão
- retangular a polar
- polar a retangular
a = r cos θ
b = r sen θ
Se x é um número complexo, então o módulo e a fase podem ser calculados com os
seguintes comandos:
r = abs (x);
theta = angle (x);
Para calcular o número complexo usando módulo e fase determinados, usamos o comando:
y = r*exp (i*theta);
Podemos calcular a parte real e a parte imaginária de um complexo com os comandos:
a = real (x);
b = imag (x);
Para calcular o complexo com partes real e imaginária específicas, usamos:
y = a + i*b;
E x e r c í c i o s
Converter os números complexos nos problemas abaixo. Verifique suas respostas usando o
MATLAB.
1. 3 – i2
2. –i
3. –2
4. 0,5 + i
a
b
tan
b a r
1
2 2

· θ
+ ·
Curso de MATLAB
Cap. 3 – Cálculos com Matrizes 39
Converter os valores abaixo para forma retangular. Verifique suas respostas usando as
funções MATLAB.
5. e
i
6. e
iπ0,75
7. 0,5 e
i2,3
8. 3,5e
i3π
Curso de MATLAB
Cap. 4 – Controle de Fluxo 40
Capítulo 4 - Controle de Fluxo
4.1 Operadores Lógicos 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 Descrição
< Menor que
<= Menor ou igual a
> Maior que
>= Maior ou igual a
= = Igual a (no sentido de condição)
~ = Não igual a
A finalidade dos operadores é fornecer respostas a perguntas do tipo falso/verdadeiro.
Assim, se a comparação for verdadeira, atribui-se o valor 1; se for falsa, o valor 0.
Considere a expressão lógica a seguir:
a < b
Se a e b forem escalares, então o valor da expressão será 1 (verdadeira) se a for menor que
b; caso contrário, a expressão será 0 (falsa). Se a e b forem vetores com os valores a seguir:
a = [ 2 4 6]
b = [ 3 5 1]
Então, o valor de a < b será o vetor [1 1 0], enquanto o valor de a ~ = b será [1 1 1].
Operadores Lógicos
Podemos combinar expressões usando os operadores lógicos do MATLAB. Os operadores
são representados pelos seguintes símbolos.
Curso de MATLAB
Cap. 4 – Controle de Fluxo 41
Operadores Descrição
& e
| ou
~ não
Quando duas expressões são unidas por e ; o resultado será 1 (verdadeiro) se ambas
expressões forem verdadeiras, para expressões unidas por ou, o resultado será 1 (verdadeiro) se uma
ou ambas expressões forem verdadeiras. Assim, para a seguinte expressão lógica
a < b & b < c
O resultado será 1 (verdadeiro) somente se a < b < c; e falso (0) para todos resultados
diferentes. Além disso, a operação só será válida se as matrizes resultantes (a < b e b < c) tiverem
o mesmo tamanho.
Uma expressão pode conter vários operadores lógicos, como a expressão abaixo:
~ (b = = c | b = = 5.5)
O MATLAB analisaria primeiro, as expressões b = = c e b = = 5.5 (obviamente, por causa
do uso de parênteses). O resultado seria inversamente pelo operador não. Assim, suponha b = = 3
e c = = 5. Nenhuma das expressões é verdadeira, logo, a expressão b = = c | b = = 5.5 é falsa.
Aplicando o operador não, o valor da expressão é alterado e a mesma torna-se verdadeira.
A prioridade dos operadores lógicos, do mais alto ao mais baixo, é: não, e, e ou.
E x e r c í c i o s
Determine se as expressões nos problema 1 a 8 são verdadeiras ou falsas. Depois,
verifique suas respostas usando o MATLAB. Lembre que ao verificá-las , você precisa entrar com
a expressão. Suponha que as variáveis tenham os valores indicados abaixo:
a = 5.5 b = 1.5 k = -3
1. a < 10.0
2. a + b >= 6.5
3. k ~= 0
4. b – k > a
5. ~(a = = 3*b)
6. –k < = k + 6
7. a < 10 & a > 5
8. abs (k) > 3 | k < b - a
Curso de MATLAB
Cap. 4 – Controle de Fluxo 42
4.2 Tomada de Decisões
Estrutura If – Else – End
if expressão
Comandos
End
Se a expressão lógica for verdadeira, os comandos entre if e end são executados. Como
exemplo, temos:
if a < 50
count = count +1;
sum = sum + a;
end
Suponha que a seja um escalar. Se a < 50, então count é incrementada por 1 e a é
adicionada à sum; caso contrário, os comandos não serão executados. Se a não for um escalar,
então count é incrementado por 1 e a é adicionada à sum somente se cada elemento em a for menor
que 50.
A próxima estrutura contém um parâmetro if dentro de outro parâmetro if:
if expressão 1
grupo de comandos A
if expressão 2
grupo de comandos B
end
grupo de comandos C
end
grupo de comandos D
Se a expressão 1 for verdadeira, os grupos de comandos A e C são executados. Se a
expressão 2 também for verdadeira, o grupo de comandos B é executado antes do grupo de
comandos C. Se a expressão 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
Curso de MATLAB
Cap. 4 – Controle de Fluxo 43
Novamente, suponha que a e b sejam escalares. Então, se a < 50 aumentaremos count por 1
e adicionaremos a à sum. Se b > a, então b será igual a zero. Se a não for menor que 50, então
pula-se diretamente para o segundo end. Se a e nem b forem escalares, então b é maior que a
somente se cada par de elementos correspondentes de a e b são valores nos quais b > a. Se a ou b é
um escalar, então a matriz é comparada ao escalar.
Instrução Else
Esta instrução permite que executemos um comando se a expressão lógica é verdadeira e
um diferente comando se a expressão é falsa. A forma geral do comando if combinada à instrução
else é mostrada a seguir:
if expressão
grupo de comandos A
else
grupo de comandos B
end
Se a expressão lógica é verdadeira, então o grupo de comandos A é executado. Caso
contrário, o grupo de comandos B é executado.
Como exemplo, suponha que um táxi esteja passando entre dois edifícios. Considere que a
variável d contenha a distância do veículo ao edifício mais próximo. Se o carro estiver a 10 metros
do edifício, a velocidade é calculada usando a seguinte equação:
velocidade = 0,425 + 0,00175d
2
Se o táxi estiver a uma distância maior que 10 metros, use a equação a seguir:
velocidade = 0,625 + 0,12d – 0,00025d
2
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 difícil determinar quais
expressões lógicas devam ser verdadeiras (ou falsas) para executar cada grupo de comandos. Neste
caso, a cláusula elseif é freqüentemente usada para simplificar o programa lógico:
Curso de MATLAB
Cap. 4 – Controle de Fluxo 44
if expressão 1
grupo de comandos A
elseif expressão 2
grupo de comandos B
elseif expressão 3
grupo de comandos C
end
Se a expressão 1 for verdadeira, somente o grupo de comandos A é executado. Se a
expressão 1 for falsa e a expressão 2 for verdadeira, então somente o segundo grupo de comandos é
executado. Se as expressões 1 e 2 forem falsas e a expressão 3 for verdadeira, então somente o
grupo de comandos C é executado. Se mais de uma expressão lógica for verdadeira, a primeira que
for verdadeira determina qual grupo de comandos será executado. Se nenhuma das expressões
lógicas forem verdadeiras, então 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 expressão 1
grupo de comandos A
elseif expressão 2
grupo de comandos B
elseif expressão 3
grupo de comandos C
else
grupo de comandos D
end
Se nenhuma das expressões lógicas forem verdadeiras, então o grupo de comandos D é
executado.
E x e r c í c i o s
Nos problemas 1 a 7, dê os comandos MATLAB necessários para executar os passos
indicados. Suponha que as variáveis são escalares.
1. Se time é maior que 50, então incremente-a por 1.
2. Quando a raiz quadrada de poly for menor que 0,001, imprima o valor de poly;
3. Se a diferença entre volt_1 e volt_2 for maior que 2, imprimir os valores de volt_1 e volt_2;
4. Se o valor de den for menor que 0, 003; atribua zero a result; caso contrário, atribua a result
num dividido por dez;
Curso de MATLAB
Cap. 4 – Controle de Fluxo 45
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 contrário,
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 contrário incremente time por 0,5.
4.3 Loop FOR
O MATLAB contém dois comandos para gerar loops, o comando for e o comando while.
Nesta seção, discutiremos o comando for, e a seção 4.4 discutiremos o comando while.
O comando for tem a estrutura a seguir:
for variável = expressão
Grupo de comandos A
end
Os comandos entre as instruções for e end são executados uma vez para cada coluna da
expressão matricial. A cada iteração, a variável é atribuída para a próxima coluna da matriz, isto é,
durante o i-ésimo ciclo do loop, temos que variável = expressão matricial (: , i ). Veja o exemplo a
seguir:
Suponha que temos um grupo de valores que representam a distância de um táxi da torre
mais próxima. Queremos gerar um vetor que contenha as respectivas velocidades. Se o táxi está a
10 metros do edifício, usamos a equação:
velocidade = 0,425 + 0,00175d
2
Se o táxi estiver a uma distância maior que 10 metros, use a equação a seguir:
velocidade = 0,625 + 0,12d – 0,00025d
2
Como a escolha da equação da velocidade depende do valor de d, devemos determinar
separadamente d(1), d(2), e assim por diante. Contudo, não queremos o mesmo para calcular
velocidade(1), velocidade(2) e assim por diante. Logo, usaremos um loop, com a variável usada
como subscrito.
Na primeira solução, supomos que existiam 25 elementos no vetor d..
Curso de MATLAB
Cap. 4 – Controle de Fluxo 46
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 próxima solução, supomos que o tamanho do vetor d é desconhecido. Contudo,
usamos a função size para determinar o número de vezes que queremos executar o loop.
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 são:
• Se o conjunto for uma matriz vazia, o loop não será executado. O fluxo de controle passará ao
próximo comando após a instrução end;
• Se a expressão for um escalar, o loop será executado uma única vez;
• Se a expressão for um vetor-linha, então a cada iteração a variável conterá o próximo valor do
vetor;
• Se a expressão for uma matriz, então a cada iteração a variável conterá a próxima coluna da
matriz;
• Uma vez completo o loop for a variável contém o último valor usado.
• Se o operador dois-pontos é usado para definir a expressão matricial usando o formato:
for k = início: incremento: limite
Então o número de vezes que o loop executará pode ser calculado usando a equação:
Se este valor for negativo, o loop não será executado. Portanto, se um comando for
contiver a seguinte informação:
for k = 5: 4: 83
Então, o número de vezes em que executa-se o loop será:
1
incremento
início ite lim
floor +
,
_

¸
¸ −
Curso de MATLAB
Cap. 4 – Controle de Fluxo 47
O valor de k seria 5, depois 9, 13, e assim por diante até o valor final 81. O loop não 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.
É freqüentemente usado se houver um erro detectado dentro do loop.
E x e r c í c i o s
Determine o número de vezes que o loop for definido pelos comandos a seguir são
executados. Verifique sua resposta .
1. for k = 3:20
2. for count = -2:14
3. for k = -2:-1:10
4. for time = 10:-1:0
5. for time = 10:5
6. for index = 52 : -12
Aplicação à Solução de Problemas: Fibras Óticas
Se a luz está direcionada para o extremo de uma longa haste de vidro ou plástico, a luz será
totalmente refletida pelas paredes, ziguezagueando e segue adiante até chegar a outra extremidade.
Este interessante fenômeno ó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:
20 1
4
78
floor 1
4
5 83
floor · +
,
_

¸
¸
· +
,
_

¸
¸ −
fibra ótica
Curso de MATLAB
Cap. 4 – Controle de Fluxo 48
A fibra ótica é uma fibra de vidro muito fina. Se os extremos das fibras são 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 não tem o mesmo
arranjo para ambos extremos (feixe incoerente), a luz é transmitida em vez da imagem, e por esta
razão é chamada guia de luz. Por causa da flexibilidade das fibras óticas, as guias de luz e
condutores de imagens são usados em instrumentos projetados para permitir a observação visual de
objetos ou áreas que de outro modo seriam inacessíveis. Por exemplo, um endoscópio é um
instrumento usado por físicos para examinar o interior do corpo de um paciente com somente um
pequeno corte. Um endoscópio usa uma fibra ótica para transmitir a luz necessária 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 artérias, quebrar pedras nos rins, e limpar cataratas.
Este fenômeno de reflexão total interna origina-se da lei de Snell e depende unicamente
dos índices de refração para os material considerados para guias de luz. Um guia de luz é
composto de dois materiais ÷ o núcleo central e o material que o envolve, denominado de
blindagem. O material que compõe o núcleo tem o índice de refração mais alto que o meio que o
envolve. Quando a luz incide em uma interface entre dois meios com índices de refração diferentes,
parte dela é refletida a outra parte é refratada. A quantidade de luz refratada depende dos índices de
refração dos materiais e o ângulo de incidência da luz. Se a luz incidente na interface entre dois
meios provém de um material com maior índice de refração, então parte da luz atravessa a interface.
O ângulo de incidência onde a luz é totalmente refletida pela superfície é chamado de ângulo crítico
θ
c
. Como o ângulo crítico depende dos índices de refração 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 n
2
é o índice de refração do meio envolvente, e n
1
é o índice de refração da
haste. Se n
2
é maior que n
1
, a haste não transmitirá luz; caso contrário, o ângulo crítico pode ser
determinado pela equação
sen θ
c
= n
2
/
_
n
1
Escreva um programa MATLAB que determina se a luz será ou não transmitida por dois
materiais que forma um guia. Suponha que um arquivo de dados ASCII denominado indices.dat
contenha o número de possíveis índices de refração da fibra seguido pelo índice de refração do meio
que o envolve. O programa deve determinar se os materiais formarão um guia de luz e, então, para
quais ângulos a luz entra no guia.
1. ENUNCIADO DO PROBLEMA
Determine se os materiais especificados formarão ou não um guia de luz. Se eles não
formarem, calcule os ângulos para o qual a luz pode entra na haste e ser transmitida.
Curso de MATLAB
Cap. 4 – Controle de Fluxo 49
2. DESCRIÇÃO ENTRADA \ SAÍDA
Como mostramos na figura abaixo, a entrada ao programa é um arquivo de dados contendo
os índices de refração para os guias de luz em potencial. A saída é uma mensagem indicando se a
luz é ou não transmitida e o ângulos para quais pode entrar no guia.
3. EXEMPLO MANUAL
O índice de refração do ar é 1,0003 e o índice do vidro é 1,5. Se formarmos um guia de luz
de vidro envolvido pelo ar, o ângulo crítico θ
c
pode ser calculado como mostramos a seguir:
θ
c
=

sen
–1
(n
2
/ n
1
) = sen
–1
(1,0003 / 1,5 ) = sen
–1
( 0,66687 ) = 41, 82
0
O guia de luz transmitirá luz para todos os ângulos de incidência maiores que 41,82
0
.
4. SOLUÇÃO DO MATLAB
5. TESTANDO
4.4 Loops WHILE
O loop while é uma importante estrutura para repetição de um grupo de comandos quando
a condição especificada for verdadeira. O formato geral para esta estrutura de controle é:
while expressão
grupo de comandos A
end
Indices.dat
Mensagem
e θc
Curso de MATLAB
Cap. 4 – Controle de Fluxo 50
Se a expressão for verdadeira, então o grupo de comandos A é executado. Depois destes
comandos serem executados, a condição é novamente questionada. Se for verdadeira, o grupo de
comandos é novamente executado. Quando a condição for falsa, o controle pula para o comando
posterior ao comando end. As variáveis modificadas no grupo de comandos A devem incluir as
variáveis na expressão, ou o valor da expressão nunca será mudado. Se a expressão for verdadeira
(ou é um valor não-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 alcançado. Como todos os valores no
vetor podem ser positivos, a expressão no loop while deve acomodar a situação:
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
Aplicação à Solução de Problemas: Equilíbrio de Temperatura
O projeto de novos materiais para o aperfeiçoamento das características do fluxo de ar
acerca dos veículos envolve a análise dos materiais para não somente o fluxo de ar mas também
para propriedades como a distribuição de temperatura. Neste problema, consideramos a
distribuição em uma fina placa metálica tal que esta alcance um ponto de equilíbrio térmico. A
placa é projetada para ser usada em uma aplicação na qual as temperaturas de todos os quatro lados
da placa metálica estejam a temperaturas constantes ou a temperaturas isotérmicas. A temperatura
para os outros pontos da placa é uma função da temperatura dos pontos envolventes. Se
considerarmos as placas para serem semelhantes a uma grade, então 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 isotérmicos nos quatros
lados são sombreados. Um total de 48 valores de temperaturas estão representados.
Curso de MATLAB
Cap. 4 – Controle de Fluxo 51
Grade de uma placa metálica
As temperaturas isotérmicas sobre os quatro lados seriam especificadas; supomos que os
lados superior, esquerdo e direito são mantidos à mesma temperatura enquanto que o lado inferior
da placa é mantida a uma temperatura diferente. Os pontos restantes são inicialmente selecionados
para uma temperatura arbitrária, normalmente zero. A nova temperatura de cada ponto interno é
calculado como a média das quatro temperaturas envolventes (veja a figura a seguir) e é dada por:
T
0
= T1 + T2 + T3 + T4
4
Pontos que envolvem T
0
Depois de calcular a nova temperatura para um ponto interno, a diferença entre a antiga e a
temperatura recente é calculada. Se a mudança de temperatura for maior que algum valor de
tolerância especificado, a placa já não está em equilíbrio térmico, e o processo inteiro é repetido.
superior
inferior
e
s
q
u
e
r
d
a
d
i
r
e
i
t
a
T
0
T1
T
0
T
4
T
3
T
2
Curso de MATLAB
Cap. 4 – Controle de Fluxo 52
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, estaríamos atualizando informação sem que antes estivéssemos com a informação antiga.
Por exemplo, suponha que estamos calculando a nova temperatura para a posição (3, 3). O novo
valor é a média das temperaturas nas posições (2, 3), (3, 2), (3, 4), e (4, 3). Quando calculamos a
nova temperatura para a posição (3, 4), novamente calculamos uma média, mas queremos usar o
antigo valor na posição (3, 3), e não 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 tolerância. Quando
movemos as novas temperaturas para o conjunto antigo. Quando nenhuma das temperaturas muda
acima da tolerância, supomos que o equilíbrio foi alcançado, e imprimimos as temperaturas finais.
1. ENUNCIADO DO PROBLEMA
Determine os valores de equilíbrio para uma placa de metal com lados isotérmicos.
2. DESCRIÇÃO ENTRADA / SAÍDA
Como mostra a figura abaixo, a entrada é o tamanho da grade da placa, as temperaturas
isotérmicas e o valor de tolerância. A saída é o grupo de temperaturas de equilíbrio para a placa de
metal.
3. EXEMPLO MANUAL
Tenha a certeza que compreende o processo, examinamos um simples caso, estudando
cada iteração. Supondo que a matriz contém quatro linhas e quatro colunas. As temperaturas
isotérmicas são 100º e 50º, e nós iniciamos todos os pontos restantes do zero. Usamos uma
tolerância de 40º. O grupo inicial de temperaturas e as sucessivas iterações ao equilíbrio térmico
são mostradas a seguir:
temperaturas isotérmicas
tamanho da grade
tolerância
Equilíbrio de
temperatura
Curso de MATLAB
Cap. 4 – Controle de Fluxo 53
Temperaturas Iniciais
100 100 100 100
100 0 0 100
100 0 0 100
50 50 50 50
Primeira Iteração
100 100 100 100
100 50 50 100
100 37,5 37,5 100
50 50 50 50
Segunda Iteração
100 100 100 100
100 71,875 71,875 100
100 59,375 59,375 100
50 50 50 50
Como nenhuma das temperaturas alteradas entre a primeira e segunda interação
ultrapassam a tolerância de 40
0
, as temperaturas na segunda iteração estão também em equilíbrio.
4. SOLUÇÃO DO MATLAB
5. TESTANDO
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 54
Capítulo 5 - Medidas Estatísticas
Analisar dados coletados de ensaios de engenharia é uma parte importante da
avaliação dos mesmos. O alcance da análise estende-se dos mais simples cálculos de
dados, como a média aritmética, à mais complexa análise que calcula medidas como o
desvio padrão ou variância dos dados. Medidas como estas são medidas estatísticas
porque suas propriedades não são exatas. Por exemplo, o seno de 60
0
é uma medida
exata pois o valor é sempre o mesmo toda vez que o calculamos, mas a velocidade
máxima que atingimos com o nosso carro é uma medida estatística porque varia
dependendo de parâmetros como a temperatura, condições da estrada, e se estamos
nas montanhas ou no deserto. Não só podemos medir as propriedades e características
de dados estatísticos como também usar o computador para gerar seqüências de
valores (números aleatórios) com características específicas. Neste capítulo,
aprenderemos a usar as funções para análise de dados do MATLAB e a gerar
seqüências de números aleatórios com características específicas.
5.1 Funções para Análise de Dados
Para se estudar o desempenho de duas companhias corretoras de ações,
selecionou-se de cada uma delas amostras aleatórias das ações negociadas. Para cada
ação selecionada, computou-se a porcentagem de lucro apresentada durante um
período de tempo. Os dados estão a seguir:
Corretora A 45 60 54 62 55 70 38 48 64 55 56 55 54 59 48 65 55 60
Corretora B 57 55 58 50 52 59 59 55 56 61 52 53 57 57 50 55 58 54
Os gráficos para os dados das corretoras A e B são mostrados abaixo para
podermos comparar os dois conjuntos de dados:
Para decidir qual corretora obteve melhor desempenho, alguns critérios
foram considerados como:
• Média mais alta de percentagem de lucro;
• Maior percentagem de lucro;
• Menor variação de Percentagem de lucro;
Figura 5.2 - Percentagem de lucro
apresentada pela corretora B durante 18
dias.
Figura 5.1 - Percentagem de lucro
apresentada pela corretora A durante 18
dias.
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 55
É visualmente perceptível que ao longo dos dezoito dias a corretora B
apresentou menor variação de lucro. Facilmente também observaríamos que a
Corretora A obteve o maior percentual de lucro de ações. Contudo, não é possível
sabermos quantitativamente estas e outras informações como a média de percentagem
do lucros das ações para cada corretora apenas com a observação dos gráficos. Para
isso temos que calcular as grandezas necessárias para determinar qual corretora
obteve melhor desempenho. Seria um pouco trabalhoso se o fizéssemos
manualmente. O MATLAB pode perfeitamente auxiliar-nos nestes casos porque
contém uma série de funções que contribuem para uma análise mais precisa dos
dados. Algumas destas funções podem ser aplicadas ao exemplo das corretoras como
as mostradas a seguir:
Qual a média percentual de lucro das ações durante os 18 dias de observação?
mean : calcula a média aritmética 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 alcançou a mais alta percentagem de lucros?
A função max determina a maior percentagem de lucro em cada corretora. A
função 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 são dadas pelo
comando min .
»min(corretoraA) » min(corretoraB)
ans = ans =
38 50
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 56
Qual corretora apresenta menor variação de percentual de lucro de ações?
As duas corretoras tiveram médias bastantes próximas. Contudo, a média,
por ser uma medida representativa de posição central, mascara toda a informação
sobre a variabilidade dos dados das corretoras A e B. É necessário uma medida que
resuma a variabilidade de dois grupos de valores, permitindo compara-los, conforme
algum critério estabelecido. O critério mais comum é aquele que mede a concentração
de dados em torno de sua média e, as medidas mais usadas são: o desvio médio e a
variância.
Desvio Médio, Variância e Desvio Padrão
Sabendo que a média dos valores da corretora A é 55,72 , os desvios x
i
– x
são: 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, teríamos:
O desvio médio e a variância são definidos, usando os termos acima:
Então, desvio médio e a variância dos dados da corretora A são
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 ações, segundo o
desvio médio. Isto significa que o percentual de lucro de ações da corretora B é mais
homogêneo que o da corretora A.
Para evitar erros de interpretação ÷ a variância é uma medida que expressa
um desvio quadrático médio ÷ usamos o desvio padrão (σ), que é definido como a
raiz quadrada da variância (σ)
2
. O MATLAB tem uma função específica para o
cálculo de desvio padrão denominada std . Portanto, para o exemplo das corretoras:
» std(corretoraA) » std(corretoraB)
ans =7.6758 ans =3.1478
4436 , 100 28 , 4 72 , 0 ... 28 , 14 72 , 0 28 , 6 72 , 1 28 , 4 72 , 10 x x
18
0 i
i
· + + + + + + + + · −

·
( ) 5294 , 1060 44 , 1 56 , 2 ... 56 , 3 44 , 3 44 , 5 56 , 2 44 , 0 56 , 1 x x
18
0 i
2
i
· + + + + + + + + · −

·
( )
n
x x
Variância
2
n
1 i
i ∑
·

·
n
x x
o DesvioMédi
n
1 i
i ∑
·

·
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 57
Para o MATLAB, a variância de um conjunto de dados é definida por:
onde µ é a média do conjunto de valores. O denominador N – 1 deve ser usado toda
vez que estivermos trabalhando com uma amostra. Quando não houver a preocupação
em saber se trabalhamos com população ou amostra, podemos usar o denominador n.
Para grandes amostras pouca diferença fará se usarmos um ou outro.
Os comandos mean, std, max e min determinam, respectivamente, a média, o
desvio padrão, o máximo valor e o valor mínimo 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 funções também são
válidas para matrizes. Elas retornam um vetor-linha contendo, respectivamente, a
média, o desvio padrão, o máximo valor, o mínimo valor de cada coluna. Um
exemplo de aplicação de medidas estatísticas para matrizes é dado a seguir:
A JR Indústria de Alimentícios, desejando melhorar o nível de seus
funcionários em cargos de chefia, montou um curso experimental e indicou 15
funcionários para sua primeira turma. Os dados referentes à seção a que pertencem e
notas obtidas estão na tabela a seguir.
Usando os dados da tabela, determine:
• A média em cada disciplina;
• As menores notas em cada disciplina e os funcionários que as obtiveram;
E,
• Dispor as notas de Administração em forma crescente;
• Comparar os funcionários das seções de Vendas e Técnicas e determinar a maior
nota destes funcionários em cada disciplina;
• Comparar a distribuição dos dados nas disciplinas de Direito, Metodologia e
Economia.
( )
1 N
x
N
1 k
2
k
2

µ −
· σ

·
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 58
Func. Seção ADM DIR RED ECO ING MET
1 Pessoal 8.0 9.0 8.6 8.5 9.0 9.0
2 Pessoal 8.0 9.0 7.0 8.0 9.0 6.5
3 Pessoal 8.0 9.0 8.0 8.5 8.0 9.0
4 Pessoal 6.0 9.0 8.6 8.5 8.0 6.0
5 Pessoal 8.0 9.0 8.0 9.0 9.0 6.5
6 Técnica 10.0 9.0 8.0 8.5 8.0 6.0
7 Técnica 8.0 9.0 9.0 8.0 9.0 10.0
8 Técnica 10.0 9.0 8.0 7.5 8.0 9.0
9 Técnica 8.0 9.0 10.0 8.0 10.0 10.0
10 Técnica 8.0 9.0 7.0 8.5 7.0 6.5
11 Vendas 8.0 9.0 9.0 7.5 7.0 9.0
12 Vendas 8.0 9.0 7.0 7.0 8.0 10.0
13 Vendas 8.0 9.0 8.0 7.5 9.0 6.0
14 Vendas 6.0 9.0 9.0 7.5 4.0 6.0
15 Vendas 6.0 9.0 4.0 8.5 7.0 6.0
Sabemos que a função mean calcula a média dos elementos de um vetor. Em
uma matriz, a função calcula um vetor linha que contém a média de cada coluna.
Para o exemplo do curso de aperfeiçoamento, podemos considerar a lista de
funcionários e suas respectivas notas em cada disciplina, uma matriz 15 x 6, onde as
colunas representam as disciplinas do curso, facilitando o cálculo da média da turma
em cada matéria. Então, definindo a matriz no MATLAB.
»TURMA = [ 8.0 9.0 8.6 8.5 9.0 9.0
8.0 9.0 7.0 8.0 9.0 6.5
8.0 9.0 8.0 8.5 8.0 9.0
6.0 9.0 8.6 8.5 8.0 6.0
8.0 9.0 8.0 9.0 9.0 6.5
10.0 9.0 8.0 8.5 8.0 6.0
8.0 9.0 9.0 8.0 9.0 10.0
10.0 9.0 8.0 7.5 8.0 9.0
8.0 9.0 10.0 8.0 10.0 10.0
8.0 9.0 7.0 8.5 7.0 6.5
8.0 9.0 9.0 7.5 7.0 9.0
8.0 9.0 7.0 7.0 8.0 10.0
8.0 9.0 8.0 7.5 9.0 6.0
6.0 9.0 9.0 7.5 4.0 6.0
6.0 9.0 4.0 8.5 7.0 6.0];
E denominando o vetor que representa a média da turma em cada disciplina
de MEDIA_TURMA, temos:
» MEDIA_TURMA = mean (TURMA)
A
D
M



a
d
m
i
n
i
s
t
r
a
ç
ã
o
D
I
R



d
i
r
e
i
t
o
R
E
D



r
e
d
a
ç
ã
o
E
C
O



e
c
o
n
o
m
i
a
I
N
G



i
n
g
l
ê
s
M
E
T

-

m
e
t
o
d
o
l
o
g
i
a
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 59
» MEDIA_TURMA =
7.8667 9.0000 7.9467 8.0667 8.0000 7.7000
A saída do MATLAB mostra que as médias da turma nas disciplinas de
Administração, Direito, Redação, Economia, Inglês e Metodologia são,
respectivamente, 7.8667, 9.0000, 7.9467, 8.0667, 8.0000 e 7.7000.
Se quiséssemos apenas a média da turma em Redação, usaríamos o operador
dois pontos (:), conforme mostraremos a seguir:
» MEDIA_RED = mean (TURMA (: , 3))
» MEDIA_RED =
7.9467
ou ainda, a média dos funcionários da seção de Pessoal em Direito:
» MEDIA_PDIR = mean (TURMA(1:5, 2))
» MEDIA_PDIR =
9.0000
• Menores notas e os funcionários que as obtiveram
A função min retorna o menor valor de um vetor. Em uma matriz, a função
retorna um vetor-linha cujos elementos são os menores valores de cada coluna. Além
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 idênticos, o índice do primeiro é retornado. Logo, se usarmos esta forma da
função min na matriz TURMA, podemos determinar a menor nota em cada disciplina
o funcionário que a obteve. No caso, o vetor y denominar-se-á GRAU_MIN.
» [ GRAU_MIN, i ] = min (TURMA)
» GRAU_MIN =
6 9 4 7 4 6
i =
14 1 15 12 14 4
Assim, o funcionário 14 obteve a menor nota (6,0) em Administração, o
mesmo acontece em Inglês. Observe que atribuiu-se ao funcionário 1 o menor grau
em Direito, disciplina em que todos tiveram o mesmo grau. Conforme vimos, quando
há valores mínimos idênticos, o índice do primeiro valor é retornado. Por isso, a
atribuição do funcionário 1.
Esta forma é válida também para a função max.
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 60
• Notas de Administração em Forma Ascendente
O MATLAB contém uma função 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 Administração em ordem ascendente,
usamos a função sort. Porém, devemos antes selecionar a disciplina de
Administração, utilizando o operador dois pontos ( : ),
» ADM = TURMA( : , 1);
» GRAU_ASC = sort (ADM)
Poderíamos calcular diretamente sem
precisar definir o vetor-coluna ADM:
» GRAU_ASC = sort (TURMA( : , 1))
Se quiséssemos somente as três menores notas,
faríamos:
» GRAU_ASC = sort (TURMA( : , 1));
» ASC_3 = sort (GRAU_ASC ( 1: 3 , 1))
A função sort também apresenta a forma [y, I ] = sort
(x) onde os valores dispostos em forma crescente são
armazenados na matriz y e seus índices , na matriz i.
Se x contiver valores complexos, os elementos serão
distribuídos de forma ascendente de acordo com seus
valores absolutos.
Tente fazer:
» [y,i] = sort (TURMA)
• Comparação entre as distribuições de dados de Direito, Metodologia e
Economia.
Para auxiliar na comparação entre dados de variáveis, usaremos um tipo
especial de gráfico que particularmente relevante às medidas estatísticas discutidas
nesta seção. Um histograma é um gráfico que mostra a distribuição de um grupo de
valores. No MATLAB, o histograma calcula o número de valores a distribuir em 10
» GRAU_ASC =
6
6
6
8
8
8
8
8
8
8
8
8
8
8
10
10
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 61
barras igualmente espaçadas entre os valores máximos e mínimo 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 número de barras. Portanto, se
quisermos aumentar a resolução dos histograma tal que usemos 25 barras, em vez de
10, faremos:
» hist ( x , 25)
A informação usada para plotar também 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 contém os dados para 10 barras, e o vetor x
contém 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 são usados geralmente em gráficos do tipo bar, que será discutido no
capítulo 7.
Agora, podemos usar o histograma para comparar e indicar as diferenças
existentes entre as distribuições de dados de Direito, Metodologia e Economia.
Figura 5.3 - Histograma de Direito Figura 5.4 - Histograma de Economia
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 62
Observe as diferenças entre os histogramas. Enquanto o histograma de
Direito indica que todos os alunos obtiveram grau 9,0; em Economia, indica que
apenas 1 funcionário conseguiu o mesmo grau e em Metodologia, quatro
funcionários. Também em Metodologia, há maior percentagem de notas menores que
7,0. Podemos afirmar que as notas são mais homogêneas em Direito. O que é
confirmado se usarmos funções já vistas como mean e std.
Para terminar a parte de funções de análise de dados, mais um exemplo.
Seja o quadro abaixo que mostra a taxa de juros durante os últimos 18 meses.
Suponha que alguém lhe perguntasse como acompanhar o acúmulo de taxa de juros
mês a mês.
Mês/ano Jan/97 Fev/97 Mar/97 Abr/97 Mai/97 Jun/97 Jul/97
Juros a.m (%) 1,25 1,16 1,13 1,12 1,4 1,16 1,16
Mês/ano Ago/97 Set/97 Out/97 Nov/97 Dez/97 Jan/98 Fev/98
Juros a.m (%) 1,13 1,15 1,10 2,04 1,82 1,65 0,95
Provavelmente, você diria que bastaria somar à taxa de juros inicial, os
juros do mês seguinte e assim por diante. É um exemplo típico de soma cumulativa.
No MATLAB, a função 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 4.6600 6.0600 7.2200 8.3800
Figura 5.5 - Histograma de Metodologia
Curso de MATLAB
Cap. 5 - Medidas Estatísticas 63
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
função sum :
» TOTAL_JUROS = sum(JUROS)
TOTAL_JUROS =
18.2200
As funções prod (x) e cumprod (x) são análogas às funções 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á também a função median que calcula a mediana dos elementos de um
vetor x. Mediana é a realização que ocupa a posição central da série de observações
quando estas estão ordenadas segundo suas grandezas (crescente ou
decrescentemente). Assim, se as cinco observações de uma variável, como erros de
impressão na primeira página forem 20, 16, 14, 8 e 19; a mediana é o valor 16. Se o
número de observações é par, usa-se como mediana a média aritmética das duas
observações centrais. Logo, se as observações de uma variável, forem 20, 14, 16 e 8,
a mediana é
Mediana = (14 + 16) / 2 = 15.
E x e r c í c i o s
Determine as matrizes representadas pelas funções 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
1
1
]
1

¸

− −
·
2 1 6
4 8 2
7 3 1
y
Curso de Matlab
Cap. 5 – Medidas Estatísticas 64
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
Aplicação à Solução de Problemas: Análise do Sinal de Voz
Suponha que queiramos projetar um sistema que reconheça as palavras que representam os
dez algarismos: “ zero”, “um”, “dois”, ..., “ nove”. Uma das primeiras coisas que devemos fazer é
analisar os dados para as dez seqüências correspondentes (ou sinais) para verificar se há algumas
medidas estatísticas nas quais possamos distingui-los. As funções para análise de dados do
MATLAB nos permite facilmente calcular estas medidas. Podemos então imprimir uma tabela de
medidas e procurar por aquelas que nos permita distinguir valores.
Atualmente, podemos usar sinais de voz para calcular um número de medidas estatísticas
que poderiam ser usadas como parte de um algoritmo de reconhecimento de dígitos. Os dados para
cada dígito contém mil valores. Escreva um programa MATLAB para ler um arquivo de dados
ASCII denominado zero.dat e calcule as seguintes informação: média, desvio padrão, variância, a
média do módulo.
Já discutimos média, desvio padrão e variância. A média quadrática é o valor médio
quadrático será discutido com mais detalhes na próxima seção. A média dos módulo é a média dos
valores absolutos do conjunto de dados.
1. ENUNCIADO DO PROBLEMA
Calcular as medidas estatísticas a seguir para um sinal de voz.
Curso de Matlab
Cap. 5 – Medidas Estatísticas 65
2. DESCRIÇÃO ENTRADA/SAÍDA
O diagrama abaixo mostra o arquivo que contém os dados como a entrada e as várias medidas
estatísticas como a saída.
3. EXEMPLO MANUAL
Para um exemplo manual, suponha que um sinal contenha a seguinte seqüência de valores:
[ 2.5 8.2 -1.1 -0.2 1.5]
Usando uma calculadora, calculamos os seguintes valores:
a. média = (2.5 + 8.2 - 1.1 - 0.2 + 1.5)/5 = 2.18
b. variância = [(2.5 - µ)
2
+ (8.2 - µ)
2
+ (-1.1 - µ)
2
+ (-0.2 - µ)
2
+ (1.5 - µ )
2
]/4 =
13.307
c. desvio padrão = √13.307 = 3.648
d. média quadrática = (2.5
2
+ 8.2
2
+ (-1.1)
2
+(-0.2)
2
+ 1.5
2
)/5 = 15.398
e. média dos módulos = ( |2.5|

+ |8.2| + |-1.1| + |-0.2| + | 1.5| /5 = 15.398
4. SOLUÇÃO DO MATLAB
5. TESTANDO
Média
Desvio Padrão
Variância
Média dos Módulos
Média Quadrática
zero.dat
Figura 5.6 – diagrama I/O
Curso de Matlab
Cap. 5 – Medidas Estatísticas 66
5.2 Números Aleatórios
Números aleatórios não são definidos por uma equação. Contudo, possuem certas
características que os definem. Há muitos problemas que pedem o uso de números aleatórios no
desenvolvimento de uma solução. Em alguns casos são usados para desenvolver a simulação de um
problema complexo. A simulação pode ser testada diversas vezes para analisar os resultados e cada
teste representa um repetição do experimento. Também usamos números aleatórios para aproximar
seqüências de ruído. Por exemplo, o que ouvimos no rádio é uma seqüência de ruído. Se
estivermos testando um programa que use um arquivo de entrada que representa um sinal de rádio,
poderíamos gerar ruídos e adicioná-los ao sinal de voz ou a uma música em seqüência para prover
mais sinais reais.
Função Número Aleatório
A função rand no MATLAB gera números aleatórios no intervalo [ 0,1]. Os números
aleatórios podem ser uniformemente distribuídos no intervalo [0,1] ou podem ser distribuídos
normalmente, nos quais média e variância são, respectivamente, 0 e 1. Um valor é usado para
iniciar uma seqüência aleatória.
Rand (n) Retorna uma matriz de ordem n cujos elementos são números aleatórios
entre 0 e 1.
Rand (m,n) Matriz com m linhas e n colunas cujos elementos são números aleatórios
entre 0 e 1.
Rand(size (A)) Matriz de mesma ordem que a matriz A.
Rand (‘uniform’)
Rand (‘normal’)
Especificam se os números aleatórios desejados serão uniformemente ou
normalmente distribuídos.
Rand (‘seed’, n) Determina n como o valor inicial de uma seqüência de números aleatórios.
Rand (‘seed’) Retorna ao valor atual de início do gerador de números aleatórios.
Função Densidade de Probabilidade
Suponha que o ponteiro dos segundos de um relógio elétrico possa parar a qualquer
instante por defeitos técnicos. 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 região entre dois valores quaisquer.
Assim, a probabilidade de o ponteiro parar no intervalo entre os números 9 e 12 é ¼, pois neste
intervalo corresponde a ¼ do total. Então,
P (270
0
≤ X ≤ 360
0
) = ¼
Curso de Matlab
Cap. 5 – Medidas Estatísticas 67
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 números a e b, de forma que
P ( a ≤ X ≤ b) = b – a _
360
0
Construindo um histograma da variável X:
O histograma corresponde à função:
A área correspondente ao intervalo [a,b] indica a probabilidade de a variabilidade de a
variável estar entre a e b. Matematicamente,
A função f(x) é chamada função densidade de probabilidade (f.d.p). A f.d.p. determina a região
onde há maior probabilidade de uma variável X assumir um valor pertencente a um intervalo.
f(x)
a b c d 360 x (em graus)
1/360
¹
¹
¹
'
¹

< ≤
<
·
0
0 0
0
360 x se , 0
360 X 0 se , 360 / 1
0 X se , 0
) x ( f
0
b
a
b
a
0
360
a b
dx
360
1
dx ) x ( f ) b X a ( P

· · · ≤ ≤
∫ ∫
Figura 5.7 – histograma da variável X
Curso de Matlab
Cap. 5 – Medidas Estatísticas 68
Existem alguns modelos freqüentemente usados para representar a f.d.p. de uma variável
aleatória contínua como :
a) Modelo Uniforme
• Definição: Uma variável aleatória X tem distribuição uniforme com a e b (a<b) reais, se a sua
f.d.p. é dada por:
• Gráfico:
• Variância (σ
2
)
σ
2
= (b – a)
2
12
b) Modelo Normal
A variável X tem distribuição normal com parâmetros µ e σ
2
, denotada por X: (µ, σ
2
),
onde -∞ < µ < +∞ e 0 < σ
2
< + ∞, se sua f.d.p. é dada por:
f(x)
¹
¹
¹
'
¹
< <

·
. pontos demais , 0
b x a se ,
a b
1
) x ( f
2
2
2
) x (
e
2
1
) x ( f
σ
µ − −
π σ
·
Figura 5.9 – distribuição uniforme
1/ (b –a)
a 0 b x
Curso de Matlab
Cap. 5 – Medidas Estatísticas 69
Para -∞ < µ < +∞.
• Gráfico: A curva normal é particular para média µ e variância σ
2
.
Como a probabilidade de a variável X ocorrer num intervalo, matematicamente, é a área
sob a curva, teríamos valores diferentes de probabilidade para cada valor de µ e de σ. Por isso,
usamos a curva normal padrão ou reduzida (µ = 0, σ
2
= 1) – ver figura acima, denotada por
N(0,1). Se X: N(µ,σ
2
) , então a variável aleatória Z com distribuição N (0, 1) é definida por:
Z = X - µ
σ
Exemplo: Suponha que as amplitudes de vida de dois aparelhos elétricos, D1 e D2, tenham
distribuições N(42, 36) e N(45, 9), respectivamente Se o aparelho é para ser usado por um
período de 45 horas, qual aparelho deve ser preferido? E se for por um período de 49 horas?
a) 45 horas
f(Z)
0
+1 -1 z
5 , 0 ) 0 Z ( P
3
45 45
3
45 T
P ) 45 2 D ( P
308 , 0 192 , 0 5 , 0 )
6
1
Z ( P
6
42 45
6
42 T
P ) 45 1 D ( P
· > ·

,
_

¸
¸ −
>

· >
· − · > ·

,
_

¸
¸ −
>

· >
Figura 5.9 – Curva Normal Padrão
Curso de Matlab
Cap. 5 – Medidas Estatísticas 70
b) 49 horas
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 versão de f.d.p. para números aleatórios. Antes,
aprenderemos como o MATLAB pode ser usado para gerar números aleatórios uniforme ou
normalmente distribuídos. Por exemplo, se quisermos gerar uma seqüência de 10 números
aleatórios uniformemente distribuídos entre os valores 0 e 1 , devemos fazer:
rand (‘seed’,0)
rand (‘uniform’)
rand (10,1)
Podemos converter um número r que está uniformemente distribuído entre 0 e 1 para um
valor situado entre um intervalo qualquer. Por exemplo, se quisermos gerar 10 números aleatórios
uniformes entre –5 e 5, devemos primeiro gerar os números entre 0 e 1. Logo em seguida,
usamos a equação:
x = (b – a) . r + a
onde b e a são, respectivamente, os limites inferior e superior (no caso, 5 e –5). Assim, suponha
que armazenamos os dez números aleatórios determinados anteriormente em um vetor coluna
denominado SINAL. Para convertê-los em valores entre –5 e 5 usamos:
x = (10*SINAL) – 5
E x e r c í c i o s
Determine os comandos do MATLAB necessários para gerar 10 números aleatórios com as
características específicas. Verifique sua respostas.
Números uniformemente distribuídos entre 0 e 10,0
Números uniformemente distribuídos entre -1 e 1.
Números uniformemente distribuídos entre - 20 e – 10.
Números uniformemente distribuídos entre 4,5 e 5,0
Números uniformemente distribuídos entre π e -π.
093 , 0 407 , 0 5 , 0
3
4
Z ' P
3
45 49
3
45 T
P ) 49 2 D ( P
123 , 0 377 , 0 5 , 0
6
7
Z ' P
6
42 49
6
42 T
P ) 49 1 D ( P
· − ·
,
_

¸
¸
> ·
,
_

¸
¸ −
>

· >
· − ·
,
_

¸
¸
> ·
,
_

¸
¸ −
>

· >
Curso de Matlab
Cap. 5 – Medidas Estatísticas 71
O MATLAB também gera valores distribuídos normalmente cuja média é igual a zero e a
variância, igual a 1. Se quisermos modificar estes valores para uma outra distribuição,
multiplicamos os valores pelo desvio padrão da distribuição desejada e os adicionamos à média
desta distribuição. Portanto, se r é um número qualquer com média 0 e variância 1, a equação a
seguir irá gerar um novo número aleatório x com desvio padrão a e média b:
x = a . r + b
Os comando abaixo geram números normalmente distribuídos com média 5 e variância
igual a 2:
rand (‘seed’,0)
rand ( ‘normal’)
s = sqrt(2)*rand (10,1) + 5
Os valores a serem impressos por este programa são:
s =
6.6475
5.8865
5.1062
5.4972
4.0150
7.3987
5.0835
7.5414
5.3734
6.2327
Funções 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 versão da f.d.p. para os
números aleatórios. Por exemplo, suponha que geramos mil números aleatórios 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)
Curso de Matlab
Cap. 5 – Medidas Estatísticas 72
O gráfico é mostrado na figura abaixo. Os números aleatórios estão distribuídos entre 0 e
1 e a distribuição é relativamente alisada.
Figura 5.10 - Histograma para números aleatórios uniformemente distribuídos
Suponha agora que queiramos gerar mil números aleatórios distribuídos normalmente (cuja
distribuição é N(0,1) ) e armazená-los em um vetor coluna denominado G_VALORES. Podemos
plotar a função com os comandos:
rand(‘normal’)
G_VALORES = rand (1000,1);
hist (G_VALORES, 25)
O gráfico correspondente é mostrado a seguir. Conforme esperávamos, a distribuição
atinge seu valor máximo onde a média é igual a zero, e a maioria dos valores está entre dois desvios
padrões (-2 a 2).
Figura 5.11 - Histograma para números aleatórios normalmente distribuídos
Curso de Matlab
Cap. 5 – Medidas Estatísticas 73
E x e r c í c i os
Use o MATLAB para gerar mil valores com as características desejadas. Calcule a média
e a variância de mil valores, e compare-as aos valores especificados. Estes valores devem ser
semelhantes. Também plote um histograma dos valores, usando 25 barras.
1. Números normalmente distribuídos com µ = 5 e σ
2
= 0,5;
2. Números normalmente distribuídos com µ = -5.5 e σ = 0,25;
3. Números normalmente distribuídos com µ = -5.5 e σ = 1,25;
4. Números normalmente distribuídos com µ = π e σ = π/8;
Aplicação à Solução de Problemas: Simulador de Vôo
As simulações em computadores são usadas para gerar situações que modelam ou imitam
uma situação do mundo real. Algumas simulações computacionais são desenvolvidas para jogos
como pôquer ou damas. Para jogar, você indica seu movimento e o computador então selecionará
uma resposta apropriada. Outros jogos usam a computação gráfica para desenvolver uma interação
tal como o uso do teclado ou do mouse para jogar. Nas simulações mais sofisticadas, como um
simulador de vôo o computador não somente responde à entrada do usuário mas também gera
valores como temperaturas, velocidade do vento, e os locais de outras aeronaves. Os simuladores
também simulam emergências que ocorrem durante o vôo de uma aeronave. Se toda esta
informação gerada pelo computador for sempre a mesma série de informação, então o valor do
simulador seria grandemente reduzido. É importante que estejamos aleatoriamente à geração de
dados. As simulações de Monte Carlo usam números aleatórios para gerar valores que modelam os
eventos.
Escreva um programa MATLAB para gerar um seqüência de números aleatórios para
simular uma hora de dados de velocidade do vento, o qual é atualizado a cada 10 segundos. (Uma
hora de dados é então representada por 361 valores.) De uma análise do padrão real de vento, foi
determinado que a velocidade do vento pode ser modelada como um número aleatório distribuído
normalmente. A média e a variância são exclusivamente para uma região específica e período do
ano e são como parâmetros de entrada. Além do mais, supõe-se que o avião tem 1% de chance de
voar sob uma pequena tempestade . A duração do tempo que o avião está em uma pequena
tempestade é três minutos. Quando o plano está numa pequena tempestade, a velocidade do vento
aumenta em 10milhas por hora. Também, há 0.01% de chances que o avião 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.
Curso de Matlab
Cap. 5 – Medidas Estatísticas 74
1. ENUNCIADO DO PROBLEMA
Gerar uma hora de velocidade simulada do vento usando estatísticas desenvolvidas para
área de vôo.
2. DESCRIÇÃO ENTRADA/SAÍDA
A figura abaixo, a entrada para o programa é as estatísticas do tempo no plano de vôo, as
quais são representadas pelo média e variância da velocidade do vento em tempo normal. A saída é
o gráfico e o arquivo de dados contendo os valores das velocidades do vento simuladas.
3. EXEMPLO MANUAL
Esta simulação usa várias seqüências diferentes de números aleatórios. A velocidade do
vento é um número aleatório normalmente distribuído com média e variância particulares. As
possibilidades de encontrar uma tempestade ou microrrajadas são dadas como valores percentuais e
podem ser modelados como números uniformemente distribuídos. Suporemos que ocorrerá uma
tempestade se um número aleatório uniforme entre 0 e 1 tiver um valor entre 0.0 e 0.01, e que
ocorrerá um microrrajadas se o número aleatório uniforme estiver entre 0.01 e 0.0101.
4. SOLUÇÃO MATLAB
5. TESTANDO
venvlc.dat
Média
Variância
Início de
Seqüência
Curso de Matlab
Cap. 5 – Medidas Estatísticas 75
5.3 Relação Sinal/Ruído
Quando a geração de sinais é usada em técnicas de testes de engenharia, freqüentemente
queremos gerar seqüências como uma senóide com ruído adicionado. De ruído pode ser
especificado como uma relação sinal/ruído, ou SNR. A SNR é definida em termos de energia de
um sinal . Discutiremos energia de um sinal e então retornaremos a definição matemática 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
média quadrática do sinal:
Observe que isto pode ser facilmente calculado usando a função MATLAb sum:
Energia = sum (x.^2)
pode ser mostrado que a energia em um sinal é igual a soma dos quadrados da variância e média:
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 senóide, pode ser mostrado matematicamente que a energia do sinal é igual a
metade do quadrado da amplitude da senóide. Assim, a energia da senóide 4sen2πt é igual a 16/2,
ou 8.
E x e r c í c i o s
Dê os comandos do MATLAB para gerar mil valores da seqüência indicada. Calcule a energia
usando o valor médio quadrático e então calcule-o usando a média e a variância; os valores devem
ser semelhantes.
N
x
energia
N
1 k
2
k ∑
·

Curso de Matlab
Cap. 5 – Medidas Estatísticas 76
1. Valores uniformes entre 0 e 10;
2. Valores uniformes entre –2 e 4;
3. Valores uniformes com média 0 e variância 1,0;
4. Valores uniformes com média –0.5 e variância 4,0;
5. Valores normalmente com média 0 e variância 2,0;
6. Valores normalmente com média 0 e variância 0,5;
7. Valores normalmente com média –2,5 e variância 0,5.
Cálculo de SNR
Uma relação sinal/ruído é a relação entre a energia em um sinal e a energia em um ruído.
Por exemplo, uma SNR de 1 especifica que a relação entre a energia do sinal e a energia do ruído é
1:1. Se tivermos uma senóide com uma amplitude 3 adicionada a um ruído uniforme entre –1 e 1,
podemos calcular a SNR usando as medidas de energia de dois sinais. A energia da senóide é 9/2, e
a energia do sinal é igual a 2
2
/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 ruído 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 senóide de 1Hz com ruído cuja média é 0 em uma SNR de 46. A senóide deve Ter
uma amplitude de 1.5 e um ângulo de fase de 0.0, e ser uma amostra de 100 Hz (cuja média é uma
amostra de tempo de 1/100 segundos). A SNR é igual a energia da senóide dividida pela energia do
ruído.
SNR = energia do sinal _ = (1.5
2
) / 2 = 46
energia do ruído energia do ruído
Assim, para a energia do ruído, temos:
Energia do ruído = (1.5
2
) /2 = 0.024
46
Como o ruído é especificado para ter média zero, a energia do ruído é igual a variância.
Assim, a variância do ruído é 0.024. Já que o ruído é uniforme e tem média zero, ele alcança entre
a e -a. Logo, a variância é igual a (2a)
2
/12 e 0.024 = (2a)
2
/12 ou a = 0,27.
Curso de Matlab
Cap. 5 – Medidas Estatísticas 77
Podemos gerar o sinal de ruído desejado e adicioná-lo à senóide para obter a SNR
desejada. Os comandos para gerar estes sinal são mostrados a seguir:
%
% Gerar e plotar senóide mais ruído
%
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(‘Senóide com ruído’),…
xlabel ( ‘t, segundos’), …
ylabel(‘[s(k)]’), …
grid
O gráfico é mostrado a seguir. Observe que há dois períodos do sinal em dois segundos.
Isto corresponde ao fato que a freqüência é 1 Hz, de modo que período é 1 segundo.
Adicionando ruído a um sinal existente
Suponha que queiramos adicionar um ruído a um sinal já coletado e armazenado em um arquivo de
dados. Se quisermos adicionar ruídos que mantenham uma SNR especificada, precisaremos avaliar
a energia do sinal tal que possamos determinar a energia apropriada para o sinal de ruído. Uma boa
avaliação da energia de uma sinal é a média quadrática do valor do sinal , o qual pode ser
facilmente calculado usando o MATLAB. Podemos determinar a energia necessária para o ruído.
Curso de Matlab
Cap. 5 – Medidas Estatísticas 78
Sabemos que a energia é uma função de média e variância, então precisaríamos de um destes
valores especificados em ordem para determinar o outro. Ë desejável para o ruído ter média zero,
para isto supomos que não há outra informação considerável. Podemos calcular a variância
necessária e gerar o ruído e adicioná-lo ao sinal existente.
E x e r c í c i o s
Gerar e plotar um sinal composto de 100 pontos de uma amostra senoidal de 5 Hz a 50 Hz mais
um ruído de média zero como especificado a seguir:
1. Ruído uniforme com SNR igual a 5;
2. Ruído uniforme com SNR igual a 1;
3. Ruído uniforme com SNR igual a 0,2;
4. Ruído normal com SNR igual a 5;
5. Ruído normal com SNR igual a 1;
6. Ruído normal com SNR igual a 0,2.
Curso de MATLAB
Cap. 6 – Operações com Matrizes 79
Capítulo 6 – Operações com Matrizes
Uma matriz é um conveniente meio para representar dados experimentais. Nos capítulos
anteriores, nós discutimos cálculos matemáticos e funções que poderiam ser aplicadas elemento a
elemento presente nas matrizes. Neste capítulo, nós apresentaremos um conjunto de operações e
funções que podem ser aplicadas à matrizes como um todo, ao invés de lidarmos com os elementos
individualmente. Vamos primeiro considerar um conjunto de operações matemáticas aplicados à
matrizes. E depois vamos considerar um grupo de funções que ajudam na manipulação das matrizes.
6.1 Operações com Matrizes
• Matrizes Transpostas
A transposta de uma matriz é uma nova matriz onde as colunas são formadas pelas linhas da
matriz original.
Exemplo 1

Podemos notar que o elemento da posição (3,1) foi movido para a posição (1,3). De fato,
quando se acha a matriz transposta de uma matriz temos a troca de elementos das posições (i,j) para
as posições (j,i).
No MATLAB a matriz transposta é denotada por A'.
Somatório de Produtos
É a soma escalar de dois vetores do mesmo tamanho.
Somatório de produtos = A . B =
= j
N
i
aibi
Curso de MATLAB
Cap. 6 – Operações com Matrizes
80
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:
Somatório de produtos = sum (A .*B);
Quando A for um vetor linha e B um vetor coluna, temos que:
Somatório de produtos = sum (A' .*B);
Quando A for um vetor coluna e B um vetor linha, temos que:
Somatório de produtos = sum (A .*B');
Multiplicação de Matrizes
A multiplicação de duas matrizes corresponde ao somatório de produtos das linhas i da
primeira matriz e das colunas j da Segunda matriz. Como o somatório de produtos requer que os
vetores tenham o mesmo número de elementos, então o número de colunas de A deve ser igual ao
número de linhas de B.
Se A tem 2 linhas e 3 colunas, e B tem 3 linhas e 3 colunas, então 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
Curso de MATLAB
Cap. 6 – Operações com Matrizes 81
Logo a matriz C será:
Neste exemplo não se pode ter B.A pois o número de colunas de B não é igual ao número 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 operação A^2. Lembrando que A^4 equivale a A*A*A*A .
Matriz Inversa
Por definição 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 são 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).
1
]
1

¸

− −
− −
·
7 10 8
5 22 2
C
Curso de MATLAB
Cap. 6 – Operações com Matrizes
82
E x e r c í c i o s p a r a P r a t i c a r !
Sejam as matrizes:

Calcule:
1. AB
2. DB
3. BC'
4. B
-1
B
5. (AC')
-1
6. (AC')
-1
(AC')
Determinante
Seja a matriz

O determinante de A = |A| é definido pela expressão:
a
11
. a
22
– a
21
. a
12
No MATLAB, o comando utilizado para se achar o determinante de uma matriz é det(A).
Aplicação à Solução de Problema: Peso Molecular de Proteínas
A seqüência de proteínas é a sofisticada parte do equipamento que executa a função chave
em engenharia genética. A seqüência pode determinar a ordem de aminoácidos que caracteriza a
cadeia de proteínas. Essa ordem de aminoácidos é que auxilia a Engenharia Genética na
identificação do tipo de gene da proteína. Enzimas são usadas para dissolver as ligações de genes
vizinhos, e assim, separar os genes mais importantes expostos no DNA.
Curso de MATLAB
Cap. 6 – Operações com Matrizes 83
Existem vinte tipos diferentes de aminoácidos. As moléculas de proteínas tem centenas de
aminoácidos articulados em uma ordem específica. A seqüência de aminoácidos de uma molécula de
proteína tem sido identificada e computada pelo peso molecular dos aminoácidos.
O primeiro passo está em arquivar os dados que conterão os números e tipos de moléculas de
aminoácidos em cada molécula de proteína.
Assumindo que os dados do arquivo são gerados pelas seqüências de aminoácidos, cada linha
de dados do arquivo corresponde a uma proteína, portanto, contendo os vinte inteiros
correspondentes aos vinte aminoácidos em ordem alfabética como na tabela.
Por esta razão, a linha contém os seguintes valores gerados pela proteína:
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 moléculas de proteínas.
2. DESCRIÇÃO DA ENTRADA E DA SAÍDA
A figura abaixo contém um diagrama mostrando que a entrada é um arquivo contendo os
aminoácidos identificados em um grupo de moléculas de proteínas. A saída do programa são os
seus respectivos pesos moleculares.
3. SOLUÇÃO 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’;
Curso de MATLAB
Cap. 6 – Operações com Matrizes
84
6.2 Manipulações com Matrizes
Comando rot90
Uma matriz A pode sofrer uma rotação 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:
Curso de MATLAB
Cap. 6 – Operações com Matrizes 85
B = fliplr(A)
C = flipud(B)
Comando reshape
Esse comando reescreve a matriz com diferente número 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)
Curso de MATLAB
Cap. 6 – Operações com Matrizes
86
Se o comando diag for aplicado a um vetor ao invés 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)
Curso de MATLAB
Cap. 6 – Operações com Matrizes 87
Comando tril
É similar ao comando triu, porém essa função mantém a matriz da diagonal principal para
baixo.
Exemplo 9
B = tril(A)
Aplicação à Solução de Problema: Alinhamento de Imagem
Cada ponto de uma imagem é definido como elemento de figura.
Uma boa resolução de imagem é representada por uma matriz com muitos elementos,
enquanto que uma baixa resolução de imagem é representada por uma matriz com poucos.
Por exemplo, uma boa resolução de imagem pode ser representada por uma matriz com 1024
linhas e 1024 colunas, ou um total de mais de milhões de números.
Cada valor de imagem é um código 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 variação de cor cinza.
No exemplo seguinte assumimos que a imagem é representada por uma matriz com 5 linhas e
6 colunas. Assumimos também 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:
Curso de MATLAB
Cap. 6 – Operações com Matrizes
88
Vamos supor que tenhamos duas imagens de um mesmo objeto, de mesma resolução e de um
mesmo código de escala de cinza. Só não sabemos se as duas imagens estão alinhadas de um mesmo
modo. Para determinar o alinhamento correto nós podemos tomar uma imagem como constante,
manipular operações, como rotacionar, para a outra imagem, e então comparar as duas imagens. As
imagens estarão 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-horário (ou de 90
graus no sentido horário).
Para determinar se as duas imagens possuem os mesmos valores(ou estão alinhadas)
observando as diferenças entre os elementos correspondentes nas duas matrizes. Isto pode ser feito
utilizando os seguintes comandos no MATLAB:
dif = sum (sum (image1 - image2));
Curso de MATLAB
Cap. 6 – Operações com Matrizes 89
Infelizmente essa soma pode ser igual a zero mesmo que as matrizes não 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 tivéssemos valores absolutos isso não ocorreria. Logo, se após a diferença elevarmos a
matriz ao quadrado só teríamos valores positivos antes da soma. Podemos fazer isso no MATLAB
através dos seguintes comandos:
distância = sum (sum (image1 - image2) .^2;
Agora as duas imagens estarão alinhadas se a distância for zero.
1. O PROBLEMA EM SI
Determinar a melhor rotação de 90° no alinhamento de duas imagens.
2. DESCRIÇÃO DA ENTRADA E DA SAÍDA
A figura abaixo mostra um diagrama ilustrando que as duas imagens são lidas de dois arquivos e a
saída é o melhor alinhamento entre as duas imagens.
Curso de MATLAB
Cap. 6 – Operações com Matrizes
90
4. UM EXEMPLO PARA AUXILIAR
Supor as duas matrizes:

Se rotacionarmos a matriz B de 0°, 90°, 180° e 270° no sentido anti-horário temos
respectivamente:

Se calcularmos a distância (ou o somatório das diferenças entre dois elementos) C e entre
essas quatros versões de D rotacionadas, acharemos os valores 19, 7, 1 e 13 respectivamente.
Entretanto a mínima distância é 1, e o alinhamento de 180° é o melhor alinhamento usando a rotação
de 90° no sentido anti-horário
5. SOLUÇÃO 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-horário)\n’)
Curso de MATLAB
Cap. 7 – Gráficos 91
Capítulo 7 – Gráficos
Engenheiros usam gráficos para analisar e resolver problemas e situações. Por isso é muito
importante aprendermos a interpretar e gerar gráficos e suas formas. Neste capítulo vamos aprender
como o MATLAB pode nos ajudar a gerar gráficos.
7.1 Gráficos X – Y
É muito comum engenheiros e cientistas usarem gráficos x - y. Os dados que nós plotamos
são usualmente lidos por um arquivo ou calculados em nossos programas.
Geralmente assumimos que valores de x representam variáveis independentes e que valores
de y representam variáveis dependentes. Os valores de y podem ser calculados usando as funções de
x, ou os valores de x e y podem ser retirados de experiência.
Coordenadas Retangulares
Os pontos retangulares identificam os pontos no sistema de coordenadas cartesianas com
suas posições ao longo dos eixos horizontal e vertical como na figura 7.1.

Legenda
Os comandos para se adicionar títulos, linhas de grade e inserir textos estão relacionados a
seguir:
Title(text) 0Este comando escreve títulos no topo do gráfico plotado.
Xlabel(text) 0Este comando escreve um texto abaixo do eixo x do gráfico plotado.
Ylabel(text) 0 Este comando escreve um texto ao lado do eixo y do gráfico plotado.
Text(x, y, text) 0Este comando escreve um texto na tela do gráfico no ponto específico das
coordenadas (x, y) usando os eixos dos gráficos. Se x e y são vetores o texto é escrito a cada ponto.
Text(x, y, text, sc) 0 Este comando escreve um texto na tela do gráfico 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 posições indicadas na tela do gráfico pelo mouse.
grid 0 Este comando acrescenta grades no gráfico plotado.
Curso de MATLAB
Cap. 7 – Gráficos 92
• Comandos de plotar
Geralmente assumimos que y e x são eixos divididos com o mesmo intervalo de espaço.
Esses gráficos são chamados de lineares. As vezes temos que usar uma escala logarítmica em um ou
ambos os eixos.
Os comandos para plotar gráficos lineares e logarítmico são:
plot(x, y) 0Este comando gera gráficos lineares com valores de x e y, onde x representa a variável
independente e y representa a variável dependente.
Semilogx(x, y) 0Este comando gera gráfico usando escala linear para y e escala logarítmica para x.
Semilogy(x, y) 0Este comando gera gráficos usando escala linear para x e escala logarítmica para y.
Loglog(x, y) 0Este comando gera gráficos com escala logarítmica para ambos os eixos x e y.
Obs.: É importante lembrar que logaritmo de valores negativos e zero não existem, logo se
tentarmos plotar um gráfico semilog ou log com valores negativos ou zeros, aparecera no MATLAB
uma mensagem informando que esses valores serão omitidos do gráfico.
7.2 Gráficos Polares
Gráficos polares são úteis quando valores são representados por ângulo e grandeza
(magnitude). Por exemplo se medirmos a intensidade luminosa ao redor de uma fonte de luz,
podemos representar a informação 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
distância do eixo que fornece o angulo até o ponto.
O comando no MATLAB para gerar gráficos polares é:
polar(theta,r) 0Este comando generaliza gráficos polares com ângulo θ (em radiano) e magnitude r
correspondente.
Exemplo: Os comando para a construção do gráfico da figura 7.2;
theta = 0:2*pi / 100 : 2*pi;
r = theta / (2*pi);
polar(theta,r);
Curso de MATLAB
Cap. 7 – Gráficos 93
Transformação retangular / polar ; polar / retangular
Às vezes devido a praticidade é interessante transformarmos coordenadas de um sistema
para outro.
As equações 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);
E x e r c í c i o s
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);
Curso de MATLAB
Cap. 7 – Gráficos 94
Gráficos de barras e degraus
Os gráficos são similares, porém as linhas verticais que marcam o eixo x nos gráficos de
barras são omitidas nos gráficos de degraus.
Comandos:
bar(x, y) 0Este comando gera gráficos de barras com elementos do vetor y localizados no vetor x,
contém o mesmo espaço entre os valores.
stairs(y) 0Este comando gera um gráfico de degraus com os elementos do vetor y localizados no
vetor x, contendo o mesmo espaço entre os valores.
stairs(x,y) 0Este comando gera um gráfico de degraus com os elementos do vetor y.
Exemplo: a figura 7.3 mostra um gráfico de barra;
7.3 Opções
a Gráficos múltiplos => Para plotar curvas múltiplas no mesmo gráfico deve se usar vários
argumentos no comando plotar como a seguir:
plot(x, y, w, z);
Curso de MATLAB
Cap. 7 – Gráficos 95
Quando se executa este comando a curva correspondente a x, y e a curva correspondente a
w, z são plotadas no mesmo gráfico. O MATLAB seleciona linhas diferentes para as curvas plotadas.
• Estilo de linha e marcação
O comando plot(x, y) nos mostra uma linha plotada representando os vetores y e x, mas
podemos selecionar outros tipos de linha. Também podemos selecionar plotar pontos ao invés de
linhas. A seguir as diferentes opções de linhas e marcações:
Tipo de linha Indicador Tipo de ponto Indicador
Solid - point .
Dashed -- plus +
Dotted : star *
Dashdot -. Circle ° °
x-mark x
O comando a seguir representa linha sólida com tipo de ponto x-mark
plot(x, y, x, y, `x`)
Podemos também escolher as cores que serão usadas:
Cor Indicadores
Vermelho r
verde g
azul b
Branco w
Invisível i
O comando seguinte representa linha sólida azul para os vetores x, y e plotando pontos vermelhos x-
mark:
plot(x, y, `b`, x, y, `xr`);
• Escala
A escala dos eixos no matlab é automática, porém se você quiser rearrumar a escala de seus
eixos você pode usar o comando axis. Existe várias formas de se usar o comando axis:
axis - Este comando congela a escala de eixos para uma subseqüência de gráficos. A Segunda
execução do comando retorna o sistema a escala automática.
axis(v)- v é um vetor de quatro elementos que contém a escala de valores,[xmin,xmax,ymin,ymax].
Curso de MATLAB
Cap. 7 – Gráficos 96
Esses comandos tem um uso especial quando se quer comparar curvas de diferentes gráficos, pôs
pode ser difícil a comparação quando as curvas possuem diferentes eixos e escalas.
• Subplot
O comando subplot é usado quando se quer visualizar dois ou mais gráficos ao mesmo tempo.
Subplot(211), plot(x,y)
Subplot(212), plot(y,x)
Esse comando significa que teremos 2 gráficos 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 gráfico;
clc __________________ Limpa a janela de comando;
clg __________________ Limpa a janela do gráfico;
E x e r c í c i o
Gerar 12 pontos de uma função para os valores de x começando de x=0 e incrementando de 0.5;
y = 5x.^2 :
a) Gerar o gráfico linear desta função;
b) Gerar o gráfico desta função com escala logarítmica x;
c) Gerar o gráfico desta função com escala logarítmica y;
d) Gerar o gráfico loglog desta função;
e) Comparar as vantagens e desvantagens dos gráficos;
Solução:
7.4 Gráficos 3D
A rede de superfície pode ser gerada por um conjunto de valores em uma matriz. Cada
ponta na matriz representa o valor da superfície que corresponde ao ponto na tela.
Para gerar um arquivo que representa uma superfície 3D, primeiramente calculamos o
conjunto dos valores de x e y que representam as variáveis independentes e depois calculamos os
valores de z que representa os valores da superfície. O comando no MATLAB para plotar gráficos
3D é mesh(z). O comando meshgrid tem os argumentos do vetor x e y, ou seja transforma o domínio
especificado pelos vetores x e y em vetores que podem ser usados em cálculos de funções de 2
variáveis e construção de gráfico 3D.
Curso de MATLAB
Cap. 7 – Gráficos 97
Exemplo:
Gerar o gráfico 3D da função -0.5 < x < 0.5 ; -0.5 < y < 0.5 ; ( Figura 7.4)
f(x ,y)= z = 1 - x²- y²
1 = |x² + y² + z²|
Solução:
[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 - Gráfico 3D
Quando geramos redes de superfície 3D podemos querer escolher a posição de visão que
será definida com os termos azimuth ( rotação horizontal ) e vertical elevation que especifica os
graus (rotação vertical ).
Exemplo:
1) Rotação horizontal ( figura 7.5 ):
Comando no MATLAB :
f(x ,y)= z = 1 - x²- y²
1 = |x² + y² + z²|
Curso de MATLAB
Cap. 7 – Gráficos 98
Solução:
[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 - Rotação horizontal
2) Rotação vertical (figura 7.6):
Comando no MATLAB
f(x ,y)= z = 1 - x²- y²
1 = |x² + y² + z²|
Solução:
[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]);
Curso de MATLAB
Cap. 7 – Gráficos 99
Figura 7.6 - Rotação vertical
E x e r c í c i o
Gerar o gráfico 3D da função z=f(x, y)= x*exp(-x^2-y^2)
para -2 < x < 2, -2 < y < 2 :
Solução:
Aplicação a solução de problemas: Trajetória de um Satélite
Satélites são usados para investigar diferentes níveis de atmosfera para obter informações
semelhantes as que são usadas para monitorar os níveis de ozônio na atmosfera.
Para aumentar a bagagem científica de coleção de dados da parte mais elevada da atmosfera,
os satélites auxiliam sistemas de telemetria para transmissão de informação.
Nessa seção nós assumimos que temos um arquivo contendo altitude, velocidade e
aceleração, para um conjunto de dados relativos a uma trajetória de dois estágios do simulador.
Curso de MATLAB
Cap. 7 – Gráficos 100
1. PROBLEMA EM SI
Queremos gerar gráficos desses arquivos (altitude, velocidade, aceleração) para determinar
se a performance dos dois estágios são similares.
2. DESCRIÇÃO ENTRADA / SAÍDA:
3. SOLUÇÃO MATLAB
Satélite.dat
altitude
velocidade
acelereção
Curso de MATLAB
Cap. 8 – Soluções a Sistemas de Equações Lineares
101
Capítulo 8 - Solução a Sistemas de Equações Lineares
8.1 Interpretação gráfica
A interpretação gráfica é necessária para solução a sistemas de equações lineares ocorrente
freqüentemente em problemas de engenharia. A vários métodos existentes para solucionar sistemas
de equações, mas eles envolvem operações demoradas com grande oportunidade de erro. Entretanto
temos que entender o processo para que possamos corrigir e interpretar os resultados do
computador.
Uma equação linear com 2 variáveis, 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 equações 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 são vistas na figura 8.1.
(a) - Retas que se interceptam.
Curso de MATLAB
Cap. 8 – Soluções a Sistemas de Equações Lineares 102
(b) - Retas paralelas
(c) - Retas iguais - fig8.1
Curso de MATLAB
Cap. 8 – Soluções a Sistemas de Equações Lineares
103
Equações que representam duas retas que se interceptam podem ser facilmente identificadas
porque possuem diferentes coeficientes angulares.
Exemplo: y = 2x -3 ; y = -x +3;
Equações que representam duas retas paralelas possuem o mesmo coeficiente angular e
coeficientes lineares diferentes.
Exemplo: y = 2x - 3 ; y = 2x + 1;
Equações que representam a mesma reta são equações com mesmo coeficiente angular e
mesmo coeficiente linear.
Exemplo: y = 2x - 3 ; 3y = 6x - 9;
Se a equação linear contém 3 variáveis x, y, z então ela representa um plano em espaço
tridimensional.
Se temos duas equações com três variáveis, 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 idéias podem ser estendidas para mais de três variáveis porém se torna difícil a
visualização desta situação.
Em muitos sistemas de engenharia estamos interessados em determinar se existe uma solução
comum para sistemas de equações. Se a solução comum existe então podemos determina-la. Vamos
discutir dois métodos para solução de sistemas de equação usando MATLAB.
8.2 Solução usando operação com matrizes
Considerando o sistema seguinte de três equações com três variáveis desconhecidas.
3x +2y -z = 10
-x +3y +2z = 5
x -y -z = -1
Podemos rescrever os sistemas de equações usando as seguintes matrizes:
A = 3 2 -1 x = x B = 10
-1 3 2 y 5
1 -1 -1 z -1
Curso de MATLAB
Cap. 8 – Soluções a Sistemas de Equações Lineares 104
Usando multiplicação de matrizes, o sistemas de equações pode ser escrito na forma:
Ax = B
Divisão de matrizes
No MATLAB, um sistema de equações simultânea pode ser resolvido usando divisão de
matrizes. A solução da equação da matriz Ax = B pode ser calculada usando divisão 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 contém os seguintes valores -2; 5; -6. Para confirmar se os valores de x estão corretos
podemos multiplicar A*x e veremos que o resultado será B.
Matriz inversa
O sistema de equações pode ser resolvido usando matriz inversa. Por exemplo assumimos que A,
x, B são matrizes definidas a seguir:
A = 3 2 -1 x = x B = 10
-1 3 2 y 5
1 -1 -1 z -1
Então A*x = B. Suponha que multiplicamos ambos os lados da equação da matriz por A^-1 então
temos:
A^-1*A*x =A^-1*B
Mas A^-1*A é igual a matriz identidade I, então temos:
I*x=A^-1*B ou
x = A^-1*B;
No MATLAB podemos calcular essa expressão usando o comando:
X = inv(A)*B;
E x e r c í c i o s
1) Resolver os sistemas de equações com os métodos acima e se possível plotar os gráficos.
a) -2x + y = -3
x + y = 3
Curso de MATLAB
Cap. 8 – Soluções a Sistemas de Equações Lineares
105
b) -2x + y = -3
-2x + y = 1
Aplicação a solução de problemas: Análise de circuito elétrico
A análise de circuito elétrico freqüentemente envolve o encontro de soluções de conjunto de
equações. Essas equações são usadas para descrever as correntes que entram e que saem dos nós, ou
a voltagem em cada malha.
A figura 8.2 nos mostra um circuito com duas fontes de voltagem. As três equações que
descrevem a voltagem ao redor dos três laços são:
Figura 8.2 - Circuito com duas fontes de voltagem
( R1+R2 )i1 -R2i2 +0i3 = V1
-R2i1 +(R2+R3+R4) i2 -R4i3 = 0
0i1 -R4i2 +(R4+R5)i3 = -V2
Problema: Calcular as três correntes do circuito da figura 8.2 considerando os valores da
figura para R1, R2, R3, R4, R5, V1 e V2.
Entrada / Saída:
R1 R2 R3 R4 R5 i1
i2
V1 V2
i3
Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 106
Capítulo 9 - Ajuste de Curvas e Interpolação
Em diversas áreas do conhecimento, com freqüência se torna necessário descrever os
dados obtidos experimentalmente oriundos de um experimento ou fenômeno físico. Essas
informações podem ser tomadas como coordenadas de pontos que definem uma certa função
analítica f(x). Podemos ainda usar estes pontos para estimar valores da função que não estejam
dentre os iniciais. Outro problema de engenharia é quando não é necessário que a função vá
diretamente para todos os pontos dados e sim, para uma estimativa mais apropriada do
comportamento da função. Há duas alternativas para resolver este problema. Na interpolação,
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 método é chamado de ajuste de curvas ou regressão,
que tem como objetivo achar alguma curva suave que melhor se ajuste aos dados, mas que não
necessariamente passe por quaisquer dos pontos.
9.1 Interpolação
A interpolação é definida como sendo uma forma de estimar os valores de uma função
entre aqueles dados por algum conjunto de pontos de dados. A interpolação é uma ferramenta
valiosa quando não se pode calcular rapidamente a função nos pontos intermediários desejados. Por
exemplo isto ocorre quando os pontos de dados resultam de medições experimentais ou de
procedimentos computacionais demorados.
Nesta seção vamos apresentar dois tipos de interpolação. A interpolação linear, que
considera que os valores intermediários caem em uma linha reta entre os pontos definidos. Neste
método se torna claro que, à medida em que se têm mais pontos de dados e a distância entre eles
diminui, a interpolação linear se torna mais precisa. E a interpolação spline, que considera que
alguma curva suave se ajusta aos pontos, onde esta suposição é a de que um polinômio de terceira
ordem, isto é, um polinômio cúbico seja usado para modelar cada segmento entre pontos
consecutivos e que a inclinação de cada polinômio cúbico se ajuste nos pontos de dados.

Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 107
Interpolação linear
Uma das técnicas mais usadas para estimar o comportamento de uma determinada função
entre dois pontos dados é a interpolação linear.
Supondo que tenhamos apenas duas coordenadas de uma função qualquer e, que podemos
estimar seu comportamento linearmente, ou seja através de uma reta entre esses pontos. Então
poderemos assim determinar o comportamento da função em qualquer ponto deste intervalo por
meio de uma simples semelhança de triângulos, onde a equação geral é:
f(b)= f(a) + b - a ( f(c) - f(a) )
c - a
A interpolação linear é possível no MATLAB através do uso dos comandos table1 e
table2.
Comando table1
Este comando proporciona a interpolação linear em uma dimensão usando para isto uma
tabela contendo as informações a serem trabalhadas. O primeiro argumento deste comando se
refere à tabela contendo as informações. O segundo se refere ao valor de x para o qual queremos
interpolar o valor da função.
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 então acha o valor da função 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 contrário surgirá uma mensagem de
erro!
Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 108
Exemplo 1
Supondo que queiramos determinar o comportamento térmico da cabeça de um cilindro a
ser implementado num carro. Supondo também que os valores experimentais referentes ao Tempo
e a Temperatura sejam;
Tempo, s Temp., F
0 0
1 20
2 60
3 68
4 77
5 110
Para alocarmos estas informações devemos usar uma matriz, onde o tempo será preenchido
na primeira coluna através 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 serão y1 = 64.8 e y2 = 106.7.
Supondo agora que medimos a temperatura em três pontos do cilindro:
Tempo, s T1 T2 T3
0 0 0 0
1 20 25 52
2 60 62 90
3 68 67 91
4 77 82 93
5 110 103 96
Guardando estas informações numa matriz, com as informações do tempo na primeira
coluna:

Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 109
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 três pontos no tempo de t = 2.6s, usamos
os seguinte comando:
temps = table1 (dado2, 2.6);
Onde temps será um vetor contendo os três valores da temperatura: 64.8, 65.0 e 90.6.
Comando table2
Esse comando possibilita a interpolação 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 rotações por minuto, enquanto medimos a temperatura em um ponto da cabeça
do cilindro. Então, 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 vários valores de velocidade:
Tempo, s V1=2000 V2=3000 V3=4000 V4=5000 V5=6000
0 0 0 0 0 0
1 20 110 176 190 240
2 60 180 220 285 327
3 68 240 349 380 428
4 77 310 450 510 620
5 110 405 503 623 785
Desta forma podemos estimar a temperatura da cabeça do cilindro em qualquer tempo
entre 0 e 5 segundos, e em qualquer velocidade entre 2000 e 6000 rpm.
Ao invés de calcularmos, o que seria bem mais complicado, podemos interpolar a função
em questão.
Podemos agora guardar estas informações numa matriz dado3, e então usar o comando
table2 para calcular esta informação para nós:
Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 110
Note que agora nós preenchemos as linhas com as informações da tabela, no exemplo
anterior nós 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 cúbica é uma curva suave construída passando através do conjunto de pontos.
A curva entre cada par de pontos é determinada por um polinômio do terceiro grau, que é calculado
para fornecer uma curva suave entre os pontos ao invés de ligá-los simplesmente.
Comando spline
É o comando que realiza no MATLAB uma spline cúbica. O primeiro argumento do
comando spline é o x, o segundo é o y e o terceiro contém o valor do(s) ponto(s) aonde se deseja o
valor da função. Lembrando que novamente os valores de x devem ser ordenados ou
crescentemente ou decrescentemente, caso contrário surgirá uma mensagem de erro!
Exemplo 2
Supondo que queiramos usar a spline cúbica para calcular a temperatura na cabeça 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]

Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 111
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 (‘ Interpolação Spline ’);
xlabel(‘ Tempo,s ’);
ylabel(‘ Graus, F ’);
grid;
Note que na interpolação linear, o gráfico de x e y percorrem as coordenadas por meio de
retas, enquanto que o gráfico de newx e newy representa a spline definida por interpolação cúbica.
E x e r c í c i o s p a r a P r a t i c a r !
Supondo que nossa tabela de valores seja;
Tempo,s Temp, F
0,0 72,5
0,5 78,1
1,0 86,4
1,5 92,3
2,0 110,6
2,5 111,5
3,0 109,3
3,5 110,2
4,0 110,5
4,5 109,9
5,0 110,2
a. Gerar um gráfico que compare os dois tipos de interpolação já vistos.
Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 112
b. Achar os valores da temperatura correspondentes aos seguintes valores de tempo t =
[0.3,1.25,2.36,4.48] , usando a interpolação 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.
Aplicação à Solução de Problemas : Braço Robótico
Assim como este sistema de manipulação existem vários outros usados em vários tipos de
robôs, que se utilizam de um avançado sistema de controle para guiar um braço robótico para a
posição desejada. Um dos anseios de um sistema de controle é que o caminho percorrido pelo
braço ao se mover de um local para o outro, ao pegar ou soltar um objeto, seja feito regularmente,
evitando assim possíveis ‘trancos’ durante o percurso.
O caminho percorrido pelo braço será definido através de coordenadas de pontos por onde
o braço irá se mover. Então podemos utilizar a interpolação para definir uma curva suave, regida
por estas coordenadas, para mostrar o comportamento desse braço ao longo de uma trajetória.
Uma parte importante no desenvolvimento do algoritmo ou da solução deste problema está
na consideração de situações especiais. Neste problema nós assumimos que pontos nos quais o
braço irá passar precisarão estar na ordem para mover o braço na trajetória desejada que será:
posição inicial, posição intermediária, posição para pegar o objeto, posição para colocar o objeto no
local desejado e finalmente posição inicial. E, consideraremos também que cada ponto conterá três
coordenadas: x, y(que serão as coordenadas relativas a posição inicial), e uma terceira coordenada
dizendo o código da respectiva posição, de acordo com a tabela abaixo:
Código Posição
0 Inicial
1 Intermediária
2 Para pegar o objeto
3 Para deixar o objeto
Queremos então utilizar uma spline para visualizarmos o comportamento do braço
robótico.
Método para a resolução do problema
1. PROBLEMA EM SI
Desenhar uma curva suave utilizando a interpolação por spline que pode ser usada para guiar um
braço robótico para uma determinada trajetória.

Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 113
2. DESCRIÇÃO DA ENTRADA E DA SAÍDA
A entrada é constituída de um arquivo contendo as coordenadas x e y dos pontos pelos quais o
braço robótico deverá passar.
A saída do programa será a curva correspondente ao comportamento do robô ao percorrer
estes pontos.
3. SOLUÇÃO NO MATLAB
9.2 Ajuste de curvas pelo método dos mínimos quadrados
Supondo que tenhamos um conjunto de pontos originados de um determinado experimento
e que queiramos plotar o seu gráfico. Se tentarmos traçar uma única reta entre esses pontos,
somente um par destes pontos irão fazer parte da reta. O método dos mínimos 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 aproximação possível, pode acontecer da reta não passar efetivamente por
nenhum ponto.
Note que este método é muito diferente da interpolação porque esta passará por todos os
pontos.
Vamos partir primeiro para a discussão do ajuste da reta para um conjunto de pontos e
depois para o ajuste do polinômio através do conjunto de pontos.
Regressão linear
É o processo que determina a equação linear, ou seja, a função mais aproximada do
comportamento dos pontos, que é calculada através do somatório dos mínimos quadrados das
distâncias 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]);
Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 114
Se simplesmente plotarmos o gráfico através do comando:
plot(x,y,x,y, ‘o’);
Ele ligará os pontos. Mas, se ao invés disso, estimarmos o comportamento da função em
y1 = 20*x, e aí sim plotarmos este gráfico:
plot(x,y1,x,y, ‘o’)
Para medirmos a qualidade desta estimativa, devemos determinar a distância no eixo
vertical de cada ponto à reta estimada e somá-las através do comando sum. Observe que somamos
os quadrados das distâncias 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 distâncias. Para isto devemos escrever a equação geral da reta : y = mx + b.
Os valores de m e b poderão ser calculados através do comando polyfit
Comando polyfit
Este comando acha os coeficientes do polinômio que estamos procurando. Mas, para isto
devemos especificar o grau do polinômio. Este comando possui três argumentos: primeiro as
coordenadas x e y, e depois o grau do polinômio.
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;

Curso de MATLAB
Cap. 9 – Ajuste de Curvas e Interpolação 115
Comando polyval
Este comando é empregado para estimar o mínimo polinômio quadrado de um conjunto de
pontos. O primeiro argumento deste comando conterá os coeficientes do polinômio, o segundo
argumento será um vetor com os valores de x para os quais desejamos o valor da função.
Exemplo:
ybest = polyval (coef,x);
Curso de MATLAB
Cap. 10 – Análise Polinomial 116
Capítulo 10 - Análise polinomial
Este capítulo traz uma série de comandos no MATLAB para a análise polinomial.
Primeiro vamos discutir meios de avaliar os polinômios e como trabalhar o seu comportamento.
Uma aplicação deste conceito está na modelagem da altitude e velocidade de um balão. A seguir
definiremos as raízes dos polinômios.
Polinômios normalmente aparecem em aplicações da Engenharia e na Ciência em geral
porque eles constituem ainda bons modelos para representar sistemas físicos.
10.1 Avaliação do polinômio
Como exemplo vamos tomar o seguinte polinômio:
f(x) = 3x
4
- 0.5x
3
+ 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 contém os coeficientes do
polinômio em questão e o segundo argumento contém a matriz para a qual desejamos avaliar o
polinômio.
Exemplo 1
a = [3,-0.5,0,1,-5.2];
f = polyval(a,x);
Esses comandos também 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.
Curso de MATLAB
Cap. 10 – Análise Polinomial 117
Supondo que queiramos o valor da função g(x) = -x
5
+ 3x
3
- 2.5x
2
- 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 função
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.
Operações Aritméticas
Podemos trabalhar com polinômios armazenando seus coeficientes em vetores, e trabalhar
apenas com estes vetores.
• Soma e subtração
Para somar ou subtrair polinômios basta somar ou subtrair seus respectivos coeficientes. O
MATLAB não apresenta um comando específico par somar polinômios. A soma ou subtração
padrão funciona se ambos os vetores polinomiais forem do mesmo tamanho. Somemos os
polinômios a seguir:
g(x) = x
4
- 3x
2
- x + 2.4
h(x) = 4x
3
- 2x
2
+ 5x - 16
som(x) = g(x) + h(x)
sub(x) = g(x) - h(x)
Para multiplicar um polinômio por um escalar (sendo ele positivo ou negativo), basta
definir o polinômio pelos seus coeficientes e efetuar a multiplicação. Multipliquemos o polinômio:
g(x) = 3 f(x)
No MATLAB:
f = [ 3,-6,1];
g = 3 * f
Curso de MATLAB
Cap. 10 – Análise Polinomial 118
• Multiplicação
A multiplicação polinomial é efetuada por meio do comando conv (que faz a convolução
entre dois conjuntos). A multiplicação de mais de dois polinômios requer o uso repetido de conv.
m = conv(g,h)
• Divisão
No MATLAB a divisão de polinômios é feita através do comando deconv:
[q,r] = deconv(g,h)
Esse resultado nos diz que g dividido por h nos dá o polinômio de quociente q e resto r.
Aplicação à Solução de Problemas: Balões Meteorológicos
Balões são usados para reunir problemas de temperatura e pressão nas diferentes altitudes
da atmosfera. O balão consegue ganhar altitude porque nele está presente um gás de menor
densidade que o próprio ar ao seu redor. Durante o dia, devido a presença da luz solar, o gás Hélio
se expande, se tornando mais denso que o ar e assim fazendo com que o balão suba. Durante a
noite, o gás Hélio esfria e fica mais denso, e com isso o balão desce a baixa altitude. No dia
seguinte o sol novamente esquenta o gás e o balão sobe. Com o passar dos dias, esse processo gera
vários valores de altitude que geralmente podem ser aproximados por uma equação polinomial.
Assumindo que o seguinte polinômio represente a altitude em metros, durante as primeiras
48 horas de um balão:
h(t) = -0.12 t
4
+ 12 t
3
-380 t
2
+ 4100 t + 220
onde t é medido em horas. O modelo polinomial para velocidade, obtido através da
derivada, em metros por hora do balão é o seguinte:
v(t) = -0.48 t
3
+ 36 t
2
- 760 t + 4100
Método para a resolução do problema
1. PROBLEMA EM SI:
Usando o polinômio dado fazer o gráfico da altitude e da velocidade do balão em questão.
E achar também a máxima altitude por ele atingida.
Curso de MATLAB
Cap. 10 – Análise Polinomial 119
2. DIAGRAMA ENTRADA/SAÍDA:
Neste diagrama é mostrado que não existe nenhuma entrada externa ao programa. A saída
consiste em dois gráficos e na altitude máxima atingida e o seu tempo correspondente.
3. SOBRE O PROGRAMA:
Queremos que apenas o programa faça o gráfico de acordo com as nossas informações e
então calcule o máximo valor atingido no gráfico. Devemos também fazer que nosso programa
converta metros por hora em metros por segundo.
4. SOLUÇÃO NO MATLAB:
Vamos usar o comando polyval para gerar os pontos para formar o gráfico. O comando
max é usado para determinar o valor máximo da função.
Curso de MATLAB
Cap. 10 – Análise Polinomial 120
10.2 Raízes de polinômios
Achar as raízes de um polinômio, isto é, os valores para os quais o polinômio é igual a
zero, é um problema comum em muitas áreas do conhecimento, como por exemplo, achar as raízes
de equações que regem o desempenho de um sistema de controle de um braço robótico, ou ainda
equações 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 (a
1
, a
2
, ...) de um polinômio são valores reais,
poderemos encontrar raízes complexas.
Se um polinômio é fatorado em termos lineares, fica fácil de identificar suas raízes,
igualando cada termo a zero.
Um exemplo consiste no polinômio:
f(x) = x
2
+ x - 6,
que ao ser fatorado se torna:
f(x) = (x - 2) . (x + 3)
As raízes da equação são os valores de x para os quais a função f(x) é igual a zero, ou seja,
x = 2 e x = -3.
No gráfico, as raízes são valores onde a função corta o eixo x.
Um polinômio do terceiro grau tem exatamente três raízes que podem ser:
- três raízes reais;
- três raízes iguais;
- uma raiz real e duas raízes iguais;
- uma raiz real e um par conjugado de raízes complexas.
Se a função f(x) for um polinômio de grau n, ela terá exatamente n raízes. Estas n raízes
podem conter múltiplas raízes ou raízes complexas.
No MATLAB, um polinômio é representado por um vetor linha dos seus coeficientes em
ordem decrescente. Observe que os termos com coeficiente zero têm de ser incluídos. Dada esta
forma, as raízes do polinômio são encontradas usando-se o comando roots do MATLAB.
Já que tanto um polinômio quanto suas raízes são vetores no MATLAB, o MATLAB adota
a convenção de colocar os polinômios como vetores linha e as raízes como vetores coluna. Para
ilustrar este comando vamos determinar as raízes do seguinte polinômio:
Curso de MATLAB
Cap. 10 – Análise Polinomial 121
f(x) = x
3
- 2 x
2
- 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 raízes serão: 2 + i, 2 - i e -2.
Agora, dadas as raízes de um polinômio, também é possível construir o polinômio
associado. No MATLAB, o comando poly é encarregado de executar essa tarefa.
onde o argumento do comando poly é o vetor contendo as raízes do polinômio que desejamos
determinar.
Exemplo 2
Sejam as raízes de um polinômio -1, 1 e 3. Determinar este polinômio.
No MATLAB:
a = poly ([-1,1,3]’);
Exemplo 3
Determine as raízes dos seguintes polinômios e plote seu gráfico, com seu eixo apropriado,
com o objetivo de verificar se o polinômio atravessa o eixo x bem nos locais das raízes.
a. f(x) = x
3
- 5x
2
+ 2x + 8
b. g(x) = x
2
+ 4x + 4
c. h(x) = x
5
+ 3x
4
- 11x
3
+ 27x
2
+ 10x - 24
d. i(x) = x
5
- 3x
3
+ 4x
2
-1
Curso de MATLAB
Cap. 11 – Integração e Diferenciação Numérica 122
Capítulo 11 - Integração e Diferenciação Numérica
A integração e diferenciação são conceitos fundamentais usados para resolver um grande
número de problemas na Engenharia e na Ciência. Enquanto muitos destes problemas se usam de
soluções analíticas, muitos requerem soluções numéricas para serem entendidos.
11.1 Integração Numérica
A integral de uma função f(x) no intervalo [a,b], é definida como sendo a área sob a curva
percorrida por f(x) entre a e b.
k = d
a
b
x f( ) x
A avaliação numérica de uma integral é também chamada de quadratura (enfoque
geométrico). O MATLAB possui três comandos para calcular a área sob uma função, em um
domínio finito, que são: trapz, quad e quad8.
Regra do Trapézio
Quando a área sob a curva pode ser representada por trapézios e o intervalo [a,b], dividido
em n partes iguais, a área aproximada poderá ser calculada através da seguinte fórmula:
Kt = b - a ( f(x
0
) + 2 f(x
1
) + ... + 2f(x
n - 1
) + f(x
n
) )
2n
onde os valores de xi representam os pontos no final da cada trapézio e x
0
= a e x
n
= b.
A estimativa da integral melhora quando usarmos um maior número de componentes ( como
por exemplo trapézios), para aproximar a área sob a curva, pois quanto menor for o intervalo da
função a curva tende a uma reta.
Comando quadratura
O MATLAB possui dois comandos para desenvolver a integração numérica. 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 funções com
certos tipos de singularidades como por exemplo:
Curso de MATLAB
Cap. 11 – Operações com Matrizes 123
k = d
0
1
x x
Lembrando que uma singularidade é um ponto no qual uma função ou sua derivada não são
definidas ou tendem para o infinito. Ambas as funções 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 três argumentos: o primeiro argumento é o
nome da função no MATLAB que reconhece a função que estamos tratando; o segundo e o terceiro
argumento são os limites inferior e superior a e b da integral.
Exemplo 1
k = d
a
b
x x

para a e b não negativos
K = 2 (b
3 / 2
- a
3 / 2
)
3
Os comandos quad e quad8 podem ainda assumir um quarto argumento que é a tolerância,
que corresponde a precisão. Se a tolerância for omitida, o valor default 0.001 será assumido pelo
MATLAB.
Exercício 1
Seja a função f(x) = | x |. Resolva as integrais abaixo usando o MATLAB e compare com os
resultados obtidos a mão.
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: Análise de Escoamento de um Óleo num Oleoduto
A análise do fluxo de um líquido em duto tem aplicação em muitos sistemas diferentes,
incluindo o estudo em veias e artérias no corpo humano, o sistema hidráulico de uma cidade, o
sistema de irrigação 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.
Curso de MATLAB
Cap. 11 – Integração e Diferenciação Numérica 124
O óleo que está em contato com as paredes do duto não 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 diâmetro do duto e define as variáveis usadas para esta análise:
A velocidade de perfil é definida pela seguinte equação:
v(r) = vmax (1 - r / r
0
)
1 / n
onde n é um número inteiro entre 5 e 10 que define o contorno do escoamento do óleo. A
velocidade média de escoamento do óleo pode ser calculada integrando-se a velocidade de perfil no
intervalo de 0 a r
0
.
Os valores de vmax e de n podem ser medidos experimentalmente, e o valor de r
0
é o
próprio raio do tubo. Escreva um programa no MATLAB para integrar a velocidade de perfil e
assim determinar a velocidade médio do óleo no duto.
Método Para a Resolução do Problema
1. O PROBLEMA EM SI
Calcular a velocidade média do óleo em um duto.
2. DESCRIÇÃO DA ENTRADA E SAÍDA
Os dados experimentais que serão tomados como entrada em nosso programa são a velocidade
máxima vmax, o raio do duto r
0
, e o valor de n.
A saída de nosso programa será a velocidade média do óleo no duto.
Curso de MATLAB
Cap. 11 – Operações com Matrizes 125
3. FORMA QUE AJUDARÁ NA QUESTÃO
Plotar um gráfico da função r (1 - r / r
0
)
1 / n
e estimar o valor da integral através do cálculo
da área sob a curva.
4. SOLUÇÃO NO MATLAB
11.2 Diferenciação Numérica
A derivada de uma função f em um ponto pode ser descrita graficamente como a inclinação da reta
que tangencia a função naquele ponto.
Pontos da função onde a derivada é zero são chamados pontos críticos. São pontos onde a
tangente é representada por uma linha horizontal e que, por isso, definem o local de máximo e de
mínimo da função.
Podemos perceber ao analisar uma determinada função num determinado intervalo que o
sinal da derivada pode mudar, e, se esse sinal muda, significa que dentro deste intervalo existe local
de máximo e local de mínimo.
Podemos também analisar uma função pela sua derivada segunda. De modo que, se a
derivada segunda de um ponto crítico é positiva, então o valor da função naquele ponto significa um
local de mínimo. Da mesma forma, se a derivada segunda de um ponto crítico é negativa, então a
função possui um local de máximo.
Curso de MATLAB
Cap. 11 – Integração e Diferenciação Numérica 126
Derivação por expressões de diferenças
As técnicas de diferenciação numérica estimam a derivada de uma função em um ponto x
k
através da aproximação da inclinação da reta tangente à curva neste ponto usando valores que a
função assume em pontos perto de x
k
. Essa aproximação pode ser feita de vários modos.
Assim, dependendo dos pontos, temos três técnicas:
(a)
(b)
(c)
Curso de MATLAB
Cap. 11 – Operações com Matrizes 127
A derivada segunda pode ser achada através da fórmula:
f ’’(x
k
) = f ’(x
k
) - f ’(x
k
- 1)
(x
k
) - (x
k
- 1)
Comando diff
O comando diff calcula a diferença entre dois pontos adjacentes num vetor, gerando um
novo vetor com a diferença (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 estarão
corretos para ambas as formas de diferenças, backward ou forward. A diferença entre esses dois
métodos para o cálculo da derivada é determinada pelos valores de x que correspondem à derivada
dy. Se os valores correspondentes de x forem [1,2,3,4,5] então dy é calculado pela diferença
backward; mas se os valores de x forem [0,1,2,3,4] então dy será calculado pelo método da
diferença forward.
Supondo que desejamos analisar a função dada pelo seguinte polinômio:
f(x) = x
5
- 3 x
4
- 11 x
3
+ 27 x
2
+ 10 x - 24
Assumindo que queiramos calcular o valor de sua derivada no intervalo [-4,5], usando o
método da diferença 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)
Curso de MATLAB
Cap. 11 – Integração e Diferenciação Numérica 128
Podemos marcar os locais dos pontos críticos para essa função 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 são então usados com o vetor contendo os valores de xd para determinar
os locais de pontos críticos.
E x e r c í c i o s p a r a P r a t i c a r !
1. Para cada polinômio abaixo, plote a função, sua derivada primeira e sua derivada segunda, no
intervalo de [-10,10]. Depois ache os locais de mínimo, de máximo, e os pontos críticos
a. g(x) = x3 - 5x2 + 2x + 8
b. h(x) = x5 - 4x4 - 9x3 + 32x2 + 28x - 48
c. i(x) = x7 - 5x3 + 14x2 - 12
Curso de MATLAB
Cap. 12 – Equações Diferenciais Ordinárias 129
Capítulo 12 - Equações Diferenciais Ordinárias
Nesta sessão iremos apresentar um grupo de equações de primeira ordem e suas soluções
analíticas. Depois seguiremos com a descrição dos métodos de Runge - Kutta para a integração de
equações de primeira ordem, onde então iremos comparar as soluções numéricas com as analíticas.
Esse capítulo termina com a discussão quando se torna necessário converter equações diferenciais
de ordem superiores para equações de primeira ordem.
12.1 Equações Diferenciais Ordinárias de Primeira Ordem
A equação diferencial de primeira ordem (ODE) é uma equação que pode ser escrita na
seguinte forma:
y’ = dy = g(x,y)
dx
onde x é a variável independente.
A solução da equação diferencial de primeira ordem (ODE) é a função y = f(x), tal que f
’(x) = g(x,y). O cálculo da solução envolve a integração de y ’ para obter y. A solução de uma
equação diferencial é geralmente uma família de funções. A condição inicial é usualmente
necessária na ordem para especificar uma única solução. A seguir serão representadas algumas
soluções analíticas para equações diferenciais ordinárias.
Enquanto que as soluções analíticas para as equações diferenciais são preferenciais, muitas
vezes requerem soluções muito complicadas. Para esses casos, uma técnica numérica se torna
necessária. As técnicas numéricas mais comuns para resolver equações diferenciais ordinárias, são
o método de Euler e o método de Runge-Kutta.
Tanto o método de Euler quanto o método de Runge-Kutta aproximam a função utilizando-
se da expansão em série de Taylor.
Lembrando que a série de Taylor é uma expansão que pode ser usada para aproximar uma
função cujas derivadas são definidas no intervalo contendo a e b. A expansão por série 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 equações diferenciais de primeira ordem a serie de Taylor se torna:
f(b) ≈ f(a) + (b - a) f ’(a)
Curso de MATLAB
Cap. 12 – Equações Diferenciais Ordinárias 130
Para as equações diferenciais de segunda ordem:
f(b) ≈ f(a) + (b - a) f ’(a) + (b - a)
2
f ’’(a)
2!
E, assim por diante.
12.2 Método de Runge - Kutta
Os métodos mais populares para a integração da equação diferencial de primeira ordem são
os métodos de Runge - Kutta. Esses métodos de aproximação de uma função se usam da expansão
por série de Taylor. Desta forma, o método de Runge - Kutta de primeira ordem se utiliza da
expansão de Taylor de primeira ordem, o método de Runge - Kutta de segunda ordem se utiliza da
expansão de Taylor de segunda ordem, e, assim por diante. Lembrando que o método de Euler é
equivalente ao método de Runge - Kutta de primeira ordem.
Método de Euler
yb = ya + (b - a) ya’
Esta equação estima o valor da função yb usando uma reta tangente a função no ponto a,
conforme mostrado na figura abaixo:

A equação diferencial é usada para calcular o valor de ya’.
Tendo estimado o valor da função yb no ponto b, podemos estimar o próximo valor da
função yc, usando:
yc = yb + (b - a) yb’
Essa equação utilizará a tangente no ponto b para estimar o valor da função no ponto c, yc,
como é mostrado na figura a seguir:
Curso de MATLAB
Cap. 12 – Equações Diferenciais Ordinárias 131

É preciso partir de uma condição inicial para dar início ao processo de estimativa de outros
pontos da função f(x).
Comando ode
O MATLAB contém dois comandos para calcular soluções numéricas para equações
diferenciais ordinárias: ode23 e ode45; o comando ode23 usa o método de Runge - Kutta para
equações diferenciais de segunda e terceira ordem; o comando ode45 usa o método de Runge -
Kutta para equações 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 função, definida no MATLAB, que retorna o valor da equação 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 função y = f(x). O quarto argumento
contém a condição inicial necessária para determinar a única solução para a equação diferencial
ordinária. Nós assumimos que esse argumento representa o valor da função dentro do intervalo
considerado. O comando ode23 possui duas saídas: um conjunto de coordenadas x e, um conjunto
de coordenadas y correspondentes, os quais representam os pontos da função y = f(x).
No MATLAB, primeiro temos que definir a função a qual desejamos avaliar as equações
diferenciais, assumindo valores escalares de entrada para x e y.
Exemplo 1
Resolver a equação y’ = g1(x,y) = 3x
2
no intervalo [2,4], assumindo como condição inicial
f(2) = 0,5.
Solução analítica: y = x
3
- 7.5
Solução no MATLAB:
function dy=g1(x,y)
dy=3*x^2;
Curso de MATLAB
Cap. 12 – Equações Diferenciais Ordinárias 132
[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(‘Solução do Exemplo 1’);
xlabel(‘X’);
ylabel(‘y = f(x)’);
grid;
O gráfico obtido conterá a comparação entre a solução numérica e a solução analítica.
Exemplo 2
Resolver a equação y’ = g2(x,y) = 2xcos
2
y no intervalo [0,2], assumindo como
condição inicial f(0) = π/4.
Solução analítica: y = tan
-1
(x
2
+ 1)
Solução 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(‘Solução do Exemplo 2’);
xlabel(‘X’);
ylabel(‘y = f(x)’);
grid;
O número de pontos calculados para a função y = f(x) pelo comando ode23 ou ode45 é
determinado pelo MATLAB.
Os comandos ode23 e ode45 podem também ser usados com dois parâmetros adicionais.
O quinto parâmetro pode ser usado para especificar a tolerância que estará relacionada com o
tamanho do passo. O valor default para a tolerância é de 0.001 para o ode23 e 0.000001 para o
ode45. O sexto parâmetro pode ser usado para requerer que a função escreva na tela
imediatamente os resultados chamado traço. O valor default é zero, especificando nenhum traço
para os resultados.
Curso de MATLAB
Cap. 12 – Equações Diferenciais Ordinárias 133
E x e r c í c i o s p a r a p r a t i c a r !
1. Seja a equação:
y’ = ga(x,y) = -y
a) Assumindo como condição inicial f(0) = -3.0, resolva, no MATLAB, essa equação
diferencial no intervalo de [0,2] e plote o gráfico com os valores correspondentes de y.
b) Sendo y = -3 e-x , a solução analítica para esta equação, faça um novo gráfico que
compare a solução analítica com a numérica.
Problema Aplicado: Aceleração de uma turbina UDF numa aeronave
Uma avançada turbina chamada de ventilador não canalizado (UDF) é uma das novas
tecnologias mais promissoras que tem sido desenvolvida para o futuro transporte de aeronaves.
Turbinas, que têm sido usadas por décadas, combinam o poder e a confiabilidade dos motores a jato
com a eficiência dos propulsores. Eles constituem uma importante melhoria dos antigos
propulsores movidos a pistão. Suas aplicações têm sido limitadas a pequenas aeronaves do tipo
comutador, isto porque eles não são tão rápidos, nem poderosos quanto as turbinas usadas em
grandes aeronaves. Esse tipo de turbina(UDF) implica em avanços significantes na tecnologia de
propulsão. Novos materiais, aerodinâmica e velocidades de alta rotação habilitam esta turbina a
voar tão rápido quanto as turbinas a jato, e com grande aproveitamento de combustível. A UDF é
também menos barulhenta que o sistema convencional de turbinas.
Durante um teste de vôo de uma turbina UDF de uma aeronave, o motor é levado para um
nível de 40 Newton, o que significa os 20 Kg da aeronave tendo alcançado uma velocidade de 180
m/s. As válvulas de regulação do motor são então levadas para atingir um nível de 60 Newtons, e a
aeronave começa a acelerar.
A equação diferencial que determina a aceleração da aeronave é:
a = T - 0,000062 v
2
m
onde:
a = dv
dt
T = nível atingido em Newtons
m = massa em kg
v = velocidade em m/s
Curso de MATLAB
Cap. 12 – Equações Diferenciais Ordinárias 134
Escreva no MATLAB um programa para determinar a nova velocidade depois de uma
mudança no nível do motor através do gráfico da solução para a equação diferencial.
Método para a resolução do problema
1. O PROBLEMA EM SI
Calcular a nova velocidade atingida pela aeronave depois de uma mudança no nível do motor.
2. DESCRIÇÃO DA ENTRADA E DA SAÍDA
Como entrada nós temos a equação diferencial que define a aceleração da aeronave.
Como saída, nós desejamos o gráfico da velocidade e da aceleração.
3. SOLUÇÃO NO MATLAB
Podemos usar o comando ode23 para avaliar a nossa equação diferencial. A solução dessa
equação diferencial nos fornecerá valores de velocidade, os quais poderão ser usados para
determinar os valores da aceleração. Nós podemos então traçar ambos os gráficos de velocidade
e aceleração num intervalo de 4 minutos para observar suas mudanças. A velocidade deverá
aumentar e então estabilizar num novo valor, enquanto que a aceleração deverá diminuir até
chegar a zero.
4. PROGRAMA
Curso de MATLAB
Cap. 12 – Equações Diferenciais Ordinárias 135
12.3 Equações Diferenciais Ordinárias de Ordens Superiores
Equações diferenciais de ordens superiores podem ser escritas como um sistema
constituído por um conjunto de equações diferenciais de primeira ordem usando a mudança de
variáveis.
Exemplo 3
Vamos considerar uma equação diferencial linear de segunda ordem:
y’’= g(x,y,y’) = y’(1 - y
2
) - y
Primeiro vamos definir duas novas funções:
u
1
(x) = y’
u
2
(x) = y
Nós então obtemos esse sistema de um conjunto de equações diferenciais de primeira
ordem:
u
1
’ = y’’ = g(x, u
2
, u
1
) = u
1
(1 - u
2
2
) - u
2
u
2
’ = u
1
O sistema contendo as equações diferenciais de primeira ordem pode ser resolvido pelo
MATLAB através do comando ode. Entretanto, a função que é usada para avaliar a equação
diferencial deve calcular os valores das equações diferenciais de primeira ordem em um vetor. A
condição inicial deverá também ser um vetor contendo uma condição inicial para cada equação
diferencial de primeira ordem: y
n-1
,y
n-2
, ..., y’,y.
Para resolver as equações desenvolvidas no exemplo anterior, primeiro temos que definir a
função para calcular os valores das equações 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);
Então, para resolver o sistema de equações diferenciais de primeira ordem no intervalo
[0,20] usando as condições iniciais y’(0) = 0.0 e y(0) = 0.25, podemos seguir os seguintes passos:
Curso de MATLAB
Cap. 12 – Equações Diferenciais Ordinárias 136
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;
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 137
Capítulo 13 - Decomposição e Fatorização de Matrizes
Este capítulo contém algumas das mais avançadas características de matrizes que são
utilizadas na resolução de certos tipos de problemas de engenharia. O primeiro tópico, autovalores e
autovetores, aparece em inúmeras aplicações. Depois de definir autovalores e autovetores e ilustrar
suas propriedades com um exemplo simples, a função eig é apresentada para computação usando
ambas. Uma aplicação que é utilizada para demostrar como autovalores e autovetores são utilizados
para analisar a performance de algoritmos de adaptadores para redução de ruídos. O resto do
capítulo continua com decomposição e fatorização 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 equação:
AX = λX (13.1)
Ambos os lados dessa equação são iguais com uma coluna de vetores com n linhas. Se X é
completada com zeros, então esta equação é verdadeira para algum valor de λ, mas esta é uma
solução trivial.
Os valores de λ para que X não seja completado com zeros são descritos pelos autovalores
da matriz A, e os valores correspondentes de X são descritos pelos autovetores da matriz A.
A equação (13.1) pode ser utilizada para determinar a seguinte equação:
( A - λI ) X = 0 (13.2)
onde I é uma matriz identidade de n x n elementos. Esta equação representa um conjunto de
equações homogêneas enquanto o lado direito da equação for igual a zero. Este conjunto de
equações homogêneas possui soluções que não são triviais. A solução só é trivial quando o
determinante for igual a zero.
det (A - λI ) = 0 (13.3)
A equação (13.3) representa uma equação que é referida a equação característica da matriz
A. A solução desta equação é obtida com os autovalores da matriz A.
Em muitas aplicações, é desejável selecionar os autovetores como tal QQ
T
= I, onde Q é
uma matriz cujas colunas são os autovetores. Este conjunto de autovetores representa um conjunto
ortogonal, enquanto significa que ambos são normalizados e que eles são 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.)
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 138
Para ilustrar estas relações entre a matriz A e estes autovalores e autovetores consideremos a
matriz A :
Os autovalores podem ser obtidos usando a equação característica:
= λ
2
- λ + 0.1875
= 0
Esta equação pode ser facilmente resolvida usando equação quadrática 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 mão
pode se tornar uma formidável tarefa.) Os autovalores podem ser determinados utilizando os
autovalores da equação (13.2), usando o valor 0,25:
ou
Mas este par de equações nos dá a seguinte equação:
x
1
= - x
2
Portanto, existem uma infinidade de autovetores que podem ser associados com o autovalor
0.25. Alguns desses autovetores são demonstrados agora:
Similarmente, pode se obter os autovetores de autovalor 0.75, que possui a seguinte relação:
x
1
= x
2
1
]
1

¸

·
50 . 0 25 . 0
25 . 0 50 . 0
A
1
]
1

¸



λ
λ
5 . 0 25 . 0
0.25 5 . 0
det ) I - A ( det · λ
1
]
1

¸

·
1
]
1

¸

1
]
1

¸

0
0

x
x

0.25 - 0.5 0.25
0.25 0.25 - 5 . 0
2
1
1
]
1

¸

·
1
]
1

¸

1
]
1

¸

0
0

x
x

0.25 0.25
0.25 0.25
2
1
1
]
1

¸

1
]
1

¸

1
]
1

¸

− 0.2 -
0.2

5 -
5

1
1
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 139
De novo obtemos uma infinidade de autovetores, como:
Para determinar um conjunto ortonormal de autovetores para um exemplo simples
precisamos lembrar de como selecionar os autovetores, como QQ
T
= I. Portanto consideremos o
seguinte:
Resolvendo o conjunto de equações obtemos:
Então c
1
= c
2
= 0.707 ou –0.707. Assim eles possuem várias variações para os mesmos
valores, que podem ser utilizados para determinar o conjunto ortonormal de autovetores. Nós
escolhemos o seguinte:
Os cálculos 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 difícil se aumentarmos o tamanho da matriz.
A função eig possui um argumento da matriz A. Esta função pode ser usada para retornar
um vetor coluna que contenha apenas autovalores, como:
lambda = eig (A)
1
]
1

¸

1
]
1

¸

1
]
1

¸

0.2 -
0.2

5 -
5

5 . 1
5 . 1
1
]
1

¸

1
]
1

¸


·
2 2
1 1
2 1
2 1 T
c - c
c - c

c c
c c
QQ
1
]
1

¸

+ +
+ +
·
2
2
2
1
2
2
2
1
2
2
2
1
2
2
2
1
c c c c -
c c - c c
1
]
1

¸

·
1 0
0 1
0.5 c c
2
2
2
1
· ·

2 1 2 1 -
2 1 2 1
Q
1
]
1

¸

·
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 140
A função pode também ser usada para executar uma tarefa dupla. Neste caso para
retornarmos duas matrizes quadradas: uma contém autovetores (X) como coluna e a outra contém
autovalores (λ) na diagonal:
[Q,d] = eig (A)
Os valores de Q e d são como QQ
T
= I e AQ = Qd.
Nós podemos ilustrar a função eig com um exemplo:
A = [0.50, 0.25; 0.25, 0.50]
[Q,d] = eig (A)
Os valores de Q e d são obtidos:
Podemos facilmente verificar que QQ
T
= I e AQ = Qd.
P r a t i q u e !
Consideremos a matriz A:
Use o MATLAB para responder as questões:
1. Determine λ
1
, λ
2
, λ
3
, os três autovalores de A
2. Determine um conjunto ortonormal de autovetores, X
1
, X
2
, X
3
3. Verifique se det(AX - λ I) = 0 para os autovalores obtidos
4. Demonstre que AQ = Qd

2 1 2 1 -
2 1 2 1
Q
1
]
1

¸

·

0.75 0.00
0.00 0.25
d
1
]
1

¸

·
1
1
1
]
1

¸

4 2 0
2 6 3
0 3 4
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 141
Aplicação em Solução de Problemas: Adaptador p/ Redução de Ruído
Este equipamento é utilizado para reduzir o efeito de interferência de ruídos em um sinal.
Por exemplo, um microfone que é utilizado para gravar sinais de voz de um grande auditório. Outro
microfone é usado na parte de trás do auditório para colher principalmente os sinais de ruído.
Através das técnicas para cancelamento de ruídos, as características do sinal de ruído podem ser
determinadas usando o sinal de dois microfones. Os adaptadores são utilizados para reduzir o ruído
oriundo da parte de trás do auditório, para poderem ser transmitidos para a sala de controle. Este
processo resulta num sinal limpo e uma melhor comunicação .
Os algoritmos para os adaptadores estão acima do nível deste texto, mas a performance e a
velocidade do algoritmo dependem das características dos sinais de entrada. Estas características
determinam a superfície multidimensional quadrática para que obtenhamos um valor mínimo. Este
mínimo é determinado ajustando o algoritmo para um ponto de partida para um único mínimo. Se a
superfície quadrática tem um contorno circular o algoritmo não é necessário. A matriz R pode ser
computada a partir dos sinais de entrada, e os autovalores da matriz R irão determinar o tipo de
superfície de contorno a ser utilizada. Se os autovalores forem iguais, a superfície é circular. Quanto
maior a variação dos autovalores, mais elíptica será a superfície. Os autovetores representam o eixo
principal da superfície. Portanto para determinar a velocidade e a performance do algoritmo do
adaptador com certeza do tipo de dados e para analisar a superfície, nós 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. DESCRIÇÃO DO PROBLEMA
Calcule os autovalores e autovetores de uma matriz.
2. DESCRIÇÃO DOS DADOS DE ENTRADA E SAÍDA
A entrada é o arquivo dataR.mat e a saída são os autovalores e autovetores da matriz.
3. EXEMPLO MANUAL
Assumamos que a matriz de entrada seja:
Como no exemplo que tratamos anteriormente sabemos que os autovalores são 0.25 e 0.75. Os
autovetores são:
1
]
1

¸

·
50 . 0 25 . 0
25 . 0 50 . 0
R
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 142
Como os autovalores não são iguais, sabemos que a superfície quadrática não possui um
contorno circular e que a performance do adaptador será lenta e menos precisa.
4. SOLUÇÃO 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 saída 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 comunicação com satélites, a matriz R possui milhares de linhas e
colunas.

2 1
2 1
V
1 1
]
1

¸


·

2 1
2 1
V
2 1
]
1

¸

·
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 143
13.2 DECOMPOSIÇÃO e FATORIZAÇÃO
Nesta seção iremos apresentar três tipos de decomposição e fatorização de matrizes que
podem ser utilizados para a solução de problemas que contenham matrizes. Algumas dessas
técnicas decompõe a matriz em um produto de outras matrizes. O uso do produto fatorial reduz o
número de cálculos necessários para a computação de muitas matrizes. Muitas técnicas numéricas
que utilizam matrizes, as convertem em forma de decomposição e fatorização.
Fatorização Triangular
A fatorização triangular expressa uma matriz quadrada como um produto de duas matrizes
triangulares – uma matriz inferior superior e uma matriz triangular superior. Esta fatorização é
conhecida como fatorização LU (lower-upper).
Esta fatorização é muito usada para simplificar matrizes computacionais. Este é um dos
passos para se determinar o determinante de uma matriz muito grande, como também a matriz
inversa e para a solução de equações lineares simultâneas.
A fatorização pode ser realizada começando com uma matriz quadrada e uma matriz
identidade de mesmo tamanho. Operações de linhas e colunas são realizadas na matriz A para
reduzi-la a forma triangular superior; as mesmas operações são realizadas na matriz identidade para
transformá-la na forma triangular inferior.
Para ilustrar pegamos as matrizes A e B:
Usando a fatorização LU obtemos:
A função lu do MATLAB executa esta fatorização, 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 );
1
1
1
]
1

¸

− ·
7 5 2
1 6 2 -
2 3 1
B
1
1
1
]
1

¸




·
0 3 1
3 5 2 -
1 2 1
A
1
1
1
]
1

¸



− −
1
1
1
]
1

¸

·
2 0 0
5 . 0 5 . 0 0
3 5 2

1 1 0.5
0 0 1
0 1 0.5 -
A
1
1
1
]
1

¸


− −
1
1
1
]
1

¸

·
5 . 2 0 0
8 1 0
1 6 2

0 1 1 -
0 0 1
1 0 0.5 -
B
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 144
Como resultado obtemos:
É facilmente verificável que: A = (LA)(UA) e B = (LB)(UB).
Fatorização QR
Esta técnica de fatorização é feita a partir do produto de uma matriz ortonormal e de uma
matriz triangular superior. (Lembrando que uma matriz é ortonormal quando QQ
T
=I). Não é
necessário que a matriz A seja quadrada.
A menor solução para um sistema indeterminado AX=B é a solução de um sistema
quadrado RX=Q
T
B.
A função qr do MATLAB executa esta fatorização, 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.
Decomposição de valor singular
O SVD (singular value decomposition) é um outro método para a fatorização de matrizes
ortogonais. Esta é a decomposição mais confiável, mas isto pode requerer dez vezes mais tempo
que a fatorização QR. A decomposição SVD decompões a matriz num produto dos fatores de outras
três matrizes: A= USV ,onde U e V são matrizes ortogonais e S é diagonal. Os valores da matriz
diagonal são chamados de valores singulares e por isso a decomposição recebe este nome. O
número de valores singulares diferentes de zero é igual ao rank da matriz.
A função svd do MATLAB executa esta fatorização, e é especificada da seguinte forma:
[U,S,V] = svd (A)
1
1
1
]
1

¸



− −
·
1
1
1
]
1

¸

·
2 0 0
5 . 0 5 . 0 0
3 5 2
UA
1 1 0.5
0 0 1
0 1 0.5 -
LA
1
1
1
]
1

¸


− −
·
1
1
1
]
1

¸

·
5 . 2 0 0
8 1 0
1 6 2
UB
0 1 1 -
0 0 1
1 0 0.5 -
LB
Curso de MATLAB
Cap. 13 – Decomposição e Fatorização de Matrizes 145
Sumário MATLAB
eig calcula os autovalores e autovetores de uma matriz
lu calcula a decomposição LU de uma matriz
or calcula a decomposição ortonormal de uma matriz
svd calcula a decomposição SVD de uma matriz
Curso de MATLAB
Cap. 14 – Processamento de Sinais 146
Capítulo 14 – Processamento de Sinais
Este capítulo discute algumas funções que são relacionadas a processamento de sinais.
Essas funções foram divididas em quatro categorias: análise do domínio da freqüência e domínio do
tempo, análise de filtros, implementação de filtros e projeto de filtros.
Embora este capítulo discuta tanto a análise do processamento de sinais analógicos e digitais
será dada maior ênfase no processamento de sinais digitais ou DSP.
14.1 Análise no Domínio da Freqüência
Recordemos que o sinal analógico é uma função contínua (f(t)) que representa uma
informação, como por exemplo, um sinal de voz, o sinal da pressão sangüínea e sinais sísmicos.
Para o processamento de sinais por um computador, o sinal analógico precisa ser amostrado num
período de T segundos, gerando assim, um sinal digital com uma seqüência de valores derivados do
sinal analógico original. Representamos o sinal digital como um sinal contínuo com a seguinte
notação:
f
k
= f (kT)
O sinal digital é uma seqüência de amostragens representadas por: [ f
k
]
O tempo que normalmente se escolhe para começar a amostragem e o zero e assim o
primeiro intervalo de amostragem é f
0
. Então se o sinal é amostrado com uma freqüência de 100
Hz, os primeiros três valores correspondentes ao sinal analógico são:
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 analógicos como uma seqüência
de pontos, mas quando nós plotamos um sinal digital os pontos são conectados por segmentos de
linha. Utilizamos o eixo Y para representar [ f
k
] ou f (kT), que é o sinal digital.
Os índices do MATLAB começam sempre com 1, como x(1), x(2) e assim por diante.
Entretanto os índices para processamento de sinais utilizados são sempre valores negativos, como h
–2
, h
–1
, h
0
e assim por diante. É importante que as equações sejam escritas na mesma forma para
que o usuário não se confunda.
Os sinais podem ser analisados de suas formas – domínio do tempo e domínio da
freqüência. O domínio do tempo é representado por valores reais e o domínio da freqüência por
valores complexos, que por sua vez, podem ser representados por senóides, que compõem o sinal.
Curso de MATLAB
Cap. 14 – Processamento de Sinais 147
A transformada discreta de Fourier (DFT) é usada para converter um sinal digital no
domínio do tempo em um conjunto de pontos no domínio da freqüência. 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 informação no domínio da freqüência.
O algoritmo da transformada utiliza um número de cálculos muito grande, por isso
utilizamos a Transformada de Fourier, que também converte o sinal no tempo para o domínio da
freqüência.
A função fft do MATLAB calcula a transformada de Fourier. Esta função pode ser usada
para uma ou duas entradas. Se entrarmos com um sinal simples no domínio do tempo obteremos
como resposta um sinal contendo números complexos, que representam o domínio da freqüência.
Se o número de valores no domínio do tempo for igual a potência de 2, usaremos o método
da transformada de Fourier. Se não, usaremos o método DFT.
Os valores no domínio da freqüência gerados pela função fft correspondem a uma
freqüência de separação de 1/NT Hz, onde N é o número de amostras e T o período da função. Seja
N=32, T=0.001, os valores de freqüência mostrados serão 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
Curso de MATLAB
Cap. 14 – Processamento de Sinais 148
Neste gráfico podemos notar a simetria gerada pela periodicidade da FFT; e da onda
senoidal.
Podemos plotar também a magnitude de F
K
pela freqüência 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 função ifft faz a transformada inversa de Fourier, ou seja, calcula o domínio do tempo [ f
k
] a partir de valores complexos [ F
K
].
O método FFT é uma ferramenta poderosa quando se trabalha com sinais digitais. Nossa
discussão foi focada na magnitude de F
K
, mas também é muito importante obtermos a fase de F
K
.
P r a t i q u e !
Gere 128 pontos para os seguintes sinais. Plote o sinal no domínio do tempo. Usando o
método da transformada de Fourier gere e plote o sinal no domínio da freqüência. 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 domínio da freqüência.
1. f
k
= 2 sin(2π50kT)
2. g
k
= cos(250πkT) - sin(200πkT)
3. h
k
= 5 - cos(1000kT)
4. m
k
= 4 sin(250πkT - π/4)
Curso de MATLAB
Cap. 14 – Processamento de Sinais 149
14.2 Análise de Filtros
A função de transferência de um sistema analógico é descrita como H(s) e de um sistema
digital como H(z). Estas funções de transferências descrevem o efeito do sistema a um sinal de
entrada, e também o efeito de filtragem do sistema.
Como a função de transferência de um filtro define o efeito do filtro em termos de
freqüência, podemos usar esta função de transferência para descrever uma faixa de freqüência. Por
exemplo, um filtro passa baixa irá deixar passar todas as freqüências abaixo da freqüência de corte
estabelecida. O passa banda irá deixar passar a banda de freqüência especificada. E o corta banda
irá remover a banda de freqüência especificada.
Podemos definir a atuação dos filtros em 3 regiões básicas: banda de passagem, banda de
transição e banda de corte. Estas regiões são definidas pela freqüência de corte w
c
e pela freqüência
de rejeição w
r
.
Como uma função de transferência é uma função complexa, a análise dos filtros incluem
gráficos de magnitude e fase. Para isso utilizam-se as funções abs, angle e unwrap.
Adicionalmente, as funções freqs e freqz podem ser usadas para se achar os valores das funções
H(s) e H(z) como nos exemplos a seguir.
Função de Transferência Analógica

Um filtro analógico é definido pela função de transferência H(s) onde s = jw. Na forma geral
a função de transferência H(s) é a seguinte:
H(s) = B(s) (14.1)
A(s)
= b
0
s
n
+ b
1
s
n-1
+ b
2
s
n-2
+ ... + b
n
a
0
s
n
+ a
1
s
n-1
+ a
2
s
n-2
+ ... + a
n
Esta função de transferência corresponde a ordem n dos filtros analógicos.
5279 . 0 1.0275 s
0.5279
H(s)
2
+ +
·
s
0062 . 0 0.1117 s
s
H(s)
2
2
+ +
·
s
447 . 0 1.05 s
1.05s
H(s)
2
+ +
·
s
2359 . 2 2.3511 s
2.2359 s
H(s)
2
2
+ +
+
·
s
Curso de MATLAB
Cap. 14 – Processamento de Sinais 150
A função freqs calcula os valores de uma função complexa H(s), usando 3 argumentos de
entrada. O primeiro é um vetor contendo os coeficientes do polinômio B(s) da Equação 14.1; o
segundo é um vetor contendo os coeficientes do polinômio A(s); e o terceiro é um vetor com o valor
da freqüência em ‘rps’. Em geral, colocamos o alcance da freqüência para começar no zero e
incluímos todos os parâmetros 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 função able ou a unwrap. Como a fase
de um número complexo é um ângulo em radianos, o ângulo está restrito ao intervalo 2π. Esta
função, utiliza o intervalo de -π a π e quando estes limites são ultrapassados é gerada uma
descontinuidade.
A função unwrap remove as descontinuidades quando introduzimos a função angle.
Como no exemplo: unwrap(angle(H)).
Curso de MATLAB
Cap. 14 – Processamento de Sinais 151
Função de Transferência Digital
A função de transferência digital é definida por H(z) onde z = e
jwt
. Na forma geral a função
de transferência H(z) é a seguinte:
H(z) = B(z) (14.2)
A(z)
H(s) = b
0
+ b
1
z
-1
+ b
2
z
-2
+ ... + b
n
z
- n
a
0
+ a
1
z
-1
+ a
2
z
-2
+ ... + a
n
z
- n
Esta função de transferência corresponde a ordem n dos filtros digitais.
Se o denominador da função de transferência 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 são muito
utilizados no processamento de sinais digitais.
A função freqz calcula os valores de uma função complexa H(z), usando 3 argumentos de
entrada. O primeiro é um vetor contendo os coeficientes do polinômio B(z) da Equação 14.2; o
segundo é um vetor contendo os coeficientes do polinômio A(z); e o terceiro é para especificar o
número de valores de freqüências normalizadas que se quer no intervalo de 0 a π. Este número de
pontos define a resolução. Através deste ajuste da resolução podemos determinar os tipos de filtros
e as freqüências críticas.
2 - 1 -
-2 -1
1
0.1958z 0.3695z - 1
0.2066z 0.4131z 0.2066
) (
+
+ +
· z H
2 - 1 -
-2 -1
2
0.799z 1.778z - 1
0.894z 1.789z - 0.894
) (
+
+
· z H
2 - 1 -
-2
3
0.159z 0.443z - 1
0.42z - 0.42
) (
+
· z H
2 - 1 -
-2 -1
4
0.1584z 0.4425z 1
0.5792z 0.4425z 0.5792
) (
+ +
+ +
· z H
Curso de MATLAB
Cap. 14 – Processamento de Sinais 152
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 função angle ou a unwrap.
P r a t i q u e !
Para estas funções de transferência, plote a magnitude. Use freqüência normalizada no eixo
X para filtros digitais.
1 2 s
s
H(s) 1.
2
2
+ +
·
s
Curso de MATLAB
Cap. 14 – Processamento de Sinais 153
14.3 Implementação de Filtros Digitais
Filtros analógicos são implementados com componentes eletrônicos como resistores e
capacitores. Os filtros digitais são implementados por software. Os filtros digitais podem ser
representados por funções de transferência ou equações diferenciais.
A relação entre o sinal de entrada x
n
e o sinal de saída y
n
é descrita pela equação
diferencial, que está escrita na forma geral:
Exemplos:
As três equações diferenciais representam diferentes tipos de filtros. A saída do primeiro
depende somente dos valores anteriores do sinal de entrada. O segundo filtro requer valores não
apenas de entrada mas também os valores anteriores da saída. O terceiro filtro depende apenas dos
valores de entrada. Porém os valores de entrada necessários são os posteriores e isso pode ser
problemático quando os dados são adquiridos em tempo real. Estes filtros são FIR porque os
denominadores são iguais a 1.
A função filter do MATLAB assume a equação diferencial na seguinte forma:
que corresponde a seguinte função de transferência:
∑ ∑
·

·

·
3 2
1
N
1 k
k
N - k
k n
a - b y
k n
N
k n
y x
∑ ∑
·

·

·
3 2
N
1 k
k
0 k
k n
a - b y
k n
N
k n
y x
5 - n 4 - n 3 - n 2 - n 1 - n
0.04x 0.17x 0.25x 0.17x 0.04x + + + + ·
n
y
2 - n 1 - n 2 - n n
0.16x - 0.44x 0.42x - 0.42x + ·
n
y
1 - n n 1 n
0.33x 0.33x 0.33x + + ·
+ n
y
0.414 - z
0.707 - 0.707z
H(s) 2. ·
-6 -5 -4 -3 -2 -1
0.163z - 0.058z - 0.116z 0.2z 0.116z 0.058z - 0.163 - H(s) 3. + + + ·
1 0.4 s
1 5s
H(s) 4.
2
+ +
+
·
s
Curso de MATLAB
Cap. 14 – Processamento de Sinais 154
H(z) = B(z)
A(z)
H(s) = b
0
+ b
1
z
-1
+ b
2
z
-2
+ ... + b
n
z
- n
a
0
+ a
1
z
-1
+ a
2
z
-2
+ ... + a
n
z
- n
Os dois primeiros argumentos da função filter são vetores com os coeficientes de [b
k
] e de
[a
k
]. 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);
Nós podemos usar a função filter para o terceiro filtro porque a equação não está ajustada
na forma geral usada pela função. A terceira equação precisa começar em k=0 e não em k= -1.
Neste caso implementamos o filtro utilizando um vetor aritmético. Assumindo um sinal de entrada
x constrói-se um vetor x, que pode calcular o sinal de saída 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);
Curso de MATLAB
Cap. 14 – Processamento de Sinais 155
P r a t i q u e !
A seguinte função de transferência foi projetada para deixar passar freqüências entre
500Hz e 1500Hz, de um sinal de até 5KHz.
H(z) = 0.42z
2
– 0.42 .
z
2
– 0.443z + 0.159
Use os seguintes sinais de entrada no filtro. Plote a entrada e a saída do filtro no mesmo
gráfico e determine o efeito do filtro no sinal de entrada.
1. x
k
= sin(2π1000kT)
2. x
k
= 2 cos(2π100kT)
3. x
k
= -sin(2π2000kT)
4. x
k
= cos(2π1600kT)
14.4 Projeto de Filtros Digitais
A discussão será separada em duas técnicas: uma para filtros IIR e outra para filtros FIR.
Projeto de Filtros IIR usando protocolos analógicos
O MATLAB possui quatro tipos de filtros digitais baseados em projetos de filtros
analógicos. Os filtros Butterworth são usados como passa-banda e corta-banda, os filtros Chebyshev
Tipo I são usados com ripple na banda de passagem, os filtros Chebyshev Tipo II são usados com
ripple na banda de corte. Os filtros elípticos possuem uma faixa de transição mais definida que o
filtro Butterworth com as mesmas especificações.
As funções para se projetar filtros IIR digitais que usam protocolos analógicos 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 freqüência
de corte normalizada (Wn). Os vetores de saída B e A são os vetores da expressão geral para filtros
IIR e podem ser utilizados para se achar a função de transferência ou a equação diferencial.
Para se projetar filtros passa-banda os argumentos das funções são os mesmos do passa-baixa.
Entretanto o vetor Wn precisa conter 2 elementos que representam as freqüências normalizadas
especificadas da banda de freqüência, como Wn(1) e Wn(2).
Curso de MATLAB
Cap. 14 – Processamento de Sinais 156
Para se projetor filtros passa-alta, um parâmetro 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 são os mesmos dos filtros passa-alta, mas com o
termo ‘stop’ ao invés de ‘high’. O argumento Wn precisa ser um vetor que contenha 2 valores
definem a banda de freqüência como Wn(1) e Wn(2) para serem rejeitadas.
Para ilustrar estas funções supomos que precisemos projetar um filtro passa-alta Chebyshev Tipo II
de ordem 6. Nós queremos como limite de passabanda um ripple de 0,1 ou 20db. O filtro é para ser
usado para um sinal de até 1KHz. A freqüência de corte é de 300HZ e a freqüência normalizada é
de 300/500 ou 0.6. Os comandos para o projeto deste filtro e para plotar a magnitude característica
são 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 instrução:
Y = filter (B,A,x);
Projeto de um Filtro IIR
O MATLAB possui uma função para projetar filtros com o método Yule-Walker. Esta
técnica de projeto pode ser usada para projetar formas arbitrárias, possibilitando projetar respostas
freqüenciais multibandas.
O comando para projetar um filtro com esta função é o seguinte:
[B,A] = yulewalk(n,f,m);
Os vetores de saída B e A contém os coeficientes de n ordem do filtro IIR. Os vetores f e m
especificam as características freqüência-magnitude do filtro. As freqüências em f precisam
começar em 0, terminando em 1 e serem crescentes. A magnitude m precisa corresponder com a
freqüência f, e representa a magnitude esperada para a freqüência correspondente. O exemplo a
seguir nos mostra um projeto de um filtro com dois passabandas e que plota a magnitude de
resposta na freqüência normalizada.
Curso de MATLAB
Cap. 14 – Processamento de Sinais 157
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 (‘Freqüência Normalizada’),...
ylabel (‘Magnitude’), grid
Projeto Direto de um Filtro FIR
Os filtros FIR são projetados pelo MATLAB usando o método 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 função 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 são similares ao da
técnica 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 freqüência 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 (‘Freqüência Normalizada’),...
ylabel (‘Magnitude’), grid
P r a t i q u e !
Use as funções do MATLAB descritas nesta seção para projetar os seguintes filtros. Plote a
magnitude do filtro projetado para confirmar se as características estão corretas.
1. Filtro IIR passabaixa com corte de 75Hz, onde usa-se uma freqüência de até 500Hz.(Use um
filtro de ordem 5)
2. Filtro IIR passaalta com corte de 100Hz, onde usa-se uma freqüência de até 1KHz.(Use um
filtro de ordem 6)
3. Filtro FIR passabaixa com corte de 75Hz, onde usa-se uma freqüência de até 500Hz.(Use um
filtro de ordem 40)
Curso de MATLAB
Cap. 14 – Processamento de Sinais 158
4. Filtro FIR passabanda com faixa de freqüência entre 100Hz e 200Hz, onde usa-se uma
freqüência de até 1KHz.(Use um filtro de ordem 80)
Aplicação na Solução de Problemas: Filtros para Separação de Canais
Imagens coletadas de uma nave espacial ou de satélites que circundam a terra são enviadas
para a terra como um fluxo de dados. Estes fluxos de dados são convertidos em sinais digitais que
contém informações que podem ser recombinadas e assim reconstruir as imagens originais.
Informações coletadas por outros sensores também são transmitidas para a terra. A freqüência do
sinal de informação do sensor depende dos tipos de dados que estão sendo medidos.
Técnicas de modulação podem ser usadas para mover o conteúdo da freqüência para a
banda de freqüência especificada. Desta forma o sinal pode conter sinais múltiplos ao mesmo
tempo. Por exemplo, supomos que queremos enviar 3 sinais em paralelo. O primeiro sinal contém
componentes entre 0 e 100Hz, o segundo sinal contém componentes entre 500 e 1KHz, e o terceiro
contém componentes entre 2KHz e 5KHz.
O sinal contendo estas três componentes é de até 10KHz. Para separar estas três
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 transição para que a componente de uma freqüência não
contamine as outras componentes.
1. DESCRIÇÃO DO PROBLEMA
Projete três 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. DESCRIÇÃO DOS DADOS DE ENTRADA E SAÍDA
Não há valores de entrada para este problema. Os valores de saída são coeficientes dos vetores
que definem os três filtros H
1
(z), H
2
(z) e H
3
(z), como na figura a seguir:
Figura 4 – Diagrama de I/O
Curso de MATLAB
Cap. 14 – Processamento de Sinais 159
3. EXEMPLO MANUAL
O espectro abaixo nos mostra a amostra de freqüência com os três sinais filtrados, Nós
usaremos os filtros Butterworth. Precisaremos experimentar várias ordens para sabermos se as
bandas de transição não irão interferir uma nas outras.
Figura 4 – Espectro de faixa dos filtros
4. SOLUÇÃO MATLAB
O seguinte programa MATLAB determina os valores da freqüência normalizada para as
freqüências de corte pela função butter. Depois de calculados os coeficientes para os filtros, nós
usamos a função freqz para plotar as características dos filtros. Lembrando que a função freqz
normaliza as freqüências para valores entre 0 e π. Nós usamos Hz como unidade no eixo X, para
facilitar a visualização das características dos filtros projetados.
5. TESTANDO
As magnitudes dos três filtros são mostradas no mesmo gráfico para podermos verificar se os
filtros não se sobrepõem.
Sumário MATLAB
butter projeta um filtro digital Butterworth
cheby1 projeta um filtro digital Chebyshev Tipo 1
cheby2 projeta um filtro digital Chebyshev Tipo 2
ellip projeta um filtro digital elíptico
fft calcula a freqüência de um sinal
filter aplica um filtro digital em um sinal de entrada
freqs calcula a freqüência analógica
freqz calcula a freqüência digital
grpdelay mede o grupo de retardo de um filtro digital
ifft calcula a inversa da transformada de Fourier
remez projeta um filtro digital FIR
unwrap remove a descontinuidade 2π da fase angular
yulewalk projeta um filtro digital IIR
Curso de MATLAB
Cap. 14 – Processamento de Sinais 160
PROBLEMAS:
1. Nós usaremos a soma de senóides de até 10KHz. O primeiro sinal contém uma soma de
senóides com freqüências de 24Hz, 40 Hz e 75Hz. O segundo sinal contém uma soma de
senóides com freqüências de 500Hz, 730 Hz e 850Hz. O terceiro sinal contém uma soma
de senóides com freqüências de 3500Hz, 4000 Hz e 4200Hz. Escolha as amplitudes e
fases para estas senóides. Plote 500 pontos para o sinal 1, 2 e 3 em diferentes gráficos.
2. Calcule e plote a magnitude e a fase dos três sinais do exercício anterior. Use Hz como
unidade no eixo x .
3. Adicione três tempos no sinal gerado no exercício 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 freqüência dos sinais de saída.
5. Para os seguintes filtros determine a banda de passagem, banda de transição e banda de
corte. Use 0.7 para determinar as freqüências de corte e use 0.1 para determinar as
freqüências de rejeição.
6. Projete um filtro para remover freqüências entre 500Hz e 1000Hz de um sinal de até
10KHz. Compare os resultados dos filtros elíptico e do filtro Yule-Walker, ambos de
ordem 12. Plote a magnitude dos dois sinais.
7. Projete um filtro para remover freqüências 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
5279 . 0 1.0275 s
0.5279
H(s)
2
+ +
·
s
0062 . 0 0.1117 s
s
H(s)
2
2
+ +
·
s
2 - 1 -
-2 -1
1
0.1958z 0.3695z - 1
0.2066z 0.4131z 0.2066
) (
+
+ +
· z H
2 - 1 -
-2 -1
2
0.799z 1.778z - 1
0.894z 1.789z - 0.894
) (
+
+
· z H
Curso de MATLAB
Cap. 15 – Matemática Simbólica
161
Capítulo 15 - Matemática Simbólica
Introdução
Agora é possível instruir ao MATLAB que manipule expressões matemáticas,
sem de fato usar números, que lhe permitam calcular com símbolos matemáticos, além
de números. Esse processo é freqüentemente chamado de matemática simbólica. Aqui
estão alguns exemplos de expressões simbólicas:
cos(x
2
) 3x
2
+ 5x - 1 v= d x
2
f=

x
2
dx
A toolbox de Matemática Simbólica é uma coleção de funções para o MATLAB
usadas para manipular e resolver expressões simbólicas. Há diversas ferramentas para
combinar, simplificar, derivar, integrar e resolver equações diferenciais e algébricas.
Outras ferramentas são utilizadas em álgebra linear para derivar resultados exatos para
inversas, determinantes e formas canônicas e para encontrar os autovalores de matrizes
simbólicas, sem o erro introduzido pelo cálculo numérico.
A aritmética de precisão variável que calcula simbolicamente e retorna um
resultado para qualquer grau de precisão especificado, também está disponível no
MATLAB.
As ferramentas contidas na toolbox de matemática simbólica 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 operação simbólica, ele solicitará ao Maple para fazê-lo
e então retornará o resultado para a janela de comando do MATLAB. Por isso, fazer
manipulações simbólicas no MATLAB é uma extensão natural do modo como você usa
o MATLAB para processar números.
15.1 Expressões Simbólicas
Expressões simbólicas são strings de caracteres ou conjuntos de strings de
caracteres que representam números, funções, operadores e variáveis. as variáveis não
têm de ter valores previamente definidos. Equações simbólicas são expressões
simbólicas que contêm um sinal de igualdade. A aritmética simbólicas é a prática de
resolução dessas equações por meio da aplicação de regras conhecidas e de identidades a
determinados símbolos, exatamente da forma que você aprendeu a resolvê-las em
álgebra e cálculo. Matrizes simbólicas são conjuntos cujos elementos são expressões
simbólicas.
Curso de MATLAB
Cap. 15 – Matemática Simbólica
162
Representações de Expressões Simbólicas no MATLAB
O MATLAB representa expressões simbólicas internamente como strings de
caracteres para diferenciá-las de variáveis numéricas e operadores. Aqui estão alguns
exemplos de expressões simbólicas com seus equivalentes em MATLAB:
Expressões simbólicas Representação no MATLAB
1_
2x
n
‘1 (2 * x ^ n) ’
cos(x
2
) - sen (2x) ‘ 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 exercício acima, a expressão simbólica foi definida
implicitamente pelo uso de aspas simples para dizer ao MATLAB que (‘cos(x)’) seja
uma expressão simbólica, em vez de uma expressão numérica, ao passo que, no segundo
exemplo, a função sym foi usada para, explicitamente, dizer ao MATLAB que M = sym
(‘[a,b;c,d]’) é uma expressão simbólica. Geralmente a função explícita sym não é
necessária 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
função 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 fácil de ser digitada.
Contudo, a função sym é necessária. Isto fica claro no exemplo seguinte:
Exemplo
M=[a,b;c,d] M é uma matriz numérica 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 simbólica
Aqui M foi definido de três maneiras: numericamente (se a, b, c e d tiverem sido
predefinidos), como uma string de caracteres e como uma matriz simbólica.
Curso de MATLAB
Cap. 15 – Matemática Simbólica
163
Muitas funções simbólicas são suficientemente avançadas para converter strings
de caracteres em expressões simbólicas de forma automática. Mas, em alguns casos, em
especial na criação de um conjunto simbólico, a função sym deve ser usada para
converter um string de caracteres especificamente em uma expressão simbólica. A
forma implícita, ou seja, diff cos(x), é mais útil para tarefas simples que não referenciam
resultados anteriores. Contudo, a forma mais simples (sem aspas) requer um argumento
que é um string de caracteres simples sem espaços em seu interior:
Exemplo
diff x^2+3*x+5
diff x^2 + 3*x + 5
Na segunda equação os espaços pressupões strings de caracteres distintos.
As expressões simbólicas sem variáveis são chamadas de constantes simbólicas.
Quando as constantes simbólicas são visualizadas, freqüentemente torna-se difícil
distingui-las de números inteiros.
Exemplo
f=symop(‘(3*4-2)/5+1’)
isstr(f)
A função isstr nada mas faz do que retornar se f é uma string de caracteres (1 =
sim e 0 = não). Nesse caso, f representa a constante simbólica ‘3’ não o número 3. O
MATLAB armazena strings de caracteres como representação ASCII de caracteres.
Consequentemente, se você realizar uma operação numérica em um string de caracteres,
o MATLAB usa o valor ASCII de cada caractere na operação.
Exemplo
f +1
15.2 Variáveis Simbólicas
Quando se trabalha com expressões simbólicas contendo mais de uma variável,
uma variável a é a variável independente, ele seleciona uma baseado na regra seguinte:
A variável independente padrão em uma expressão simbólica é uma letra
minúscula única, que não seja i ou j, que não faça parte de uma palavra. Se não há tal
caractere, é escolhido x. Se o caractere não for único, aquele mais próximo de x,
alfabeticamente falando, é escolhido. Se houver empate, o caractere posterior no
alfabeto será escolhido.
A variável independente padrão, algumas vezes conhecida como variável livre, na
expressão ‘1 / (5+cos(x))’ é ‘x’; a variável livre na expressão ‘3*y+z’ é ‘y’; e a variável
livre na expressão ‘ a+sin(t)’ é ‘t’. A variável simbólica livre na expressão ‘ sin(pi/4) -
Curso de MATLAB
Cap. 15 – Matemática Simbólica
164
cos(3/5)’ é ‘x’ porque esta expressão é uma constante simbólica, não contendo variáveis
simbólicas.
Você pode pedir ao MATLAB para lhe dizer qual a variável em uma expressão
simbólica é considerada por ele como a variável independente usando a função symvar.
Exemplo
symvar(‘a*x+y’) encontra a variável simbólica padrão
symvar (‘a*t+s/(u+3)’) u é mais próxima de x
symvar(‘sin(omega)’) ‘omega’ não é um caracter único
symvar(‘3*i+4*j’) i e j são iguais a sqrt(-1)
symvar(‘y+3*s’,’t’) encontra a variável mais próxima de ‘t’
Se symvar não encontrar uma variável padrão, usando esta regra, considerará que
ela não existe e retornará x. Isto será verdadeiro para expressões que contenham
variáveis com múltiplos caracteres, bem como constantes simbólicas, as quais não
contêm variáveis.
Muitos comandos dão a você a opção de especificar a variável independente, se
desejado:
Exemplo
diff(‘x^n’) deriva em relação à variável padrão ‘x’;
diff(‘x^n’,’n’) deriva em relação a n;
diff(‘sin(omega)’) deriva usando a variável padrão;
diff(‘sin(omega)’,’omega’) especifica a variável independente;
E x e r c í c i o s
Dada cada expressão simbólica, use a sintaxe do MATLAB para criar a
expressão simbólica equivalente do MATLAB.
a . f = ax
2
+ bx + c

b. p = 3s
2
+ 2s + 1
4s - 2
c. r = e
-2t

d. d 5 2 3
2
+ + x x
dx
Curso de MATLAB
Cap. 15 – Matemática Simbólica
165
2. Encontre a variável independente padrão que é retornada por symvar nas expressões
seguintes:
a . z = 3ac +4b -2
b. x = 4a + 3c + b
2
+ 1
c. q = r + p k 2 3
2
+
d. f = s
3nt
e. n = 3r + 2s
2
+ 5
15.3 Operações em Expressões Simbólicas
Depois de criar uma expressão simbólica, você provavelmente vai querer mudá-la
de alguma forma. Você pode querer extrair parte de uma expressão, combinar duas
expressões ou achar o valor numérico de uma expressão simbólica. Há muitas
ferramentas simbólicas que lhe permitirão realizar essas tarefas.
Quase todas as funções simbólicas agem sobre expressões simbólicas e conjuntos
simbólicos e retornam expressões simbólicas ou conjuntos. O resultado pode ás vezes se
parecer com um número, mas é uma expressão simbólica representada internamente
como um string de caracteres. Conforme foi dito antes, é possível descobrir se o
resultado que parece ser um número é um inteiro ou um string de caracteres utilizando a
função isstr do MATLAB.
Extração de Numeradores e Denominadores
Se sua expressão for um polinômio racional (uma razão de dois polinômios) ou
puder ser expandida em um polinômio racional (incluindo aqueles com um denominador
igual a 1), você pode extrair o numerador e o denominador usando numden. Dadas as
expressões:
m = x
2
f = ax
2
b - x
g = 3 x
2
+ 2 x - 3
2 3 5
h = x
2
+ 3 + 3x
2x - 1 x - 1
Curso de MATLAB
Cap. 15 – Matemática Simbólica
166
k =
3
2
4
x2
2x 1
3
3x 4
numden combina e racionaliza a expressão, se necessário, e retorna o numerador
e o denominador resultantes. As linhas de comando do MATLAB para se fazer isso são:
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 expressão , k, é um conjunto simbólico, 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 variável s.
15.4 Operações Algébricas Padrão
Diversas operações algébricas podem ser executadas em expressões simbólicas.
As funções symadd, symsub e symdiv somam, subtraem, multiplicam e dividem,
respectivamente, duas expressões, e sympow eleva uma expressão à potência da outra.
Exemplo
f = 2x
2
+ 3x - 5
g = x
2
- x + 7
Curso de MATLAB
Cap. 15 – Matemática Simbólica
167
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 expressão para f
3
Uma outra função de aplicação geral permite que você crie novas expressões a
partir de outras variáveis simbólicas, expressões e operadores. Symop recebe até 16
argumentos separados por vírgula, cada um dos quais pode ser uma expressão simbólica,
um valor numérico ou um operador (+,-,*,/,^,(,ou)). Symop então concatena os
argumentos e retorna à expressão resultante.
Exemplo
f = ‘cos(x)’
g = ‘sin(2*x)’
symop(f, ‘/ ’, g , ‘+’ , 3)
Todas estas operações também trabalham com conjuntos de argumentos da
mesma forma.
Operações Avançadas
O MATLAB tem a capacidade de realizar operações mais avançadas em
expressões simbólicas. A função compose combina f(x) e g(x) em f(g(x)), a função
finverse encontra o inverso funcional da expressão, e a função symsum encontra o
somatório simbólico de uma expressão.
Dada as expressões:
1. f = 1
1 + x
2
2. g=sen(x)

3. h = 1
1 + u
2
4. k = sen(v)
Curso de MATLAB
Cap. 15 – Matemática Simbólica
168
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 também ser usada em funções que tem variáveis independentes
diferentes:
compose ( h, k, ‘u’, ‘v’)
O inverso funcional de uma expressão, digamos f(x), é a expressão g(x) que
satisfaz a condição g(f(x)) = x. Por exemplo, o inverso funcional de e
x
é ln(x), já que
ln(e
x
) = x.
A função finverse retorna o inverso funcional de uma expressão e avisa a você se
o resultado não for único.
Exemplos
finverse (‘x^2’)
finverse (‘a*x+b’)
finverse (‘a*b+c*d-a*z’,‘a’)
A função symsum encontra o somatório simbólico de uma expressão. Há quatro
formas para a função:
MATLAB Retorna
symsum(f)

−1
0
) (
x
x f
symsum(f, a, b)

b
x f
0
) (
symsum(f, ‘s’ )

−1
) (
s
a
s f
symsum(f, ‘s’, a , b )

b
a
s f ) (
Curso de MATLAB
Cap. 15 – Matemática Simbólica
169
Exemplos
1.

−1
0
2
x
x

2.


n
n
1
2
) 1 2 (

3.



1
2
) 1 2 (
1
n
15.5 Funções de Conversão
Essa seção apresenta ferramentas para conversão de expressões simbólicas em
valores numéricos e vice-versa.
A função sym pode receber um argumento numérico e convertê-lo em uma
representação simbólica. A função numeric faz o contrário, converte uma constante
simbólica em um valor numérico.
Exemplo
phi= ‘(1+sqrt(5))/2’
numeric (phi)
A função eval faz com que o MATLAB calcule um string de caracteres. Dessa
forma, eval é outra função que pode ser usada para converter constante simbólica em um
número, ou para calcular uma expressão.
Exemplo
eval(phi)
Você já trabalhou com polinômios em MATLAB, usando vetores cujos
elementos são os coeficientes dos polinômios. A função simbólica sym2poly converte
um polinômio simbólico em seu vetor de coeficientes equivalente no MATLAB. A
função poy2sym faz o inverso e possibilita que você especifique a variável a ser usada na
expressão resultante.
Exemplo
f= ‘2*x^2+x^3-3*x+5’
n=sym2poly(f)
poly2sym(n)
poly2sym(n, ‘s’)
Curso de MATLAB
Cap. 15 – Matemática Simbólica
170
Substituição de Variáveis
Quando se tem uma expressão simbólica em x, e que queira mudar a variável para
y, usa-se a função subs.
Exemplo
f= ‘a*x^2+b*x+c’
subs(f, ‘s’, ‘x’)
h= subs(f, ‘2’, ‘x’)
15.6 Derivação e Integração
Derivação
A derivação de uma expressão simbólica usa a função diff em uma dentre as
quatro formas:
Expressão Resultado
f= ‘a*x^3+x^2-b*x-c’ Define uma expressão simbólica
diff(f) Deriva em relação ao padrão (x)
diff(f, ‘a’) Deriva f em relação a (a)
diff(f, 2) Deriva f duas vezes em relação a (x)
diff(f, ‘a’,2) Deriva a função f duas vezes em relação a (a)
A função diff também opera sobre conjuntos. Se f for um vetor simbólico ou
matriz, diff(f) deriva cada elemento do conjunto:
Exemplo
f= sym(‘[a*x, b*x^2, c*x^3, d*s]’)
diff(f)
Integração
A função de integração int(f), onde f é uma expressão simbólica, tenta encontrar
outra expressão simbólica F tal que diff(F)=f.
Curso de MATLAB
Cap. 15 – Matemática Simbólica
171
Expressão Resultado
f= ‘sin(s+2*x)’ Cria uma função simbólica
int(f) Integra em relação a x
int(f, ‘s’) Integra em relação a s
int(f, pi/2, pi ) Integra em relação a x de pi/2 a pi
int(f, ‘s’, pi/2, pi) Integra em relação a s de pi/2 a pi
int(f, ‘m’,‘n’) Integra em relação a x de m para n
Exercício:
Hélio está em uma excursão com sua turma de escola, no alto do edifício Central.
Ele pega um tomate maduro em sua mochila, debruça-se sobre a beirada do terraço e
atira-o no ar. O tomate é jogado para cima, a uma velocidade inicial vo = 20m/s. O
terraço encontra-se a yo = 30 metros acima do nível do solo. Onde estará o tomate a um
intervalo arbitrário de t segundos mais tarde? Quando ele alcançará a altura máxima?
Que altura acima do solo o tomate conseguirá alcançar? Quando o tomate atingirá o
solo? Considere que não há resistência do ar e que g = 10 m/s.
ymax tmax
y = 30 t = 0
y = 0 t_plof
15.7 Transformadas
As transformadas são usadas com muita freqüência em Engenharia para mudar o
campo de referência entre o domínio do tempo e o domínio s, domínio da freqüência ou
domínio Z. Há muitas técnicas para analisar estados de equilíbrio e sistemas que sofrem
mudanças muito suaves no domínio do tempo, mas os sistemas complexos quase sempre
podem ser analisados mais facilmente em outros domínios.
Curso de MATLAB
Cap. 15 – Matemática Simbólica
172
Funções Degrau e Impulso
Os problemas de Engenharia freqüentemente fazem uso da função Degrau u(t) e
impulso δ(t) na descrição de sistemas. A função 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
gráfico da função Degrau Ku(t - a):
A função impulso δ(t) é a derivada da função Degrau u(t). A função Degrau K
δ(t-a) é definida como K δ(t-a) = 0 para t < a e

−∞

· − K dt a t K ) ( δ para t = ª
Quando representada em gráfico ela é comumente representada como uma seta
de amplitude K em t = a . Eis o gráfico de K δ(t-a):
Exemplo
u = ‘k*Heaviside(t-a)’
d = diff(u)
int(d)
Curso de MATLAB
Cap. 15 – Matemática Simbólica
173
Transformada de Laplace
A Transformada de Laplace realiza a operação F(s)=



0
) ( dt e f
st
τ . Para
transformar f(t), no domínio do tempo, em F(s), no domínio de s.
A Transformada de Laplace da função cosseno amortecido e
-at
cos(wt) é
encontrada usando-se a função Laplace:
f=sym(‘exp(-a*t)*cos(w*t)’)
F= laplace(f)
pretty(F)
laplace(‘Dirac(t)’)
laplace(‘Heaviside(t)’)
As expressões podem ser transformadas novamente para o domínio do tempo,
usando-se o inverso da transformada de Laplace, invlaplace, que realiza a operação f(t).
Usando F do exemplo acima temos:
invlaplace(F)
Transformada de Fourier
A Transformada de Fourier e sua inversa são muito usadas em análise de
circuitos para determinar as características de um sistema em ambos os domínios de
tempo e de freqüência. O MATLAB usa as funções fourier e invfourier para transformar
expressões entre domínios. A Transformada de Fourier e sua inversa são definidas
como:
F(w)=


∞ −

dt e t f
jwt
) ( f(t) = 1


∞ −
dw e w F
jwt
) (
O MATLAB usa um w para representar ω em expressões simbólicas.
Exemplo
f= ‘t*exp(-t^2)’
F= fourier(f)
invfourier(F)
Curso de MATLAB
Cap. 15 – Matemática Simbólica
174
Transformada Z
As transformadas de Laplace e Fourier são usadas para analisar sistemas de
tempo contínuos. Transformadas Z, por outro lado, são usadas para analisar sistemas de
tempo discreto. A Transformada Z é definida como:
F(z)=


·

0
) (
n
n
z v f
onde z é um número complexo.
A Transformada z e a Transformada z inversa são obtidas usando-se as funções
ztrans e invztrans. O formato é similar ao das funções de transformadas de Laplace e
Fourier.
Exemplo
f= ‘2 ^ n / 7- (-5) ^ n / 7’
G= ztrans(f)
pretty(G)
invtrans(G)

Curso de MATLAB

AGRADECIMENTOS Estas notas sobre o uso da versão 5.1 do MATLAB são o resultado do trabalho persistente dos alunos da Faculdade de Engenharia da UERJ, bolsistas de iniciação Tecnológica do Projeto REENGE - Joana Figueiredo Konte, Jorge Luís Pinheiro Teixeira, Pat Evie Alves - e da estagiária Luciana Faletti que se encarregaram de dar corpo à segunda edição de um curso de Introdução à Solução 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 confecção desta apostila. A este grupo entusiasmado de jovens, aderiram outros estagiários do Laboratório de Engenharia Elétrica, como Hélio Justino Mattos Filho. A todos eles os cumprimentos pelo êxito e pela forma como se envolveram de corpo e alma na execução das tarefas. O sucesso obtido na implementação de ambos os cursos não é sem dúvida fruto de uma obra isolada. Dela participaram, com entusiasmo a equipe tecnicoadministrativa do Laboratório de Engenharia Elétrica, cujos membros contribuíram com a dedicação que lhes é peculiar, através do suporte e infra-estrutura e o envolvimento direto com os alunos e com a coordenação do projeto. Um muito obrigado à equipe formada pelos funcionários Alberto Avelar Santiago, André Vallim Stachlewski, José Emílio Gomes, Jair Medeiros Júnior, João Elias Souza da Costa, Luiz Roberto Franco Fagundes Filho, Marcos Augusto Mafra, Antônio Marcos Medeiros Corrêa, Sueli Ferreira dos Santos e pela Srta. Carla Aparecida Caldas de Almeida, do curso de PósGraduação ‘latu-senso’ em Engenharia Mecatrônica da UERJ. Uma palavra de reconhecimento especial ao diretor Dr. Nival Nunes de Almeida, coordenador geral do REENGE, pelo apoio e pelo incentivo dado à viabilização de inúmeras atividades no âmbito da faculdade como um todo e do LEE em particular. À Profa. Maria Eugênia Mosconi de Golveia, vice-diretora da faculdade de Engenharia uma palavra de gratidão pelo empenho em viabilizar juntamente com o diretor as solicitações de estágio interno no LEE. Ao grupo de colaboradores silenciosos da administração pelo apoio nas atividades no âmbito de suas competências, o obrigado sincero da Orientação 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 Elétrica

I

Curso de MATLAB

Índice
1 INTRODUÇÃO À SOLUÇÃO DE PROBLEMAS 2 MATRIZES, VETORES E ESCALARES 2.1 Definindo matrizes no MATLAB Método Simples Arquivos MAT e ASCII Operador dois pontos Comando Input Imprimindo matrizes Comando format Comando disp Comando fprintf 2.2 Gráficos X-Y Aplicação à Solução de Problemas: Análise de um túnel de vento 3 CÁLCULOS FUNDAMENTAIS E MATRIZES ESPECIAIS 3.1 Valores Especiais e Matrizes Especiais Magic Square Matriz de Zeros Matriz de um’s Matriz identidade Triângulo de Pascal 3.2 Operações entre escalares Hierarquia em operações aritméticas Limites Computacionais 3.3 Operações de Conjuntos Aplicação à solução de problemas: Ecos em sinais de comunicação 3.4 Funções Elementares Funções matemáticas elementares Funções trigonométricas Funções hiperbólicas Funções de Arquivos M Aplicação à solução de problemas: sinais de sonar 3.5 Números Complexos Operações aritméticas com complexos Coordenadas polares e retangulares 1 4 5 6 6 8 8 11 11 12 12 13 15 16 16 17 17 17 17 17 18 19 21 21 25 29 30 31 32 32 34 36 37 37

II

variância e desvio padrão Comando sort Histograma Aplicação à solução de problemas: análise do sinal de voz Números Aleatórios Função número aleatório Função Densidade de Probabilidade Modelo uniforme Modelo normal Histograma: comando hist Aplicação à Solução de Problemas: simulador de vôo Relação Sinal/Ruído Energia de um sinal Cálculo de SNR Adicionando um ruído a um sinal existente 40 40 42 42 45 47 47 49 50 54 56 56 60 61 64 66 66 66 68 68 71 73 75 75 76 77 79 79 79 79 80 80 81 81 82 82 5.2 Tomada de decisões Estrutura if-then-else 4.1 Operadores lógicos e relacionais 4.3 Loop FOR Comando break Aplicação à solução de problemas: fibras óticas 4.Curso de MATLAB 4 CONTROLE DE FLUXO 4.4 Loop WHILE Aplicação à solução de problemas: equilíbrio de temperatura 5 MEDIDAS ESTATÍSTICAS 5.1 Operações com matrizes Matriz transposta Somatório de produtos Comando sum Multiplicação de matrizes Matriz Power Matriz inversa Determinante Aplicação à Solução de Problemas: peso molecular de proteínas III .1 Funções para análise de dados Desvio médio.3 6 OPERAÇÕES COM MATRIZES 6.2 5.

Curso de MATLAB

6.2 Manipulação com matrizes Comando rot90 Comando fliplr Comando flipud Comando reshape Comando diag Comando triu Comando tril Aplicação à Solução de Problemas: alinhamento de imagens 7 GRÁFICOS 7.1 Gráficos X-Y Coordenadas retangulares Legendas

84 84 84 84 85 85 86 87 87 91 91 91 91 92 92 93 94 94 97 100 101 101 103 104 104 105 106 106 107 107 109 110 112

7.2 Gráficos Polares Coordenadas Polares Transformações retangular/polar Gráficos de barras e degrau 7.3 Opções 7.4 Gráficos 3D Aplicação à Solução de Problemas: trajetória de um satélite 8 SOLUÇÕES DE SISTEMAS DE EQUAÇÕES LINEARES 8.1 Interpretação Gráfica 8.2 Solução usando operações matriciais Divisão de matrizes Matriz Inversa Aplicação à Solução de Problemas: análise de um circuito elétrico 9 INTERPOLAÇÃO E AJUSTE DE CURVAS 9.1 Interpolação Interpolação linear Função table1 Função table2 Comando spline Aplicação à Solução de Problemas: braço robótico

IV

Curso de MATLAB

9.2 Ajuste de curvas Regressão Linear Comando polyfit Comando polyval 10 ANÁLISE POLINOMIAL 10.1 Avaliação do polinômio Comando polyval Operações Aritméticas Aplicação à Solução de Problemas: balões meteorológicos 10.2 Raízes de polinômios 11 INTEGRAÇÃO NUMÉRICA E DIFERENCIAÇÃO 11.1 Integração Numérica Regra Trapezoidal e Regra de Simpson Comando Quadratura Aplicação à Solução de Problemas: análise de escoamento de um óleo num oleoduto 11.2 Diferenciação Numérica Derivação por expressão de diferença Comando diff 12 EQUAÇÕES DIFERENCIAIS ORDINÁRIAS 12.1 Equações Diferenciais Ordinárias de Primeira Ordem 12.2 Método de Runge-Kutta Aproximação de Primeira Ordem (método de Euler) Comando ODE Aplicação à solução de problemas: aceleração de uma turbina UDF numa aeronave 12.3 Equações Diferenciais de Ordens Superiores 13 FATORAÇÃO E DECOMPOSIÇÃO DE MATRIZES 13.1 Autovalores e autovetores Aplicação à solução de problemas: adaptador para redução de ruídos 13.2 Decomposição e Fatoração

113 113 114 115 116 116 116 117 118 120 122 122 122 122 123 125 126 127 129 129 130 130 131 133 135 137 137 141 143

V

Curso de MATLAB
Fatoração Triangular Fatoração QR 14 PROCESSAMENTO DE SINAIS 14.1 Análise no domínio da freqüência 14.2 Análise de filtros Função de Transferência Analógica Função de Transferência Digital 14.3 Implementação de Filtros Digitais 14.4 Projetos de Filtros Digitais Filtros IIR Filtros FIR Aplicação à solução de problemas: filtros para separação de canais 15 MATEMÁTICA SIMBÓLICA 15.1 Expressões Simbólicas Representações de Expressões Simbólicas no MATLAB Variáveis Simbólicas Operações em expressões simbólicas Operações Algébricas Padrão Operações Avançadas Funções de Conversão Derivação e Integração Transformadas Transformada de Laplace Transformada de Fourier Transformada Z 143 144 146 146 149 149 151 153 155 156 157 158 161 161 162 163 165 166 167 169 170 171 173 173 174

15.2 15.3 15.4

15.5 15.6 15.7

VI

para que não tenhamos que aprender uma técnica para problemas de matemática. Também é de grande auxílio um embasamento suficiente para trabalhar em todas estas áreas. 4. 2. Algumas vezes. 1.Curso de MATLAB Capítulo 1 – Uma Introdução à Solução de Problemas A solução de problemas é parte essencial não somente dos cursos de engenharia mas também dos cursos de Matemática. Logo. e uma técnica diferente para problemas de física. é importante uma base sólida em solução de problemas. Física. 3. 5. Desenvolver uma solução MATLAB. 2. É extremamente importante que o enunciado seja conciso para evitar desentendimentos. ou I/0. é útil usar um diagrama que mostra a entrada e a saída. Testar a solução usando uma variedade de grupo de dados. 1 . Para este exemplo. poderíamos usar o diagrama na figura 1. O processo ou metodologia para resolução de problemas que usaremos ao longo do texto possui cinco passos: 1. Descreveremos cada um dos passos usando o exemplo do cálculo da distância entre dois pontos em um plano. Para muitos problemas. Descreva a informação de entrada e saída. supõe-se que estamos usando o MATLAB para ajudar a resolvê-los.1. mas estamos mostrando a informação que é usada para calcular a saída. este tipo de diagrama é chamado de “caixa preta” porque não estamos definindo para este ponto todos os passos para determinar a saída. e assim por diante. Para este exemplo. Trabalhar o problema manualmente. A técnica de solução de problemas que apresentamos trabalhos para problemas de engenharia e pode ser seguida de perto para resolver problemas em outras áreas. Cap. ENUNCIADO DO PROBLEMA O primeiro passo é enunciar o problema claramente. Química e Ciência da Computação. o enunciados do problema é: Calcule a distância em linha reta entre dois pontos num plano.Uma Introdução à Solução de Problemas 1 . mas. Estes itens representam a entrada e a saída para o problema e agregadamente podem ser chamados entrada/saída. DESCRIÇÃO ENTRADA/SAÍDA O segundo passo é descrever cuidadosamente a informação que é dada para resolver o problema e então identificar os valores a serem calculados. Enunciar o problema claramente.

Usando o Teorema de Pitágoras. então você está pronto para desenvolver um algoritmo ou um esboço passo a passo da solução.1 – Diagrama I/O 3. conforme mostra a figura 1.61 d S2 (1. Uma vez que pode trabalhar o problema de um simples grupo de dados. O exemplo manual para o este exemplo é mostrado a seguir: Suponha que os pontos p1 e p2 tenham as seguintes coordenadas: p1 = (1. Este esboço é convertido para os comandos MATLAB para que possamos usar o computador para fazer todos os cálculos.Curso de MATLAB ponto 1 ponto 2 distância entre os pontos Figura 1.5) y (4. Se você não pode pegar um simples grupo de números e calcular a saída (seja manualmente ou com uma calculadora). 1 . É um item no qual você trabalha os detalhes da solução do problemas. você deve reler o problemas e talvez consultar material de referência. então você não está pronto para executar o próximo passo. que é a hipotenusa de um triângulo retângulo. usando um pequeno grupo de dados. EXEMPLO MANUAL O terceiro passo é trabalhar o problema manualmente ou com uma calculadora.2.5).Uma Introdução à Solução de Problemas 2 . Cap.7) S1 x Figura 1. podemos calcular a distância d com a seguinte equação: d = s12 + s 2 2 d = (4 − 1) 2 + (7 − 5) 2 d = 13 d = 3. É um passo muito importante e não deve ser ignorado por mais simples que seja o problema. p2 = (4.7) Queremos calcular a distância entre dois pontos.2 – Distância entre dois pontos.

Contudo. % ponto2 inicial d = sqrt (sum ((p2-p1). Cap. SOLUÇÃO MATLAB No próximo capítulo. Se a solução MATLAB não coincidir com o exemplo manual. p1 = [1.5]. TESTANDO O passo final em nosso processo de solução de problemas é testar a solução. o computador mostra a seguinte saída: d = 3.Curso de MATLAB 4. em linha reta. Quando os comandos MATLAB na solução são executados. Primeiramente. da solução você pode ver que os comandos são muito similares às equações que foram usadas no exemplo manual. falaremos sobre os comandos MATLAB.Uma Introdução à Solução de Problemas 3 . % % Este programa calcula e imprime % distância. 1 . devemos testar a solução com os dados do exemplo manual. já que calculamos a solução.6056 Esta saída coincide com o valor que calculamos no exemplo manual.7]. O sinal de percentagem é usado para anteceder comentários que explicam os comandos MATLAB. % ponto 1 inicial p2 = [4. devemos também testá-la com vários grupos de dados para certificar que a solução é válida para outras séries de dados.^2)) % calcular distância 5. entre dois pontos. devemos rever ambas soluções a fim de encontrar o erro. Uma vez que a solução trabalha com o exemplo manual.

O primeiro.1] Se uma matriz contiver m linhas e n colunas. Matriz é uma tabela de números dispostos em m linhas e n colunas.0   G = 5. e um grupo de quatro coordenadas x-y-z pode ser considerada uma matriz com quatro linhas e três colunas.1 − 2. i. se a matriz contiver apenas uma linha ou uma coluna. o dado é um simples número como o raio de um círculo.5.2 − 2.7 8. G é uma matriz quadrada? 3. Podemos representar o exemplos citados usando um tipo especial de estrutura de dados denominada matriz. ao matriz é chamada vetor-linha ou vetor-coluna.5] B = [ 1. Vetores e Escalares A capacidade de visualização dos dados é um fator importante na solução de problemas de engenharia.5 1.5 0. Vetores e Escalares 4 . o elemento a1.5 2.6 8.Matrizes. então dizemos que a matriz é uma matriz quadrada. podemos dizer que o valor é um escalar. Dê as referências para todas as posições que contém valores negativos.2 9. n elementos. temos: − 1 0  1 1 C=  1 −1  0  0 0 0  0  2 A = [ 3. Qual é a ordem de G? 2. Cada elemento da matriz é indicado por índices. Assim.0 1.5 3.5 − 0.5 0. então conterá um total de m . 4.1.5 0.2 da matriz B é 3. indica a coluna onde o elemento se encontra.5   1. Assim.2 0. o segundo.3 − 4. j. 2 – Matrizes. Às vezes. Cap.Curso de MATLAB Capítulo 2 .5 2.5   0.4 0. um simples número pode ser considerado uma matriz com uma linha e uma coluna.3 − 0. Se o número de linhas e colunas forem iguais. Exercícios Responda às seguintes questões sobre esta matriz: 1. indica a linha. Outras. respectivamente. Como exemplo. Dê as referências para todas as posições que contém o valor 0. uma coordenada x-y pode ser considerada uma matriz com uma linha e duas colunas. aij. Se a matriz tiver apenas uma linha e uma coluna. um grupo de coordenadas x-y-z que representam os quatro vértices de uma pirâmides com uma base triangular no espaço.

as matrizes A. O nome da matriz deve começar com uma letra e conter no máximo 19 caracteres que podem ser números.2]. mas não pode conter uma vírgula. Assim. Se quisermos. como 32. am1 am2 am3 … amn ].-1.1]. Cap. Há vários métodos de definição de matrizes no MATLAB. Vetores e Escalares 5 .5. B e C serão representadas por: A = [ 3. também podemos fazer: F = [1 52 64 197 42 –42 55 82 22 109] F = [1 52 64 197 42 –42.Curso de MATLAB Definindo Matrizes no MATLAB Suponha que queiramos agora criar as matrizes A. … . a matriz C: C = [ -1 0 1 1 1 –1 0 0 0 0 0 2]. B e C sem o ponto-e-vírgula. e aparece ao lado esquerdo do sinal de igual. o MALTAB imprime o valor da matriz na próxima linha a menos que coloquemos um ponto-e-vírgula depois da definição. … 55 82 22 109] Esta forma é muito usada quando a linha de uma matriz é extensa.0. B e C usando o MATLAB. Você também pode definir uma matriz digitando uma cada linha separadamente. e os valores das linhas podem estar separados por vírgulas ou por espaços. B = [1. O valor pode conter um sinal de + ou -. por exemplo. Quando definimos uma matriz.0. 2 – Matrizes.1.5]. O lado direito contém os dados entre colchetes por ordem de linhas. Como exemplo. C = [-1.0. e um ponto decimal. e continuar a entrar com os valores restantes na próxima linha da área de trabalho do MATLAB. Vejamos cada um: Modo mais simples: Nome da matriz = [ a11 a12 a13 …a1n . definir um vetor-linha F com 10 valores.0. 1. 0. 3. Podemos terminar uma linha com uma vírgula seguida de três ou mais pontos. a21 a22 a23 … a2n .0. Tente entrar com as matrizes A. 1. O ponto-e-vírgula separa as linhas. letras ou caracter sublinhado.154.

0 B]. V = [ C(2.5.1].1) = -3. 8.1]. T = [ 4 24 9].5 Então a matriz S terá quatro valores em vez de três. A ordem da matriz pode ser alterada. 6.0. 1. Q = [ T 0 T ]. Exercícios Determine a ordem das matrizes a seguir. B = [ 2. e os valores de S(5).5 . 5 ]. Por exemplo. 2. 6. B ]. 10. A(2. 7. S(6) e S(7) são automaticamente nulos. Assim. Estes comandos equivalem a: S = [ 3. já que não foram atribuídos valores para eles. 3. R = [C. 10]. 0. D = [ 3 4 5 7 9 10 ]. C = [ 5 3 5 . 5. Vetores e Escalares 6 . E = [3 5 10 0. Podemos também mudar e adicionar valores na matriz usando um referência entre parênteses. 2 – Matrizes. 4. 0.5 3.0 1. Cap.5 para –1. 3 9 9 8]. X. S (2) = -1. 0. Verifique suas respostas usando o MATLAB. Muda o segundo valor da matriz S de 1. 1]. considere as seguintes matrizes: B = [ 1. Se executarmos o seguinte comando: S(4) = 5. S = [3. A = [ 1. Então a matriz S terá 8 elementos. Se executarmos o comando: S(8) = 9.0. 9. X = [ 3 6]. o seguinte comando. 4. 3. 0 0 0 3. 6 2 –3]. 0.1) .Curso de MATLAB Podemos também definir uma matriz usando outra que já definida.

mat nomeado “teste_1” devemos fazer: save teste_1 A B C. pode significar todas as linhas ou todas as colunas da matriz-referência. Recomenda-se utilizar a extensão . O uso do operador dois pontos (:) é útil na criação de matrizes ou vetores.mat é automaticamente adicionada ao nome do arquivo. usamos o comando: load teste_1 Arquivos ASCII Um arquivo ASCII que será usado juntamente com um programa MATLAB deve conter informação exclusivamente numérica.dat R /ascii Cada linha da matriz R será escrita para linhas distintas no arquivos de dados. B e C. O comando load seguido do nome do arquivo irá recuperar a informação da matriz R.Curso de MATLAB As matrizes também podem ser definidas através de informação armazenada em arquivos. Dependendo do argumento. Assim. O MATLAB trabalha com dois tipos diferentes de arquivos: Os arquivos MAT e os arquivos ASCII. utilizando programas como o Fortran ou ainda. A extensão . em um arquivo . e cada linha do arquivo deve conter o mesmo número de dados. 2 – Matrizes. Vetores e Escalares 7 . para salvar matrizes A. temos: Cap. Operador Dois Pontos ( : ) Suponha que queiramos armazenar a primeira coluna da matriz data1 em um vetor x. Para o nosso exemplo. Os arquivos MAT Os arquivos MAT são gerados por um programa MATLAB usando o comando save. Para recuperar as matrizes no programa MATLAB. load teste_1.dat. e a segunda coluna em um vetor y. que contém o nome do arquivo e as matrizes que devem ser armazenadas. por um programa MATLAB usando a seguinte forma do comando save: save teste_1. O arquivo pode ser gerado utilizando um processador de texto ou.dat para ser mais fácil distingui-los dos arquivos MAT e dos arquivos M. por exemplo.

6.0.0.3 0. 6.2]. 2:3). devemos fazer: z = data1(1.0. 8.0. 7 e 8. : ). O segundo comando cria um vetor y cujos elementos correspondem à segunda coluna da matriz data1. 2 – Matrizes. usando o segundo número como incremento. 3. 9. Se for usado para separar três números.2. 2. A matriz H contém os valores 1. Por exemplo. 4.-1.Curso de MATLAB data1 = [0. … 0. O incremento também pode ser um valor negativo como: VALORES = 10 : -1: 0.0.6]. O operador “ : ” entre os dois números inteiros gera todos os inteiros entre os dois números especificados. y = data1 ( : .1.0. Se o operador dois pontos for usado na seguinte notação: H = 1 : 8. Os elementos do vetor x correspondem à primeira coluna de data1.0 : 0. A notação abaixo gera um vetorlinha denominado TEMPO que contém os números de 0.1 0. Se quiséssemos criar um vetor z cujos elementos sejam os elementos da primeira linha da matriz data1. 5. 0 2]. 7. Cap. PARTE_2 = C (3:4. 0. 0 0]. 1 0.0. 0. 1). Se executarmos os comandos: PARTE_1 = C ( : . -1 0.0 a 5.5: TEMPO = 0. Vetores e Escalares 8 . considere a matriz abaixo: C = [-1.0. O operador dois pontos pode também ser usado para selecionar uma sub-matriz de uma outra matriz.0. 2 ).5 : 5.1. PARTE_2 = [1 –1. x = data1 ( : . Os elementos de VALORES são 10. 1:2). Definimos as matrizes: PARTE_1 = [ 0 0. 0. os dois pontos gerarão valores entre o primeiro e terceiro números.0 com incrementos de 0. 1.

8.3 − 0. temos: A=[] B = 4: -1: 5 • A expressão C ( : ) equivale a uma longa matriz coluna que contém a primeira coluna de C. T1 = G ( 4 : 5 . 2. Vetores e Escalares 9 .5   Verifique suas respostas usando o MATLAB. T2 = G (1: 2 : 5. Exercícios Determine as ordens e o conteúdo das matrizes abaixo. A = G (:.0:0.5 2. 2 – Matrizes. 4. Como exemplo.5   0.4 0. 6.6 8.1:3).3 − 4. B = G (4. 7.0 1.5 2.1 − 2.5]. F = [0. Use a matriz G como referência. Há várias maneiras de gerá-la. 1:6].2 9. 1. C = [10 : 15]. : ). D = [4:9.5  1. seguida pela segunda coluna de c e assim por diante.5 0. 2 0.5  0.0]. 5.7 8.5 − 0. 1.5 0.1:1. Solução: Cap. : ). 2). 3.Curso de MATLAB Observações: • O MATLAB reconhece uma matriz ‘vazia’. E = [-5.0   G = 5. 2 − 2.

quatro dígitos à direita do ponto decimal.3 -18. Exemplo: Seja uma variável A que armazene a raiz quadrada de 2. se o elemento de uma matriz for um número inteiro. Já que o comando input termina com um ponto-e-vírgula. Existem vários comandos que podem ser usados para alterar a saída a ser imprimida. Imprimindo Matrizes O modo mais simples de imprimir uma matriz é entrar com seu nome. o MATLAB apresenta o resultado como número inteiro. ou seja. os valores da matriz serão imprimidos na próxima linha. Quando este comando é executado.Curso de MATLAB Comando Input Você pode entrar com os valores da matriz.4 3. » A = sqrt(2) De acordo com o formato numérico escolhido.1 2. Considere o comando: z = input ( ‘Valores de z: ’).0] o qual especifica valores para z. » U = 2*T U= 2. 2 – Matrizes. Vetores e Escalares 10 . Se o elemento for um número real. O usuário pode entrar com uma expressão como [ 5. O nome da matriz é repetido.8000 7.4000 Por definição. o MATLAB apresenta-o com cinco dígitos significativos.2000 4. via teclado. o texto “ Valores de z: ” é mostrado na tela. os valores de z não são imprimidos quando o comando é executado. » c = 2*a c= 2 4 6 » T = [ 1. utilizando o comando input que mostra um texto e então espera por uma entrada. a variável A pode estar apresentada sob a forma: Cap. Podemos alterar o formato numérico utilizando o comando format. Comando format Suponha os comandos abaixo: » a = [1 2 3].1 6.7].

disp (‘graus Celsius’) Se o valor de temp for 78.notação científica 16 dígitos – notação científica “+” para valores positivos e “-” para valores negativos aproximação racional formato hexadecimal Comando disp Quando quisermos exibir o conteúdo de uma matriz sem imprimir seu nome ou imprimir um pequeno texto. O modo matriz denota a variável cuja matriz está armazenada.41421356237310 1. se a variável temp contiver um valor de temperatura em graus Celsius. dependendo de qual delas será a mais curta. o usuário pode especificar o número de algarismos significativos juntamente com o ponto decimal. Um simples exemplo de aplicação do comando fprintf é mostrado abaixo: %g Cap.414213562373095e+000 + 1393/985 3ff6a09e667f3bcd Descrição 16 dígitos 5 dígitos – formato numérico padrão 5 dígitos . matriz) O modo formato contém o texto e as especificações que são: %e %f indica que os valores da matriz serão impressos em notação exponencial indica que os valores da matriz serão impressos em notação decimal ou em notação fixa. então a saída será: 78 graus Celsius Comando fprintf O comando fprintf nos permite imprimir textos e conteúdo de matrizes. Podemos também especificar o formato numérico . podemos imprimir o valor em uma linha de comando e a unidade na linha posterior: disp(temp). pode indicar as duas formas acima.Curso de MATLAB Comando MATLAB Format long Format short Format short e Format long e format + format rat format hex Variável A 1.4142 1. isto é.4142e+000 1. Vetores e Escalares 11 . usamos o comando disp. 2 – Matrizes. Sua forma geral é: fprintf (formato. Assim.

%e.0 graus Celsius Gráficos X-Y Suponhamos que queremos plotar os valores de uma matriz em vez de imprimi-los. temp) A saída mostrará o valor de temp com 4 algarismos. temp) A saída seria: A temperatura é 78. e %g também podem conter informação para especificar o número de casas decimais a imprimir e o número de algarismos significativos. Considere o seguinte comando: fprintf (‘A temperatura é %4. 2 – Matrizes. juntamente com o ponto decimal.0000 graus Celsius Se modificarmos o comando para esta forma: fprintf (‘A temperatura é \n %f graus Celsius \n’. conforme explicado no início da seção.1f graus Celsius \n’.0000 graus Celsius Os formatos específicos %f. Vetores e Escalares 12 . a saída seria: A temperatura é 78. Então. Podemos usar o MATLAB para plotar gráficos. Nesta seção. mostraremos como gerar um simples gráfico x-y de dados armazenados em dois vetores. você pode imediatamente começar usando o MATLAB para gerar gráficos. sem conhecer alguns comandos.Curso de MATLAB fprintf (‘A temperatura é %f graus Celsius \n’. conforme mostramos abaixo: A temperatura é 78. temp) Então. sendo que um destes será um ponto decimal. Suponha que queira plotar os dados de temperatura a seguir coletados em uma experiência de física: Cap.

Inclui uma descrição na direção do eixo-x Inclui uma descrição na direção do eixo-y Adiciona linhas de grade ao gráfico Muda a cor de fundo do gráfico para branco. plot (x. podemos aperfeiçoá-lo como os seguintes comandos: Title Xlabel Y label Grid Whitebg Assim. simplesmente usamos o comando plot . Vetores e Escalares 13 . e que os relativos à temperatura estejam armazenados em um vetor denominado y. … ylabel (‘Temperatura. Adiciona um título ao gráfico. y) O gráfico é gerado automaticamente. Para plotar estes pontos. … title (‘Laboratório de Física .6 89.Experiência 1’). Logo.1 90.2 67.5 90.y). plot (x. °C 54.Curso de MATLAB Tempo.4 Suponha também que os dados relativos ao tempo estejam armazenados em um vetor denominado x.3 71. s 0 1 2 3 4 5 6 7 8 9 10 Temperatura. s’). A prática mostra que um bom gráfico deve incluir unidades. 2 – Matrizes.5 90.2 58.5 88. título e uma breve descrição. … xlabel (‘Tempo.8 64. onde x e y são vetores-linha ou vetores-coluna. graus Celsius’).5 63. … grid whitebg Cap.

e as medidas das forças sobre o modelo podem ser feitas para diferentes velocidades de vento e ângulos do modelo relativo à direção da velocidade. supomos que os dados coletados do teste do túnel de vento foram armazenados em um arquivo ASCII denominado vento1. Vetores e Escalares 14 . Ao final de um longo teste de túnel de vento.dat. Para este exemplo. muitos grupos de dados são coletados e podem ser usados para determinar o lift. Gostaríamos de visualizar o gráfico dos dados para verificar se os sensores sobre o modelo em escala parecem trabalhar adequadamente. Para aprender mais opções para Aplicação à Solução de Problemas: Análise de Dados de um Túnel de Vento Um túnel de vento é uma câmara de teste construída para produzir diferentes velocidades de vento. veja o capítulo 7. usados para que o MATLAB execute os seis comandos em uma única vez. Usamos esta aplicação várias vezes em nossos problemas ao longo do texto.Curso de MATLAB Os três pontos usados depois dos quatro comandos são gerar gráficos x-y e outros tipos de gráficos. Modelos em escala precisa de aeronaves podem ser equipados sobre suportes de medições de força na câmara de teste. Suponhamos que cada linha do arquivo contém um ângulo de vôo em graus e um correspondente coeficiente de lift. 2 – Matrizes. ou números Mach (razão entre a velocidade do vento e a velocidade do som). drag e outras características da performance aerodinâmica do novo modelo para várias velocidades de operação e posições. Nesta seção. usamos os seguintes dados: Cap.

se examinarmos os dados podemos perceber que inicialmente o coeficiente de lift é –0. conforme mostrado na figura a seguir. que é o gráfico dos dados.050 0 0. 2 – Matrizes. Neste exemplo.25 para um ângulo de 180 .573 8 0. ENUNCIADO DO PROBLEMA Gerar um gráfico do ângulo de vôo e coeficiente de lift. lemos as informações contidas em um arquivo e usamos o MATLAB para plotá-las.250 19 1.108 2 0. EXEMPLO MANUAL Apesar de ser apenas um gráfico. grosseiramente. usaremos um diagrama I/O.Curso de MATLAB Ângulo de Vôo (graus) Coeficiente de Sustentação Ângulo de Vôo (graus) Coeficiente de Sustentação -4 -0.727 10 0. então devemos novamente checar os dados e os comandos MATLAB usados. DESCRIÇÃO ENTRADA/SAÍDA Sempre que for possível.195 17 1.221 21 1.245 20 1.2 e que o mesmo cresce até alcançar um máximo de 1. TESTANDO Cap. Neste exemplo. valor inicial 0.027 14 1. Vetores e Escalares 15 .880 12 1.225 18 1. 4. 1. vento1.264 4 0.7 e um máximo de 1.177 para um ângulo de 21 graus).150 15 1. como seria o gráfico correspondente. SOLUÇÃO MATLAB 5. usaremos a metodologia descrita no capítulo anterior para mostrar é igualmente simples o processo que nos permite estruturar nossas idéias no desenvolvimento na solução de problemas.dat Diagrama I/O 3. 2.421 6 0. Se o gráfico que obtivermos for muito diferente do que esperávamos (por exemplo.177 Mesmo que pareça simples ler e plotar os dados usando o MATLAB.202 -2 -0. devemos estudar superficialmente uma pequena parte dos dados e determinar. O diagrama contém um símbolo de um disquete para representar o arquivo que é a entrada (observe que colocamos o nome do arquivo abaixo do símbolo) e um símbolo de um gráfico para representar a saída.

Cap. como o cálculo da raiz quadrada ou o logaritmo de um valor ou a tangente de um ângulo. 3 – Cálculos com Matrizes 16 . o valor será ∞. aprenderemos como usar números complexos no MATLAB. ou aplicadas a um grupo de valores armazenados em uma matriz. Esta variável é a representação do MATLAB para infinito. Ocorre em grande parte quando a expressão é indefinida. aplicadas a uma lista de valores (vetor). Variável usada para armazenar valores calculados por uma expressão que é calculada mas não armazenada em uma variável nomeada. 3. inf Not-anumber NaN clock date ans • Matrizes Especiais O MATLAB contém um grupo de funções que geram matrizes especiais. • π √-1 ∞ Valores Especiais pi i. Algumas destas matrizes tem aplicação específica às técnicas numéricas discutidas posteriormente. Veja a seção 3. hora. subtração. 20-Jun-92. se você mostrar o resultado da divisão. mês.5 para uma discussão completa sobre números complexos.Curso de MATLAB Capítulo 3 .j O valor de π é automaticamente armazenado nesta variável.1 Valores Especiais e Matrizes Especiais O MATLAB contém um grupo de constantes pré-definidas. E também. o qual ocorre tipicamente como o resultado de uma divisão por zero. Estas variáveis são inicialmente agrupadas ao valor √-1. Exibe a data atual como por exemplo. valores e matrizes especiais úteis para uso em programas do MATLAB.Cálculo Fundamentais e Matrizes Especiais As operações de adição. multiplicação e divisão são a maioria das operações fundamentais usadas por engenheiros e cientistas. dia. Uma mensagem de aviso é imprimida. como a divisão de zero por zero. minute e segundos. Neste capítulo aprenderemos como executar todas estas operações e funções. Exibe a hora atual em um vetor linha de seis elementos contendo ano. Estas operações podem ser executadas sobre um valor simples (um escalar). Podemos executar outras operações de rotina.

n) Gera uma matriz quadrada de ordem n. 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. o quadrado mágico de ordem 3 . 3 – Cálculos com Matrizes 17 . de ordem n. Assim. Apresenta o mesmo formato que as funções anteriores. Uma matriz identidade é uma matriz escalar de qualquer ordem cujos elementos aij são iguais a 1 para i = j. Gera uma matriz de ordem m x n. uma matriz cujos elemento aij são nulos. Pascal Cria uma matriz cujas diagonais lembram o triângulo de Pascal. se usarmos o comando pascal(5).Curso de MATLAB Magic Square Uma matriz magic square de ordem n é uma matriz n x n constituída de números inteiros de 1 a n . Forma Geral: zeros(n) Gera uma matriz zero. Argumento: ones(n) ones(m. isto é. Já o formato “eye (m. Os elementos aij da matriz estão dispostos de forma tal que o somatório de cada linha é igual ao somatório de uma coluna. Ones A função ones gera uma matriz cujo valor dos elementos aij é unitário. 2 Forma Geral: Assim.n) Gera uma matriz zero de ordem m x n. zeros(m. quadrada. o prompt do MATLAB deve Esta função gera uma matriz zero. O formato “eye(n)” gera uma matriz identidade de ordem n. Eye A matriz identidade pode ser gerada pelo MATLAB através da função eye. para saber apresentar: magic (3) Zeros magic (n) matriz square magic de ordem n.n)” gera uma matriz de ordem m x n .

0 quando a segunda instrução é executada. como no comando seguinte. e a soma é armazenado em x. É importante reconhecer que uma variável pode armazenar somente um valor por vez. e o resultado será armazenado nesta variável.0 O valor 0. então nós preocupamos pelo seguinte comando MATLAB válido. Se nós interpretamos os comandos desta forma. Uma expressão pode ser tão simples como uma constante.2 Operações entre Escalares Cálculos aritméticos são identificados usando expressões. suponha que as seguintes instruções serão executadas seguidamente. discutiremos operações envolvendo somente escalares. o mesmo é automaticamente armazenado em uma variável denominada ans.0 Time = 5. Cada vez que um novo valor é armazenado em ans. o valor em count será acrescido de 1 (ou incrementado por 1). Quando você entra com uma expressão sem especificar uma variável para armazenar o resultado. estendemos as operações incluindo operações elemento por elemento entre escalares e matrizes ou entre duas matrizes. 3 – Cálculos com Matrizes 18 . Ou seja. e a soma armazenada em uma variável x: x=a+b Este comando deve ser interpretado como o valor em b adicionado ao valor em a. Uma expressão pode ser resolvida e armazenada em uma variável específica. Cap. count = count + 1 É óbvio que esta instrução não é um comando algébrico válido.Curso de MATLAB 3. Por exemplo.0 é armazenado na variável time quando a primeira instrução é executado e então substituído pelo valor 5. Nesta seção. Na seção posterior. As operações aritméticas entre dois escalares são mostradas na tabela 3.1. o qual especifica que os valores em a e b serão adicionados. ou pode ter matrizes e constantes combinadas com operações aritméticas. o valor anterior é perdido. mas o MATLAB explica que 1 é adicionado ao valor em count. Time = 0.

não há mensagens de erro imprimidas alertando-nos quanto ao erro. esquerda à direita 3 Multiplicação e Divisão. Suponha que omitamos os parênteses: area = 0. é importante estar cauteloso quando convertemos equações para comandos do MATLAB.2 Hierarquia em operações aritméticas Prioridade Operação 1 Parênteses 2 Exponenciação.5*h*(B + b). esquerda à direita Suponha que queremos calcular a área de um trapézio. é importante conhecer a ordem nas quais as operações serão executadas. Note que embora a resposta incorreta tenha sido calculada. 3 – Cálculos com Matrizes 19 . Tabela 3. Note que esta prioridade também segue a prioridade algébrica padrão.2 contém a ordem de prioridade das operações aritméticas no MATLAB. e também suponha que a variável base contenha o comprimento da base e que altura_1 e altura_2 contenham as duas alturas.5*altura*B + b.1 – Operações aritméticas entre dois escalares Operação Forma MATLAB Algébrica Adição a + b a+b Subtração a . Portanto. A tabela 3. Este enunciado seria executado como se fosse o enunciado a seguir: area = (0. Adicionar parênteses extras é uma maneira Cap.Curso de MATLAB Tabela 3.5*altura*B) + b.b a-b Multiplicação a x b a*b Divisão Direita a a/b b Divisão b a\b Esquerda a Exponenciação ab a^b Hierarquia em Operações Aritméticas Sabendo que várias operações pode ser combinadas em uma simples expressão aritmética. A área de um trapézio pode ser calculada usando o seguinte enunciado: area = 0. esquerda à direita 4 Adição e Subtração.

5005x – 3. que requer maior cuidado na hora de imaginar a ordem das operações.14 f = numerador/ denominador É melhor usar várias equações que são mais fáceis de compreender que apenas uma. considere a seguinte equação: f = ___x3 . Se uma expressão é longa. divida-a em várias expressões. Fator de correção em cálculo de pressão: fator = 1 + _b_ + _c_ v v2 3. 3 – Cálculos com Matrizes 20 .y1 x2 . Perda de pressão de um cano de fricção perda = f .3___ x2 + 0.5005*x . 1. v2 d 2 Cap.x1 4.3.2*x^2 + x + 6. p. Exercícios Dê os seguintes comandos do MATLAB para calcular os seguintes valores.14 O valor de f poderia ser calculado usando os seguintes comandos.3 denominador = x^2 + 0. onde x é um escalar: numerador = x^3 . Distância entre dois pontos: Slope = y2 . Coeficiente de fricção entre um pneu e o pavimento: Fricção = __v2__ 30s 2. Por exemplo.2x2 + 6. Resistência de um circuito paralelo: resistência = 1 _ 1_ + 1 + 1 _ r1 r2 r3 5.Curso de MATLAB fácil para ter certeza que os cálculos são feitos na ordem que você quer. 1 . Suponha que as variáveis nas equações são escalares e tenham valores determinados.

o resultado da divisão é ∞.5e-400.3 Operações de Conjuntos Uma operação de conjunto é uma operação elemento por elemento. Como o alcance é de 10-308 a 10308. o resultado de underflow é zero. z = x*y. a escala de valores estende-se de 10-308 a 10308. z = x/y. o valor de z é 2e400. As operações posteriores usam como ∞ resultado da divisão. é possível obter resultados que estejam fora deste alcance. No MATLAB. O MATLAB imprimirá uma mensagem de aviso e logo a seguir o cálculo continua. Um modo de gerar um novo vetor C com valores que sejam produtos dos valores correspondentes em A e B é o seguinte: Cap. causamos um erro de underflow. Suponha agora que executamos os seguintes comandos: x = 2. Este erro é chamado overflow porque o expoente do resultado de uma operação aritmética é demasiadamente alto para ser armazenado na memória do computador. No MATLAB. 3 – Cálculos com Matrizes 21 .5e-200. então os valores de x e y estão dentre do limite estabelecido. Se o expoente é menor que o mínimo. O erro de underflow é um erro similar causado pelo expoente do resultado de uma operação aritmética ser pequeno demais para ser armazenado na memória do computador. Por exemplo. suponha que A e B sejam vetores-linha com cinco elementos. o que deve ser suficiente para acomodar grande parte dos cálculos. 3. mas o valor de z deve ser 2. e este valor ultrapassa o alcance. como mostramos a seguir: Suponha que executamos os seguintes comandos: x = 2e200. y = 1e200. Mas. Sabemos que a divisão por zero é uma operação inválida. y = 1e200. Se uma expressão resulta em uma divisão por zero no MATLAB.Curso de MATLAB Limites Computacionais Para a maioria dos computadores. o resultado de um expoente overflow é infinito(∞). Contudo. Os valores de x e y novamente estão dentro do alcance permitido.

Curso de MATLAB C(1) C(2) C(3) C(4) C(5) = = = = = A(1)*B(1). B = 3./5. Para mostrar as operações de conjunto para vetores. Se omitirmos o ponto estaremos executando uma operação matricial. Estes comandos são essencialmente comandos escalares porque cada comando multiplica um simples valor por um outro e armazena o produto em um terceiro valor. 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. Contudo. A(2)*B(2). A(4)*B(4). C = A . Assim. usamos um ponto antes da operação. as operações de conjunto e matriciais são idênticas. divisão e exponenciação e por isso devemos usar o ponto quando queremos especificar uma operação de conjunto. As matrizes resultantes B e C terão a mesma ordem de A. divisão e exponenciação são diferentes das operações matriciais para multiplicação. B = 3*A. e então não precisamos distinguí-las. Assim. Operações matriciais é o tema que será discutido no capítulo 6.*B.*A. os cinco comandos acima podem ser substituídos pelo seguinte: C = A . os dois comandos em cada grupo de comandos abaixo são equivalentes para uma matriz não escalar A. A(3)*B(3). aplicam-se não somente para operações entre duas matrizes de mesma ordem como também em operações entre um escalar e um não escalar. A(5)*B(5). ou operações de conjuntos. as operações de conjunto para multiplicação. Contudo. Uma operação elemento por elemento. a multiplicação de uma matriz por um escalar e a divisão esquerda de uma matriz por um escalar podem ser escritas de modo ou de outro. 3 – Cálculos com Matrizes 22 . Para as operações de adição e subtração.*B Cap. C = A/5. Para indicar que executamos uma multiplicação elemento por elemento entre duas matrizes de mesma ordem.

Assim. Então./B. D = A.667 1. O comando para divisão direita: C = A. ^A. 3 – Cálculos com Matrizes 23 . que gera um vetor com os seguintes valores. C conterá os seguintes valores: C = [1 1. como o exemplo a seguir: C = 3.^A. Irá gerar um novo vetor no qual cada elemento de A é dividido pelo elemento correspondente de B. considere os comandos: C = A. usamos os mesmos valores para A e B.6 0. C conterá os seguintes valores: C = [1 0.Curso de MATLAB Então.\B Irá gerar um novo vetor no qual cada elemento é o elemento correspondente de B dividido pelo elemento correspondente de A. C conterá os seguintes valores: C = [ 4 15 30] O MATLAB tem dois operadores de divisão – uma divisão que usa o símbolo “/”e outra que usa o símbolo “ \ ”.^B.2] O comando para divisão esquerda: C = A. C = [9 243 729] Este vetor poderia também ser calculado com a seguinte instrução: C = (3). Os vetores C e D serão os seguintes: C = [4 25 36] D = [4 125 7776] A operação também é válida para uma base escalar e um expoente vetor.0.833] A exponenciação de conjunto também é uma operação elemento por elemento.^2. Cap. Por exemplo.

C = A – B. o comando tentaria fazer a exponenciação elemento por elemento conforme desejávamos. C = B + A .^3. Estes exemplos indicam que devemos ter cuidado quando especificarmos operações de conjuntos.Curso de MATLAB Contudo. Se não tiver certeza que o que escreveu é a expressão correta. onde A e B contém os valores mostrados. Cap. Se inserirmos um espaço antes do ponto. A = [2 -1 5 0] 1. Cheque suas respostas usando o MATLAB. z = ones(2. e então fazer uma exponenciação matricial. 2. C = 2*A + A. 3. -1: -1: -5]. 3 – Cálculos com Matrizes B = [3 2 -1 4] 24 .^A. Então.^B. O MATLAB supõe que o ponto é parte da constante 3. que discutiremos no capítulo 6. a instrução a seguir é incorreta: C = 3. d = [1:5. sempre teste-a com simples exemplos como aqueles que usamos. Os valores destas matrizes são 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 8 27 64 125  1 sq =   − 1 − 8 − 27 − 64 − 125 0 2 6 12 20 p=  2 6 12 20 30 Exercícios Dê os valores no vetor C depois execute os seguintes enunciados. como se segue: C = 3 .3.*s sq = d.5) s=d–z p = d.^A.

que medem a intensidade da luz. A figura 3. e então desenvolveremos um programa MATLAB para adicionar ecos a um sinal digital. que medem acústica ou dados sonoros (como a fala). 7. 5. 3 – Cálculos com Matrizes 25 . sensores como os microfones apresentam distorções.*A. Esta informação ou dado são coletados com um sensor./ A. Solução de Problemas Aplicados à Engenharia: Ecos em Sinais de Comunicação Uma interessante pesquisa está sendo feita atualmente para desenvolver sistemas de computadores que respondam a comandos verbais.^B. Nesta seção. 8. devemos estar aptos a gerar um sinal digital e adicionar ecos ao mesmo.1 contém um exemplo de sinal analógico coletado de um sinal contínuo. termistores. C = 2*B/3. O projeto do tal sistema supõe que o microfone colhe o comando de voz e tem uma representação nítida da fala. 6. e osciloscópios. Por essa razão. a seqüência de valores coletados do sinal original é denominada sinal digital. C = A. Cap. denominadas ruído. e então ler um programa MATLAB.^B + A. geralmente ligamos os pontos com segmentos de reta em vez de plotar apenas os pontos. que medem tensões. tentando antes reconhecer as palavras. O sinal original é normalmente uma função contínua (ou analógica).\A. sismômetro. tal como os ecos. Os sensores são normalmente conectados à outra peça da instrumentação chamada conversor analógico-digital (A/D). C = B. fotocélulas. C = B. Quando plotamos um sinal analógico. Infelizmente. Podemos então avaliar a performance do programa que é suposta para remover os ecos. 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 analógico é composto de um grupo de coordenadas x-y e assim poderiam facilmente ser armazenadas em um arquivo de dados. que mede intensidade de tremor de terra. definimos sinais digitais. Sinais Digitais Um sinal é uma função (normalmente em relação ao tempo) que representa informação. o qual medem a temperatura. Como forma de testar um programa que foi projetado para remover ecos. um sistema reconhecedor de voz deve ser capaz de executar algum processamento do sinal de voz para remover algumas das distorções e componentes indesejáveis. Alguns dos mais comuns tipos de sensores são microfones. C = (2).Curso de MATLAB 4. Os sistemas com comunicações duas vias também raramente tem ecos que são inadvertidamente introduzidos pela instrumentação.0.

3 contém um sinal original s(t) no primeiro esquema. 3 – Cálculos com Matrizes 26 .2 – Amostra ou Sinal Digital Gerando ecos em um sinal Um eco de um sinal é representado por uma versão atenuada do sinal original e que ocorre atrasado no tempo em relação ao sinal original. O quarto esquema contém o sinal original mais os dois ecos adicionados ao mesmo.Curso de MATLAB Figura 3..5) do sinal original. Por exemplo. este é um ROLLED eco porque os valores do eco são negativos do eco esperado. O segundo esquema contém um eco do sinal original que foi atenuado aproximadamente 50% (ou 0.1 – Sinal Analógico ou contínuo Figura 3. a figura 3. Cap. O terceiro esquema contém um eco do sinal original atenuado em 30% e atrasado 5 segundos em relação ao sinal original.

0 0. segundos Figura 3.mat.9 4.1 segundos.0 0.5 segundos e atenuado em 0.0 0. segundos s(t) + Ecos 1 2 3 4 5 6 7 t.0 0.3 1. segundos 1 2 3 4 5 6 7 t. o segundo eco tem um tempo de atraso de 4 segundos e atenuado em 0.mat. o qual é plotado e armazenado um arquivo de dados chamado eco.5 0.3 – O sinal original e os ecos. segundos 1 Eco 2 2 3 4 5 6 7 t. 3 – Cálculos com Matrizes 27 . ENUNCIADO DO PROBLEMA Dado um sinal original.2 1.7 3.5 0. DESCRIÇÃO ENTRADA/SAÍDA O retângulo tracejado contém uma figura detalhada do processo de geração de ecos do sinal de entrada [sn]. com um intervalo de tempo de amostragem de 0.5 e atrasado em 2 segundos.1.0 0. Então. O seguinte grupo de coordenadas foram coletados no primeiro segundo. 2. Cap. Plote o gráfico do sinal original e o sinal com ecos em um arquivo MAT denominado eco.0 Escreva um programa do MATLAB que gera um sinal que contém o sinal original com três ecos adicionados ao mesmo.4 2. O primeiro eco é atenuado em 0.8 4.5 2.6 3.3 segundos.0 0.0 5.5 1.5 0. o terceiro eco é atrasado em 7.5 0. Este sinal é atrasado e multiplicado por um fator escalar (representado pelo triângulo) para gerar cada eco.Curso de MATLAB s(t) 1 Eco 1 2 3 4 5 6 7 t. Suponha que um sinal original foi coletado um período de 10 segundos. gerar um novo sinal contendo o sinal original mais três ecos específicos adicionados a ele. o sinal original e todos os ecos que são adicionados juntos em um novo sinal [gn].1 0. 1. e todos os valores do sinal depois estes valores foram zerados: Tempo(s) Valor do sinal 0.

mat Figura 3.0.1 4.0) = 0.2 1.5) = 0. (1.25 (0.2 Tempo. (0. EXEMPLO MANUAL Para um exemplo manual. (0.0.05 (0.0.s 4. (0.1 [gn] eco.0 2.0 0.2 Valor do sinal (0.0.5 [sn] atraso 4s -0.5.0) = 0.s 2.1) .0 (.15 (.3) .0 4.3) .3 atraso7.5s 0. (1. (0.Curso de MATLAB atraso 2s 0. (1.1 0.1 A soma do sinal original mais os três ecos são mostrados na figura 3.5) .5) = 0.3 Valor do sinal (0.s 2.5) = .5) . (0.2 Tempo. 3 – Cálculos com Matrizes 28 . Cap.4 – Diagrama entrada / saída 3.3) .0) = 0.0 (0.0 2.5 Valor do sinal (.0) = . usamos os três primeiros valores do sinal original: Tempo (s) Valor do sinal 0.1) .5) .1 2.0 Os ecos específicos então tem os seguintes valores (não-nulos): Tempo.0) = 0.1) .0) = 0.0 0.1 2.0 (0. (0.5 0.0.

podemos convertê-lo de graus para radianos dentro da função referência: b = sin (angle*pi/180). b = sin(angle_radians). Poderíamos também fazer a conversão em comandos separados: angle_radians = angle*pi/180. Agora que já vimos vários exemplos de funções. pi é uma função que não tem argumento. exponenciais. divisão. Se o argumento contém um valor em graus. Estes comandos são válidos se angle é um escalar ou se angle é uma matriz. Os argumentos ou parâmetros da função estão contidos em parênteses seguindo do nome da função.5 – Sinal Original mais os três ecos. iniciaremos uma revisão das regras relativa às funções. se quisermos calcular o seno de um ângulo e armazenar o resultado em b. dependendo de sua definição. um argumento ou muitos argumentos. muitas expressões requerem o uso de logaritmos. A função sin supõe que o argumento está em radianos. O MATLAB nos permite usar funções para executar estes tipos de cálculos em vez de nos exigirem calculá-los usando operações aritméticas básicas. e exponenciação. Por exemplo. quando usamos a função referência pi. o valor Cap.Curso de MATLAB Figura 3. subtração. 3. podemos usar o seguinte comando: b = sin(angle). Uma função pode não conter argumentos. Se angle for uma matriz. Por exemplo. Uma função é uma referência que representa uma matriz. Por exemplo. então a função será aplicada elemento por elemento aos valores na matriz. multiplicação. e funções trigonométricas.4 Funções Elementares As expressões aritméticas raramente requerem outros cálculos que não sejam a adição. 3 – Cálculos com Matrizes 29 .

desde que este represente um valore e não uma variável. Por exemplo. Mostraremos a seguir uma lista destas funções com uma breve descrição: abs (x) sqrt(x) round(x) fix(x) floor(x) ceil(x) sign(x) Rem(x.∞ Arredonda o valor de x para o inteiro mais próximo de ∞ Se x é menor que zero. 3 – Cálculos com Matrizes 30 . Uma função referência não pode ser usada ao lado esquerdo de um sinal de igualdade. é muito importante dar os argumentos em ordem correta.Curso de MATLAB para pi automaticamente substitui a função referência.y) Exp(x) Calcula o valor absoluto de x. Por exemplo. Calcula a raiz quadrada de x. Esta acomodação da função é também chamada composição de funções.21) é 16. a função retorna ao valor – 1. tenha certeza de fechar o argumento de cada função em seu próprio grupo de parênteses. algumas funções usam o número de argumentos para determinar a saída da função.4) é 1. onde e é a base para logaritmo natural Cap. Arredonda o valor de x para o inteiro mais próximo de zero. o seguinte comando calcula o logaritmo do valor absoluto de x: log_x = log(abs(x)) Quando uma função é usada para calcular o argumento de uma outra função. Por exemplo. Além disso. Esta função retorna ao valor de ex. e rem (100. Funções podem aparecer à direita de um sinal de igualdade e em expressões. Outras funções serão apresentadas no decorrer dos capítulos tão logo debatermos tópicos relevantes. pelos quais determinamos a saída. a função retorna ao valor 1. Funções Matemáticas Elementares As funções matemáticas elementares incluem funções para executar um número de cálculos comuns como o cálculo de valor absoluto e a raiz quadrada. se x for igual a zero. caso contrário. retorna ao valor zero. Algumas funções também exigem que os argumentos estejam unidades específicas. as funções trigonométricas supõem que os argumentos estão em radianos. Arredonda o valor de x para o inteiro mais próximo. Arredonda o valor de x para o inteiro mais próximo de . Uma função de referência pode também ser parte do argumento de uma outra função de referência. Se uma função contém mais que um argumentos. Nomes de funções devem estar em letras minúsculas a menos que o “case sensitivy” esteja desativado. No MATLAB. a função zeros pode ter um ou dois argumentos. Retorna o resto da divisão x/y. Agora discutiremos várias categorias de funções que são freqüentemente usadas em cálculos de engenharia. Por exemplo. também incluímos um grupo de funções usadas em arredondamentos. rem (25.

π e π.6) 2. abs(-5. acos(x) Calcula o arcocosseno de x. ângulo_radianos = ângulo_graus*(pi/180). sqrt(floor(10. A função apresenta um ângulo em radianos entre . A função apresenta um ângulo em radianos entre . Retorna a ln x.5) 12.y) Calcula o arcotangente do valor de y/x.6)) 7. em radianos. use as seguintes conversões. ou seja.6) 4. e então verifique sua resposta no MATLAB. o logaritmo de x na base 10.74:4]) Funções Trigonométricas As funções trigonométricas supõem que os ângulos estejam representados em radianos.π/2 e π/2. floor(-2. sabendo que 180° = π radianos: ângulo_graus = ângulo_radianos*(180/pi).6) 5. Calcula o cosseno de x. o logaritmo natural de x para a base e. Exercícios Calcule as seguintes expressões. atan2(x. A função apresenta um ângulo em radianos entre 0 e π.Curso de MATLAB log(x) Log10(x) ou aproximadamente 2. ceil(-2.6) 6. Para converter para graus ou de graus para radianos. em radianos.7)) 8. onde x deve estar entre –1 e 1.718282. A função apresenta um ângulo em radianos estará entre . round([0:0.001) 11. em radianos. Calcula o arcoseno de x. onde x deve estar entre –1 e 1. onde x deve estar entre –1 e 1.8)) 10. Retorna a log10x.2) 9. log10(100) + log10(0. 1. sign(-2. round (-2. As outras funções trigonométricas podem ser calculados usando as seguintes equações: Cap. Calcula a tangente de x.π/2 e π/2.1:0. A seguir uma lista de funções trigonométricas com uma breve descrição: Calcula o seno de x. atan(x) Calcula o arcotangente de x. abs(round(-2. rem(15.6) 3. 3 – Cálculos com Matrizes sin(x) cos(x) tan(x) asin(x) 31 . dependendo dos sinais de x e y.3:2. floor(ceil(10. fix(-2.

Calcula o cosseno hiperbólico de x.m: function c = circum ( r) % CIRCUM Circunferência de um círculo de raio r. Funções de arquivo M O MATLAB apresenta uma estrutura que nos permite criar funções sob a forma de arquivos M. 2.Curso de MATLAB sec x = 1/ cos x csc x = 1 / sin x cot x = 1 / tan x Funções Hiperbólicas Funções Hiperbólicas são funções de ex. 1. as funções hiperbólicas inversas são funções de ln x. coth x sec x acoth x csc x asech x acsc x Calcula o seno hiperbólico de x. CIRCUM ( r ) retorna uma matriz % que contêm as circunferências de círculos com raios iguais % aos valores no vetor original. O MATLAB inclui várias funções hiperbólicas. 6. como as mostradas nesta breve descrição: sinh(x) cosh(x) tanh(x) asinh(x) acosh(x) atanh(x) Exercícios Dê as expressões MATLAB para calcular os seguintes valores. considere uma função que esteja em um arquivo-M denominado circum. 3 – Cálculos com Matrizes 32 . Calcula a tangente hiperbólica de x. 3. 4. 5. Calcula o cosseno hiperbólico inverso de x. % Para matrizes. Estas funções são úteis em aplicações como o projeto de alguns tipos de filtros digitais. Calcula a tangente hiperbólica inversa de x. Como exemplo. c = pi*2*r. Calcula o seno hiperbólico inverso de x. se o prompt do MATLAB apresentar: Cap. dado o valor de x. Assim.

Os argumentos para a função devem estar entre parênteses. A única informação retornada da função é contida nos argumentos de saída. circum ( c) . Cap. seguida pelo argumento de saída.2 3. Uma função que possui mais de uma variável de saída como por exemplo: function [ dist. vel. respectivamente. Assim.6.4 e π.Curso de MATLAB r = [0 1. um sinal de igual.m é usada quando digitarmos help circum no prompt do MATLAB. 5 2.4 pi]. Verificar se a função inclui um comando que assegure um valor ao argumento de saída. Além disso. As primeiras linhas devem ser comentários porque serão exibidas quando o menu help for usado juntamente com o nome da função . matrizes. acel] = motion (x) • • • Deve apresentar as variáveis de saída dentro de colchetes. que são. disp (circum(a)) c = [1. que tem dois argumentos de entrada: function error = mse (w. sin e outras. e o nome da função. obviamente. Esta linha define os argumentos de entrada e saída. A parte comentada no arquivo circum. Há algumas regras para escrever uma função de arquivo M: • A função deve começar com uma linha contendo a palavra function.3]. 1. todos os valores devem ser calculados dentro da função. como help circum. Para esta função também são válidos os comandos: a = 5. a = circum (r ). como mostramos no exemplo a seguir. • Uma função que tenha múltiplos argumentos de entrada deve listar os argumentos no comando function. Os elementos da matriz A corresponderão as circunferências de círculos de raios 0. 3 – Cálculos com Matrizes 33 . circum passa a ser uma função MATLAB assim como ones.d) • As variáveis especiais nargin e nargout podem ser usadas para determinar o número de argumentos de entrada passadas para uma função e o número de argumentos de saída solicitados quando a função é chamada.

ou seja. já que é um sinal básico usando em sistemas sonar. As reflexões ou os ecos do sinal são recebidos e analisados para prover informações sobre o meio envolvente. Se a senóide é multiplicada por um escalar A. medidas de sinal biológico. 3 – Cálculos com Matrizes 34 . e pode ou não incluir um ângulo de fase. descreveremos as senóides. a freqüência de uma senóide é 5 HZ. transmissão. Nesta seção. Um sistema sonar ativo transmite um sinal que é normalmente um sinal senoidal de freqüência conhecida. a senóide poderá ser escrita sob termos de uma função seno ou cosseno. Dentre as aplicações destacamos: mapeamento geológico. ou Hertz(Hz).Curso de MATLAB Solução de Problemas Aplicados à Engenharia: Sinais de Sonar O estudo do sonar (sound navigation and ranging) inclui a geração. Geração de um Sinal Senoidal Uma senóide é uma função seno escrita em função do tempo: g(t) = sen (2πft) onde f é a freqüência da senóide em ciclos por segundo. A relação entre período e freqüência é dada por f = 1/ P onde f é a freqüência em Hz e P é o período em segundos. O período P de uma senóide é o intervalo de tempo que corresponde a um ciclo. a equação pode ser escrita nesta forma: g(t) = Asen (2πft) O escalar é também chamado de amplitude da senóide. Cap. Um sistema sonar passivo não transmite sinais mas coleta-os de sensores e os analisa baseado em suas freqüências. portanto. Depois. navegação submarina e exploração mineral. o período desta senóide é 0. Se a freqüência de uma senóide for 5 HZ. desenvolveremos um programa MATLAB para gerar um sinal sonar. Uma senóide com um ângulo de fase φ em radianos pode ser escrita como: g(t) = Asen (2πft + φ ) Se o ângulo de fase for igual a π/2 radianos. e recepção de energia sonora na água.2 segundos. teremos: g(t) = sen (2π5t) = sen (10πt) Então haverá cinco ciclos da senóide em um segundo.

e as freqüências. 0 ≤ t ≤ PD s (t ) =  PD  0 para os demais ins tan tes  E é a energia transmitida. um dos tipos de sinais usados em sistemas de sonar é um sinal senoidal.7. de poucas centenas de Hz a dezenas de KHz dependendo do sistema e do alcance de operação desejado. Armazene os valores do sinal em um arquivo MAT denominado sonar. 3 – Cálculos com Matrizes 35 . como mostramos na figura 3. que contém os valores de tempo e sinal para a duração do pulso sonar. sonar. Também plotamos o sinal sonar.mat. e fc para gerar um sinal sonar. adicione um período de 200 pontos de silêncio depois do pulso.mat. 2. As senóides podem ser representadas pela equação: onde :  2E  cos(2πfc). Além disso. A saída é um arquivo denominado sonar.Curso de MATLAB Gerando um sinal sonar Conforme já dito. PD. PD é a duração do pulso em segundos. e fc (freqüência em Hz) são os valores de entrada. PD (duração do pulso em segundos). 1. DESCRIÇÃO ENTRADA/SAÍDA Os valores de E (energia transmitida em joules). fc é a freqüência em Hertz. ENUNCIADO DO PROBLEMA Escreva um programa para gerar um sinal sonar que contenha 10 amostras de cada período de uma senóide específica. Escreva um programa MATLAB que permita ao usuário entrar com valores de E.mat 3. cobrindo uma duração de tempo determinada. Duração de um sinal sonar podem alcançar de uma fração de milisegundos a alguns segundos. EXEMPLO MANUAL Cap. A amostragem do sinal deve cobrir a duração do pulso e conter 10 amostras de cada período de x(t).

03 0. t (ms) 0.5 Números Complexos As soluções de muitos problemas de engenharia como sistema de controle para um braço mecânico ou análise da estabilidade de um circuito elétrico envolvem a busca das raízes de uma equação da seguinte forma: y = f(x) onde as raízes são os valores de x para qual y é igual a zero.24 0.8 425.2 -177.9 -441. SOLUÇÃO MATLAB 3.06 0.18 0.4 111.6 -391.1 -42.33 s(t) 447. Nesta seção discutiremos as operações com números complexos e as funções MATLAB que os usam.6 420. Cap.4 Adicionaríamos 200 pontos de silêncio através de dados adicionais com seus tempos correspondentes e valores de sinais. usamos os valores a seguir: E = 500 joules PD = 5 milisegundos (ms) fc = 3.3 ms.Curso de MATLAB Para um exemplo manual. 2 cos(2π3500 t ) Os primeiros valores do sinal sonar são calculados com aproximação de uma casa decimal. A duração do pulso é 0.3 251.5 ms. 4.21 0. Assim.00 0.30 0. ou aproximadamente 0. para ter 10 amostras por período. o intervalo da amostragem precisa ser aproximadamente 0. Considere a forma geral para um polinômio de grau n: a1xn + a2xn-1 + a3xn-2 + … + na-1 x2 + anx + an+1 = 0 Um polinômio de grau n terá n raízes.12 0.27 0.03 ms.5 KHz O período da senóide é 1/3500. sendo que algumas podem ser raízes múltiplas ou raízes complexas.1 239.09 0.15 0. 3 – Cálculos com Matrizes 36 .2 353. e portanto precisamos de 167 amostras do sinal: s( t ) = s( t ) = 2E cos(2πf c t ) PD 1000 cos(2π(3500)t ) 0.005 s( t ) = 447.7 -306.

o MATLAB automaticamente executa os cálculos necessários. e portanto o ângulo está entre -π e π.3) Figura 3. O comando a seguir define uma variável complexa: x = 1 . Coordenadas polar e retangulares Podemos representar um número complexo em um plano com eixos real e imaginário. Calcula a parte imaginária do número complexo x. O MATLAB inclui várias funções que são específicas aos números complexos: real (x) imag(x) conj(x) abs(x) angle(x) Calcula a parte real do número complexo x.10 mostra que o número complexo pode ser escrito com um ângulo θ e raio r em relação à origem.Curso de MATLAB Operações Aritméticas com Números Complexos Os comandos MATLAB reconhecem os números complexos usando i para representar √-1. Calcula o módulo do número complexo x. o MATLAB supõe que a parte imaginária do número real é igual a zero. Esta forma é chamada de notação polar. 3 – Cálculos com Matrizes 37 . Quando executamos operações entre dois complexos. estamos usando uma notação retangular. Quando representamos um número complexo com uma parte real e imaginária. (O MATLAB também reconhece o uso de j para representar √-1.10 – Plano Complexo Eixo real 1 2 3 4 Cap. real(x)). Os números reais representam o eixo x. Eixo imaginário 3 2 1 (2. Estas funções tornam mais fácil converter o complexo da forma polar para retangular. A figura 3. como 2 + i3. e os números com partes real e imaginária representam o resto do plano.0. Calcula o conjugado do número complexo x. e os números imaginários representam o eixo y. Esta notação é mais usada na Engenharia Elétrica). Calcula o ângulo usando o valor de atan2 (imag(x). e o ponto 2 + i3 pode ser representado em notação polar com um ângulo de 0.98 radianos e um raio3.6. Se uma operação for entre um número real e um complexo.5*i.

Podemos calcular a parte real e a parte imaginária de um complexo com os comandos: a = real (x). 1. 2. 3 – i2 –i –2 0. então o módulo e a fase podem ser calculados com os seguintes comandos: r = abs (x). usamos: y = a + i*b.Curso de MATLAB Conversão retangular a polar r = a 2 + b2 b θ = tan −1 a .5 + i Cap. 4. b = imag (x). 3 – Cálculos com Matrizes 38 . theta = angle (x). usamos o comando: y = r*exp (i*theta). Para calcular o complexo com partes real e imaginária específicas. Exercícios Converter os números complexos nos problemas abaixo. 3.polar a retangular a = r cos θ b = r sen θ Se x é um número complexo. Verifique suas respostas usando o MATLAB. Para calcular o número complexo usando módulo e fase determinados.

75 0.5 e i2. 3 – Cálculos com Matrizes 39 .3 3. Verifique suas respostas usando as funções MATLAB. 7.Curso de MATLAB Converter os valores abaixo para forma retangular. 5. 6. 8.5ei3π Cap. ei e iπ0.

Se a e b forem vetores com os valores a seguir: a = [ 2 4 6] b = [ 3 5 1] Então. como os mostrados a seguir: Operador < <= > >= == ~= Descrição Menor que Menor ou igual a Maior que Maior ou igual a Igual a (no sentido de condição) Não igual a A finalidade dos operadores é fornecer respostas a perguntas do tipo falso/verdadeiro. a expressão será 0 (falsa). Operadores Lógicos Podemos combinar expressões usando os operadores lógicos do MATLAB.1 Operadores Lógicos 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. Assim. se a comparação for verdadeira. Cap. então o valor da expressão será 1 (verdadeira) se a for menor que b. o valor 0. o valor de a < b será o vetor [1 1 0]. enquanto o valor de a ~ = b será [1 1 1]. Os operadores são representados pelos seguintes símbolos.Curso de MATLAB Capítulo 4 .Controle de Fluxo 4. Considere a expressão lógica a seguir: a<b Se a e b forem escalares. 4 – Controle de Fluxo 40 . atribui-se o valor 1. se for falsa. caso contrário.

para expressões unidas por ou.5 b = 1. o resultado será 1 (verdadeiro) se ambas expressões forem verdadeiras. para a seguinte expressão lógica a <b & b<c O resultado será 1 (verdadeiro) somente se a < b < c. a expressão b = = c | b = = 5. como a expressão abaixo: ~ (b = = c | b = = 5. Lembre que ao verificá-las .5 é falsa. 4 – Controle de Fluxo 41 . 8. você precisa entrar com a expressão.5 (obviamente. o resultado será 1 (verdadeiro) se uma ou ambas expressões forem verdadeiras. o valor da expressão é alterado e a mesma torna-se verdadeira. do mais alto ao mais baixo. e ou. e falso (0) para todos resultados diferentes. Suponha que as variáveis tenham os valores indicados abaixo: a = 5. as expressões b = = c e b = = 5. Exercícios Determine se as expressões nos problema 1 a 8 são verdadeiras ou falsas. Assim. 5. 4.0 a + b >= 6. Uma expressão pode conter vários operadores lógicos. 3. Aplicando o operador não.Curso de MATLAB Operadores & | ~ Descrição e ou não Quando duas expressões são unidas por e . Depois.a k = -3 1.5) O MATLAB analisaria primeiro. por causa do uso de parênteses). logo.5 k ~= 0 b–k>a ~(a = = 3*b) –k < = k + 6 a < 10 & a > 5 abs (k) > 3 | k < b .5 a < 10. Assim. é: não. Além disso. 2. a operação só será válida se as matrizes resultantes (a < b e b < c) tiverem o mesmo tamanho. A prioridade dos operadores lógicos. Cap. e. O resultado seria inversamente pelo operador não. Nenhuma das expressões é verdadeira. 7. 6. verifique suas respostas usando o MATLAB. suponha b = = 3 e c = = 5.

os grupos de comandos A e C são executados. end Suponha que a seja um escalar. caso contrário. A próxima estrutura contém um parâmetro if dentro de outro parâmetro if: if expressão 1 grupo de comandos A if expressão 2 grupo de comandos B end grupo de comandos C expressão Comandos end grupo de comandos D Se a expressão 1 for verdadeira. o grupo de comandos B é executado antes do grupo de comandos C. Se a expressão 1 for falsa. temos: if a < 50 count = count +1. end end Cap. Se a não for um escalar. imediatamente salta-se para os comandos D. if b > a b = 0. sum = sum + a. então count é incrementada por 1 e a é adicionada à sum. 4 – Controle de Fluxo 42 . os comandos entre if e end são executados. Se a < 50. temos: if a < 50 count = count + 1 sum = sum + a. então count é incrementado por 1 e a é adicionada à sum somente se cada elemento em a for menor que 50. Como exemplo. Como exemplo. Se a expressão 2 também for verdadeira.2 Tomada de Decisões Estrutura If – Else – End if End Se a expressão lógica for verdadeira.Curso de MATLAB 4. os comandos não serão executados.

o grupo de comandos B é executado.625 + 0. então b é maior que a somente se cada par de elementos correspondentes de a e b são valores nos quais b > a.425 + 0. Caso contrário. a cláusula elseif é freqüentemente usada para simplificar o programa lógico: Cap. Se o carro estiver a 10 metros do edifício.00025*d^2 end expressão grupo de comandos A Quando há muitas alternativas a serem executadas.Curso de MATLAB Novamente. então pula-se diretamente para o segundo end. Instrução Else Esta instrução permite que executemos um comando se a expressão lógica é verdadeira e um diferente comando se a expressão é falsa.00175*d^2 else velocidade = 0.00175d2 Se o táxi estiver a uma distância maior que 10 metros. Se a e nem b forem escalares. suponha que a e b sejam escalares.00025d2 Calculamos a velocidade correta com estes comandos: if d < = 1 0 velocidade = 0. pode ser mais difícil determinar quais expressões lógicas devam ser verdadeiras (ou falsas) para executar cada grupo de comandos. a velocidade é calculada usando a seguinte equação: velocidade = 0. Como exemplo. então b será igual a zero. Se b > a. Então. use a equação a seguir: velocidade = 0. então o grupo de comandos A é executado. então a matriz é comparada ao escalar.12d – 0. se a < 50 aumentaremos count por 1 e adicionaremos a à sum.625 + 0.425 + 0. Se a não for menor que 50. suponha que um táxi esteja passando entre dois edifícios. Neste caso. Considere que a variável d contenha a distância do veículo ao edifício mais próximo.12d – 0. A forma geral do comando if combinada à instrução else é mostrada a seguir: if else grupo de comandos B end Se a expressão lógica é verdadeira. 4 – Controle de Fluxo 43 . Se a ou b é um escalar.

3. então o grupo de comandos D é executado. caso contrário. então somente o grupo de comandos C é executado. dê os comandos MATLAB necessários para executar os passos indicados. imprima o valor de poly. Se nenhuma das expressões lógicas forem verdadeiras. atribua zero a result. Cap. 1.Curso de MATLAB if expressão 1 grupo de comandos A elseif expressão 2 grupo de comandos B elseif expressão 3 grupo de comandos C end Se a expressão 1 for verdadeira. Else e elseif podem ser combinadas dentro de uma estrutura if-else-end. então nenhum dos comandos dentro da estrutura if é executado. 003. Suponha que as variáveis são escalares. 4. Se as expressões 1 e 2 forem falsas e a expressão 3 for verdadeira. Se time é maior que 50. Exercícios Nos problemas 1 a 7. então somente o segundo grupo de comandos é executado. então incremente-a por 1. como mostramos a seguir: if expressão 1 grupo de comandos A elseif expressão 2 grupo de comandos B elseif expressão 3 grupo de comandos C else grupo de comandos D end Se nenhuma das expressões lógicas forem verdadeiras. Se a expressão 1 for falsa e a expressão 2 for verdadeira. Se a diferença entre volt_1 e volt_2 for maior que 2. Se o valor de den for menor que 0. 4 – Controle de Fluxo 44 . imprimir os valores de volt_1 e volt_2. 2. Se mais de uma expressão lógica for verdadeira. a primeira que for verdadeira determina qual grupo de comandos será executado. atribua a result num dividido por dez.001. Quando a raiz quadrada de poly for menor que 0. somente o grupo de comandos A é executado.

isto é. Se o logaritmo natural de x for maior ou igual a 10. Veja o exemplo a seguir: Suponha que temos um grupo de valores que representam a distância de um táxi da torre mais próxima. atribua zero a time e incremente-o por count. 4 – Controle de Fluxo 45 . devemos determinar separadamente d(1). com a variável usada como subscrito.00175d2 Se o táxi estiver a uma distância maior que 10 metros. Se dist for maior ou igual a 100. Se dist estiver entre 50 e 100. Nesta seção. supomos que existiam 25 elementos no vetor d. Contudo. A cada iteração.3 Loop FOR O MATLAB contém dois comandos para gerar loops. 7. d(2). caso contrário. Se dist for maior que 50 e time for maior que 10. usamos a equação: velocidade = 0. não queremos o mesmo para calcular velocidade(1). e assim por diante.00025d2 Como a escolha da equação da velocidade depende do valor de d. e a seção 4. velocidade(2) e assim por diante.12d – 0.625 + 0. use a equação a seguir: velocidade = 0. durante o i-ésimo ciclo do loop.4 discutiremos o comando while. o comando for e o comando while. usaremos um loop. O comando for tem a estrutura a seguir: for end Os comandos entre as instruções for e end são executados uma vez para cada coluna da expressão matricial.. incremente time por 10. 4. Logo. 6. a variável é atribuída para a próxima coluna da matriz.425 + 0. incremente time por 2. incremente time por 1. discutiremos o comando for. variável = expressão Grupo de comandos A Cap. Na primeira solução. Caso contrário incremente time por 0. i ).5.Curso de MATLAB 5. temos que variável = expressão matricial (: . Se o táxi está a 10 metros do edifício. incremente time por 5. Queremos gerar um vetor que contenha as respectivas velocidades.

425 + 0. o número de vezes em que executa-se o loop será: Contudo.12*d – 0. supomos que o tamanho do vetor d é desconhecido.00175*d^2 else velocidade = 0. se um comando for contiver a seguinte informação: for k = 5: 4: 83 Então. Se a expressão for um vetor-linha. Cap. Se a expressão for uma matriz. for k = 1:size (d.Curso de MATLAB for d = 1:25 if d < = 10 velocidade = 0.00025*d^2 end Na próxima solução. o loop será executado uma única vez. Uma vez completo o loop for a variável contém o último valor usado.12*d – 0. Se o operador dois-pontos é usado para definir a expressão matricial usando o formato: for k = início: incremento: limite Então o número de vezes que o loop executará pode ser calculado usando a equação:  lim ite − início  floor  +1  incremento  Se este valor for negativo. Portanto. o loop não será executado. 4 – Controle de Fluxo 46 . então a cada iteração a variável conterá o próximo valor do vetor.00175*d(k)^2 else velocidade = 0.00025*d(k)^2 end end As regras para um loop for são: • • • • • • Se o conjunto for uma matriz vazia. Se a expressão for um escalar.625 + 0. O fluxo de controle passará ao próximo comando após a instrução end.425 + 0. usamos a função size para determinar o número de vezes que queremos executar o loop.2) if d(k) < = 10 velocidade = 0. o loop não será executado. então a cada iteração a variável conterá a próxima coluna da matriz.625 + 0.

13. a luz seguirá a forma da haste e emergirá somente na extremidade. depois 9. • Comando break O comando break pode ser usado para sair de um loop antes que o mesmo seja completo. como mostramos na figura a seguir: fibra ótica Cap. 4 – Controle de Fluxo 47 . Verifique sua resposta . Exercícios Determine o número de vezes que o loop for definido pelos comandos a seguir são executados. a luz será totalmente refletida pelas paredes. ziguezagueando e segue adiante até chegar a outra extremidade. 83. Se “guia de luz”. 2. 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 Aplicação à Solução de Problemas: Fibras Óticas Se a luz está direcionada para o extremo de uma longa haste de vidro ou plástico. 4. 6. Este interessante fenômeno ótico pode ser usado para transmitir luz e imagens regulares. de um lugar para outro. É freqüentemente usado se houver um erro detectado dentro do loop. 3. O loop não seria executado para k = 85 porque é maior que o limite. e assim por diante até o valor final 81. 5.Curso de MATLAB  83 − 5   78  floor   + 1 = floor   + 1 = 20 4    4  O valor de k seria 5. 1.

Este fenômeno de reflexão total interna origina-se da lei de Snell e depende unicamente dos índices de refração para os material considerados para guias de luz. as guias de luz e condutores de imagens são usados em instrumentos projetados para permitir a observação visual de objetos ou áreas que de outro modo seriam inacessíveis. Se os extremos das fibras são polidos e o arranjo espacial é o mesmo em ambos extremos (um feixe coerente). Por causa da flexibilidade das fibras óticas. e o feixe é chamado condutor de imagem. 4 – Controle de Fluxo 48 . parte dela é refletida a outra parte é refratada. Quando a luz incide em uma interface entre dois meios com índices de refração diferentes. 1. ENUNCIADO DO PROBLEMA Determine se os materiais especificados formarão ou não um guia de luz. podemos calcular este ângulo e determinar se a luz que entra em uma haste a um ângulo particular permanecerá no interior da mesma. e limpar cataratas. O material que compõe o núcleo tem o índice de refração mais alto que o meio que o envolve.dat contenha o número de possíveis índices de refração da fibra seguido pelo índice de refração do meio que o envolve. um endoscópio é um instrumento usado por físicos para examinar o interior do corpo de um paciente com somente um pequeno corte. O programa deve determinar se os materiais formarão um guia de luz e. então parte da luz atravessa a interface. Cap. o qual pode ser usado para desobstruir artérias. para quais ângulos a luz entra no guia. então.Curso de MATLAB A fibra ótica é uma fibra de vidro muito fina. quebrar pedras nos rins. Suponha que n2 é o índice de refração do meio envolvente. Suponha que um arquivo de dados ASCII denominado indices. calcule os ângulos para o qual a luz pode entra na haste e ser transmitida. Se n2 é maior que n1. Se eles não formarem. Se as fibras não tem o mesmo arranjo para ambos extremos (feixe incoerente). As fibras óticas podem ser usadas para transmitir feixes de luz LASER. denominado de blindagem. Um endoscópio usa uma fibra ótica para transmitir a luz necessária dentro do corpo de um paciente. O ângulo de incidência onde a luz é totalmente refletida pela superfície é chamado de ângulo crítico θc. a luz é transmitida em vez da imagem. e n1 é o índice de refração da haste. Um guia de luz é composto de dois materiais  o núcleo central e o material que o envolve. a haste não transmitirá luz. A quantidade de luz refratada depende dos índices de refração dos materiais e o ângulo de incidência da luz. o ângulo crítico pode ser determinado pela equação sen θc = n2 / _ n1 Escreva um programa MATLAB que determina se a luz será ou não transmitida por dois materiais que forma um guia. Como o ângulo crítico depende dos índices de refração de dois materiais. e por esta razão é chamada guia de luz. a fibra pode ser usada para transmitir uma imagem. caso contrário. Por exemplo. Se a luz incidente na interface entre dois meios provém de um material com maior índice de refração.

Se formarmos um guia de luz de vidro envolvido pelo ar.dat 3. 4. Mensagem e θc Indices.Curso de MATLAB 2. a entrada ao programa é um arquivo de dados contendo os índices de refração para os guias de luz em potencial. A saída é uma mensagem indicando se a luz é ou não transmitida e o ângulos para quais pode entrar no guia. 4 – Controle de Fluxo 49 . SOLUÇÃO DO MATLAB 5.820 . o ângulo crítico θc pode ser calculado como mostramos a seguir: θc = sen –1 (n2 / n1 ) = sen –1 (1. 82 0 O guia de luz transmitirá luz para todos os ângulos de incidência maiores que 41.5.0003 e o índice do vidro é 1.0003 / 1. DESCRIÇÃO ENTRADA \ SAÍDA Como mostramos na figura abaixo.4 Loops WHILE O loop while é uma importante estrutura para repetição de um grupo de comandos quando a condição especificada for verdadeira.66687 ) = 41.5 ) = sen –1 ( 0. EXEMPLO MANUAL O índice de refração do ar é 1. TESTANDO 4. O formato geral para esta estrutura de controle é: while expressão grupo de comandos A end Cap.

Um total de 48 valores de temperaturas estão representados. sum = 0. então uma matriz poderia ser usada para armazenar as temperaturas dos pontos correspondentes sobre a placa. o controle pula para o comando posterior ao comando end. k = k + 1. 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. A temperatura para os outros pontos da placa é uma função da temperatura dos pontos envolventes. 4 – Controle de Fluxo 50 . As variáveis modificadas no grupo de comandos A devem incluir as variáveis na expressão. Quando a condição for falsa. ou o valor da expressão nunca será mudado. Depois destes comandos serem executados. o loop torna-se um loop infinito. A placa é projetada para ser usada em uma aplicação na qual as temperaturas de todos os quatro lados da placa metálica estejam a temperaturas constantes ou a temperaturas isotérmicas. então o grupo de comandos A é executado.( Lembre-se que você pode usar ^c para sair um loop infinito). Como todos os valores no vetor podem ser positivos.Curso de MATLAB Se a expressão for verdadeira. a condição é novamente questionada. a expressão no loop while deve acomodar a situação: x = [ 1 2 3 4 5 6 7 8 9 ]. Se for verdadeira. end Aplicação à Solução de Problemas: Equilíbrio de Temperatura O projeto de novos materiais para o aperfeiçoamento das características do fluxo de ar acerca dos veículos envolve a análise dos materiais para não somente o fluxo de ar mas também para propriedades como a distribuição de temperatura. while x (k) > =0 & k < size (x. o grupo de comandos é novamente executado. Neste problema. Cap. Se considerarmos as placas para serem semelhantes a uma grade.2) sum = sum + x(k). k = 1. consideramos a distribuição em uma fina placa metálica tal que esta alcance um ponto de equilíbrio térmico. 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 alcançado. Se a expressão for verdadeira (ou é um valor não-nulo). Os pontos isotérmicos nos quatros lados são sombreados.

a diferença entre a antiga e a temperatura recente é calculada. Os pontos restantes são inicialmente selecionados para uma temperatura arbitrária. Cap. supomos que os lados superior. A nova temperatura de cada ponto interno é calculado como a média das quatro temperaturas envolventes (veja a figura a seguir) e é dada por: T0 = T1 + T2 + T3 + T4 4 T1 T0 T4 T0 T2 T3 Pontos que envolvem T0 Depois de calcular a nova temperatura para um ponto interno. a placa já não está em equilíbrio térmico.Curso de MATLAB superior esquerda direita inferior Grade de uma placa metálica As temperaturas isotérmicas sobre os quatro lados seriam especificadas. e o processo inteiro é repetido. normalmente zero. Se a mudança de temperatura for maior que algum valor de tolerância especificado. 4 – Controle de Fluxo 51 . esquerdo e direito são mantidos à mesma temperatura enquanto que o lado inferior da placa é mantida a uma temperatura diferente.

O novo valor é a média das temperaturas nas posições (2. As temperaturas isotérmicas são 100º e 50º. 4). Por exemplo. DESCRIÇÃO ENTRADA / SAÍDA Como mostra a figura abaixo. examinamos um simples caso. 4 – Controle de Fluxo 52 . novamente calculamos uma média. e não o seu valor atualizado. 3). temperaturas isotérmicas tamanho da grade tolerância Equilíbrio de temperatura 3. 2. ENUNCIADO DO PROBLEMA Determine os valores de equilíbrio para uma placa de metal com lados isotérmicos.Curso de MATLAB Usamos as duas matrizes para as temperaturas. estudando cada iteração. usamos uma matriz de temperaturas antigas para calcular uma matriz de novas temperaturas e para determinar se alguma temperatura muda acima da tolerância. 2). Precisamos de duas matrizes porque supomos que a temperatura muda para todos os pontos que ocorrem simultaneamente. Quando nenhuma das temperaturas muda acima da tolerância. e imprimimos as temperaturas finais. 1. O grupo inicial de temperaturas e as sucessivas iterações ao equilíbrio térmico são mostradas a seguir: Cap. 3). as temperaturas isotérmicas e o valor de tolerância. A saída é o grupo de temperaturas de equilíbrio para a placa de metal. e (4. EXEMPLO MANUAL Tenha a certeza que compreende o processo. suponha que estamos calculando a nova temperatura para a posição (3. Usamos uma tolerância de 40º. sempre que as calculamos. 3). supomos que o equilíbrio foi alcançado. Portanto. estaríamos atualizando informação sem que antes estivéssemos com a informação antiga. uma das antigas temperaturas e uma das recentes temperaturas. 3). Quando movemos as novas temperaturas para o conjunto antigo. (3. Supondo que a matriz contém quatro linhas e quatro colunas. mas queremos usar o antigo valor na posição (3. a entrada é o tamanho da grade da placa. Se usarmos uma única matriz. (3. e nós iniciamos todos os pontos restantes do zero. 4). Quando calculamos a nova temperatura para a posição (3.

5 50 100 100 50 100 37.875 100 59. 4. TESTANDO Cap.375 50 50 50 100 100 100 50 Como nenhuma das temperaturas alteradas entre a primeira e segunda interação ultrapassam a tolerância de 400. 4 – Controle de Fluxo 53 .875 71.5 100 50 50 Segunda Iteração 100 100 100 100 71.375 59. as temperaturas na segunda iteração estão também em equilíbrio. SOLUÇÃO DO MATLAB 5.Curso de MATLAB Temperaturas Iniciais 100 100 100 100 100 0 0 100 100 0 0 100 50 50 50 50 Primeira Iteração 100 100 100 50 100 50 37.

Curso de MATLAB

Capítulo 5 - Medidas Estatísticas
Analisar dados coletados de ensaios de engenharia é uma parte importante da avaliação dos mesmos. O alcance da análise estende-se dos mais simples cálculos de dados, como a média aritmética, à mais complexa análise que calcula medidas como o desvio padrão ou variância dos dados. Medidas como estas são medidas estatísticas porque suas propriedades não são exatas. Por exemplo, o seno de 600 é uma medida exata pois o valor é sempre o mesmo toda vez que o calculamos, mas a velocidade máxima que atingimos com o nosso carro é uma medida estatística porque varia dependendo de parâmetros como a temperatura, condições da estrada, e se estamos nas montanhas ou no deserto. Não só podemos medir as propriedades e características de dados estatísticos como também usar o computador para gerar seqüências de valores (números aleatórios) com características específicas. Neste capítulo, aprenderemos a usar as funções para análise de dados do MATLAB e a gerar seqüências de números aleatórios com características específicas.

5.1

Funções para Análise de Dados

Para se estudar o desempenho de duas companhias corretoras de ações, selecionou-se de cada uma delas amostras aleatórias das ações negociadas. Para cada ação selecionada, computou-se a porcentagem de lucro apresentada durante um período de tempo. Os dados estão 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 gráficos para os dados das corretoras A e B são 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 critérios foram considerados como:

• • •

Média mais alta de percentagem de lucro; Maior percentagem de lucro; Menor variação de Percentagem de lucro;
54

Cap. 5 - Medidas Estatísticas

Curso de MATLAB

É visualmente perceptível que ao longo dos dezoito dias a corretora B apresentou menor variação de lucro. Facilmente também observaríamos que a Corretora A obteve o maior percentual de lucro de ações. Contudo, não é possível sabermos quantitativamente estas e outras informações como a média de percentagem do lucros das ações para cada corretora apenas com a observação dos gráficos. Para isso temos que calcular as grandezas necessárias para determinar qual corretora obteve melhor desempenho. Seria um pouco trabalhoso se o fizéssemos manualmente. O MATLAB pode perfeitamente auxiliar-nos nestes casos porque contém uma série de funções que contribuem para uma análise mais precisa dos dados. Algumas destas funções podem ser aplicadas ao exemplo das corretoras como as mostradas a seguir:

Qual a média percentual de lucro das ações durante os 18 dias de observação? mean : calcula a média aritmética de um grupo de valores. Assim, para as corretoras A e B, temos:
» mean (corretoraA) ans = 55.7222 » mean (corretoraB) ans = 55.4444

Qual corretora alcançou a mais alta percentagem de lucros? A função max determina a maior percentagem de lucro em cada corretora. A função max determina o maior valor de um conjunto de dados.
»max(corretoraA) ans = 70 » max(corretoraB) ans = 61

E a menor percentagem? As menores margens de lucro obtidas por cada corretora são dadas pelo comando min .
»min(corretoraA) ans = 38 » min(corretoraB) ans = 50

Cap. 5 - Medidas Estatísticas

55

Curso de MATLAB

Qual corretora apresenta menor variação de percentual de lucro de ações? As duas corretoras tiveram médias bastantes próximas. Contudo, a média, por ser uma medida representativa de posição central, mascara toda a informação sobre a variabilidade dos dados das corretoras A e B. É necessário uma medida que resuma a variabilidade de dois grupos de valores, permitindo compara-los, conforme algum critério estabelecido. O critério mais comum é aquele que mede a concentração de dados em torno de sua média e, as medidas mais usadas são: o desvio médio e a variância. Desvio Médio, Variância e Desvio Padrão Sabendo que a média dos valores da corretora A é 55,72 , os desvios xi – x são: 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, teríamos:


18

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
i= 0

i

− x

)

2

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

O desvio médio e a variância são definidos, usando os termos acima:

DesvioMédi o =

∑x
i =1

n

i

−x

Variância =

∑ (x
n i =1

i

−x

)

2

n

n

Então, desvio médio e a variância dos dados da corretora A são 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 ações, segundo o desvio médio. Isto significa que o percentual de lucro de ações da corretora B é mais homogêneo que o da corretora A. Para evitar erros de interpretação  a variância é uma medida que expressa um desvio quadrático médio  usamos o desvio padrão (σ), que é definido como a raiz quadrada da variância (σ)2. O MATLAB tem uma função específica para o cálculo de desvio padrão denominada std . Portanto, para o exemplo das corretoras:
» std(corretoraA) ans =7.6758 » std(corretoraB) ans =3.1478

Cap. 5 - Medidas Estatísticas

56

A média em cada disciplina. Cap. Comparar os funcionários das seções de Vendas e Técnicas e determinar a maior nota destes funcionários em cada disciplina. a média. Para grandes amostras pouca diferença fará se usarmos um ou outro. desejando melhorar o nível de seus funcionários em cargos de chefia. Comparar a distribuição dos dados nas disciplinas de Direito. Quando não houver a preocupação em saber se trabalhamos com população ou amostra. usamos os dados da corretora A e armazenamos em um vetor denominado “corretoraA” e fizemos o mesmo para a corretora B. 5 . Metodologia e Economia. max e min determinam. o máximo valor. o desvio padrão. O denominador N – 1 deve ser usado toda vez que estivermos trabalhando com uma amostra. a média. Um exemplo de aplicação de medidas estatísticas para matrizes é dado a seguir: A JR Indústria de Alimentícios. As menores notas em cada disciplina e os funcionários que as obtiveram. determine: • • E. o mínimo valor de cada coluna. montou um curso experimental e indicou 15 funcionários para sua primeira turma. respectivamente. o desvio padrão. std. o máximo valor e o valor mínimo de um vetor. Mas estas funções também são válidas para matrizes. Os comandos mean. a variância de um conjunto de dados é definida por: N σ2 = ∑ (x k =1 k − µ) 2 N −1 onde µ é a média do conjunto de valores. • • • Dispor as notas de Administração em forma crescente. Usando os dados da tabela. respectivamente.Medidas Estatísticas 57 . No exemplo acima. podemos usar o denominador n. Os dados referentes à seção a que pertencem e notas obtidas estão na tabela a seguir. Elas retornam um vetor-linha contendo.Curso de MATLAB Para o MATLAB.

0 8.0 9.5 9.0 9.0 9.5 8.5 8.0 7.0 9.0 9.0 8.0 9.0 10.5 ING 9.0 8. uma matriz 15 x 6.0 6.0 9.0 10.0 4.0 RED 8.0 7.0 6.0 8.0 7.5 9.0 10.0 10.0 9. Então.0 8.5 8.0 9.0 8.0 6.0 8.5 7.0 ECO 8.0 9.metodologia .0 4.0 8.5 8.0 9.0 8.0 9.0 8.0 9. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Seção Pessoal Pessoal Pessoal Pessoal Pessoal Técnica Técnica Técnica Técnica Técnica Vendas Vendas Vendas Vendas Vendas ADM DIR 8.0 10.0 8.0 8.0 9.0 8.0 8.0 8.0 6.0 8.0 9.0 10.0 8.0 6.0 8.0 6.0 9.5 7.0 6. Em uma matriz.0 9.0 9. onde as colunas representam as disciplinas do curso.0 8.0 7.0 6.0 7.0 6. E denominando o vetor que representa a média da turma em cada disciplina de MEDIA_TURMA.Curso de MATLAB Func.0 8.0 6.5 8.0 9.0 8.0 8.0 8.0 8.0 8.0 8.0 9.5 7.5 8.0 Sabemos que a função mean calcula a média dos elementos de um vetor.0 9.0 6.0 8.0 9. definindo a matriz no MATLAB.0 8.5 9. podemos considerar a lista de funcionários e suas respectivas notas em cada disciplina.6 9.0 9.0 9.0 8.0 9.0 8.0 6.0 8.0 6.6 9.0 7. »TURMA = [ 8.0 10.5 9.5 7.5 7.0 7.0 4.0 9.0 9.0 9.0 8.0 8. temos: » MEDIA_TURMA = mean (TURMA) Cap.0 6.0 8.0 9.5 6.0 8.0 8.0 6.5 9.0 10.5 9.0 8.6 7.0 9.0 9.0].0 8.0 9.0 8.5 8.0 8.5 8.0 9.0 7.0 9. 5 .0 7.0 8.5 6.0 9.0 9.0 10.0 4.0 6.0 9.5 8.0 8.0 10.0 8.0 10.0 9.0 7. a função calcula um vetor linha que contém a média de cada coluna.5 9.0 7.0 7.0 9.0 6.0 10.5 8.0 9.0 6. Para o exemplo do curso de aperfeiçoamento.0 9.0 7.0 10.0 9.0 7.Medidas Estatísticas 58 ADM – administração DIR – direito RED – redação ECO – economia ING – inglês MET .0 10.0 9.0 8. facilitando o cálculo da média da turma em cada matéria.6 8.0 8.0 8.0 9.5 7.0 6.0 MET 9.0 8.0 9.0 6.0 7.

Por isso. usaríamos o operador dois pontos (:). a atribuição do funcionário 1. a função retorna um vetor-linha cujos elementos são os menores valores de cada coluna. Economia. 8.7000 A saída do MATLAB mostra que as médias da turma nas disciplinas de Administração.0000 e 7.7000.0000 • Menores notas e os funcionários que as obtiveram A função min retorna o menor valor de um vetor. quando há valores mínimos idênticos. o vetor y denominar-se-á GRAU_MIN. a média dos funcionários da seção de Pessoal em Direito: » MEDIA_PDIR = mean (TURMA(1:5.Medidas Estatísticas 59 . Esta forma é válida também para a função max. Observe que atribuiu-se ao funcionário 1 o menor grau em Direito. Direito. o funcionário 14 obteve a menor nota (6. 2)) » MEDIA_PDIR = 9. conforme mostraremos a seguir: » MEDIA_RED = mean (TURMA (: . se usarmos esta forma da função min na matriz TURMA. o mesmo acontece em Inglês.Curso de MATLAB » MEDIA_TURMA = 7. Inglês e Metodologia são.0000 7.0667. » [ GRAU_MIN. 7. Além disso.9467 ou ainda. Conforme vimos.8667 9. podemos determinar a menor nota em cada disciplina o funcionário que a obteve. 7.8667.0000. se existirem valores idênticos. o índice do primeiro é retornado. apresenta a forma [y. e os índices (respectivas linhas) no vetor i. i] = min (x) onde armazena os menores elementos de cada coluna em um vetor y.0667 8.0000 7. i ] = min (TURMA) » GRAU_MIN = 6 i= 14 1 15 12 14 4 9 4 7 4 6 Assim. Logo. 9. disciplina em que todos tiveram o mesmo grau. 5 . respectivamente. Redação. 8. No caso. o índice do primeiro valor é retornado. Se quiséssemos apenas a média da turma em Redação.9467. 3)) » MEDIA_RED = 7.0) em Administração.9467 8. Em uma matriz. Cap.

» ASC_3 = sort (GRAU_ASC ( 1: 3 . o histograma calcula o número de valores a distribuir em 10 Cap. Um histograma é um gráfico que mostra a distribuição de um grupo de valores. Tente fazer: sem • Comparação entre as distribuições de dados de Direito. No MATLAB. os elementos de um vetor ou os elementos de cada coluna de uma matriz. usaremos um tipo especial de gráfico que particularmente relevante às medidas estatísticas discutidas nesta seção. Porém. usamos a função sort. » ADM = TURMA( : . Metodologia e Economia.Medidas Estatísticas 60 . 1). I ] = sort (x) onde os valores dispostos em forma crescente são armazenados na matriz y e seus índices . 1)) A função sort também apresenta a forma [y. Sua forma geral é: sort(x) Como queremos apenas as notas da turma em Administração em ordem ascendente. na matriz i. 1)). devemos antes selecionar a disciplina de Administração. faríamos: » GRAU_ASC = sort (TURMA( : .i] = sort (TURMA) Poderíamos calcular diretamente precisar definir o vetor-coluna ADM: » GRAU_ASC = sort (TURMA( : . 5 . em ordem ascendente. Se x contiver valores complexos. utilizando o operador dois pontos ( : ). Para auxiliar na comparação entre dados de variáveis. os elementos serão distribuídos de forma ascendente de acordo com seus valores absolutos. 1)) Se quiséssemos somente as três menores notas. » GRAU_ASC = sort (ADM) » GRAU_ASC = 6 6 6 8 8 8 8 8 8 8 8 8 8 8 10 10 » [y.Curso de MATLAB • Notas de Administração em Forma Ascendente O MATLAB contém uma função que distribui.

Portanto. O segundo comando é similar. n e x. O vetor n contém os dados para 10 barras.4 . Figura 5.3 . 25) A informação usada para plotar também pode ser armazenada em vetores. Metodologia e Economia. podemos usar o histograma para comparar e indicar as diferenças existentes entre as distribuições de dados de Direito. podemos usar o operador dois pontos como mostrado a seguir: » hist (x ( :.Histograma de Direito Figura 5. Se quisermos plotar a segunda coluna em uma matriz. mais armazena 6 dados em n. 2 )) O comando hist nos permite selecionar o número de barras. O primeiro comando calcula valores para dois vetores.Histograma de Economia Cap.Curso de MATLAB barras igualmente espaçadas entre os valores máximos e mínimo de um grupo de valores. e 6 pontos de meio barra em x. Considere os seguintes comandos: » [ n . x ] = hist (GRAU_MIN. 6). Nenhum destes comandos plota um histograma. Estes vetores são usados geralmente em gráficos do tipo bar. em vez de 10. que será discutido no capítulo 7. 5 . Agora.Medidas Estatísticas 61 . x ] = hist (GRAU_MIN). se quisermos aumentar a resolução dos histograma tal que usemos 25 barras. faremos: » hist ( x . » [ n . e o vetor x contém o ponto que corresponde ao meio de cada alcance da barra. A forma geral para plotar um histograma é mostrada a seguir: » hist (x) onde x é um vetor contendo os dados a serem usados no histograma.

25 1.82 1.5 . No MATLAB.4100 3. há maior percentagem de notas menores que 7.25 Ago/97 1.0.04 1. Também em Metodologia. indica que apenas 1 funcionário conseguiu o mesmo grau e em Metodologia. mais um exemplo.5400 4.16 1.95 Provavelmente. em Economia.10 2.15 1. Mês/ano Juros a.95].13 1. Suponha que alguém lhe perguntasse como acompanhar o acúmulo de taxa de juros mês a mês.82 Jun/97 1.4 Dez/97 1.10 Abr/97 1.0600 7. Enquanto o histograma de Direito indica que todos os alunos obtiveram grau 9. Seja o quadro abaixo que mostra a taxa de juros durante os últimos 18 meses. você diria que bastaria somar à taxa de juros inicial.2200 8.16 1.Histograma de Metodologia Observe as diferenças entre os histogramas. O que é confirmado se usarmos funções já vistas como mean e std.12 1. Podemos afirmar que as notas são mais homogêneas em Direito.12 Nov/97 2.0.13 1.13 Set/97 1. 5 . É um exemplo típico de soma cumulativa.6600 6.2500 2. » ACUM_JUROS = cumsum (JUROS) ACUM_JUROS = Columns 1 through 7 1.65 Jul/97 1.15 Out/97 1.3800 Cap.16 Jan/98 1.04 Mai/97 1.13 Fev/97 Mar/97 1.4 1.m (%) Mês/ano Juros a. quatro funcionários.m (%) Jan/97 1. Para terminar a parte de funções de análise de dados.65 0. a função que corresponde à soma cumulativa dos elementos de um vetor é cumsum conforme mostrado a seguir: » JUROS = [1.Medidas Estatísticas 62 .Curso de MATLAB Figura 5.16 1. os juros do mês seguinte e assim por diante.16 1.16 Fev/98 0.

14. Suponha que w.25 + 1. a mediana é Mediana = (14 + 16) / 2 = 15.13 e assim por diante. cumprod (x) calcula o produto acumulativo dos elementos de um vetor x.5100 10.6200 17.7600 13. Há também a função median que calcula a mediana dos elementos de um vetor x. Mediana é a realização que ocupa a posição central da série de observações quando estas estão ordenadas segundo suas grandezas (crescente ou decrescentemente). usamos a função sum : » TOTAL_JUROS = sum(JUROS) TOTAL_JUROS = 18. Depois. a mediana é o valor 16.2700 18. 8 e 19.8000 15.25 + 1. use o MATLAB para verificar suas respostas. Assim. o terceiro. 14. se as cinco observações de uma variável.Curso de MATLAB Columns 8 through 14 9. Se o número de observações é par. 5 . o segundo será 1. Exercícios Determine as matrizes representadas pelas funções a seguir. onde prod(x) calcula o produto dos elementos de um vetor ou produto de cada coluna.6600 11. 16. o primeiro elemento do vetor ACUM_JUROS é 1.16 + 1.2200 Logo. se as observações de uma variável. x. 1.25 . forem 20. em uma matriz. Se quisermos saber o total de juros durante este intervalo de tempo.2200 As funções prod (x) e cumprod (x) são análogas às funções sum (x) e cumsum(x). Logo. e y sejam as matrizes: w = [ 0 3 -2 7] x = [ 3 -1 5 7] 1 y = 2  6  3 8 −1 7  4   − 2  Cap. como erros de impressão na primeira página forem 20.Medidas Estatísticas 63 .16 . 16 e 8. usa-se como mediana a média aritmética das duas observações centrais.

. “dois”. cumprod(y) 8.. 2)) 13. std (w) 11. 1. std (y). mean (y) 6. min(y) 3.. i ] = max(y) 5. “um”. std (y) 15. Atualmente. Podemos então imprimir uma tabela de medidas e procurar por aquelas que nos permita distinguir valores. desvio padrão e variância.. Escreva um programa MATLAB para ler um arquivo de dados ASCII denominado zero. Cap. median(w) 7. a média do módulo. Já discutimos média. Uma das primeiras coisas que devemos fazer é analisar os dados para as dez seqüências correspondentes (ou sinais) para verificar se há algumas medidas estatísticas nas quais possamos distingui-los. As funções para análise de dados do MATLAB nos permite facilmente calcular estas medidas.dat e calcule as seguintes informação: média. 5 – Medidas Estatísticas 64 . min (w. sort (y) 10. [ z. x) 4. Os dados para cada dígito contém mil valores. A média dos módulo é a média dos valores absolutos do conjunto de dados.^2 Aplicação à Solução de Problemas: Análise do Sinal de Voz Suponha que queiramos projetar um sistema que reconheça as palavras que representam os dez algarismos: “ zero”. desvio padrão. “ nove”. std (y(:.Curso de Matlab 1. sort(2*w + x) 9. std(x)^2 12. ENUNCIADO DO PROBLEMA Calcular as medidas estatísticas a seguir para um sinal de voz. max (w) 2. variância. podemos usar sinais de voz para calcular um número de medidas estatísticas que poderiam ser usadas como parte de um algoritmo de reconhecimento de dígitos. A média quadrática é o valor médio quadrático será discutido com mais detalhes na próxima seção.

suponha que um sinal contenha a seguinte seqüência de valores: [ 2.5 8.µ)2 + (-1.dat Figura 5.2 + 1.5 + 8.52 + 8.398 média dos módulos = ( |2.2 . Média Desvio Padrão Variância Média dos Módulos Média Quadrática zero.22 + (-1.398 4.µ)2 + (-0.1 .5| + |8.2| + | 1.2 -1.2 .307 = 3.2)2 + 1. DESCRIÇÃO ENTRADA/SAÍDA O diagrama abaixo mostra o arquivo que contém os dados como a entrada e as várias medidas estatísticas como a saída. calculamos os seguintes valores: a.µ)2 + (1.52)/5 = 15.Curso de Matlab 2.2 . 5 – Medidas Estatísticas 65 .5 .6 – diagrama I/O 3.5 . SOLUÇÃO DO MATLAB 5. TESTANDO Cap.5)/5 = 2. e.1 .2| + |-1. d.1 -0.1| + |-0. média = (2. EXEMPLO MANUAL Para um exemplo manual.307 c.5| /5 = 15.18 variância = [(2.µ )2]/4 = desvio padrão = √13.5] Usando uma calculadora. 13.1.2 1.0.1)2 +(-0. b.648 média quadrática = (2.µ)2 + (8.

A simulação pode ser testada diversas vezes para analisar os resultados e cada teste representa um repetição do experimento. Determina n como o valor inicial de uma seqüência de números aleatórios. pois neste intervalo corresponde a ¼ do total. Se estivermos testando um programa que use um arquivo de entrada que representa um sinal de rádio. poderíamos gerar ruídos e adicioná-los ao sinal de voz ou a uma música em seqüência para prover mais sinais reais. n) Rand (‘seed’) Retorna uma matriz de ordem n cujos elementos são números aleatórios entre 0 e 1. 0 e 1.Curso de Matlab 5. P (2700 ≤ X ≤ 3600) = ¼ Cap. o que ouvimos no rádio é uma seqüência de ruído. cada ponto teria a probabilidade de ocorrer igual a zero. Por exemplo.1]. Um valor é usado para iniciar uma seqüência aleatória. a probabilidade de o ponteiro parar no intervalo entre os números 9 e 12 é ¼. Especificam se os números aleatórios desejados serão uniformemente ou normalmente distribuídos.1] ou podem ser distribuídos normalmente. Também usamos números aleatórios para aproximar seqüências de ruído. Há muitos problemas que pedem o uso de números aleatórios no desenvolvimento de uma solução.2 Números Aleatórios Números aleatórios não são definidos por uma equação. Rand (n) Rand (m. Matriz de mesma ordem que a matriz A. Função Densidade de Probabilidade Suponha que o ponteiro dos segundos de um relógio elétrico possa parar a qualquer instante por defeitos técnicos. Então. Contudo. Função Número Aleatório A função rand no MATLAB gera números aleatórios no intervalo [ 0. Matriz com m linhas e n colunas cujos elementos são números aleatórios entre 0 e 1. Contudo. respectivamente. Como há infinitos pontos nos quais o ponteiro pode parar. possuem certas características que os definem. cada uma com igual probabilidade.n) Rand(size (A)) Rand (‘uniform’) Rand (‘normal’) Rand (‘seed’. podemos determinar a probabilidade de o ponteiro parar numa região entre dois valores quaisquer. Em alguns casos são usados para desenvolver a simulação de um problema complexo. 5 – Medidas Estatísticas 66 . Retorna ao valor atual de início do gerador de números aleatórios. Assim. Os números aleatórios podem ser uniformemente distribuídos no intervalo [0. nos quais média e variância são.

Matematicamente.d. de forma que P ( a ≤ X ≤ b) = b–a 3600 _ Construindo um histograma da variável X: f(x) 1/360 a b c d 360 x (em graus) Figura 5. Sempre poderemos achar a probabilidade de o ponteiro parar num ponto qualquer de um intervalo. compreendido entre os números a e b. determina a região onde há maior probabilidade de uma variável X assumir um valor pertencente a um intervalo. Cap.  0.d. A f.  se se se 0 0 X < 0 ≤ X < 360 x ≥ 360 0 0 0 A área correspondente ao intervalo [a.7 – histograma da variável X O histograma corresponde à função:  0. 5 – Medidas Estatísticas 67 . P (a ≤ X ≤ b ) = ∫ b a f ( x ) dx = ∫ b a 1 360 0 dx = b −a 360 0 A função f(x) é chamada função densidade de probabilidade (f.b] indica a probabilidade de a variabilidade de a variável estar entre a e b.  f ( x ) =  1 / 360 . por menor que seja.p).Curso de Matlab onde X é medido em graus.p.

denotada por X: (µ.p.  • Gráfico: se demais a<x<b pontos . f(x) 1/ (b –a) a 0 b x Figura 5. onde -∞ < µ < +∞ e 0 < σ2 < + ∞.p. f (x ) =  b − a  0. se a sua f. de uma variável aleatória contínua como : a) Modelo Uniforme • Definição: Uma variável aleatória X tem distribuição uniforme com a e b (a<b) reais.d. é dada por:  1  . é dada por: 1 σ 2π −(x −µ)2 f (x ) = e 2σ 2 Cap. σ2).p.Curso de Matlab Existem alguns modelos freqüentemente usados para representar a f.d. se sua f. 5 – Medidas Estatísticas 68 .9 – distribuição uniforme • Variância (σ2) σ2 = (b – a)2 12 b) Modelo Normal A variável X tem distribuição normal com parâmetros µ e σ2 .d.

µ σ Exemplo: Suponha que as amplitudes de vida de dois aparelhos elétricos.5 − 0. • Gráfico: A curva normal é particular para média µ e variância σ2. é a área sob a curva. usamos a curva normal padrão ou reduzida (µ = 0. 36) e N(45. D1 e D2.308 6  6  6  T − 45 45 − 45  P(D2 > 45) = P >  = P( Z > 0) = 0. então a variável aleatória Z com distribuição N (0.1).192 = 0. 9). Se X: N(µ. σ2 = 1) – ver figura acima. 1) é definida por: Z=X .σ2) . matematicamente. f(Z) -1 0 +1 z Figura 5.5 3   3 Cap. tenham distribuições N(42. denotada por N(0. 5 – Medidas Estatísticas 69 . Por isso. qual aparelho deve ser preferido? E se for por um período de 49 horas? a) 45 horas 1  T − 42 45 − 42  P(D1 > 45) = P >  = P( Z > ) = 0. teríamos valores diferentes de probabilidade para cada valor de µ e de σ. respectivamente Se o aparelho é para ser usado por um período de 45 horas.Curso de Matlab Para -∞ < µ < +∞.9 – Curva Normal Padrão Como a probabilidade de a variável X ocorrer num intervalo.

Assim. Verifique sua respostas. 5 – Medidas Estatísticas 70 . Antes.377= 0. Números uniformemente distribuídos entre 4. Números uniformemente distribuídos entre . devemos fazer: rand (‘seed’. aprenderemos como o MATLAB pode ser usado para gerar números aleatórios uniforme ou normalmente distribuídos. respectivamente.5 e 5.0 Números uniformemente distribuídos entre -1 e 1. Por exemplo. os limites inferior e superior (no caso.407= 0. devemos primeiro gerar os números entre 0 e 1. plotaremos um versão de f. Se tivermos mil valores e plotarmos o histograma. se quisermos gerar uma seqüência de 10 números aleatórios uniformemente distribuídos entre os valores 0 e 1 . para números aleatórios.5− 0. Logo em seguida.0 Números uniformemente distribuídos entre π e -π.1) Podemos converter um número r que está uniformemente distribuído entre 0 e 1 para um valor situado entre um intervalo qualquer.5− 0.p.d. 5 e –5).123 6   6  6 4  T − 45 49− 45  > P(D2 > 49) = P  = P' Z >  = 0. Cap. de um sinal qualquer.093 3   3  3 O comando hist pode ser usado para estimar a f. se quisermos gerar 10 números aleatórios uniformes entre –5 e 5.20 e – 10. r + a onde b e a são. Para convertê-los em valores entre –5 e 5 usamos: x = (10*SINAL) – 5 Exercícios Determine os comandos do MATLAB necessários para gerar 10 números aleatórios com as características específicas. Por exemplo. Números uniformemente distribuídos entre 0 e 10.p. usamos a equação: x = (b – a) .Curso de Matlab b) 49 horas 7  T − 42 49− 42  > P(D1> 49) = P  = P' Z >  = 0.0) rand (‘uniform’) rand (10.d. suponha que armazenamos os dez números aleatórios determinados anteriormente em um vetor coluna denominado SINAL.

25) Cap. 5 – Medidas Estatísticas 71 . e os plotarmos. Por exemplo. suponha que geramos mil números aleatórios entre 0 e 1. Se quisermos modificar estes valores para uma outra distribuição.p de um sinal qualquer.6475 5.d. usando as 25 barras: rand (‘uniform’) U_VALORES = rand (1000. e os armazenamos no vetor U_VALORES.0835 7.4972 4.3987 5.1) + 5 Os valores a serem impressos por este programa são: s= 6. 1) hist (U_VALORES.p. podemos usar um histograma para avaliar a f. estaremos plotando uma versão da f.Curso de Matlab O MATLAB também gera valores distribuídos normalmente cuja média é igual a zero e a variância.3734 6.5414 5.0150 7. multiplicamos os valores pelo desvio padrão da distribuição desejada e os adicionamos à média desta distribuição.r +b Os comando abaixo geram números normalmente distribuídos com média 5 e variância igual a 2: rand (‘seed’. para os números aleatórios. igual a 1. se r é um número qualquer com média 0 e variância 1.2327 Funções Densidade de Probabilidade: Histograma Conforme dito anteriormente.d.d. Se tivermos mil valores. Portanto. a equação a seguir irá gerar um novo número aleatório x com desvio padrão a e média b: x=a.8865 5. Podemos usar o comando hist para plotar a f.p.0) rand ( ‘normal’) s = sqrt(2)*rand (10.1062 5.

Histograma para números aleatórios normalmente distribuídos Cap. Os números aleatórios estão distribuídos entre 0 e 1 e a distribuição é relativamente alisada.10 . 25) O gráfico correspondente é mostrado a seguir. a distribuição atinge seu valor máximo onde a média é igual a zero. e a maioria dos valores está entre dois desvios padrões (-2 a 2). 5 – Medidas Estatísticas 72 . Figura 5.11 . hist (G_VALORES.1) ) e armazená-los em um vetor coluna denominado G_VALORES. Conforme esperávamos. Podemos plotar a função com os comandos: rand(‘normal’) G_VALORES = rand (1000.1).Curso de Matlab O gráfico é mostrado na figura abaixo. Figura 5.Histograma para números aleatórios uniformemente distribuídos Suponha agora que queiramos gerar mil números aleatórios distribuídos normalmente (cuja distribuição é N(0.

Também plote um histograma dos valores. As simulações de Monte Carlo usam números aleatórios para gerar valores que modelam os eventos. 1. σ = π/8. Plote o tempo e a velocidade e salve-os em um arquivo ASCII nomeado vento_vel.dat. Também. (Uma hora de dados é então representada por 361 valores. supõe-se que o avião tem 1% de chance de voar sob uma pequena tempestade .Curso de Matlab E x e r c í c i os Use o MATLAB para gerar mil valores com as características desejadas. há 0. Aplicação à Solução de Problemas: Simulador de Vôo As simulações em computadores são usadas para gerar situações que modelam ou imitam uma situação do mundo real. Se toda esta informação gerada pelo computador for sempre a mesma série de informação.5. Nas simulações mais sofisticadas. como um simulador de vôo o computador não somente responde à entrada do usuário mas também gera valores como temperaturas. Calcule a média e a variância de mil valores. Escreva um programa MATLAB para gerar um seqüência de números aleatórios para simular uma hora de dados de velocidade do vento.5 Números normalmente distribuídos com µ = -5.25. e σ = 0. você indica seu movimento e o computador então selecionará uma resposta apropriada. Outros jogos usam a computação gráfica para desenvolver uma interação tal como o uso do teclado ou do mouse para jogar. Cap. Algumas simulações computacionais são desenvolvidas para jogos como pôquer ou damas. velocidade do vento. o qual microrrajadas. usando 25 barras. A média e a variância são exclusivamente para uma região específica e período do ano e são como parâmetros de entrada. Números normalmente distribuídos com µ = 5 e Números normalmente distribuídos com µ = -5. 3. 5 – Medidas Estatísticas 73 . o qual permanece por um minuto e aumenta a velocidade do vento para 50 milhas por hora. e σ = 1. Além do mais.) De uma análise do padrão real de vento. e os locais de outras aeronaves. A duração do tempo que o avião está em uma pequena tempestade é três minutos. É importante que estejamos aleatoriamente à geração de dados. Estes valores devem ser semelhantes.25.01% de chances que o avião voará para um . Quando o plano está numa pequena tempestade. 2. 4. o qual é atualizado a cada 10 segundos.5 Números normalmente distribuídos com µ = π e σ2 = 0. a velocidade do vento aumenta em 10milhas por hora. então o valor do simulador seria grandemente reduzido. foi determinado que a velocidade do vento pode ser modelada como um número aleatório distribuído normalmente. Para jogar. e compare-as aos valores especificados. Os simuladores também simulam emergências que ocorrem durante o vôo de uma aeronave.

EXEMPLO MANUAL Esta simulação usa várias seqüências diferentes de números aleatórios. 5 – Medidas Estatísticas 74 . 2.0101. A saída é o gráfico e o arquivo de dados contendo os valores das velocidades do vento simuladas. Média Variância Início de Seqüência venvlc.0 e 0. 4.dat 3.01 e 0. DESCRIÇÃO ENTRADA/SAÍDA A figura abaixo. TESTANDO Cap. as quais são representadas pelo média e variância da velocidade do vento em tempo normal. A velocidade do vento é um número aleatório normalmente distribuído com média e variância particulares. As possibilidades de encontrar uma tempestade ou microrrajadas são dadas como valores percentuais e podem ser modelados como números uniformemente distribuídos. ENUNCIADO DO PROBLEMA Gerar uma hora de velocidade simulada do vento usando estatísticas desenvolvidas para área de vôo. a entrada para o programa é as estatísticas do tempo no plano de vôo.01.Curso de Matlab 1. e que ocorrerá um microrrajadas se o número aleatório uniforme estiver entre 0. Suporemos que ocorrerá uma tempestade se um número aleatório uniforme entre 0 e 1 tiver um valor entre 0. SOLUÇÃO MATLAB 5.

a energia é definida em termos do quadrados das amplitudes. Calcule a energia usando o valor médio quadrático e então calcule-o usando a média e a variância. ou 8. Como a amplitude pode ser positiva ou negativa. Cap. A SNR é definida em termos de energia de um sinal . para que os valores sejam sempre positivos. os valores devem ser semelhantes. a energia é uma medida da amplitude de um sinal. maior é a energia do sinal. De ruído pode ser especificado como uma relação sinal/ruído.^2) pode ser mostrado que a energia em um sinal é igual a soma dos quadrados da variância e média: energia = µ2 + σ2 No MATLAB.3 Relação Sinal/Ruído Quando a geração de sinais é usada em técnicas de testes de engenharia. A energia em um sinal x (representado por um vetor x) pode ser avaliada pela média quadrática do sinal: energia ≈ ∑x k =1 N 2 k N Observe que isto pode ser facilmente calculado usando a função MATLAb sum: Energia = sum (x. Assim.Curso de Matlab 5. Energia de um Sinal Intuitivamente. ou SNR. isto pode ser calculado com o comando a seguir: Energia = std(x) ^2 + mean (x) ^2. pode ser mostrado matematicamente que a energia do sinal é igual a metade do quadrado da amplitude da senóide. 5 – Medidas Estatísticas 75 . Quanto maiores forem os valores da amplitude. freqüentemente queremos gerar seqüências como uma senóide com ruído adicionado. Discutiremos energia de um sinal e então retornaremos a definição matemática de SNR. Se o sinal for uma senóide. a energia da senóide 4sen2πt é igual a 16/2. Exercícios Dê os comandos do MATLAB para gerar mil valores da seqüência indicada.

024 46 Como o ruído é especificado para ter média zero. e a energia do sinal é igual a 22/12 ou 1/3.0. 4.52) / 2 = 46 energia do ruído energia do ruído Assim. A energia da senóide é 9/2. Já que o ruído é uniforme e tem média zero. Assim.5 1/3 Para um sinal geral com amplitude A. Por exemplo. Logo. 3.27. Valores uniformes entre –2 e 4. Valores uniformes com média 0 e variância 1. 7. Valores normalmente com média 0 e variância 0.024 = (2a) 2/12 ou a = 0. 5. A SNR é igual a energia da senóide dividida pela energia do ruído. a energia do ruído é igual a variância. 2.5. Se tivermos uma senóide com uma amplitude 3 adicionada a um ruído uniforme entre –1 e 1. uma SNR de 1 especifica que a relação entre a energia do sinal e a energia do ruído é 1:1. SNR = energia do sinal _ = (1. Cálculo de SNR Uma relação sinal/ruído é a relação entre a energia em um sinal e a energia em um ruído. Cap. a SNR pode ser calculada usando os seguintes comandos MATLAB: SNR = ( (A^2) / 2 ) / ( (b – a)^2/12 ).5 e variância 0.5. e ruído uniforme entre a e b. a variância é igual a (2a)2/12 e 0.Curso de Matlab 1. A senóide deve Ter uma amplitude de 1.52) /2 = 0. para a energia do ruído.5 e variância 4. Valores normalmente com média –2.0. temos: Energia do ruído = (1. Para ilustrar com outro exemplo. e ser uma amostra de 100 Hz (cuja média é uma amostra de tempo de 1/100 segundos). a variância do ruído é 0. a SNR pode ser calculada como: SNR = 9 / 2 = 13. Valores uniformes entre 0 e 10. Valores uniformes com média –0. Contudo.0.0.5 e um ângulo de fase de 0. ele alcança entre a e -a.024. podemos calcular a SNR usando as medidas de energia de dois sinais. 6. 5 – Medidas Estatísticas 76 . Valores normalmente com média 0 e variância 2. suponha que queiramos gerar 201 pontos de um sinal que contenha uma senóide de 1Hz com ruído cuja média é 0 em uma SNR de 46.

… grid O gráfico é mostrado a seguir. s). … ylabel(‘[s(k)]’). de modo que período é 1 segundo.54*rand (1.27).… title(‘Senóide com ruído’).0. Uma boa avaliação da energia de uma sinal é a média quadrática do valor do sinal . o qual pode ser facilmente calculado usando o MATLAB. Isto corresponde ao fato que a freqüência é 1 Hz. Os comandos para gerar estes sinal são mostrados a seguir: % % Gerar e plotar senóide mais ruído % rand(‘seed’.5*sin(2*pi*t) + (0. plot (t. rand (‘uniform’). t = 0: 0. segundos’).201) – 0.Curso de Matlab Podemos gerar o sinal de ruído desejado e adicioná-lo à senóide para obter a SNR desejada. Observe que há dois períodos do sinal em dois segundos. s = 1. precisaremos avaliar a energia do sinal tal que possamos determinar a energia apropriada para o sinal de ruído. Cap.… xlabel ( ‘t.0). Podemos determinar a energia necessária para o ruído. Adicionando ruído a um sinal existente Suponha que queiramos adicionar um ruído a um sinal já coletado e armazenado em um arquivo de dados. 5 – Medidas Estatísticas 77 . Se quisermos adicionar ruídos que mantenham uma SNR especificada.01: 2.

6. 5 – Medidas Estatísticas 78 . então precisaríamos de um destes valores especificados em ordem para determinar o outro. 5. 4. 3. Ruído uniforme com SNR igual a 1. Podemos calcular a variância necessária e gerar o ruído e adicioná-lo ao sinal existente. Ë desejável para o ruído ter média zero. Ruído normal com SNR igual a 5. Ruído uniforme com SNR igual a 0.2. Exercícios Gerar e plotar um sinal composto de 100 pontos de uma amostra senoidal de 5 Hz a 50 Hz mais um ruído de média zero como especificado a seguir: 1. Cap. Ruído uniforme com SNR igual a 5. para isto supomos que não há outra informação considerável. 2. Ruído normal com SNR igual a 1. Ruído normal com SNR igual a 0.Curso de Matlab Sabemos que a energia é uma função de média e variância.2.

i). 6. Neste capítulo. B = i= j aibi Cap. 6 – Operações com Matrizes 79 . ao invés de lidarmos com os elementos individualmente.1) foi movido para a posição (1. Vamos primeiro considerar um conjunto de operações matemáticas aplicados à matrizes. De fato. Exemplo 1 Podemos notar que o elemento da posição (3.3).j) para as posições (j. nós apresentaremos um conjunto de operações e funções que podem ser aplicadas à matrizes como um todo. N Somatório de produtos = A . nós discutimos cálculos matemáticos e funções que poderiam ser aplicadas elemento a elemento presente nas matrizes. Nos capítulos anteriores. E depois vamos considerar um grupo de funções que ajudam na manipulação das matrizes. quando se acha a matriz transposta de uma matriz temos a troca de elementos das posições (i. Somatório de Produtos É a soma escalar de dois vetores do mesmo tamanho.1 • Operações com Matrizes Matrizes Transpostas A transposta de uma matriz é uma nova matriz onde as colunas são formadas pelas linhas da matriz original.Curso de MATLAB Capítulo 6 – Operações com Matrizes Uma matriz é um conveniente meio para representar dados experimentais. No MATLAB a matriz transposta é denotada por A'.

Quando A for um vetor coluna e B um vetor linha. Quando A for um vetor linha e B um vetor coluna. e B tem 3 linhas e 3 colunas.*B).*B). então o produto A.(-1) + (5). temos que: Somatório de produtos = sum (A' .B é (2).(5) = -2 Cap. 6 – Operações com Matrizes 80 . temos que: Somatório de produtos = sum (A . Exemplo 3 O primeiro elemento do produto C = A. (2) A .Curso de MATLAB Exemplo 2 A = [4 –1 3] e B = [-2 5 2] A . B = (-8) + (-5) + (6) A . então o número de colunas de A deve ser igual ao número de linhas de B. Como o somatório de produtos requer que os vetores tenham o mesmo número de elementos. temos que: Somatório de produtos = sum (A . Multiplicação de Matrizes A multiplicação de duas matrizes corresponde ao somatório de produtos das linhas i da primeira matriz e das colunas j da Segunda matriz.B terá 2 linhas e 3 colunas. B = (4) . B = -7 Comando sum Quando A e B forem ambos vetores linha ou ambos vetores coluna. Se A tem 2 linhas e 3 colunas. (5) + (3) .(-1) + (1).*B'). (-2) + (-1) .

6 – Operações com Matrizes 81 . Matriz Inversa Por definição o inverso de uma matriz quadrada A é a matriz A-1. C=A*B Matriz Power É uma matriz quando elevada a um fator. B = [1 0 2. para obtermos uma matriz inversa devemos fornecer a matriz original A e executar o comando inv(A).Curso de MATLAB Logo a matriz C será:  − 2 22 C=  − 8 10 − 5 − 7  Neste exemplo não se pode ter B.A e obtemos as matrizes: Temos que as matrizes A e B são inversas.0 3 –1]. Lembrando que A^4 equivale a A*A*A*A . ou seja. Se considerarmos duas matrizes A e B: Quando calculamos os produtos A. No MATLAB. Cap.B e B. A = B-1 e B = A-1. usa-se a operação A^2.A pois o número de colunas de B não é igual ao número de linhas de A.5 2 1]. Quando se tem uma matriz quadrada e se deseja calcular A*A.-1 4 –2. No MATLAB podem ser usados os seguintes comandos: A = [2 5 1.

a22 – a21 . 2. 6 – Operações com Matrizes 82 . 4. a12 No MATLAB. separar os genes mais importantes expostos no DNA. o comando utilizado para se achar o determinante de uma matriz é det(A). Essa ordem de aminoácidos é que auxilia a Engenharia Genética na identificação do tipo de gene da proteína. AB DB BC' B-1 B (AC') -1 (AC') -1(AC') Determinante Seja a matriz O determinante de A = |A| é definido pela expressão: a11 . Cap. 6. 3. 5.Curso de MATLAB Exercícios para Praticar! Sejam as matrizes: Calcule: 1. e assim. Enzimas são usadas para dissolver as ligações de genes vizinhos. A seqüência pode determinar a ordem de aminoácidos que caracteriza a cadeia de proteínas. Aplicação à Solução de Problema: Peso Molecular de Proteínas A seqüência de proteínas é a sofisticada parte do equipamento que executa a função chave em engenharia genética.

Cap. cada linha de dados do arquivo corresponde a uma proteína.0 1 0 0 0 1 1 0 0 3 0 0 0 0 0 0 0 1 0 0]. SOLUÇÃO NO MATLAB protein = [0 0 0 1 0 2 0 0 0 0 0 1 1 0 0 1 0 0 0 0. Por esta razão. A saída do programa são os seus respectivos pesos moleculares. 1. 3. pesomol = protein * pm’. 6 – Operações com Matrizes 83 . contendo os vinte inteiros correspondentes aos vinte aminoácidos em ordem alfabética como na tabela. a linha contém os seguintes valores gerados pela proteína: Lys Glu Met Asp Ser Glu 00010200000110010000 O nome do arquivo será chamado protein. As moléculas de proteínas tem centenas de aminoácidos articulados em uma ordem específica. O primeiro passo está em arquivar os dados que conterão os números e tipos de moléculas de aminoácidos em cada molécula de proteína. Assumindo que os dados do arquivo são gerados pelas seqüências de aminoácidos. pm = [89 175 132 132 121 146 146 75 156 131 131 174 149 165 116 105 119 203 181 117]. PROBLEMA EM SI Calcular o peso molecular de um grupo de moléculas de proteínas. DESCRIÇÃO DA ENTRADA E DA SAÍDA A figura abaixo contém um diagrama mostrando que a entrada é um arquivo contendo os aminoácidos identificados em um grupo de moléculas de proteínas.Curso de MATLAB Existem vinte tipos diferentes de aminoácidos. portanto. 2. A seqüência de aminoácidos de uma molécula de proteína tem sido identificada e computada pelo peso molecular dos aminoácidos.dat.

6 – Operações com Matrizes 84 . Exemplo 4 B = rot90(A) C = rot90(A. Exemplo 5 Seja a matriz A: Cap.2 Manipulações com Matrizes Comando rot90 Uma matriz A pode sofrer uma rotação de 90° usando-se o comando rot90. Comando flipud Esse comando troca a parte de cima com a parte de baixo de uma matriz.Curso de MATLAB 6.2) Comando fliplr Esse comando troca o lado esquerdo com o direito de uma matriz.

3 -2 10 0]. Desta forma. temos: B = diag(A) Cap. Exemplo 6 Seja a matriz A: No MATLAB: A = [2 5 6 -1.1.2). B = reshape(A.Curso de MATLAB B = fliplr(A) C = flipud(B) Comando reshape Esse comando reescreve a matriz com diferente número de linhas e colunas.4. Comando diag Esse comando extrai os elementos da diagonal principal da matriz A e os coloca em um vetor coluna. C = reshape(A.8). 6 – Operações com Matrizes 85 .

Curso de MATLAB Se o comando diag for aplicado a um vetor ao invés de uma matriz com linhas e colunas. Exemplo 7 V = [1 2 3]. 6 – Operações com Matrizes 86 . 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. este comando vai gerar uma matriz quadrada cuja diagonal principal será o vetor dado.

o 7 representa o preto e os outros valores representam as devidas tonalidades de cinza. as tonalidades de cinza. Assumimos também que cada valor da matriz se encontra de 0 a 7. porém essa função mantém a matriz da diagonal principal para baixo. Cada valor de imagem é um código que representa uma determinada intensidade de luz. Exemplo 9 B = tril(A) Aplicação à Solução de Problema: Alinhamento de Imagem Cada ponto de uma imagem é definido como elemento de figura. Por exemplo. O valor 0 representa o branco. enquanto que uma baixa resolução de imagem é representada por uma matriz com poucos. A amostra que estamos tratando é definida pela matriz abaixo: Cap. No exemplo seguinte assumimos que a imagem é representada por uma matriz com 5 linhas e 6 colunas. desta forma. ou pode ser codificada para representar a variação de cor cinza. ou um total de mais de milhões de números. representando. uma boa resolução de imagem pode ser representada por uma matriz com 1024 linhas e 1024 colunas. Uma boa resolução de imagem é representada por uma matriz com muitos elementos. 6 – Operações com Matrizes 87 . A intensidade de luz pode ser codificada para representar a cor.Curso de MATLAB Comando tril É similar ao comando triu.

Curso de MATLAB Vamos supor que tenhamos duas imagens de um mesmo objeto. e então comparar as duas imagens. Para determinar o alinhamento correto nós podemos tomar uma imagem como constante.image2)). manipular operações. Só não sabemos se as duas imagens estão alinhadas de um mesmo modo. Para determinar se as duas imagens possuem os mesmos valores(ou estão alinhadas) observando as diferenças entre os elementos correspondentes nas duas matrizes. As imagens estarão 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-horário (ou de 90 graus no sentido horário). 6 – Operações com Matrizes 88 . para a outra imagem. de mesma resolução e de um mesmo código de escala de cinza. Cap. como rotacionar. Isto pode ser feito utilizando os seguintes comandos no MATLAB: dif = sum (sum (image1 .

dif = sum (sum (C)). 1. Se tivéssemos valores absolutos isso não ocorreria. Agora as duas imagens estarão alinhadas se a distância for zero.^2. 6 – Operações com Matrizes 89 . Podemos fazer isso no MATLAB através dos seguintes comandos: distância = sum (sum (image1 .Curso de MATLAB Infelizmente essa soma pode ser igual a zero mesmo que as matrizes não sejam as mesmas. se após a diferença elevarmos a matriz ao quadrado só teríamos valores positivos antes da soma. DESCRIÇÃO DA ENTRADA E DA SAÍDA A figura abaixo mostra um diagrama ilustrando que as duas imagens são lidas de dois arquivos e a saída é o melhor alinhamento entre as duas imagens. 2. Cap. O PROBLEMA EM SI Determinar a melhor rotação de 90° no alinhamento de duas imagens. Isto acontece porque os valores se cancelam.image2) . Considerando o par de matrizes: dif = sum (sum (A -B)). Logo.

0f graus \ n’.a) .1)* 90) fprintf(‘(anti-horário)\n’) Cap. UM EXEMPLO PARA AUXILIAR Supor as duas matrizes: Se rotacionarmos a matriz B de 0°. end [minval. acharemos os valores 19. e o alinhamento de 180° é o melhor alinhamento usando a rotação de 90° no sentido anti-horário 5. distance( k + 1 ) = sum(sum(imagem1 . 1 e 13 respectivamente.dat load imagem2. Entretanto a mínima distância é 1. 6 – Operações com Matrizes 90 .Curso de MATLAB 4.k).^2)). 180° e 270° no sentido anti-horário temos respectivamente: Se calcularmos a distância (ou o somatório das diferenças entre dois elementos) C e entre essas quatros versões de D rotacionadas.dat for k = 0:3 a = rot90(imagem2.minloc] = min(distance). 90°. fprintf(‘Melhor Alinhamento da Imagem de %3. 7. SOLUÇÃO NO MATLAB load imagem1. (minloc .

0). 7. Coordenadas Retangulares Os pontos retangulares identificam os pontos no sistema de coordenadas cartesianas com suas posições ao longo dos eixos horizontal e vertical como na figura 7. text. ou os valores de x e y podem ser retirados de experiência. Os valores de y podem ser calculados usando as funções de x.Curso de MATLAB Capítulo 7 – Gráficos Engenheiros usam gráficos para analisar e resolver problemas e situações. y. y. Por isso é muito importante aprendermos a interpretar e gerar gráficos e suas formas. Legenda Os comandos para se adicionar títulos. 7 – Gráficos 91 . Text(x. Neste capítulo vamos aprender como o MATLAB pode nos ajudar a gerar gráficos.1). Se x e y são vetores o texto é escrito a cada ponto. Text(x. sc) 0 Este comando escreve um texto na tela do gráfico no ponto especificado pelas coordenadas (x. Geralmente assumimos que valores de x representam variáveis independentes e que valores de y representam variáveis dependentes. linhas de grade e inserir textos estão relacionados a seguir: Title(text) 0Este comando escreve títulos no topo do gráfico plotado. y) usando os eixos dos gráficos. Xlabel(text) 0Este comando escreve um texto abaixo do eixo x do gráfico plotado. Ylabel(text) 0 Este comando escreve um texto ao lado do eixo y do gráfico plotado. y).y. gtext(text) 0Este comando escreve um texto nas posições indicadas na tela do gráfico pelo mouse. assumindo que a esquina esquerda inferior é (0.1 Gráficos X – Y É muito comum engenheiros e cientistas usarem gráficos x . text) 0Este comando escreve um texto na tela do gráfico no ponto específico das coordenadas (x. Os dados que nós plotamos são usualmente lidos por um arquivo ou calculados em nossos programas.1. e a esquina direita superior é (1. grid 0 Este comando acrescenta grades no gráfico plotado. Cap.

Por exemplo se medirmos a intensidade luminosa ao redor de uma fonte de luz. A magnitude é um valor positivo que representa a distância do eixo que fornece o angulo até o ponto. Cap. y) 0Este comando gera gráficos usando escala linear para x e escala logarítmica para y.r). polar(theta.r) 0Este comando generaliza gráficos polares com ângulo θ (em radiano) e magnitude r correspondente. Semilogy(x. onde x representa a variável independente e y representa a variável dependente. theta = 0:2*pi / 100 : 2*pi. Esses gráficos são chamados de lineares. 7 – Gráficos 92 . Coordenadas polares Um ponto é representado em coordenadas polares por um angulo θ e uma magnitude r.: É importante lembrar que logaritmo de valores negativos e zero não existem. aparecera no MATLAB uma mensagem informando que esses valores serão omitidos do gráfico. y) 0Este comando gera gráficos com escala logarítmica para ambos os eixos x e y. y) 0Este comando gera gráfico usando escala linear para y e escala logarítmica para x. Semilogx(x. As vezes temos que usar uma escala logarítmica em um ou ambos os eixos. logo se tentarmos plotar um gráfico semilog ou log com valores negativos ou zeros. r = theta / (2*pi). O valor de θ é geralmente dado entre 0 e 2π.Curso de MATLAB • Comandos de plotar Geralmente assumimos que y e x são eixos divididos com o mesmo intervalo de espaço. y) 0Este comando gera gráficos lineares com valores de x e y. O comando no MATLAB para gerar gráficos polares é: polar(theta. 7. Exemplo: Os comando para a construção do gráfico da figura 7. Os comandos para plotar gráficos lineares e logarítmico são: plot(x. podemos representar a informação com um ângulo fixando eixos e magnitude representando intensidade.2. Loglog(x.2 Gráficos Polares Gráficos polares são úteis quando valores são representados por ângulo e grandeza (magnitude). Obs.

Exercícios 1) Converter de coordenada retangular para coordenada polar: a) (3.5). a retangular / polar _________________________ r = √ x² + y² . As equações abaixo relacionam os sistemas polar e retangular: a polar / retangular _________________________ x = r cos θ .5. b) (2. 7 – Gráficos 93 .3. θ =atan (y/x). 0. 1). 1). Cap. polar / retangular Às vezes devido a praticidade é interessante transformarmos coordenadas de um sistema para outro.Curso de MATLAB Transformação retangular / polar . y = r sin θ . -2). b) (0. 2) Converter de coordenada polar para coordenada retangular: a) (π.

3 Opções a Gráficos múltiplos => Para plotar curvas múltiplas no mesmo gráfico deve se usar vários argumentos no comando plotar como a seguir: plot(x.y) 0Este comando gera um gráfico de degraus com os elementos do vetor y. y.3 mostra um gráfico de barra.Curso de MATLAB Gráficos de barras e degraus Os gráficos são similares. porém as linhas verticais que marcam o eixo x nos gráficos de barras são omitidas nos gráficos de degraus. Comandos: bar(x. contém o mesmo espaço entre os valores. y) 0Este comando gera gráficos de barras com elementos do vetor y localizados no vetor x. w. stairs(x. stairs(y) 0Este comando gera um gráfico de degraus com os elementos do vetor y localizados no vetor x. Cap. z). 7. 7 – Gráficos 94 . Exemplo: a figura 7. contendo o mesmo espaço entre os valores.

ymax]. x. `x`) Podemos também escolher as cores que serão usadas: Cor Vermelho verde azul Branco Invisível Indicadores r g b w i O comando seguinte representa linha sólida azul para os vetores x. y. y. porém se você quiser rearrumar a escala de seus eixos você pode usar o comando axis. z são plotadas no mesmo gráfico. x.[xmin. O MATLAB seleciona linhas diferentes para as curvas plotadas. A seguir as diferentes opções de linhas e marcações: Tipo de linha Solid Dashed Dotted Dashdot Indicador -: -.xmax. y) nos mostra uma linha plotada representando os vetores y e x. `b`. y. A Segunda execução do comando retorna o sistema a escala automática. Também podemos selecionar plotar pontos ao invés de linhas.Este comando congela a escala de eixos para uma subseqüência de gráficos. y. axis(v). + * ° x O comando a seguir representa linha sólida com tipo de ponto x-mark plot(x. • Estilo de linha e marcação O comando plot(x. `xr`).v é um vetor de quatro elementos que contém a escala de valores. 7 – Gráficos 95 . y e a curva correspondente a w. Cap.Curso de MATLAB Quando se executa este comando a curva correspondente a x. mas podemos selecionar outros tipos de linha. Tipo de ponto point plus star Circle x-mark Indicador .ymin. • Escala A escala dos eixos no matlab é automática. Existe várias formas de se usar o comando axis: axis . y e plotando pontos vermelhos xmark: plot(x.

4 Gráficos 3D A rede de superfície pode ser gerada por um conjunto de valores em uma matriz. O comando meshgrid tem os argumentos do vetor x e y. Cap. c) Gerar o gráfico desta função com escala logarítmica y. Cada ponta na matriz representa o valor da superfície que corresponde ao ponto na tela. 7 – Gráficos 96 .5. clc __________________ Limpa a janela de comando.x) Esse comando significa que teremos 2 gráficos sendo o primeiro (plot(x. O comando no MATLAB para plotar gráficos 3D é mesh(z).^2 : a) Gerar o gráfico linear desta função. e) Comparar as vantagens e desvantagens dos gráficos.y) Subplot(212).y)) colocado no canto superior esquerdo da tela e o segundo colocado no canto superior direito da tela. plot(y. primeiramente calculamos o conjunto dos valores de x e y que representam as variáveis independentes e depois calculamos os valores de z que representa os valores da superfície. ou seja transforma o domínio especificado pelos vetores x e y em vetores que podem ser usados em cálculos de funções de 2 variáveis e construção de gráfico 3D. pôs pode ser difícil a comparação quando as curvas possuem diferentes eixos e escalas. Exercício Gerar 12 pontos de uma função para os valores de x começando de x=0 e incrementando de 0. plot(x. • Subplot O comando subplot é usado quando se quer visualizar dois ou mais gráficos ao mesmo tempo. Subplot(211). y = 5x.Curso de MATLAB Esses comandos tem um uso especial quando se quer comparar curvas de diferentes gráficos. d) Gerar o gráfico loglog desta função. clg __________________ Limpa a janela do gráfico. • Controle de tela gcf __________________ Apresenta uma janela com gráfico. b) Gerar o gráfico desta função com escala logarítmica x. Para gerar um arquivo que representa uma superfície 3D. Solução: 7.

z=sqrt(abs(1 .5).y² 1 = |x² + y² + z²| Solução: [xgrid. ( Figura 7.^2)).ygrid]=meshgrid(-0. Exemplo: 1) Rotação horizontal ( figura 7. figura 7.y)= z = 1 .^2 .x².5 .5.5:0.Gráfico 3D Quando geramos redes de superfície 3D podemos querer escolher a posição de visão que será definida com os termos azimuth ( rotação horizontal ) e vertical elevation que especifica os graus (rotação vertical ).5 < x < 0.5 . mesh(z). 7 – Gráficos 97 .Curso de MATLAB Exemplo: Gerar o gráfico 3D da função -0.xgrid.1:0.5 ): Comando no MATLAB : f(x .1:0.5:0.y)= z = 1 .x².4 .-0.y² 1 = |x² + y² + z²| Cap.4) f(x .ygrid. -0.5 < y < 0.

5.6): Comando no MATLAB f(x .[-37.Rotação horizontal 2) Rotação vertical (figura 7. z=sqrt(abs(1 . mesh(z.-0.1:0.^2 . 7 – Gráficos 98 .xgrid.ygrid.^2)).5:0.y)= z = 1 .5.5).y² 1 = |x² + y² + z²| Solução: [xgrid.-0.5).5 .5.[-37.^2 .Curso de MATLAB Solução: [xgrid.ygrid]=meshgrid(-0.ygrid.^2)).1:0.5:0. mesh(z. z=sqrt(abs)1 .x².-30]). Cap.1:0. Figura 7.ygrid]=meshgrid(-0.xgrid.5:0.0]).1:0.5:0.5.

Curso de MATLAB

Figura 7.6 - Rotação vertical Exercício Gerar o gráfico 3D da função z=f(x, y)= x*exp(-x^2-y^2) para -2 < x < 2, -2 < y < 2 : Solução:

Aplicação a solução de problemas: Trajetória de um Satélite Satélites são usados para investigar diferentes níveis de atmosfera para obter informações semelhantes as que são usadas para monitorar os níveis de ozônio na atmosfera. Para aumentar a bagagem científica de coleção de dados da parte mais elevada da atmosfera, os satélites auxiliam sistemas de telemetria para transmissão de informação. Nessa seção nós assumimos que temos um arquivo contendo altitude, velocidade e aceleração, para um conjunto de dados relativos a uma trajetória de dois estágios do simulador.

Cap. 7 – Gráficos

99

Curso de MATLAB

1. PROBLEMA EM SI Queremos gerar gráficos desses arquivos (altitude, velocidade, aceleração) para determinar se a performance dos dois estágios são similares. 2. DESCRIÇÃO ENTRADA / SAÍDA:

altitude

Satélite.dat

velocidade

acelereção

3. SOLUÇÃO MATLAB

Cap. 7 – Gráficos

100

Curso de MATLAB

Capítulo 8 - Solução a Sistemas de Equações Lineares
8.1 Interpretação gráfica

A interpretação gráfica é necessária para solução a sistemas de equações lineares ocorrente freqüentemente em problemas de engenharia. A vários métodos existentes para solucionar sistemas de equações, mas eles envolvem operações demoradas com grande oportunidade de erro. Entretanto temos que entender o processo para que possamos corrigir e interpretar os resultados do computador. Uma equação linear com 2 variáveis, 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 equações 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 são vistas na figura 8.1.

(a) - Retas que se interceptam.

Cap. 8 – Soluções a Sistemas de Equações Lineares

101

Curso de MATLAB

(b) - Retas paralelas

(c) - Retas iguais - fig8.1

Cap. 8 – Soluções a Sistemas de Equações Lineares

102

8 – Soluções a Sistemas de Equações Lineares 103 . Se temos duas equações com três variáveis. Se a equação linear contém 3 variáveis x. z então ela representa um plano em espaço tridimensional. Equações que representam a mesma reta são equações com mesmo coeficiente angular e mesmo coeficiente linear. Vamos discutir dois métodos para solução de sistemas de equação usando MATLAB. 8.Curso de MATLAB Equações que representam duas retas que se interceptam podem ser facilmente identificadas porque possuem diferentes coeficientes angulares. y = -x +3. Exemplo: y = 2x -3 . y.3 .3 . Exemplo: y = 2x . Em muitos sistemas de engenharia estamos interessados em determinar se existe uma solução comum para sistemas de equações.9. elas podem representar dois planos que se interceptam em uma linha. Essas idéias podem ser estendidas para mais de três variáveis porém se torna difícil a visualização desta situação.2 Solução usando operação com matrizes Considerando o sistema seguinte de três equações com três variáveis desconhecidas. 3x -x x +2y +3y -y -z +2z -z = = = 10 5 -1 Podemos rescrever os sistemas de equações usando as seguintes matrizes: A= 3 -1 1 2 3 -1 -1 2 -1 x= x y z B = 10 5 -1 Cap. Exemplo: y = 2x . 3y = 6x . Se a solução comum existe então podemos determina-la. Equações que representam duas retas paralelas possuem o mesmo coeficiente angular e coeficientes lineares diferentes. ou podem representar dois planos paralelos ou ainda podem representar o mesmo plano. y = 2x + 1.

Suponha que multiplicamos ambos os lados da equação da matriz por A^-1 então temos: A^-1*A*x =A^-1*B Mas A^-1*A é igual a matriz identidade I. A solução da equação da matriz Ax = B pode ser calculada usando divisão A\B. a) -2x + y = -3 x + y = 3 Cap. 1. então temos: I*x=A^-1*B ou x = A^-1*B. Para confirmar se os valores de x estão corretos podemos multiplicar A*x e veremos que o resultado será B. 5. -1]. -1. No MATLAB podemos calcular essa expressão usando o comando: X = inv(A)*B. O vetor x contém os seguintes valores -2. B são matrizes definidas a seguir: A= 3 -1 1 2 3 -1 -1 2 -1 x= x y z B= 10 5 -1 Então A*x = B. Matriz inversa O sistema de equações pode ser resolvido usando matriz inversa. B = [10. Por exemplo assumimos que A. o sistemas de equações pode ser escrito na forma: Ax = B Divisão de matrizes No MATLAB.Curso de MATLAB Usando multiplicação de matrizes. -1. -1. Exercícios 1) Resolver os sistemas de equações com os métodos acima e se possível plotar os gráficos. um sistema de equações simultânea pode ser resolvido usando divisão de matrizes. -1]. -6. 3. x =A \ B. 8 – Soluções a Sistemas de Equações Lineares 104 . x. 2. Exemplo: Ax = B A = [3. 2. 5.

R5. R3.Curso de MATLAB b) -2x + y = -3 -2x + y = 1 Aplicação a solução de problemas: Análise de circuito elétrico A análise de circuito elétrico freqüentemente envolve o encontro de soluções de conjunto de equações. A figura 8. R2.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 três correntes do circuito da figura 8. 8 – Soluções a Sistemas de Equações Lineares 105 . V1 e V2. Essas equações são usadas para descrever as correntes que entram e que saem dos nós.2 nos mostra um circuito com duas fontes de voltagem.2 .2 considerando os valores da figura para R1. Entrada / Saída: R1 R2 R3 R4 R5 i1 i2 V1 V2 i3 Cap. ou a voltagem em cada malha. As três equações que descrevem a voltagem ao redor dos três laços são: Figura 8. R4.

Nesta seção vamos apresentar dois tipos de interpolação.Ajuste de Curvas e Interpolação Em diversas áreas do conhecimento. Há duas alternativas para resolver este problema. 9 – Ajuste de Curvas e Interpolação 106 . mas que não necessariamente passe por quaisquer dos pontos.1 Interpolação A interpolação é definida como sendo uma forma de estimar os valores de uma função entre aqueles dados por algum conjunto de pontos de dados. que considera que os valores intermediários caem em uma linha reta entre os pontos definidos. A interpolação linear. o outro método é chamado de ajuste de curvas ou regressão. Na interpolação.Curso de MATLAB Capítulo 9 . para uma estimativa mais apropriada do comportamento da função. onde esta suposição é a de que um polinômio de terceira ordem. 9. Por exemplo isto ocorre quando os pontos de dados resultam de medições experimentais ou de procedimentos computacionais demorados. Cap. E a interpolação spline. isto é. parte-se do pressuposto de que os dados estejam corretos e procura-se alguma maneira de descrever o que acontece entre os pontos dados. Outro problema de engenharia é quando não é necessário que a função vá diretamente para todos os pontos dados e sim. que tem como objetivo achar alguma curva suave que melhor se ajuste aos dados. a interpolação linear se torna mais precisa. Neste método se torna claro que. A interpolação é uma ferramenta valiosa quando não se pode calcular rapidamente a função nos pontos intermediários desejados. um polinômio cúbico seja usado para modelar cada segmento entre pontos consecutivos e que a inclinação de cada polinômio cúbico se ajuste nos pontos de dados. com freqüência se torna necessário descrever os dados obtidos experimentalmente oriundos de um experimento ou fenômeno físico. que considera que alguma curva suave se ajusta aos pontos. Podemos ainda usar estes pontos para estimar valores da função que não estejam dentre os iniciais. Essas informações podem ser tomadas como coordenadas de pontos que definem uma certa função analítica f(x). à medida em que se têm mais pontos de dados e a distância entre eles diminui.

Comando table1 Este comando proporciona a interpolação linear em uma dimensão usando para isto uma tabela contendo as informações a serem trabalhadas. caso contrário surgirá uma mensagem de erro! Cap. que podemos estimar seu comportamento linearmente. entre os quais estará o nosso ponto a ser interpolado. O comando então acha o valor da função no ponto escolhido. É importante notar que na hora de alocar os valores na tabela. eles devem estar ordenados crescentemente ou decrescentemente. Então poderemos assim determinar o comportamento da função em qualquer ponto deste intervalo por meio de uma simples semelhança de triângulos. O segundo se refere ao valor de x para o qual queremos interpolar o valor da função.a ( f(c) . ou seja através de uma reta entre esses pontos. O primeiro argumento deste comando se refere à tabela contendo as informações. onde a equação geral é: f(b)= f(a) + b . Supondo que tenhamos apenas duas coordenadas de uma função qualquer e. O comando irá até a primeira coluna da tabela e achar os dois pontos consecutivos. 9 – Ajuste de Curvas e Interpolação 107 .f(a) ) c-a A interpolação linear é possível no MATLAB através do uso dos comandos table1 e table2.Curso de MATLAB Interpolação linear Uma das técnicas mais usadas para estimar o comportamento de uma determinada função entre dois pontos dados é a interpolação linear. e o valor a ser interpolado deverá estar entre o primeiro e último valores da primeira coluna da tabela.

s 0 1 2 3 4 5 Temp.2.1) = [0.1. y2 = table1 (dado1.20.3. Podemos usar o comando table1 para interpolar a temperatura correspondente a um determinado tempo no intervalo de 0 a 5 segundos: y1 = table1 (dado1.4.6).68. 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 informações numa matriz.77. dado2(:. F 0 20 60 68 77 110 Para alocarmos estas informações devemos usar uma matriz.2) = [0.. Os valores correspondentes serão y1 = 64.8 e y2 = 106. 9 – Ajuste de Curvas e Interpolação 108 . Tempo.9). onde o tempo será preenchido na primeira coluna através dos seguintes comandos: dado1(:.5] ’. 4. 2.Curso de MATLAB Exemplo 1 Supondo que queiramos determinar o comportamento térmico da cabeça de um cilindro a ser implementado num carro.110] ’. com as informações do tempo na primeira coluna: Cap. Supondo também que os valores experimentais referentes ao Tempo e a Temperatura sejam.60. Supondo agora que medimos a temperatura em três pontos do cilindro: Tempo.7.

25. Então.2) = [0.67.62.6. dado2(:.93.77.2.0 e 90. e em qualquer velocidade entre 2000 e 6000 rpm.4) = [0.20.1. Podemos agora guardar estas informações numa matriz dado3.6). 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 cabeça do cilindro em qualquer tempo entre 0 e 5 segundos. 65.110] ’. usamos os seguinte comando: temps = table1 (dado2.1) = [ 0.91.4.3. Onde temps será um vetor contendo os três valores da temperatura: 64.5] ’.82. se iniciarmos o processo e incrementarmos uma velocidade 2000 rpm em 5 segundos e registrarmos os valores de temperatura.96]’. Da mesma forma podemos continuar registrando os valores de temperaturas para os vários valores de velocidade: Tempo. o que seria bem mais complicado. podemos interpolar a função em questão. dado2(:.3) = [0. É 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.6s. Supomos agora que iniciamos um determinado processo incrementando uma velocidade constante dada em rotações por minuto. dado2(:. e então usar o comando table2 para calcular esta informação para nós: Cap. Comando table2 Esse comando possibilita a interpolação bidimensional usando valores da primeira coluna e da primeira linha da tabela.8.90. Ao invés de calcularmos.Curso de MATLAB dado2(:. 2. Para determinar valores das temperaturas nestes três pontos no tempo de t = 2. enquanto medimos a temperatura em um ponto da cabeça do cilindro.103]’.60. 9 – Ajuste de Curvas e Interpolação 109 .52.68.

:) = [0. 9 – Ajuste de Curvas e Interpolação 110 . dado3(3.3.240].6000].0.349.20.77.1. que é calculado para fornecer uma curva suave entre os pontos ao invés de ligá-los simplesmente. dado3(5.:) = [4.:) = [1.3. temp = table2(dado3. dado3(7.327]. dado3(1.310.176.y.503.68.285.68 F .240.2.0.3.:) = [3.9]).180.5].510.6 segundos. temp1 = spline(x. Lembrando que novamente os valores de x devem ser ordenados ou crescentemente ou decrescentemente.3. podemos usar os seguintes comandos: x = [0.77. Comando spline É o comando que realiza no MATLAB uma spline cúbica.68.2.110].220.y.:) = [0.[2.620].:) = [5.4.428].190.5000. dado3(6. • Spline Uma spline cúbica é uma curva suave construída passando através do conjunto de pontos.60.0].405.0.2000. Se quisermos usar estes processo para calcularmos a temperatura em diferentes momentos podemos usar os seguintes comandos: temp2 = spline(x. no exemplo anterior nós preenchemos as colunas.0. O primeiro argumento do comando spline é o x. dado3(2.450.6) O valor de temp1 será 67.623.3800) A resposta será mostrada em temp = 336.60.4000.110.4.1.3000. A curva entre cada par de pontos é determinada por um polinômio do terceiro grau. temp2 = [67. y = [0. caso contrário surgirá uma mensagem de erro! Exemplo 2 Supondo que queiramos usar a spline cúbica para calcular a temperatura na cabeça do cilindro no tempo t = 2. o segundo é o y e o terceiro contém o valor do(s) ponto(s) aonde se deseja o valor da função.:) = [2.105.380.6.20. dado3(4.110.Curso de MATLAB Note que agora nós preenchemos as linhas com as informações da tabela.785].2] Cap.

120]).0 Temp.´o’).20.60.4. grid.77.0 1.newy. plot (x.2. enquanto que o gráfico de newx e newy representa a spline definida por interpolação cúbica. Gerar um gráfico que compare os dois tipos de interpolação já vistos. F ’).110].0 3.2 a.s 0. o gráfico de x e y percorrem as coordenadas por meio de retas.-20.4 92.s ’).5 3.9 110. Tempo.3.5 109.0 0.Curso de MATLAB Se quisermos ainda plotar uma curva spline abrangendo um outro intervalo de valores.newx).1.5 4.x.5 78.2 110.y.y. Exercícios para Praticar! Supondo que nossa tabela de valores seja.6 111. xlabel(‘ Tempo. ylabel(‘ Graus. Note que na interpolação linear.newx. newx = 0: 0. y = [0.1 :5.0 2.5].5 2.5 5. podemos gerar um vetor x como o terceiro argumento do comando spline.6. axis([-1.5 109.3 110.0 4. Exemplo 3 x = [0.y.5 1.1 86.68. 9 – Ajuste de Curvas e Interpolação 111 .3 110. newy = spline(x. title (‘ Interpolação Spline ’). F 72. Cap.

Então podemos utilizar a interpolação para definir uma curva suave. c. y(que serão as coordenadas relativas a posição inicial).Curso de MATLAB b.1.2.25. Cap.1.2. posição intermediária.48] . e uma terceira coordenada dizendo o código da respectiva posição.48] .36.3.4. E. ao pegar ou soltar um objeto.36. O caminho percorrido pelo braço será definido através de coordenadas de pontos por onde o braço irá se mover. que se utilizam de um avançado sistema de controle para guiar um braço robótico para a posição desejada. Achar os valores da temperatura correspondentes aos seguintes valores de tempo t = [0. Achar os valores da temperatura correspondentes aos seguintes valores de tempo t = [0. Um dos anseios de um sistema de controle é que o caminho percorrido pelo braço ao se mover de um local para o outro. regida por estas coordenadas.4. evitando assim possíveis ‘trancos’ durante o percurso. Neste problema nós assumimos que pontos nos quais o braço irá passar precisarão estar na ordem para mover o braço na trajetória desejada que será: posição inicial. Uma parte importante no desenvolvimento do algoritmo ou da solução deste problema está na consideração de situações especiais.25. 9 – Ajuste de Curvas e Interpolação 112 . de acordo com a tabela abaixo: Código 0 1 2 3 Posição Inicial Intermediária Para pegar o objeto Para deixar o objeto Queremos então utilizar uma spline para visualizarmos o comportamento do braço robótico.3. posição para colocar o objeto no local desejado e finalmente posição inicial. Método para a resolução do problema 1. Aplicação à Solução de Problemas : Braço Robótico Assim como este sistema de manipulação existem vários outros usados em vários tipos de robôs. usando a spline. para mostrar o comportamento desse braço ao longo de uma trajetória. seja feito regularmente. consideraremos também que cada ponto conterá três coordenadas: x. usando a interpolação linear. PROBLEMA EM SI Desenhar uma curva suave utilizando a interpolação por spline que pode ser usada para guiar um braço robótico para uma determinada trajetória. posição para pegar o objeto.

Cap.60. Embora essa reta seja a melhor aproximação possível. a função mais aproximada do comportamento dos pontos. ou seja. Se tentarmos traçar uma única reta entre esses pontos. pode acontecer da reta não passar efetivamente por nenhum ponto.1. somente um par destes pontos irão fazer parte da reta.4. que é calculada através do somatório dos mínimos quadrados das distâncias entre a reta e os pontos. 3.Curso de MATLAB 2. y = [0. Vamos partir primeiro para a discussão do ajuste da reta para um conjunto de pontos e depois para o ajuste do polinômio através do conjunto de pontos. 9 – Ajuste de Curvas e Interpolação 113 . Regressão linear É o processo que determina a equação linear.3.68.20.5]. O método dos mínimos quadrados poderá ser usado neste caso para achar uma única reta que mais se aproxime de todos os pontos. Como exemplo vamos ainda considerar aqueles valores de temperaturas do cilindro: x = [0.2.6.2 Ajuste de curvas pelo método dos mínimos quadrados Supondo que tenhamos um conjunto de pontos originados de um determinado experimento e que queiramos plotar o seu gráfico.110].77. axis([-1. SOLUÇÃO NO MATLAB 9.-20. DESCRIÇÃO DA ENTRADA E DA SAÍDA A entrada é constituída de um arquivo contendo as coordenadas x e y dos pontos pelos quais o braço robótico deverá passar. Note que este método é muito diferente da interpolação porque esta passará por todos os pontos.120]). A saída do programa será a curva correspondente ao comportamento do robô ao percorrer estes pontos.

Curso de MATLAB Se simplesmente plotarmos o gráfico através do comando: plot(x. ylabel(‘Y’).y.120]). 9 – Ajuste de Curvas e Interpolação 114 .110]. Para isto devemos escrever a equação geral da reta : y = mx + b. grid.68. Ele ligará os pontos.y.ybest) .y1.ybest. Observe que somamos os quadrados das distâncias para evitar que algum valor seja anulado devido aos sinais.-20.^ 2).y.y.1.1). e aí sim plotarmos este gráfico: plot(x.x. Este comando possui três argumentos: primeiro as coordenadas x e y. Mas. b = coef (2). axis([-1. plot(x. Os valores de m e b poderão ser calculados através do comando polyfit Comando polyfit Este comando acha os coeficientes do polinômio que estamos procurando. Exemplo: x = [0.y. somadist = sum ((y .60. Mas.^ 2 ). m = coef (1).4. Cap.x. devemos determinar a distância no eixo vertical de cada ponto à reta estimada e somá-las através do comando sum. y = [0. somadist = sum ((y . ‘o’). coef = polyfit(x. estimarmos o comportamento da função em y1 = 20*x. ‘o’ ).77.3. ‘o’) Para medirmos a qualidade desta estimativa.x. para isto devemos especificar o grau do polinômio. se ao invés disso. e depois o grau do polinômio.5].2. title (‘ ’) xlabel (‘X’).6. Para achar a reta mais perto de todos os pontos devemos achar a menor soma dos quadrados das distâncias. ybest = m*x+b.y1) .20.

O primeiro argumento deste comando conterá os coeficientes do polinômio. 9 – Ajuste de Curvas e Interpolação 115 .Curso de MATLAB Comando polyval Este comando é empregado para estimar o mínimo polinômio quadrado de um conjunto de pontos. Cap. o segundo argumento será um vetor com os valores de x para os quais desejamos o valor da função. Exemplo: ybest = polyval (coef.x).

onde o tamanho da matriz f será o mesmo da matriz x.5* x .^4 . Cap. vetor ou matriz. Uma aplicação deste conceito está na modelagem da altitude e velocidade de um balão.5. 10.-0.0. Primeiro vamos discutir meios de avaliar os polinômios e como trabalhar o seu comportamento. Exemplo 1 a = [3.2.^3 + x .5x3 + x .2].0. 10 – Análise Polinomial 116 .-5. podemos escrever: f(x) = 3*x ^4 .5.5*x ^3 + x . A seguir definiremos as raízes dos polinômios. Comando polyval Este comando possui dois argumentos.Análise polinomial Este capítulo traz uma série de comandos no MATLAB para a análise polinomial.5. Polinômios normalmente aparecem em aplicações da Engenharia e na Ciência em geral porque eles constituem ainda bons modelos para representar sistemas físicos.1.2.5.5.0. Esses comandos também podem ser combinados em um só: f = polyval([3.1 Avaliação do polinômio Como exemplo vamos tomar o seguinte polinômio: f(x) = 3x4 . O primeiro argumento contém os coeficientes do polinômio em questão e o segundo argumento contém a matriz para a qual desejamos avaliar o polinômio.x).0. seja ele um escalar.1.-5.-0. Se x for um vetor ou uma matriz devemos escrever: f(x) = 3* x . f = polyval(a.2 Se x assumir valores escalares. O tamanho de f terá que ser igual ao tamanho de x.2].0.x).Curso de MATLAB Capítulo 10 .

g=3*f Cap. • Soma e subtração Para somar ou subtrair polinômios basta somar ou subtrair seus respectivos coeficientes.0. sendo a matriz x. e trabalhar apenas com estes vetores.0. uma matriz quadrada. A soma ou subtração padrão funciona se ambos os vetores polinomiais forem do mesmo tamanho.3x2 .-6.5. Somemos os polinômios a seguir: g(x) = x4 . Mas quando x for uma matriz usa-se o comando polyvalm: f = polyvalm(a.2.-2.1].5]: x:0:0. Multipliquemos o polinômio: g(x) = 3 f(x) No MATLAB: f = [ 3. para x no intervalo de[0. g = polyval(a. Operações Aritméticas Podemos trabalhar com polinômios armazenando seus coeficientes em vetores. a = [-1.h(x) Para multiplicar um polinômio por um escalar (sendo ele positivo ou negativo).5x2 .5. 10 – Análise Polinomial 117 .x + 2. polyval consegue calcular o valor da função operando elemento por elemento.-2.x).x) Quando x for um escalar ou um vetor.2x2 + 5x .2. O MATLAB não apresenta um comando específico par somar polinômios.025:5.5].16 som(x) = g(x) + h(x) sub(x) = g(x) .3. basta definir o polinômio pelos seus coeficientes e efetuar a multiplicação.4 h(x) = 4x3 .Curso de MATLAB Supondo que queiramos o valor da função g(x) = -x5 + 3x3 .

esse processo gera vários valores de altitude que geralmente podem ser aproximados por uma equação polinomial. durante as primeiras 48 horas de um balão: h(t) = -0. obtido através da derivada. E achar também a máxima altitude por ele atingida. O balão consegue ganhar altitude porque nele está presente um gás de menor densidade que o próprio ar ao seu redor. m = conv(g. PROBLEMA EM SI: Usando o polinômio dado fazer o gráfico da altitude e da velocidade do balão em questão. o gás Hélio esfria e fica mais denso.760 t + 4100 Método para a resolução do problema 1.12 t 4 + 12 t3 -380 t 2 + 4100 t + 220 onde t é medido em horas. No dia seguinte o sol novamente esquenta o gás e o balão sobe.h) Esse resultado nos diz que g dividido por h nos dá o polinômio de quociente q e resto r. 10 – Análise Polinomial 118 . Com o passar dos dias. e com isso o balão desce a baixa altitude. devido a presença da luz solar. O modelo polinomial para velocidade. Assumindo que o seguinte polinômio represente a altitude em metros. em metros por hora do balão é o seguinte: v(t) = -0. se tornando mais denso que o ar e assim fazendo com que o balão suba. Cap. A multiplicação de mais de dois polinômios requer o uso repetido de conv.Curso de MATLAB • Multiplicação A multiplicação polinomial é efetuada por meio do comando conv (que faz a convolução entre dois conjuntos).48 t 3 + 36 t2 .r] = deconv(g. o gás Hélio se expande. Durante a noite. Aplicação à Solução de Problemas: Balões Meteorológicos Balões são usados para reunir problemas de temperatura e pressão nas diferentes altitudes da atmosfera.h) • Divisão No MATLAB a divisão de polinômios é feita através do comando deconv: [q. Durante o dia.

Devemos também fazer que nosso programa converta metros por hora em metros por segundo. 3. 10 – Análise Polinomial 119 . 4. SOLUÇÃO NO MATLAB: Vamos usar o comando polyval para gerar os pontos para formar o gráfico. O comando max é usado para determinar o valor máximo da função. Cap. DIAGRAMA ENTRADA/SAÍDA: Neste diagrama é mostrado que não existe nenhuma entrada externa ao programa. A saída consiste em dois gráficos e na altitude máxima atingida e o seu tempo correspondente. SOBRE O PROGRAMA: Queremos que apenas o programa faça o gráfico de acordo com as nossas informações e então calcule o máximo valor atingido no gráfico.Curso de MATLAB 2.

) de um polinômio são valores reais. . como por exemplo. . ou analisando a resposta de um motor. que ao ser fatorado se torna: f(x) = (x . x = 2 e x = -3. Já que tanto um polinômio quanto suas raízes são vetores no MATLAB. Dada esta forma. os valores para os quais o polinômio é igual a zero. o MATLAB adota a convenção de colocar os polinômios como vetores linha e as raízes como vetores coluna.três raízes iguais. 10 – Análise Polinomial 120 . poderemos encontrar raízes complexas.uma raiz real e um par conjugado de raízes complexas.três raízes reais. é um problema comum em muitas áreas do conhecimento. igualando cada termo a zero. isto é. e analisando a estabilidade de um filtro digital.. ou ainda equações que demonstram a arrancada ou freada brusca de um carro. Para ilustrar este comando vamos determinar as raízes do seguinte polinômio: Cap. achar as raízes de equações que regem o desempenho de um sistema de controle de um braço robótico.uma raiz real e duas raízes iguais.Curso de MATLAB 10. No MATLAB. Um exemplo consiste no polinômio: f(x) = x2 + x .2 Raízes de polinômios Achar as raízes de um polinômio. as raízes do polinômio são encontradas usando-se o comando roots do MATLAB. a2.2) . (x + 3) As raízes da equação são os valores de x para os quais a função f(x) é igual a zero. as raízes são valores onde a função corta o eixo x. Um polinômio do terceiro grau tem exatamente três raízes que podem ser: . . Se um polinômio é fatorado em termos lineares. . ela terá exatamente n raízes.6. fica fácil de identificar suas raízes. Observe que os termos com coeficiente zero têm de ser incluídos. No gráfico. Estas n raízes podem conter múltiplas raízes ou raízes complexas.. um polinômio é representado por um vetor linha dos seus coeficientes em ordem decrescente. Se assumirmos que os coeficientes (a1. Se a função f(x) for um polinômio de grau n. ou seja.

11x3 + 27x2 + 10x .Curso de MATLAB f(x) = x3 .10]). h(x) = x5 + 3x4 . a. onde o argumento do comando poly é o vetor contendo as raízes do polinômio que desejamos determinar. Os valores das raízes serão: 2 + i. dadas as raízes de um polinômio. 2 . o comando poly é encarregado de executar essa tarefa. g(x) = x2 + 4x + 4 c.3 x + 10 No MATLAB: p = [1. com o objetivo de verificar se o polinômio atravessa o eixo x bem nos locais das raízes.-2. com seu eixo apropriado. Exemplo 2 Sejam as raízes de um polinômio -1.i e -2.24 d. No MATLAB. Agora. Exemplo 3 Determine as raízes dos seguintes polinômios e plote seu gráfico.5x2 + 2x + 8 b. 1 e 3.10]. No MATLAB: a = poly ([-1. 10 – Análise Polinomial 121 . i(x) = x5 .3]’).1. f(x) = x3 . Determinar este polinômio.3x3 + 4x2 -1 Cap.-3. r = roots(p) Lembrando que estes comandos podem ser dados de um só vez: r = roots([1.-2.2 x2 . também é possível construir o polinômio associado.-3.

Comando quadratura O MATLAB possui dois comandos para desenvolver a integração numérica.. que são: trapz. 11. A estimativa da integral melhora quando usarmos um maior número de componentes ( como por exemplo trapézios). b k= a f( x) dx A avaliação numérica de uma integral é também chamada de quadratura (enfoque geométrico).1 Integração Numérica A integral de uma função f(x) no intervalo [a. quad e quad8. a área aproximada poderá ser calculada através da seguinte fórmula: Kt = b . + 2f(xn . dividido em n partes iguais.a ( f(x0) + 2 f(x1) + . é definida como sendo a área sob a curva percorrida por f(x) entre a e b. Enquanto muitos destes problemas se usam de soluções analíticas. pois quanto menor for o intervalo da função a curva tende a uma reta. O MATLAB possui três comandos para calcular a área sob uma função. em um domínio finito. enquanto o comando quad8 usa uma forma adaptada da regra de Newton-Cotes.b]. O comando quad usa uma forma adaptada da regra de Simpson.Curso de MATLAB Capítulo 11 . muitos requerem soluções numéricas para serem entendidos. para aproximar a área sob a curva.Integração e Diferenciação Numérica A integração e diferenciação são conceitos fundamentais usados para resolver um grande número de problemas na Engenharia e na Ciência. Regra do Trapézio Quando a área sob a curva pode ser representada por trapézios e o intervalo [a.. 11 – Integração e Diferenciação Numérica 122 . O comando quad8 funciona melhor em certas funções com certos tipos de singularidades como por exemplo: Cap.b].1) + f(xn) ) 2n onde os valores de xi representam os pontos no final da cada trapézio e x0 = a e xn = b.

Se a tolerância for omitida. Exercício 1 Seja a função f(x) = | x |.Curso de MATLAB 1 k = 0 x dx Lembrando que uma singularidade é um ponto no qual uma função ou sua derivada não são definidas ou tendem para o infinito. 11 – Operações com Matrizes 123 . Resolva as integrais abaixo usando o MATLAB e compare com os resultados obtidos a mão.5] f(x) dx c. int[0.0. etc.a 3 / 2) 3 Os comandos quad e quad8 podem ainda assumir um quarto argumento que é a tolerância.6.5. incluindo o estudo em veias e artérias no corpo humano.0. Cap. o valor default 0. a. o segundo e o terceiro argumento são os limites inferior e superior a e b da integral. int[0. Ambas as funções escrevem na tela uma mensagem quando detectam uma singularidade.0] f(x) dx Problema Aplicado: Análise de Escoamento de um Óleo num Oleoduto A análise do fluxo de um líquido em duto tem aplicação em muitos sistemas diferentes. que corresponde a precisão. o sistema hidráulico de uma cidade. int[0. Exemplo 1 b k= a x dx para a e b não negativos K = 2 (b3 / 2 . o sistema de jato de tinta de uma impressora. mas ainda assim o valor estimado da integral é retornado.001 será assumido pelo MATLAB.-1. o sistema de irrigação de uma fazenda. A forma mais simples do comando quad requer três argumentos: o primeiro argumento é o nome da função no MATLAB que reconhece a função que estamos tratando. O atrito de um fluxo ao passar num oleoduto circular gera a chamada velocidade de perfil no fluido.5] f(x) dx b.-0.

Curso de MATLAB O óleo que está em contato com as paredes do duto não está se movendo na mesma velocidade que o óleo no centro do fluido. 2. A velocidade média de escoamento do óleo pode ser calculada integrando-se a velocidade de perfil no intervalo de 0 a r0. Cap. Método Para a Resolução do Problema 1. DESCRIÇÃO DA ENTRADA E SAÍDA Os dados experimentais que serão tomados como entrada em nosso programa são a velocidade máxima vmax.r / r0 ) 1 / n onde n é um número inteiro entre 5 e 10 que define o contorno do escoamento do óleo. Escreva um programa no MATLAB para integrar a velocidade de perfil e assim determinar a velocidade médio do óleo no duto. A saída de nosso programa será a velocidade média do óleo no duto. O PROBLEMA EM SI Calcular a velocidade média do óleo em um duto. o raio do duto r0. O diagrama abaixo mostra como a velocidade do óleo varia de acordo com o diâmetro do duto e define as variáveis usadas para esta análise: A velocidade de perfil é definida pela seguinte equação: v(r) = vmax (1 . e o valor de n. 11 – Integração e Diferenciação Numérica 124 . e o valor de r0 é o próprio raio do tubo. Os valores de vmax e de n podem ser medidos experimentalmente.

Podemos perceber ao analisar uma determinada função num determinado intervalo que o sinal da derivada pode mudar. se esse sinal muda. e.Curso de MATLAB 3. Da mesma forma. FORMA QUE AJUDARÁ NA QUESTÃO Plotar um gráfico da função r (1 . se a derivada segunda de um ponto crítico é negativa. De modo que. Cap. SOLUÇÃO NO MATLAB 1/n e estimar o valor da integral através do cálculo 11.2 Diferenciação Numérica A derivada de uma função f em um ponto pode ser descrita graficamente como a inclinação da reta que tangencia a função naquele ponto. 11 – Operações com Matrizes 125 . então o valor da função naquele ponto significa um local de mínimo. definem o local de máximo e de mínimo da função.r / r0) da área sob a curva. Podemos também analisar uma função pela sua derivada segunda. significa que dentro deste intervalo existe local de máximo e local de mínimo. 4. São pontos onde a tangente é representada por uma linha horizontal e que. se a derivada segunda de um ponto crítico é positiva. por isso. então a função possui um local de máximo. Pontos da função onde a derivada é zero são chamados pontos críticos.

Essa aproximação pode ser feita de vários modos. dependendo dos pontos. temos três técnicas: (a) (b) (c) Cap. Assim.Curso de MATLAB Derivação por expressões de diferenças As técnicas de diferenciação numérica estimam a derivada de uma função em um ponto xk através da aproximação da inclinação da reta tangente à curva neste ponto usando valores que a função assume em pontos perto de xk. 11 – Integração e Diferenciação Numérica 126 .

plot(f.2.24.Curso de MATLAB A derivada segunda pode ser achada através da fórmula: f ’’(xk) = f ’(xk) .4] então dy será calculado pelo método da diferença forward.f ’(xk . mas se os valores de x forem [0.x) plot(df.24 Assumindo que queiramos calcular o valor de sua derivada no intervalo [-4.^2 + 10 * x . Note que estes valores de dy estarão corretos para ambas as formas de diferenças.4. A diferença entre esses dois métodos para o cálculo da derivada é determinada pelos valores de x que correspondem à derivada dy.3.5. e que o vetor y seja [2.3 * x .2]./ diff(x).1.1.11 x3 + 27 x2 + 10 x .-2. assumindo que o vetor x seja [0.2.(xk .^5 . plot(f) axis([-4 5 -200 1400]). Chamando f ’(x) de df e.2. df = diff(y) . Por exemplo.1:5. / diff(x).5].1) Comando diff O comando diff calcula a diferença entre dois pontos adjacentes num vetor. 11 – Operações com Matrizes 127 . xd = x(2:length(x) ). Temos no MATLAB que: x = -4:0. gerando um novo vetor com a diferença (Se o comando diff for aplicado a uma matriz.11 * x.3. xd os valores de x da derivada. Se os valores correspondentes de x forem [1.1) (xk) . Supondo que desejamos analisar a função dada pelo seguinte polinômio: f(x) = x5 .^3 + 27 * x .xd) axis([-4 5 -800 600]).3.3 x4 . backward ou forward.5].1].1.3.10].5] então dy é calculado pela diferença backward.1.8. O vetor gerado por diff(x) será [1.1. enquanto que o gerado por diff(y) será [1. f = x . plot(df) Cap.^4 .4. A derivada dy será calculada por diff(y) .3. usando o método da diferença backward.1. ele irá operar como se cada coluna da matriz fosse um vetor).4.

1 ) .Curso de MATLAB Podemos marcar os locais dos pontos críticos para essa função com os seguintes comandos: produto = df(1 : 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. Depois ache os locais de mínimo. h(x) = x5 .4x4 .5x3 + 14x2 .9x3 + 32x2 + 28x .5x2 + 2x + 8 b. no intervalo de [-10. g(x) = x3 .* df(2 : length(df) ). Para cada polinômio abaixo. sua derivada primeira e sua derivada segunda. i(x) = x7 .12 Cap. plote a função. 11 – Integração e Diferenciação Numérica 128 . e os pontos críticos a.10].48 c. Exercícios para Praticar ! 1. esses índices são então usados com o vetor contendo os valores de xd para determinar os locais de pontos críticos. de máximo.

Esse capítulo termina com a discussão quando se torna necessário converter equações diferenciais de ordem superiores para equações de primeira ordem. + (b . Depois seguiremos com a descrição dos métodos de Runge . onde então iremos comparar as soluções numéricas com as analíticas. A solução da equação diferencial de primeira ordem (ODE) é a função y = f(x).a) f ’(a) Cap.Equações Diferenciais Ordinárias Nesta sessão iremos apresentar um grupo de equações de primeira ordem e suas soluções analíticas. Enquanto que as soluções analíticas para as equações diferenciais são preferenciais.1 Equações Diferenciais Ordinárias de Primeira Ordem A equação diferencial de primeira ordem (ODE) é uma equação que pode ser escrita na seguinte forma: y’ = dy = g(x. A solução de uma equação diferencial é geralmente uma família de funções.Curso de MATLAB Capítulo 12 . 12 – Equações Diferenciais Ordinárias 129 . tal que f ’(x) = g(x. são o método de Euler e o método de Runge-Kutta.y). uma técnica numérica se torna necessária. A condição inicial é usualmente necessária na ordem para especificar uma única solução. 2! Para as equações diferenciais de primeira ordem a serie de Taylor se torna: f(b) ≈ f(a) + (b . 12.y) dx onde x é a variável independente.a) f ’(a) + (b . Para esses casos.a)n f(n)(a) + . A seguir serão representadas algumas soluções analíticas para equações diferenciais ordinárias.. As técnicas numéricas mais comuns para resolver equações diferenciais ordinárias. Lembrando que a série de Taylor é uma expansão que pode ser usada para aproximar uma função cujas derivadas são definidas no intervalo contendo a e b... A expansão por série de Taylor para f(b) é: f(b) = f(a) + (b .a)2 f ’’(a) + . O cálculo da solução envolve a integração de y ’ para obter y.. Tanto o método de Euler quanto o método de Runge-Kutta aproximam a função utilizandose da expansão em série de Taylor.Kutta para a integração de equações de primeira ordem. muitas vezes requerem soluções muito complicadas.

Esses métodos de aproximação de uma função se usam da expansão por série de Taylor. assim por diante.Curso de MATLAB Para as equações diferenciais de segunda ordem: f(b) ≈ f(a) + (b .Kutta de primeira ordem. o método de Runge . Método de Euler yb = ya + (b . usando: yc = yb + (b . Desta forma. Lembrando que o método de Euler é equivalente ao método de Runge . conforme mostrado na figura abaixo: A equação diferencial é usada para calcular o valor de ya’.a) ya’ Esta equação estima o valor da função yb usando uma reta tangente a função no ponto a. e. podemos estimar o próximo valor da função yc. 12 – Equações Diferenciais Ordinárias 130 . como é mostrado na figura a seguir: Cap.Kutta de primeira ordem se utiliza da expansão de Taylor de primeira ordem.a) yb’ Essa equação utilizará a tangente no ponto b para estimar o valor da função no ponto c. yc.Kutta de segunda ordem se utiliza da expansão de Taylor de segunda ordem. 12.Kutta.a) f ’(a) + (b .2 Método de Runge .a)2 f ’’(a) 2! E.Kutta Os métodos mais populares para a integração da equação diferencial de primeira ordem são os métodos de Runge . o método de Runge . assim por diante. Tendo estimado o valor da função yb no ponto b.

y) dy=3*x^2. Cap.5 Solução no MATLAB: function dy=g1(x. Nós assumimos que esse argumento representa o valor da função dentro do intervalo considerado. assumindo valores escalares de entrada para x e y.5.4]. O segundo e o terceiro argumentos representam os limites no intervalo no qual nó desejamos calcular o valor da função y = f(x). O quarto argumento contém a condição inicial necessária para determinar a única solução para a equação diferencial ordinária.y) = 3x2 no intervalo [2.7. Exemplo 1 Resolver a equação y’ = g1(x.Curso de MATLAB É preciso partir de uma condição inicial para dar início ao processo de estimativa de outros pontos da função f(x). os quais representam os pontos da função y = f(x). Comando ode O MATLAB contém dois comandos para calcular soluções numéricas para equações diferenciais ordinárias: ode23 e ode45. um conjunto de coordenadas y correspondentes. O primeiro argumento é o nome da função.Kutta para equações diferenciais de segunda e terceira ordem. definida no MATLAB. o comando ode23 usa o método de Runge . No MATLAB.y) quando é fornecido valor para x e y. primeiro temos que definir a função a qual desejamos avaliar as equações diferenciais. 12 – Equações Diferenciais Ordinárias 131 . o comando ode45 usa o método de Runge Kutta para equações diferenciais de quarta e quinta ordem. O comando ode23 possui duas saídas: um conjunto de coordenadas x e. Solução analítica: y = x3 . A forma mais simples do comando ode23 requer quatro argumentos. que retorna o valor da equação diferencial y’ = g(x. assumindo como condição inicial f(2) = 0. Os comandos ode23 e ode45 possuem os mesmos tipos de argumentos.

plot(x. 12 – Equações Diferenciais Ordinárias 132 . Os comandos ode23 e ode45 podem também ser usados com dois parâmetros adicionais. O valor default é zero.y) dy=2*x*cos(y)^2. O gráfico obtido conterá a comparação entre a solução numérica e a solução analítica.x. xlabel(‘X’).pi/4) anl_y = atan(x*x+1).2.anl_y. O sexto parâmetro pode ser usado para requerer que a função escreva na tela imediatamente os resultados chamado traço. Cap. Exemplo 2 Resolver a equação y’ = g2(x.num_y] = ode23(‘g1’.2].x. Solução analítica: y = tan-1 (x2 + 1) Solução no MATLAB: function dy=g2(x.000001 para o ode45.num_y] = ode23(‘g2’. ylabel(‘y = f(x)’).’o’).num_y.5) anl_y^= x.7. ylabel(‘y = f(x)’). O número de pontos calculados para a função y = f(x) pelo comando ode23 ou ode45 é determinado pelo MATLAB.4.0.Curso de MATLAB [x. especificando nenhum traço para os resultados. O quinto parâmetro pode ser usado para especificar a tolerância que estará relacionada com o tamanho do passo. title(‘Solução do Exemplo 2’). assumindo como condição inicial f(0) = π/4. O valor default para a tolerância é de 0.001 para o ode23 e 0.’o’). subplot(211).2. [x. grid.num_y.0.^3 . grid.plot(x.y) = 2xcos2 y no intervalo [0.anl_y. title(‘Solução do Exemplo 1’). xlabel(‘X’). subplot(211).5.

A UDF é também menos barulhenta que o sistema convencional de turbinas. As válvulas de regulação do motor são então levadas para atingir um nível de 60 Newtons. no MATLAB. combinam o poder e a confiabilidade dos motores a jato com a eficiência dos propulsores. isto porque eles não são tão rápidos. Problema Aplicado: Aceleração de uma turbina UDF numa aeronave Uma avançada turbina chamada de ventilador não canalizado (UDF) é uma das novas tecnologias mais promissoras que tem sido desenvolvida para o futuro transporte de aeronaves. que têm sido usadas por décadas. e com grande aproveitamento de combustível. essa equação diferencial no intervalo de [0. A equação diferencial que determina a aceleração da aeronave é: a = T . 12 – Equações Diferenciais Ordinárias 133 . Durante um teste de vôo de uma turbina UDF de uma aeronave. o que significa os 20 Kg da aeronave tendo alcançado uma velocidade de 180 m/s. aerodinâmica e velocidades de alta rotação habilitam esta turbina a voar tão rápido quanto as turbinas a jato.0. Novos materiais. a solução analítica para esta equação. Esse tipo de turbina(UDF) implica em avanços significantes na tecnologia de propulsão.y) = -y a) Assumindo como condição inicial f(0) = -3. Eles constituem uma importante melhoria dos antigos propulsores movidos a pistão.2] e plote o gráfico com os valores correspondentes de y. nem poderosos quanto as turbinas usadas em grandes aeronaves.0. resolva.000062 v2 m onde: a = dv dt T = nível atingido em Newtons m = massa em kg v = velocidade em m/s Cap. Suas aplicações têm sido limitadas a pequenas aeronaves do tipo comutador. Turbinas. e a aeronave começa a acelerar. Seja a equação: y’ = ga(x. o motor é levado para um nível de 40 Newton.Curso de MATLAB Exercícios para praticar! 1. b) Sendo y = -3 e-x . faça um novo gráfico que compare a solução analítica com a numérica.

DESCRIÇÃO DA ENTRADA E DA SAÍDA Como entrada nós temos a equação diferencial que define a aceleração da aeronave. A velocidade deverá aumentar e então estabilizar num novo valor. O PROBLEMA EM SI Calcular a nova velocidade atingida pela aeronave depois de uma mudança no nível do motor. Nós podemos então traçar ambos os gráficos de velocidade e aceleração num intervalo de 4 minutos para observar suas mudanças. PROGRAMA Cap. Método para a resolução do problema 1. os quais poderão ser usados para determinar os valores da aceleração. enquanto que a aceleração deverá diminuir até chegar a zero. 3. Como saída. 12 – Equações Diferenciais Ordinárias 134 . SOLUÇÃO NO MATLAB Podemos usar o comando ode23 para avaliar a nossa equação diferencial. nós desejamos o gráfico da velocidade e da aceleração. A solução dessa equação diferencial nos fornecerá valores de velocidade. 2. 4.Curso de MATLAB Escreva no MATLAB um programa para determinar a nova velocidade depois de uma mudança no nível do motor através do gráfico da solução para a equação diferencial.

u22) . 12 – Equações Diferenciais Ordinárias 135 .25.. Exemplo 3 Vamos considerar uma equação diferencial linear de segunda ordem: y’’= g(x.u(2)^2 . u2. u_primo(2) = u(1). Entretanto. Para resolver as equações desenvolvidas no exemplo anterior.Curso de MATLAB 12.u2 u2’ = u1 O sistema contendo as equações diferenciais de primeira ordem pode ser resolvido pelo MATLAB através do comando ode.yn-2.u) u_primo(1) = u(1)*(1 ..y.3 Equações Diferenciais Ordinárias de Ordens Superiores Equações diferenciais de ordens superiores podem ser escritas como um sistema constituído por um conjunto de equações diferenciais de primeira ordem usando a mudança de variáveis.20] usando as condições iniciais y’(0) = 0. Então.y Primeiro vamos definir duas novas funções: u1(x) = y’ u2(x) = y Nós então obtemos esse sistema de um conjunto de equações diferenciais de primeira ordem: u1’ = y’’ = g(x. a função que é usada para avaliar a equação diferencial deve calcular os valores das equações diferenciais de primeira ordem em um vetor.u(2).y. para resolver o sistema de equações diferenciais de primeira ordem no intervalo [0..y2) .0 e y(0) = 0. podemos seguir os seguintes passos: Cap. A condição inicial deverá também ser um vetor contendo uma condição inicial para cada equação diferencial de primeira ordem: yn-1. y’.y’) = y’(1 . . primeiro temos que definir a função para calcular os valores das equações diferenciais de primeira ordem: function u_primo = eqns2(x. u1) = u1(1 .

2)) title(‘y’).num_y(:.25]. xlabel(‘x’).num_x] = ode23(‘eqns2’.grid. subplot(211).Curso de MATLAB inicial = [0 0. Cap. plot(x.num_y(:.0.20. xlabel(‘x’).inicial). [x. 12 – Equações Diferenciais Ordinárias 136 .1)) title(‘Primeira Derivada de y’). subplot(212).grid. plot(x.

então esta equação é verdadeira para algum valor de λ.1) pode ser utilizada para determinar a seguinte equação: ( A .) Cap. a função eig é apresentada para computação usando ambas. é desejável selecionar os autovetores como tal QQT = I. 13 – Decomposição e Fatorização de Matrizes 137 .λI ) X = 0 (13.λI ) = 0 (13. Seja X um vetor de uma coluna e “n” linhas e seja λ um escalar. Esta equação representa um conjunto de equações homogêneas enquanto o lado direito da equação for igual a zero. Depois de definir autovalores e autovetores e ilustrar suas propriedades com um exemplo simples. 13. Este conjunto de equações homogêneas possui soluções que não são triviais. Considere a seguinte equação: AX = λX (13. e os valores correspondentes de X são descritos pelos autovetores da matriz A. Em muitas aplicações. Se X é completada com zeros. Este conjunto de autovetores representa um conjunto ortogonal. enquanto significa que ambos são normalizados e que eles são mutuamente ortogonais. O resto do capítulo continua com decomposição e fatorização que podem ser aplicados para a matriz A. A solução desta equação é obtida com os autovalores da matriz A.Curso de MATLAB Capítulo 13 . A solução só é trivial quando o determinante for igual a zero. aparece em inúmeras aplicações. mas esta é uma solução trivial. Os valores de λ para que X não seja completado com zeros são descritos pelos autovalores da matriz A. Uma aplicação que é utilizada para demostrar como autovalores e autovetores são utilizados para analisar a performance de algoritmos de adaptadores para redução de ruídos.Decomposição e Fatorização de Matrizes Este capítulo contém algumas das mais avançadas características de matrizes que são utilizadas na resolução de certos tipos de problemas de engenharia.3) representa uma equação que é referida a equação característica da matriz A.2) onde I é uma matriz identidade de n x n elementos. O primeiro tópico. autovalores e autovetores. det (A . e o produto de um vetor com outro for zero.1) Ambos os lados dessa equação são iguais com uma coluna de vetores com n linhas.3) A equação (13.1 Autovalores e Autovetores Assuma que A é uma matriz quadrada n x n. (Um conjunto de vetores é ortonormal se o produto de vetores for igual a unidade. A equação (13. onde Q é uma matriz cujas colunas são os autovetores.

50 Os autovalores podem ser obtidos usando a equação característica: 0.25  x 2  0      0. (Se a matriz A tiver mais de 2 linhas e 2 colunas.25  det ( A .) Os autovalores podem ser determinados utilizando os autovalores da equação (13.25 0.25: ou 0.λ I ) = det 0.5 − λ  0.25 0.25 =  0.5 .50 0.0.valores na mão pode se tornar uma formidável tarefa. 13 – Decomposição e Fatorização de Matrizes 138 .0.x2 Portanto.0.25  x 1  0 0. determinar os auto.5 .25   x 1  0 0. pode se obter os autovetores de autovalor 0.75.25 0.75.25  x  = 0    2   Mas este par de equações nos dá a seguinte equação: x1 = . que possui a seguinte relação: x1 = x2 Cap.25 A=  0.25 0.2   Similarmente. Alguns desses autovetores são demonstrados agora: 1  − 1   5 . existem uma infinidade de autovetores que podem ser associados com o autovalor 0.25.5    0.λ + 0.1875 =0 Esta equação pode ser facilmente resolvida usando equação quadrática e obtemos λo = 0. usando o valor 0.25 e λ1 = 0.25 0.2).5 − λ    2 = λ .2  .Curso de MATLAB Para ilustrar estas relações entre a matriz A e estes autovalores e autovetores consideremos a matriz A : 0.

2  . como: 1.5 1.707.c1  .0.Curso de MATLAB De novo obtemos uma infinidade de autovetores.707 ou –0. que podem ser utilizados para determinar o conjunto ortonormal de autovetores.c1 + c 2 1 0 =  0 1  2 . Assim eles possuem várias variações para os mesmos valores. Nós escolhemos o seguinte: 1 2 1 Q= .5 2 Então c1 = c2 = 0.1 2 1 2  2 Os cálculos para se obter os autovalores de um conjunto associado de autovetores ortonormais podem ser relativamente simples para uma matriz 2x2. Portanto consideremos o seguinte: c QQ T =  1  − c1 c2  c2    c1 c  2 . como QQT = I. 13 – Decomposição e Fatorização de Matrizes 139 . Esta função pode ser usada para retornar um vetor coluna que contenha apenas autovalores.c2    c2 + c2 =  1 2 22 .5   5 .5    0. Entretanto é evidente que fica muito difícil se aumentarmos o tamanho da matriz.2   Para determinar um conjunto ortonormal de autovetores para um exemplo simples precisamos lembrar de como selecionar os autovetores. A função eig possui um argumento da matriz A. como: lambda = eig (A) Cap.c1 + c 2  2 2 2  c1 + c 2  Resolvendo o conjunto de equações obtemos: 2 c1 = c 2 = 0.

00 d=  0. 2  2 Pratique! Consideremos a matriz A:  4 3 0  3 6 2   0 2 4   Use o MATLAB para responder as questões: 1. Determine λ1. 0. λ2. Nós podemos ilustrar a função eig com um exemplo: A = [0.50] [Q.75 Podemos facilmente verificar que QQT = I e AQ = Qd. X1.d] = eig (A) Os valores de Q e d são como QQT = I e AQ = Qd. X2.00 0.1 2 1 0.25 0.Curso de MATLAB A função pode também ser usada para executar uma tarefa dupla.50. 0. 13 – Decomposição e Fatorização de Matrizes 140 . 0. os três autovalores de A Determine um conjunto ortonormal de autovetores. Neste caso para retornarmos duas matrizes quadradas: uma contém autovetores (X) como coluna e a outra contém autovalores (λ) na diagonal: [Q. X3 Verifique se det(AX .25. λ3.λ I) = 0 para os autovalores obtidos Demonstre que AQ = Qd Cap.d] = eig (A) Os valores de Q e d são obtidos: 1 2 1 Q= .25. 2. 3. 4.

Estas características determinam a superfície multidimensional quadrática para que obtenhamos um valor mínimo. as características do sinal de ruído podem ser determinadas usando o sinal de dois microfones. Os autovetores representam o eixo principal da superfície. Este processo resulta num sinal limpo e uma melhor comunicação .Curso de MATLAB Aplicação em Solução de Problemas: Adaptador p/ Redução de Ruído Este equipamento é utilizado para reduzir o efeito de interferência de ruídos em um sinal. e depois calcule os autovalores e autovetores.25 e 0. Os algoritmos para os adaptadores estão acima do nível deste texto. mas a performance e a velocidade do algoritmo dependem das características dos sinais de entrada. Portanto para determinar a velocidade e a performance do algoritmo do adaptador com certeza do tipo de dados e para analisar a superfície.25 0. 2. Os autovetores são: Cap. Através das técnicas para cancelamento de ruídos. Se os autovalores forem iguais.25 R=  0. Os adaptadores são utilizados para reduzir o ruído oriundo da parte de trás do auditório. nós precisamos determinar os autovalores e autovetores da matriz R.50 Como no exemplo que tratamos anteriormente sabemos que os autovalores são 0. 1.mat e a saída são os autovalores e autovetores da matriz. 3. DESCRIÇÃO DO PROBLEMA Calcule os autovalores e autovetores de uma matriz.75. Se a superfície quadrática tem um contorno circular o algoritmo não é necessário. Este mínimo é determinado ajustando o algoritmo para um ponto de partida para um único mínimo. A matriz R pode ser computada a partir dos sinais de entrada. 13 – Decomposição e Fatorização de Matrizes 141 . e os autovalores da matriz R irão determinar o tipo de superfície de contorno a ser utilizada.mat. EXEMPLO MANUAL Assumamos que a matriz de entrada seja: 0. para poderem ser transmitidos para a sala de controle. mais elíptica será a superfície. Outro microfone é usado na parte de trás do auditório para colher principalmente os sinais de ruído.50 0. Quanto maior a variação dos autovalores. um microfone que é utilizado para gravar sinais de voz de um grande auditório. Por exemplo. a superfície é circular. Escreva um programa para ler os valores da matriz com o nome dataR. DESCRIÇÃO DOS DADOS DE ENTRADA E SAÍDA A entrada é o arquivo dataR.

k) ‘) end 5.25 Autovetor correspondente 0. k. d ( k. 4. SOLUÇÃO MATLAB Neste programa usaremos um loop para imprimir os autovalores e autovetores.d] = eig (R) [m.n] = size(R) for k = 1: m fprintf ( ‘ Autovalor %4. a matriz R possui milhares de linhas e colunas.7071 Autovalor 2 = 0.Curso de MATLAB 1 2  V1 =   − 1 2  1 V2 =  1 2  2 Como os autovalores não são iguais. sabemos que a superfície quadrática não possui um contorno circular e que a performance do adaptador será lenta e menos precisa. disp (‘Autovetor correspondente’) disp (Q(:.7071 Este exemplo é um exemplo simples ao tratar de cancelamento de sinais. pois quando se filtra os sinais usados em comunicação com satélites. load dataR. k ) ).2f \n’.7071 -0. TESTANDO A saída do programa será: Autovalor 1 = 0.7071 0.75 Autovetor correspondente 0.0f = %7. 13 – Decomposição e Fatorização de Matrizes 142 . [Q. Cap.

5.5  1 A= 0 0    0. 3. as mesmas operações são realizadas na matriz identidade para transformá-la na forma triangular inferior.2 − 6 1  B=  2 5 7   A função lu do MATLAB executa esta fatorização. -2. Este é um dos passos para se determinar o determinante de uma matriz muito grande. Esta fatorização é muito usada para simplificar matrizes computacionais.UA] = lu ( A ). Cap. e é especificada da seguinte forma: [L.0. 2.UB] = lu ( B ). Operações de linhas e colunas são realizadas na matriz A para reduzi-la a forma triangular superior. como também a matriz inversa e para a solução de equações lineares simultâneas. as convertem em forma de decomposição e fatorização. Muitas técnicas numéricas que utilizam matrizes.Curso de MATLAB 13. 7 ]. O uso do produto fatorial reduz o número de cálculos necessários para a computação de muitas matrizes. 2. Esta fatorização é conhecida como fatorização LU (lower-upper). -6.U] = lu ( A ) . 13 – Decomposição e Fatorização de Matrizes 143 .0. -5. [LB. Para ilustrar pegamos as matrizes A e B: 2 − 1 1 .5 1 1  0 − 2 0     .5     3 2 1 . -2.5 0 1 − 2 − 6 1  B= 1 0 0  0 − 1 8       . 3. 2. -1. Fatorização Triangular A fatorização triangular expressa uma matriz quadrada como um produto de duas matrizes triangulares – uma matriz inferior superior e uma matriz triangular superior. B = [ 1. O produto de L e U é igual a A. O fator inferior é colocado na matriz L e o superior na matriz U.2 DECOMPOSIÇÃO e FATORIZAÇÃO Nesta seção iremos apresentar três tipos de decomposição e fatorização de matrizes que podem ser utilizados para a solução de problemas que contenham matrizes.5 0. [LA. A fatorização pode ser realizada começando com uma matriz quadrada e uma matriz identidade de mesmo tamanho.5 1 0 − 2 − 5   0 − 0. 1. Algumas dessas técnicas decompõe a matriz em um produto de outras matrizes. Veja o exemplo: A = [ 1. -1.1 1 0  0 0 2. 0 ].2 − 5 3  A=   1 −3 0    Usando a fatorização LU obtemos: 3  . 3.

A menor solução para um sistema indeterminado AX=B é a quadrado RX=QTB. Os valores da matriz diagonal são chamados de valores singulares e por isso a decomposição recebe este nome. A função svd do MATLAB executa esta fatorização. e é especificada da seguinte forma: [U.S.Curso de MATLAB Como resultado obtemos: .1 1 0   3  − 2 − 5  0 − 0. solução de um sistema A função qr do MATLAB executa esta fatorização. (Lembrando que uma matriz é ortonormal quando QQT=I). Fatorização QR Esta técnica de fatorização é feita a partir do produto de uma matriz ortonormal e de uma matriz triangular superior.onde U e V são matrizes ortogonais e S é diagonal. A decomposição SVD decompões a matriz num produto dos fatores de outras três matrizes: A= USV . 13 – Decomposição e Fatorização de Matrizes 144 .5 1 0 LA =  1 0 0    0.5 UA =   0 − 2 0   − 2 − 6 1  UB =  0 − 1 8    0 0 2.5 1 1    . Não é necessário que a matriz A seja quadrada.0. e o tamanho de R é m x n.R] = qr (A) Para uma matriz A m x n. Esta é a decomposição mais confiável. Decomposição de valor singular O SVD (singular value decomposition) é um outro método para a fatorização de matrizes ortogonais. mas isto pode requerer dez vezes mais tempo que a fatorização QR. tamanho de Q é n x n.5 0 1 LB =  1 0 0    .0.V] = svd (A) Cap. O número de valores singulares diferentes de zero é igual ao rank da matriz. e é especificada da seguinte forma: [Q.5 0.5   É facilmente verificável que: A = (LA)(UA) e B = (LB)(UB).

13 – Decomposição e Fatorização de Matrizes 145 .Curso de MATLAB Sumário MATLAB eig lu or svd calcula os autovalores e autovetores de uma matriz calcula a decomposição LU de uma matriz calcula a decomposição ortonormal de uma matriz calcula a decomposição SVD de uma matriz Cap.

O domínio do tempo é representado por valores reais e o domínio da freqüência por valores complexos. como h –2. Embora este capítulo discuta tanto a análise do processamento de sinais analógicos e digitais será dada maior ênfase no processamento de sinais digitais ou DSP.Curso de MATLAB Capítulo 14 – Processamento de Sinais Este capítulo discute algumas funções que são relacionadas a processamento de sinais. os primeiros três valores correspondentes ao sinal analógico são: f 0 = f ( 0T ) = f ( 0. h –1. como por exemplo. Essas funções foram divididas em quatro categorias: análise do domínio da freqüência e domínio do tempo. podem ser representados por senóides. que compõem o sinal.02 ) Estamos acostumados a ver os sinais digitais derivados de analógicos como uma seqüência de pontos. um sinal digital com uma seqüência de valores derivados do sinal analógico original. x(2) e assim por diante. 14. implementação de filtros e projeto de filtros. mas quando nós plotamos um sinal digital os pontos são conectados por segmentos de linha. h 0 e assim por diante. Então se o sinal é amostrado com uma freqüência de 100 Hz.1 Análise no Domínio da Freqüência Recordemos que o sinal analógico é uma função contínua (f(t)) que representa uma informação. Utilizamos o eixo Y para representar [ f k ] ou f (kT). Para o processamento de sinais por um computador. Os sinais podem ser analisados de suas formas – domínio do tempo e domínio da freqüência. que por sua vez. que é o sinal digital. o sinal da pressão sangüínea e sinais sísmicos. É importante que as equações sejam escritas na mesma forma para que o usuário não se confunda. análise de filtros. Entretanto os índices para processamento de sinais utilizados são sempre valores negativos. o sinal analógico precisa ser amostrado num período de T segundos. gerando assim.0 ) f 1 = f ( 1T ) = f ( 0. 14 – Processamento de Sinais 146 . como x(1). um sinal de voz. Representamos o sinal digital como um sinal contínuo com a seguinte notação: f k = f (kT) O sinal digital é uma seqüência de amostragens representadas por: [ f k ] O tempo que normalmente se escolhe para começar a amostragem e o zero e assim o primeiro intervalo de amostragem é f 0. Cap. Os índices do MATLAB começam sempre com 1.01 ) f 2 = f ( 2T ) = f ( 0.

032Hz e 2/0. magF). onde N é o número de amostras e T o período da função. usaremos o método DFT. Se entrarmos com um sinal simples no domínio do tempo obteremos como resposta um sinal contendo números complexos. que representam o domínio da freqüência. title (‘Magnitude de F(k)’). Seja N=32. Se não. 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 informação no domínio da freqüência. usaremos o método da transformada de Fourier. magF = abs (F). plot (k. A função fft do MATLAB calcula a transformada de Fourier. k = 0 : N-1... Esta função pode ser usada para uma ou duas entradas.grid Figura 1 – Magnitude de Fk Cap. que também converte o sinal no tempo para o domínio da freqüência. f = sin(2*pi*20*k*T). O algoritmo da transformada utiliza um número de cálculos muito grande. ylabel (‘| F ( k )|’).001. F = fft(f). os valores de freqüência mostrados serão 0 Hz. T=0. Consideremos o seguinte exemplo: N = 64. Se o número de valores no domínio do tempo for igual a potência de 2. T = 1/128. 14 – Processamento de Sinais 147 . xlabel (‘k’)..Curso de MATLAB A transformada discreta de Fourier (DFT) é usada para converter um sinal digital no domínio do tempo em um conjunto de pontos no domínio da freqüência.032 Hz e assim por diante. Os valores no domínio da freqüência gerados pela função fft correspondem a uma freqüência de separação de 1/NT Hz. por isso utilizamos a Transformada de Fourier. 1/0.

Curso de MATLAB Neste gráfico podemos notar a simetria gerada pela periodicidade da FFT..sin(200πkT) h k = 5 . 2. f k = 2 sin(2π50kT) g k = cos(250πkT) ..magF(1:N/2)). hertz = k*(1/(N*T)). 3. Podemos plotar também a magnitude de FK pela freqüência em hertz(Hz). 4. Assuma a taxa de amostragem de 1KHz.. Pratique! Gere 128 pontos para os seguintes sinais. Plote o sinal no domínio do tempo... ou seja. Usando o método da transformada de Fourier gere e plote o sinal no domínio da freqüência. plot(hertz(1:N/2). 1.π/4) 148 Cap.cos(1000kT) m k = 4 sin(250πkT . mas também é muito importante obtermos a fase de FK. O método FFT é uma ferramenta poderosa quando se trabalha com sinais digitais. ylabel (‘| F ( k )|’). xlabel (‘Hz’).grid Figura 2 – Magnitude de Fk em hertz A função ifft faz a transformada inversa de Fourier. e da onda senoidal. calcula o domínio do tempo [ f k ] a partir de valores complexos [ FK ]. Verifique se os picos ocorrem onde era esperado para o domínio da freqüência. 14 – Processamento de Sinais . Nossa discussão foi focada na magnitude de FK .. title(‘Magnitude de F(k)’). Use a escala de Hz no eixo X.

05s H(s) = 2 s + 1. + a n Esta função de transferência corresponde a ordem n dos filtros analógicos. 14 – Processamento de Sinais 149 .5279 2 (14. Adicionalmente.3511s + 2. Para isso utilizam-se as funções abs. E o corta banda irá remover a banda de freqüência especificada..5279 s + 1. as funções freqs e freqz podem ser usadas para se achar os valores das funções H(s) e H(z) como nos exemplos a seguir..Curso de MATLAB 14. Como uma função de transferência é uma função complexa. H(s) = H(s) = 0.447 H(s) = s 2 + 2.05s + 0. e também o efeito de filtragem do sistema..0062 1. podemos usar esta função de transferência para descrever uma faixa de freqüência.. banda de transição e banda de corte. + b n a 0 s n + a1 s n-1 + a2 s n-2 + . Estas regiões são definidas pela freqüência de corte wc e pela freqüência de rejeição wr.2359 s 2 + 2. Podemos definir a atuação dos filtros em 3 regiões básicas: banda de passagem. Estas funções de transferências descrevem o efeito do sistema a um sinal de entrada. O passa banda irá deixar passar a banda de freqüência especificada. angle e unwrap. Na forma geral a função de transferência H(s) é a seguinte: H(s) = B(s) A(s) = b 0 s n + b1 s n-1 + b2 s n-2 + . um filtro passa baixa irá deixar passar todas as freqüências abaixo da freqüência de corte estabelecida. Como a função de transferência de um filtro define o efeito do filtro em termos de freqüência.1117 s + 0. Função de Transferência Analógica Um filtro analógico é definido pela função de transferência H(s) onde s = jw.1) s2 s 2 + 0.0275s + 0. a análise dos filtros incluem gráficos de magnitude e fase.2359 Cap. Por exemplo.2 Análise de Filtros A função de transferência de um sistema analógico é descrita como H(s) e de um sistema digital como H(z).

plot(W4..0].A2. Como a fase de um número complexo é um ângulo em radianos. grid A fase de um filtro pode ser obtida utilizando-se a função able ou a unwrap. xlabel (‘w.rps’).. Como no exemplo: unwrap(angle(H))..005:5.2.2.05:5.. A função unwrap remove as descontinuidades quando introduzimos a função angle. A1 = [1. xlabel (‘w. xlabel (‘w.abs(h1s)).. W3 = 0:0. usando 3 argumentos de entrada. y. W2 = 0:0. y. e o terceiro é um vetor com o valor da freqüência em ‘rps’.1.title(‘Filtro H4(s)’). A4 = [1. B4 = [1. H1s = freqs(B1.3511.plot(W3. A3 = [1.0275.label(‘Magnitude’). o segundo é um vetor contendo os coeficientes do polinômio A(s).001:0.05.0.0.A1.W2).plot(W1. Cap. y.5279]. grid subplot (222). grid subplot (223).W1).A3.title(‘Filtro H1(s)’).1. grid subplot (224)..title(‘Filtro H3(s)’).0062].1. O primeiro é um vetor contendo os coeficientes do polinômio B(s) da Equação 14.label(‘Magnitude’).. B3 = [1. y.05. clg subplot (221).. xlabel (‘w.0. W4 = 0:0.abs(h4s)). Programa: W1 = 0:0.01:10.3.447]. H4s = freqs(B4..abs(h2s)).rps’). H2s = freqs(B2.abs(h3s)).5279]. utiliza o intervalo de -π a π e quando estes limites são ultrapassados é gerada uma descontinuidade.2359].label(‘Magnitude’). A2 = [1. 14 – Processamento de Sinais 150 .W4). colocamos o alcance da freqüência para começar no zero e incluímos todos os parâmetros do filtro.. B2 = [1.W3).1117. o ângulo está restrito ao intervalo 2π.2.plot(W2..A4. B1 = [0.label(‘Magnitude’).0.rps’).0.2359]. H3s = freqs(B3.0..Curso de MATLAB A função freqs calcula os valores de uma função complexa H(s). Esta função.title(‘Filtro H2(s)’).0. Em geral.0].rps’).

.799z -2 0. Este número de pontos define a resolução.0.2066z -2 1 .4131z -1 + 0. usando 3 argumentos de entrada.778z -1 + 0.1.. o segundo é um vetor contendo os coeficientes do polinômio A(z).2) Se o denominador da função de transferência for igual a 1. 14 – Processamento de Sinais 151 .2066 + 0. Através deste ajuste da resolução podemos determinar os tipos de filtros e as freqüências críticas.0.1584z -2 jwt .4425z -1 + 0.n Esta função de transferência corresponde a ordem n dos filtros digitais. o filtro é um FIR(resposta finita ao impulso) e se for diferente de 1 o filtro é um IIR(resposta infinita ao impulso). + b n z . O primeiro é um vetor contendo os coeficientes do polinômio B(z) da Equação 14.159z -2 0.3695z -1 + 0.443z -1 + 0.Curso de MATLAB Função de Transferência Digital A função de transferência digital é definida por H(z) onde z = e de transferência H(z) é a seguinte: H(z) = B(z) A(z) H(s) = b 0 + b1 z -1 + b2 z -2 + .5792 + 0. Cap..42z -2 1 . e o terceiro é para especificar o número de valores de freqüências normalizadas que se quer no intervalo de 0 a π.894 .0. H1 ( z) = H 2 ( z) = H 3 ( z) = H 4 ( z) = 0.2.42 .n a 0 + a1 z -1 + a2 z -2 + .894z -2 1 .789z -1 + 0.1. A função freqz calcula os valores de uma função complexa H(z).5792z -2 1 + 0..1958z -2 0.4425z -1 + 0. Ambos são muito utilizados no processamento de sinais digitais. + a n z . Na forma geral a função (14.

4131.label(‘Magnitude’).-1.rps’).789.rps’)... A1 = [1..w1T] = freqz(B1.A4.abs(H2z)).3695.0.5792.42].. y. [H2z. B4 = [0.title(‘Fitro H2(z)’).plot(w1T.plot(w2T. xlabel (‘w.abs(H1z)).4425.2066]. A4 = [1. grid subplot (224).4425. grid subplot (222).100).443. H(s) = s2 s 2 + 2s + 1 Cap.Curso de MATLAB Programa: B1 = [0..-0. xlabel (‘w.0.799]..5792]..w3T] = freqz(B3..0.label(‘Magnitude’).0. [H3z.1584]. [H1z.plot(w4t.A2. [H41z.778.159].2066.0. grid A fase de um filtro digital pode ser plotada usando-se a função angle ou a unwrap. 14 – Processamento de Sinais 152 .0. xlabel (‘w.w1T] = freqz(B4. y.abs(H4z)). clg subplot (221)..rps’).42. grid subplot (223).rps’).title(‘Fitro H1(z)’).A3.title(‘Fitro H3(z)’). Use freqüência normalizada no eixo X para filtros digitais.-0.label(‘Magnitude’).title(‘Fitro H4(z)’)..1958].-1.w2T] = freqz(B2.A1.0.-0.100).100). y. y.100).894]. plote a magnitude. B2 = [0..0. Pratique ! Para estas funções de transferência.label(‘Magnitude’).894. 1.abs(H3z)).0. A3 = [1.0. A2 = [1..0.plot(w3T. xlabel (‘w. B3 = [0.

414 3. A relação entre o sinal de entrada x diferencial.0. O terceiro filtro depende apenas dos valores de entrada. Os filtros digitais podem ser representados por funções de transferência ou equações diferenciais.058z -5 .0.116z -4 . Porém os valores de entrada necessários são os posteriores e isso pode ser problemático quando os dados são adquiridos em tempo real.707z .42x n -2 + 0. Os filtros digitais são implementados por software.707 z .N1 ∑ b k xn− k .0.163 . que está escrita na forma geral: yn = Exemplos: y n = 0.163z -6 4.44x n -1 .0.0. H(s) = 5s + 1 s + 0.16x n -2 y n = 0.2z -3 + 0.17x n -2 + 0.17x n -4 + 0.0. H(s) = 0.04x n -1 + 0.∑ a k yn − k k =0 k =1 N2 N3 N2 N3 n e o sinal de saída y n é descrita pela equação k = .33x n + 0. A função filter do MATLAB assume a equação diferencial na seguinte forma: y n = ∑ b k xn− k .058z -1 + 0.3 Implementação de Filtros Digitais Filtros analógicos são implementados com componentes eletrônicos como resistores e capacitores. 14 – Processamento de Sinais 153 .42x n . O segundo filtro requer valores não apenas de entrada mas também os valores anteriores da saída. Estes filtros são FIR porque os denominadores são iguais a 1.∑ a k y n− k k =1 que corresponde a seguinte função de transferência: Cap.4s + 1 2 14.0.116z -2 + 0.04x n -5 y n = 0. A saída do primeiro depende somente dos valores anteriores do sinal de entrada. H(s) = .0.25x n -3 + 0.Curso de MATLAB 2.33x n +1 + 0.33x n -1 As três equações diferenciais representam diferentes tipos de filtros.

42. que pode calcular o sinal de saída correspondente usando a seguinte forma: N = length(x).33*x(N-1) + 0.0.33*x(2)..33*x(N)..25. Nós podemos usar a função filter para o terceiro filtro porque a equação não está ajustada na forma geral usada pela função.33*x(n-1).0.0. y(N) = 0. A = [1].33*x(1) + 0.-0.x).04. y(1) = 0.n a 0 + a1 z -1 + a2 z -2 + . y(2:N-1) = 0. + b n z .33*x(3:N) + 0.0.44.. Y = filter(B.33*x(1) + 0.. + a n z . O terceiro argumento é o sinal de entrada.33*x(2) for n=2:N-1 y(n) = 0. A = [-0. end y(N) = 0. Assumindo um sinal de entrada x constrói-se um vetor x.33*x(1:N-2).0. Neste caso implementamos o filtro utilizando um vetor aritmético..16].33*x(2:N-1) + 0.A. A terceira equação precisa começar em k=0 e não em k= -1.0.A.33*x(N).0.Curso de MATLAB H(z) = B(z) A(z) H(s) = b 0 + b1 z -1 + b2 z -2 + . Uma outra forma é a seguinte: N = length(x).17.17.n Os dois primeiros argumentos da função filter são vetores com os coeficientes de [bk] e de [ak].0.x). Y = filter(B.42]. y(1) = 0.0. Cap.33*x(n) + 0. Exemplo2: B = [0.04].33*x(N-1) + 0. Exemplo1: B = [0. 14 – Processamento de Sinais 154 .33*x(n+1) + 0.

A] = cheby2utter (N.A] = ellip (N. x k = sin(2π1000kT) x k = 2 cos(2π100kT) x k = -sin(2π2000kT) x k = cos(2π1600kT) 14. 14 – Processamento de Sinais 155 . 4. 1.A] = cheby1butter (N. Plote a entrada e a saída do filtro no mesmo gráfico e determine o efeito do filtro no sinal de entrada. As funções para se projetar filtros IIR digitais que usam protocolos analógicos possuem o seguinte formato: [B. [B. Entretanto o vetor Wn precisa conter 2 elementos que representam as freqüências normalizadas especificadas da banda de freqüência.Rs.159 Use os seguintes sinais de entrada no filtro.Wn). e a freqüência de corte normalizada (Wn). z2 – 0.Wn). Os vetores de saída B e A são os vetores da expressão geral para filtros IIR e podem ser utilizados para se achar a função de transferência ou a equação diferencial.Rp.42z2 – 0.443z + 0.Rs. [B. 3. 2. de um sinal de até 5KHz.Wn).4 Projeto de Filtros Digitais A discussão será separada em duas técnicas: uma para filtros IIR e outra para filtros FIR. como Wn(1) e Wn(2).Wn).42 . Cap. Para se projetar filtros passa-banda os argumentos das funções são os mesmos do passa-baixa. os filtros Chebyshev Tipo I são usados com ripple na banda de passagem. Os filtros elípticos possuem uma faixa de transição mais definida que o filtro Butterworth com as mesmas especificações. O argumento de entrada representa a ordem do filtro (N).Rp. o ripple (Rs e Rp).Curso de MATLAB Pratique ! A seguinte função de transferência foi projetada para deixar passar freqüências entre 500Hz e 1500Hz. Projeto de Filtros IIR usando protocolos analógicos O MATLAB possui quatro tipos de filtros digitais baseados em projetos de filtros analógicos. [B.A] = butter (N. os filtros Chebyshev Tipo II são usados com ripple na banda de corte. H(z) = 0. Os filtros Butterworth são usados como passa-banda e corta-banda.

Projeto de um Filtro IIR O MATLAB possui uma função para projetar filtros com o método Yule-Walker.x). um parâmetro adicional com o nome ‘high’ precisa ser adicionado e ficam assim as novas formas: [B.6. title(‘Filtro Passaalta’).1 ou 20db. abs(H)). ylabel (‘Magnitude’).’high’). os argumentos são os mesmos dos filtros passa-alta..’high’). O argumento Wn precisa ser um vetor que contenha 2 valores definem a banda de freqüência como Wn(1) e Wn(2) para serem rejeitadas.grid Para aplicar neste filtro um sinal x basta usar a seguinte instrução: Y = filter (B.’high’).Rs.A] = cheby2 (6.0. [B. [H.Wn. Cap. Para ilustrar estas funções supomos que precisemos projetar um filtro passa-alta Chebyshev Tipo II de ordem 6.A] = ellip (N.Rp. Os comandos para o projeto deste filtro e para plotar a magnitude característica são os seguintes: [B. As freqüências em f precisam começar em 0..6. terminando em 1 e serem crescentes. O comando para projetar um filtro com esta função é o seguinte: [B. mas com o termo ‘stop’ ao invés de ‘high’. 14 – Processamento de Sinais 156 .Wn. [B. hertz = wT/(2*pi*T).A] = cheby1butter (N.A.A] = cheby2utter (N. A magnitude m precisa corresponder com a freqüência f.Wn. Para se projetar filtros corta-banda.Curso de MATLAB Para se projetor filtros passa-alta. Nós queremos como limite de passabanda um ripple de 0. Esta técnica de projeto pode ser usada para projetar formas arbitrárias.A. [B. possibilitando projetar respostas freqüenciais multibandas. plot (hertz. Os vetores f e m especificam as características freqüência-magnitude do filtro.Rs. O exemplo a seguir nos mostra um projeto de um filtro com dois passabandas e que plota a magnitude de resposta na freqüência normalizada.m). xlabel (‘Hz’). O filtro é para ser usado para um sinal de até 1KHz.001. e representa a magnitude esperada para a freqüência correspondente.A] = yulewalk(n.Wn.Rp.’high’)..wT] = freqz (B. Os vetores de saída B e A contém os coeficientes de n ordem do filtro IIR.20.f. T = 0.A] = butter (N. A freqüência de corte é de 300HZ e a freqüência normalizada é de 300/500 ou 0.100).’high’).

2 .wT/pi.4 .. O exemplo a seguir nos mostra um projeto de um filtro com dois passabandas e que plota a magnitude de resposta na freqüência normalizada.1 .8 1]. plot (f.m. f = [0 .A] = yulewalk (12.5 .. ylabel (‘Magnitude’).2 .f.(Use um filtro de ordem 5) 2.. [H..m).4 .f.. [B. onde usa-se uma freqüência de até 1KHz. Portanto a função Remez calcula apenas um único vetor. plot (f...6 .abs (H)).m.m).1 ... ylabel (‘Magnitude’).100).. Filtro FIR passabaixa com corte de 75Hz.6 . onde usa-se uma freqüência de até 500Hz.. f = [0 . Plote a magnitude do filtro projetado para confirmar se as características estão corretas. grid Projeto Direto de um Filtro FIR Os filtros FIR são projetados pelo MATLAB usando o método de Parks-McClellan que usa o algoritmo de troca de Remez. onde usa-se uma freqüência de até 500Hz. xlabel (‘Freqüência Normalizada’).. pois o denominador é igual a 1.abs (H)).7 . title(‘Filtro IIR com dois passabandas’).Curso de MATLAB m = [0 0 1 1 0 0 1 1 0 0 ]. grid Pratique! Use as funções do MATLAB descritas nesta seção para projetar os seguintes filtros. 1..[1]. xlabel (‘Freqüência Normalizada’).wT] = freqz(B.m). como mostrado a seguir: B = remez (n..wT/pi.3 . m = [0 0 1 1 0 0 1 1 0 0 ]. Lembrando que os filtros FIR necessitam apenas do vetor B. Filtro IIR passaalta com corte de 100Hz.wT] = freqz(B. [H.3 .(Use um filtro de ordem 40) Cap. 14 – Processamento de Sinais 157 .(Use um filtro de ordem 6) 3.8 1].A.7 .. title(‘Filtro FIR com dois passabandas’).5 .. Filtro IIR passabaixa com corte de 75Hz...100). B = remez (50. O primeiro argumento define a ordem do filtro.f. e os valores de f e m são similares ao da técnica do filtro de Yule-Walker.

Os valores de saída são coeficientes dos vetores que definem os três filtros H1(z). H2(z) e H3(z). 14 – Processamento de Sinais 158 . A freqüência do sinal de informação do sensor depende dos tipos de dados que estão sendo medidos. um passabanda com faixa de 500Hz a 1KHz. um passabanda com faixa de 500Hz a 1KHz. Desta forma o sinal pode conter sinais múltiplos ao mesmo tempo. Técnicas de modulação podem ser usadas para mover o conteúdo da freqüência para a banda de freqüência especificada. e o terceiro contém componentes entre 2KHz e 5KHz. como na figura a seguir: Figura 4 – Diagrama de I/O Cap. 1.(Use um filtro de ordem 80) Aplicação na Solução de Problemas: Filtros para Separação de Canais Imagens coletadas de uma nave espacial ou de satélites que circundam a terra são enviadas para a terra como um fluxo de dados. o segundo sinal contém componentes entre 500 e 1KHz. onde usa-se uma freqüência de até 1KHz. DESCRIÇÃO DO PROBLEMA Projete três filtros para serem usados com um sinal de até 10KHz. O primeiro sinal contém componentes entre 0 e 100Hz. Para separar estas três componentes precisamos de um filtro passabaixa com corte de 100HZ. Filtro FIR passabanda com faixa de freqüência entre 100Hz e 200Hz. Por exemplo. Informações coletadas por outros sensores também são transmitidas para a terra. e um passa alta com corte de 2KHz. e um passa alta com corte de 2KHz.Curso de MATLAB 4. Um filtro é um passabaixa com corte de 100HZ. DESCRIÇÃO DOS DADOS DE ENTRADA E SAÍDA Não há valores de entrada para este problema. O sinal contendo estas três componentes é de até 10KHz. 2. Estes fluxos de dados são convertidos em sinais digitais que contém informações que podem ser recombinadas e assim reconstruir as imagens originais. A ordem dos filtros precisa ser suficientemente grande para gerar um pequena banda de transição para que a componente de uma freqüência não contamine as outras componentes. supomos que queremos enviar 3 sinais em paralelo.

5. Sumário 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 elíptico calcula a freqüência de um sinal aplica um filtro digital em um sinal de entrada calcula a freqüência analógica calcula a freqüência 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. Precisaremos experimentar várias ordens para sabermos se as bandas de transição não irão interferir uma nas outras. 14 – Processamento de Sinais 159 . Nós usamos Hz como unidade no eixo X. nós usamos a função freqz para plotar as características dos filtros. EXEMPLO MANUAL O espectro abaixo nos mostra a amostra de freqüência com os três sinais filtrados. Figura 4 – Espectro de faixa dos filtros 4. Lembrando que a função freqz normaliza as freqüências para valores entre 0 e π. SOLUÇÃO MATLAB O seguinte programa MATLAB determina os valores da freqüência normalizada para as freqüências de corte pela função butter. TESTANDO As magnitudes dos três filtros são mostradas no mesmo gráfico para podermos verificar se os filtros não se sobrepõem.Curso de MATLAB 3. Depois de calculados os coeficientes para os filtros. para facilitar a visualização das características dos filtros projetados. Nós usaremos os filtros Butterworth.

2066 + 0.1958z -2 H1 ( z) = 0. 2. Aplique um filtro passabaixa.5KHz. 4.1117 s + 0.5279 s + 1.7 para determinar as freqüências de corte e use 0.3695z -1 + 0.894 .0062 0. Compare os resultados dos filtros elíptico e do filtro Yule-Walker.778z -1 + 0. O terceiro sinal contém uma soma de senóides com freqüências de 3500Hz. 7. ambos de ordem 12. Compare os resultados usando FIR e IIR. O primeiro sinal contém uma soma de senóides com freqüências de 24Hz.1.2066z -2 1 . O segundo sinal contém uma soma de senóides com freqüências de 500Hz. 40 Hz e 75Hz. banda de transição e banda de corte. Plote 500 pontos para o sinal 1. Projete um filtro para remover freqüências entre 500Hz e 1000Hz de um sinal de até 10KHz. 4000 Hz e 4200Hz. Use 0.5279 2 s2 s 2 + 0.789z -1 + 0.0275s + 0.0.1 para determinar as freqüências de rejeição. 730 Hz e 850Hz.799z -2 6. Para os seguintes filtros determine a banda de passagem. e outro entre 500Hz e 600Hz de um sinal de até 2.Curso de MATLAB PROBLEMAS: 1. 14 – Processamento de Sinais 160 . Plote o sinal e sua magnitude usando o Hz como unidade no eixo x. um passabanda e um passaalta no sinal do problema 3 e plote a magnitude da freqüência dos sinais de saída.894z -2 H 2 ( z) = 1 . 2 e 3 em diferentes gráficos. Calcule e plote a magnitude e a fase dos três sinais do exercício anterior.1. 3. H(s) = H(s) = 0. Plote a magnitude dos dois sinais Cap. Adicione três tempos no sinal gerado no exercício 1. Escolha as amplitudes e fases para estas senóides. Use Hz como unidade no eixo x . Projete um filtro para remover freqüências entre 100Hz e 150Hz. Plote a magnitude dos dois sinais. 5. Nós usaremos a soma de senóides de até 10KHz.4131z -1 + 0.

Outras ferramentas são utilizadas em álgebra linear para derivar resultados exatos para inversas. 15 – Matemática Simbólica 161 . simplificar. exatamente da forma que você aprendeu a resolvê-las em álgebra e cálculo. sem o erro introduzido pelo cálculo numérico. Há diversas ferramentas para combinar. A aritmética simbólicas é a prática de resolução dessas equações por meio da aplicação de regras conhecidas e de identidades a determinados símbolos. no Canadá. também está disponível no MATLAB. 15.Matemática Simbólica Introdução Agora é possível instruir ao MATLAB que manipule expressões matemáticas.1 v= d x2 f= ∫ x2 dx A toolbox de Matemática Simbólica é uma coleção de funções para o MATLAB usadas para manipular e resolver expressões simbólicas. derivar. além de números. que lhe permitam calcular com símbolos matemáticos. A aritmética de precisão variável que calcula simbolicamente e retorna um resultado para qualquer grau de precisão especificado. ele solicitará ao Maple para fazê-lo e então retornará o resultado para a janela de comando do MATLAB. fazer manipulações simbólicas no MATLAB é uma extensão natural do modo como você usa o MATLAB para processar números. originalmente desenvolvido na Universidade de Waterloo.1 Expressões Simbólicas Expressões simbólicas são strings de caracteres ou conjuntos de strings de caracteres que representam números. sem de fato usar números. Quando você pedir ao MATLAB para executar alguma operação simbólica. Cap. Aqui estão alguns exemplos de expressões simbólicas: cos(x2) 3x2 + 5x . Matrizes simbólicas são conjuntos cujos elementos são expressões simbólicas.Curso de MATLAB Capítulo 15 . Equações simbólicas são expressões simbólicas que contêm um sinal de igualdade. Por isso. As ferramentas contidas na toolbox de matemática simbólica foram criadas por meio de um poderoso programa de software chamado Maple. funções. operadores e variáveis. as variáveis não têm de ter valores previamente definidos. integrar e resolver equações diferenciais e algébricas. Esse processo é freqüentemente chamado de matemática simbólica. determinantes e formas canônicas e para encontrar os autovalores de matrizes simbólicas.

b. Cap. d ] ’ ) E x e r c í c i o s: 1. determ(M) Observe que. b. a função sym é necessária. Isto fica claro no exemplo seguinte: Exemplo M=[a. a função sym foi usada para. a expressão simbólica foi definida implicitamente pelo uso de aspas simples para dizer ao MATLAB que (‘cos(x)’) seja uma expressão simbólica. diff(sym(‘cos(x)’)). Aqui estão alguns exemplos de expressões simbólicas com seus equivalentes em MATLAB: Expressões simbólicas 1_ 2x n cos(x 2) .d]’) é uma expressão simbólica.d]’) M é uma matriz simbólica Aqui M foi definido de três maneiras: numericamente (se a.d] M é uma matriz numérica usando valores de a até d M=‘[a. por si só o tipo de argumento.d]’) 3. o MATLAB consegue descobrir que diff cos(x) e diff (‘cos(x)’) significam a mesma coisa. Geralmente a função explícita sym não é necessária onde o MATLAB puder determinar.b.c. c . ao passo que. M = sym (‘[a. Por exemplo. explicitamente. dizer ao MATLAB que M = sym (‘[a. Em MATLAB.b.Curso de MATLAB Representações de Expressões Simbólicas no MATLAB O MATLAB representa expressões simbólicas internamente como strings de caracteres para diferenciá-las de variáveis numéricas e operadores. onde func é uma função e arg é um argumento na forma de string de caracteres. em vez de uma expressão numérica. mas a primeira forma é certamente mais fácil de ser digitada. no primeiro exercício acima.c.c. b . Contudo. 15 – Matemática Simbólica 162 . como uma string de caracteres e como uma matriz simbólica. a forma func arg é equivalente a func(‘arg’).b. ou seja.sen (2x) Representação no MATLAB ‘1 (2 * x ^ n) ’ ‘ cos(x ^ 2) .d]’ M é uma string de caracteres M=sym(‘[a. diff(‘cos(x)’) 2.c. no segundo exemplo.sin(2 * x) ’ sym ( ‘ [a .c. c e d tiverem sido predefinidos).b.

o caractere posterior no alfabeto será escolhido. A variável simbólica livre na expressão ‘ sin(pi/4) Cap. 15 – Matemática Simbólica 163 . freqüentemente torna-se difícil distingui-las de números inteiros. é escolhido. diff cos(x). é mais útil para tarefas simples que não referenciam resultados anteriores.2 Variáveis Simbólicas Quando se trabalha com expressões simbólicas contendo mais de uma variável. As expressões simbólicas sem variáveis são chamadas de constantes simbólicas. a variável livre na expressão ‘3*y+z’ é ‘y’. e a variável livre na expressão ‘ a+sin(t)’ é ‘t’. Se o caractere não for único. na expressão ‘1 / (5+cos(x))’ é ‘x’. Contudo. Quando as constantes simbólicas são visualizadas. A variável independente padrão. uma variável a é a variável independente. Nesse caso. ele seleciona uma baseado na regra seguinte: A variável independente padrão em uma expressão simbólica é uma letra minúscula única. Se houver empate. a forma mais simples (sem aspas) requer um argumento que é um string de caracteres simples sem espaços em seu interior: Exemplo diff x^2+3*x+5 diff x^2 + 3*x + 5 Na segunda equação os espaços pressupões strings de caracteres distintos. em especial na criação de um conjunto simbólico. é escolhido x. Se não há tal caractere. ou seja.Curso de MATLAB Muitas funções simbólicas são suficientemente avançadas para converter strings de caracteres em expressões simbólicas de forma automática. Mas. que não faça parte de uma palavra. Exemplo f +1 15. se você realizar uma operação numérica em um string de caracteres. aquele mais próximo de x. Consequentemente. a função sym deve ser usada para converter um string de caracteres especificamente em uma expressão simbólica. alfabeticamente falando. o MATLAB usa o valor ASCII de cada caractere na operação. em alguns casos. Exemplo f=symop(‘(3*4-2)/5+1’) isstr(f) A função isstr nada mas faz do que retornar se f é uma string de caracteres (1 = sim e 0 = não). O MATLAB armazena strings de caracteres como representação ASCII de caracteres. algumas vezes conhecida como variável livre. f representa a constante simbólica ‘3’ não o número 3. que não seja i ou j. A forma implícita.

15 – Matemática Simbólica 164 . as quais não contêm variáveis. Exemplo symvar(‘a*x+y’) encontra a variável simbólica padrão symvar (‘a*t+s/(u+3)’) u é mais próxima de x symvar(‘sin(omega)’) ‘omega’ não é um caracter único symvar(‘3*i+4*j’) i e j são iguais a sqrt(-1) symvar(‘y+3*s’. Isto será verdadeiro para expressões que contenham variáveis com múltiplos caracteres.’t’) encontra a variável mais próxima de ‘t’ Se symvar não encontrar uma variável padrão. se desejado: Exemplo diff(‘x^n’) diff(‘x^n’. use a sintaxe do MATLAB para criar a expressão simbólica equivalente do MATLAB. deriva em relação a n. d 3x 2 + 2 x + 5 dx Cap. r = e -2t d. Muitos comandos dão a você a opção de especificar a variável independente. bem como constantes simbólicas.’n’) diff(‘sin(omega)’) diff(‘sin(omega)’. especifica a variável independente.2 c. f = ax2 + bx + c b. usando esta regra. Você pode pedir ao MATLAB para lhe dizer qual a variável em uma expressão simbólica é considerada por ele como a variável independente usando a função symvar. deriva usando a variável padrão. a . não contendo variáveis simbólicas. considerará que ela não existe e retornará x. p = 3s2 + 2s + 1 4s .Curso de MATLAB cos(3/5)’ é ‘x’ porque esta expressão é uma constante simbólica. Exercícios Dada cada expressão simbólica.’omega’) deriva em relação à variável padrão ‘x’.

Dadas as expressões: m = x2 f = ax2 b-x g = 3 x2 + 2 x . Extração de Numeradores e Denominadores Se sua expressão for um polinômio racional (uma razão de dois polinômios) ou puder ser expandida em um polinômio racional (incluindo aqueles com um denominador igual a 1). Encontre a variável independente padrão que é retornada por symvar nas expressões seguintes: a .1 x-1 Cap. você pode extrair o numerador e o denominador usando numden. é possível descobrir se o resultado que parece ser um número é um inteiro ou um string de caracteres utilizando a função isstr do MATLAB. q = r + 3k 2 + 2 p d. n = 3r + 2s2 + 5 15. combinar duas expressões ou achar o valor numérico de uma expressão simbólica. O resultado pode ás vezes se parecer com um número. 15 – Matemática Simbólica 165 . mas é uma expressão simbólica representada internamente como um string de caracteres. z = 3ac +4b -2 b. x = 4a + 3c + b2 + 1 c.3 2 3 5 h = x2 + 3 + 3x 2x . você provavelmente vai querer mudá-la de alguma forma. f = s 3nt e.Curso de MATLAB 2. Conforme foi dito antes.3 Operações em Expressões Simbólicas Depois de criar uma expressão simbólica. Quase todas as funções simbólicas agem sobre expressões simbólicas e conjuntos simbólicos e retornam expressões simbólicas ou conjuntos. Há muitas ferramentas simbólicas que lhe permitirão realizar essas tarefas. Você pode querer extrair parte de uma expressão.

Se você usar a forma s = numden(f).d]= numden(m) f = ‘a*x^2 / (b . subtraem. 15.x)’ [n. Exemplo f = 2x2 + 3x .(2*x+1)/3. onde n é um conjunto de numeradores e d o conjunto de denominadores.5 g = x2 . respectivamente. e retorna o numerador e o denominador resultantes.3*x+4]’) [n.4 Operações Algébricas Padrão Diversas operações algébricas podem ser executadas em expressões simbólicas. k. 15 – Matemática Simbólica 166 .d] = numden(g) h = ‘(x^2+3)/(2*x-1)+3*x/(x-1)’ [n. duas expressões. n e d.Curso de MATLAB 3 2x 1 3 3x 4 k= 2 4 x2 numden combina e racionaliza a expressão. As linhas de comando do MATLAB para se fazer isso são: m = ‘x^2’ [n. As funções symadd. e sympow eleva uma expressão à potência da outra. multiplicam e dividem.d] = numden(k) Essa expressão . se necessário. symsub e symdiv somam.d]=numden(f) g = ‘3/2*x^2+2/3*x-3/5’ [n.4/x^2.d] = numden(h) k = sym (‘[3/2. numden retorna apenas o numerador dentro da variável s. é um conjunto simbólico.x + 7 Cap. numden retornou dois novos conjuntos.

Symop então concatena os argumentos e retorna à expressão resultante. Operações Avançadas O MATLAB tem a capacidade de realizar operações mais avançadas em expressões simbólicas. f = 1 1 + x2 2. cada um dos quais pode ser uma expressão simbólica. 15 – Matemática Simbólica 167 .Curso de MATLAB No MATLAB: f = ‘2*x^2+3*x-5’ g = ‘x^2-x+7 symadd(f.g) symsub(f. Dada as expressões: 1. um valor numérico ou um operador (+.g) sympow(f.*.(. expressões e operadores.-. ‘+’ . h = 1 1 + u2 4. g=sen(x) 3. ‘3*x’) %Encontra a expressão para f 3 Uma outra função de aplicação geral permite que você crie novas expressões a partir de outras variáveis simbólicas. A função compose combina f(x) e g(x) em f(g(x)). 3) Todas estas operações também trabalham com conjuntos de argumentos da mesma forma.ou)).^. ‘/ ’. Symop recebe até 16 argumentos separados por vírgula. g . Exemplo f = ‘cos(x)’ g = ‘sin(2*x)’ symop(f. k = sen(v) Cap. a função finverse encontra o inverso funcional da expressão.g) symmul(f. e a função symsum encontra o somatório simbólico de uma expressão.g) symdiv(f./.

k= ‘sin(v)’. ‘s’. ‘s’ ) symsum(f.‘a’) A função symsum encontra o somatório simbólico de uma expressão. ‘v’) O inverso funcional de uma expressão. b ) Retorna ∑ f ( x) 0 b x −1 ∑ f ( x) 0 ∑ f (s ) a b a s −1 ∑ f (s ) Cap.g) compose(g.f) Compose pode também ser usada em funções que tem variáveis independentes diferentes: compose ( h. Há quatro formas para a função: MATLAB symsum(f) symsum(f. digamos f(x). é a expressão g(x) que satisfaz a condição g(f(x)) = x. Por exemplo. k. 15 – Matemática Simbólica 168 . a . ‘u’. já que ln(ex) = x. a. o inverso funcional de ex é ln(x). h = ‘1/(1+u^2)’. b) symsum(f.Curso de MATLAB No MATLAB f = ‘1/(1+x^2)’. Exemplos finverse (‘x^2’) finverse (‘a*x+b’) finverse (‘a*b+c*d-a*z’. A função finverse retorna o inverso funcional de uma expressão e avisa a você se o resultado não for único. g = ‘sin(x)’. compose(f.

A função sym pode receber um argumento numérico e convertê-lo em uma representação simbólica. ∑ (2n − 1) ∑ (2n − 1) 1 ∞ 2 3. 15 – Matemática Simbólica 169 .5 Funções de Conversão Essa seção apresenta ferramentas para conversão de expressões simbólicas em valores numéricos e vice-versa. Dessa forma. A função simbólica sym2poly converte um polinômio simbólico em seu vetor de coeficientes equivalente no MATLAB. A função numeric faz o contrário. 1 2 15. ∑x 0 n 1 x −1 2 2. ou para calcular uma expressão. eval é outra função que pode ser usada para converter constante simbólica em um número. ‘s’) Cap. Exemplo eval(phi) Você já trabalhou com polinômios em MATLAB. usando vetores cujos elementos são os coeficientes dos polinômios. converte uma constante simbólica em um valor numérico. Exemplo f= ‘2*x^2+x^3-3*x+5’ n=sym2poly(f) poly2sym(n) poly2sym(n.Curso de MATLAB Exemplos 1. Exemplo phi= ‘(1+sqrt(5))/2’ numeric (phi) A função eval faz com que o MATLAB calcule um string de caracteres. A função poy2sym faz o inverso e possibilita que você especifique a variável a ser usada na expressão resultante.

c*x^3. diff(f) deriva cada elemento do conjunto: Exemplo f= sym(‘[a*x. 15 – Matemática Simbólica 170 .6 Derivação e Integração Derivação A derivação de uma expressão simbólica usa a função diff em uma dentre as quatro formas: Expressão f= ‘a*x^3+x^2-b*x-c’ diff(f) diff(f. e que queira mudar a variável para y. ‘x’) h= subs(f. ‘2’. usa-se a função subs.2) Resultado Define uma expressão simbólica Deriva em relação ao padrão (x) Deriva f em relação a (a) Deriva f duas vezes em relação a (x) Deriva a função f duas vezes em relação a (a) A função diff também opera sobre conjuntos.Curso de MATLAB Substituição de Variáveis Quando se tem uma expressão simbólica em x. b*x^2. tenta encontrar outra expressão simbólica F tal que diff(F)=f. d*s]’) diff(f) Integração A função de integração int(f). ‘x’) 15. Cap. ‘a’) diff(f. ‘s’. 2) diff(f. Exemplo f= ‘a*x^2+b*x+c’ subs(f. onde f é uma expressão simbólica. Se f for um vetor simbólico ou matriz. ‘a’.

15 – Matemática Simbólica 171 . pi/2. Ele pega um tomate maduro em sua mochila. Onde estará o tomate a um intervalo arbitrário de t segundos mais tarde? Quando ele alcançará a altura máxima? Que altura acima do solo o tomate conseguirá alcançar? Quando o tomate atingirá o solo? Considere que não há resistência do ar e que g = 10 m/s. no alto do edifício Central. ymax y = 30 tmax t=0 y=0 t_plof 15.7 Transformadas As transformadas são usadas com muita freqüência em Engenharia para mudar o campo de referência entre o domínio do tempo e o domínio s. O terraço encontra-se a yo = 30 metros acima do nível do solo. pi ) int(f.Curso de MATLAB Expressão f= ‘sin(s+2*x)’ int(f) int(f. pi/2. pi) int(f. ‘s’) int(f. Cap. ‘m’. debruça-se sobre a beirada do terraço e atira-o no ar. domínio da freqüência ou domínio Z. ‘s’. O tomate é jogado para cima.‘n’) Resultado Cria uma função simbólica Integra em relação a x Integra em relação a s Integra em relação a x de pi/2 a pi Integra em relação a s de pi/2 a pi Integra em relação a x de m para n Exercício: Hélio está em uma excursão com sua turma de escola. a uma velocidade inicial vo = 20m/s. mas os sistemas complexos quase sempre podem ser analisados mais facilmente em outros domínios. Há muitas técnicas para analisar estados de equilíbrio e sistemas que sofrem mudanças muito suaves no domínio do tempo.

15 – Matemática Simbólica 172 .a) = 0 para t < a e Ku(t . Eis um gráfico da função Degrau Ku(t . é definida como Ku(t . A função Degrau Ku(t . Eis o gráfico de K δ(t-a): Exemplo u = ‘k*Heaviside(t-a)’ d = diff(u) int(d) Cap. onde K é uma constante.a): A função impulso δ(t) é a derivada da função Degrau u(t).a). A função Degrau K δ(t-a) é definida como K δ(t-a) = 0 para t < a e −∞ ∫ Kδ (t − a)dt = K ∞ para t = ª Quando representada em gráfico ela é comumente representada como uma seta de amplitude K em t = a .Curso de MATLAB Funções Degrau e Impulso Os problemas de Engenharia freqüentemente fazem uso da função Degrau u(t) e impulso δ(t) na descrição de sistemas.a) = K para t >a .

no domínio de s. usando-se o inverso da transformada de Laplace. A Transformada de Laplace da função cosseno amortecido e-at cos(wt) é encontrada usando-se a função Laplace: f=sym(‘exp(-a*t)*cos(w*t)’) F= laplace(f) pretty(F) laplace(‘Dirac(t)’) laplace(‘Heaviside(t)’) As expressões podem ser transformadas novamente para o domínio do tempo. em F(s). A Transformada de Fourier e sua inversa são 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 expressões simbólicas. 15 – Matemática Simbólica 173 . que realiza a operação f(t).Curso de MATLAB Transformada de Laplace ∞ A Transformada de Laplace realiza a operação F(s)= ∫ f (τ )e 0 − st dt . invlaplace. Para transformar f(t). O MATLAB usa as funções fourier e invfourier para transformar expressões entre domínios. no domínio do tempo. Usando F do exemplo acima temos: invlaplace(F) Transformada de Fourier A Transformada de Fourier e sua inversa são muito usadas em análise de circuitos para determinar as características de um sistema em ambos os domínios de tempo e de freqüência. Exemplo f= ‘t*exp(-t^2)’ F= fourier(f) invfourier(F) Cap.

são usadas para analisar sistemas de tempo discreto. Exemplo f= ‘2 ^ n / 7. por outro lado. A Transformada Z é definida como: F(z)= ∑ f (v) z − n n= 0 ∞ onde z é um número complexo. O formato é similar ao das funções de transformadas de Laplace e Fourier.Curso de MATLAB Transformada Z As transformadas de Laplace e Fourier são usadas para analisar sistemas de tempo contínuos. 15 – Matemática Simbólica 174 . A Transformada z e a Transformada z inversa são obtidas usando-se as funções ztrans e invztrans. Transformadas Z.(-5) ^ n / 7’ G= ztrans(f) pretty(G) invtrans(G) Cap.

Sign up to vote on this title
UsefulNot useful