Sei sulla pagina 1di 103

Sumário

1 Apresentação 5
1.1 Solução de Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Enunciado do Problema . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Descrição Entrada/Saída . . . . . . . . . . . . . . . . . . . . . 5
1.1.3 Exemplo Manual . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.4 Solução MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.5 Testando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Apresentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 Ambiente de Trabalho . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.2 Editor de Linhas de Comando . . . . . . . . . . . . . . . . . . . 10

2 Introdução 13
2.1 Introdução a Matrizes Simples . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Elementos de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Declaração de Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4 Informações sobre a Área de Trabalho . . . . . . . . . . . . . . . . . . 17
2.5 Números e Expressões Aritméticas . . . . . . . . . . . . . . . . . . . . . 17
2.6 Números e Matrizes Complexas . . . . . . . . . . . . . . . . . . . . . . 18
2.7 Formatação de Saída . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.8 Utilização do comando help . . . . . . . . . . . . . . . . . . . . . . . . 20
2.9 Utilização do comando lookfor . . . . . . . . . . . . . . . . . . . . . . . 21
2.10 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3 Manipulação de Matrizes e Vetores 23


3.1 Operações com Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1 Transposição . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.2 Adição e Subtração . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.3 Multiplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.4 Divisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.5 Potenciação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Operações Elemento a Elemento (Conjuntos) . . . . . . . . . . . . . . 25
3.2.1 Adição e Subtração . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.2 Multiplicação e Divisão . . . . . . . . . . . . . . . . . . . . . . 26
3.2.3 Potenciação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3 Matrizes Elementares . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.1 Geração de Vetores . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.2 Matriz Identidade . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.3 Matriz Composta por Elementos Unitários . . . . . . . . . . . . 28
3.3.4 Matriz Nula . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.5 Matriz Aleatória . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4 Elementos de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5 Manipulação de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . 30

2
3.5.1 Matriz Diagonal ou Diagonal de uma Matriz . . . . . . . . . . . 30
3.5.2 Matrizes Triangulares . . . . . . . . . . . . . . . . . . . . . . . 31
3.5.3 Redimensionamento de Matrizes . . . . . . . . . . . . . . . . . . 31
3.5.4 Rotação dos Elementos da Matriz . . . . . . . . . . . . . . . . 32

4 Funções 33
4.1 Funções Escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Funções Vetoriais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3 Funções Matriciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5 Polinômios 35

6 Análise Polinomial 37
6.1 Avaliação do polinômio . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.2 Comando polyval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.3 Operações Aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.3.1 Soma e subtração . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.3.2 Multiplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.3.3 Divisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.4 Raízes de polinômios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7 Gráficos 42
7.1 Gráficos X-Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7.1.1 Acessórios para os Gráficos . . . . . . . . . . . . . . . . . . . . 44
7.1.2 Números Complexos . . . . . . . . . . . . . . . . . . . . . . . . 46
7.2 Gráficos Polares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3 Gráficos 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

8 Programação 51
8.1 Arquivo.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.2 Operadores Lógicos e Relacionais . . . . . . . . . . . . . . . . . . . . . 51
8.2.1 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . 52
8.2.2 Operadores Lógicos . . . . . . . . . . . . . . . . . . . . . . . . 52
8.3 Comandos For, While e If . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.3.1 Ciclo For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
8.3.2 Comando If . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.3.3 Ciclo While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.4 Declarando Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

9 Sistemas de Equações Lineares 58


9.1 Interpretação gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
9.2 Solução usando operação com matrizes . . . . . . . . . . . . . . . . . . 59
9.3 Divisão de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
9.4 Matriz inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

3
10 Cálculo 61
10.1 Zeros de Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
10.2 Minimização de Funções . . . . . . . . . . . . . . . . . . . . . . . . . . 61
10.3 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
10.4 Limites à esquerda e à direita . . . . . . . . . . . . . . . . . . . . . . . 63
10.5 Integração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
10.5.1 Solução Simbólica . . . . . . . . . . . . . . . . . . . . . . . . . 63
10.5.2 Solução Numérica . . . . . . . . . . . . . . . . . . . . . . . . . 64
10.6 Diferenciação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
10.6.1 Derivação por expressões de diferenças . . . . . . . . . . . . . . 68
10.6.2 Comando diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
10.6.3 Derivadas de ordem superior . . . . . . . . . . . . . . . . . . . . 70
10.6.4 Derivadas Trigonométricas: . . . . . . . . . . . . . . . . . . . . 71

11 Ajuste de Curvas 72
11.1 Ajuste de Curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
11.2 Interpolação Unidimensional . . . . . . . . . . . . . . . . . . . . . . . . 73

12 Transformadas 76
12.1 Funções Degrau e Impulso . . . . . . . . . . . . . . . . . . . . . . . . . 76
12.2 Transformada de Laplace . . . . . . . . . . . . . . . . . . . . . . . . . 77
12.3 Transformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . 77
12.4 Transformada Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
12.5 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
12.5.1 Exercício 1: Sistemas Lineares . . . . . . . . . . . . . . . . . . . 78
12.5.2 Exercício 2: Equações Diferenciais e Transformadas . . . . . . . 79
12.5.3 Exercício 3: Transformada de Fourier . . . . . . . . . . . . . . . 81

13 SIMULINK 85
13.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
13.1.1 Diagrama de Blocos . . . . . . . . . . . . . . . . . . . . . . . . 86
13.1.2 Símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
13.2 Conhecendo o Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . 87
13.2.1 Iniciando o Simulink . . . . . . . . . . . . . . . . . . . . . . . . 87
13.2.2 Construindo e analisando um modelo simples . . . . . . . . . . . 88
13.2.3 Exemplo: Modelo de um processo biológico . . . . . . . . . . . . 90
13.3 Principais blocos do Simulink e suas funções . . . . . . . . . . . . . . . 96
13.3.1 Principais Fontes(Sources): . . . . . . . . . . . . . . . . . . . . 98
13.3.2 Principais blocos usados na modelgem de sistemas dinâmicos . . 98
13.3.3 Verificação do modelo . . . . . . . . . . . . . . . . . . . . . . . 98
13.3.4 Blocos de saídas(Sinks) . . . . . . . . . . . . . . . . . . . . . . 99
13.3.5 Criando blocos de sub-sistemas . . . . . . . . . . . . . . . . . . 99
13.3.6 Blocos condicionais . . . . . . . . . . . . . . . . . . . . . . . . 99
13.3.7 Personalizando o modelo e manipulando Blocos . . . . . . . . . 99

14 Referências Bibliográficas 103

4
1 Apresentação
1.1 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.

O processo ou metodologia para resolução de problemas que usaremos ao longo do


texto possui cinco passos:

1. Enunciar o problema claramente.


2. Descrever 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.1.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 enunciado
do problema é:

Calcule a distância em linha reta entre dois pontos num plano.

1.1.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 en-
trada 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 es-
tamos mostrando a informação que é usada para calcular a saída. Para este exemplo,
poderíamos usar o diagrama na Figura 1.

5
Figura 1: Diagrama I/0

1.1.3 Exemplo Manual


O terceiro passo é trabalhar o problema manualmente ou com uma calculadora, us-
ando 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 problema. 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 problema 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 este exemplo é
mostrado a seguir:

Suponha que os pontos p1 e p2 tenham as seguintes coordenadas:

p1 = (1, 5)

p2 = (4, 7)
Queremos calcular a distância entre dois pontos, que é a hipotenusa de um triângulo
retângulo, conforme mostra a Figura 2. Usando o Teorema de Pitágoras, podemos cal-
cular a distância d com a seguinte equação:

q
d= S12 + S22

q
d= (4 − 1)2 + (7 − 5)2


d= 13

d = 3.61

6
Figura 2: Triangulo retângulo

1.1.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 ex-
plicam 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

1.1.5 Testando
O passo final em nosso processo de solução de problemas é testar a solução. Primeira-
mente, 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.

7
1.2 Apresentação
O MATLAB R
pode ser usado como uma linguagem de programação ou como uma
ferramenta de cálculo interativa. Em ambos os casos, o ambiente MATLAB permite a
realização de cálculos, visualização de resultados e desenvolvimento de algoritmos usando
uma sintaxe muito próxima da notação matemática usual.
O nome MATLAB vem de MATrix LABoratory e representa bem o seu modo de
funcionamento. Todas as variáveis são definidas de forma matricial, o que faz com
que este ambiente seja ideal para resolver problemas de cálculo envolvendo matrizes e
vetores.
Um arquivo de programa MATLAB recebe a extensão .m e, por isso, também é
chamado de m-file ou arquivo .m. Ele pode ser criado e/ou modificado no editor próprio
do MATLAB - MATLAB Editor/Debugger - que possui características que auxiliam
bastante na edição de programas como auto-colorização de palavras de acordo com a
sintaxe e interação com o ambiente de cálculo do MATLAB. Existem também os arquivos
.mat que são arquivos binários que contém as variáveis da Workspace. Estes arquivos
são gerados indo em

File-> Save Workspace -> nomedoarquivo.mat

É importante diferenciar, portanto, arquivos .m dos arquivos .mat. Os arquivos .m


contém uma série de comandos que, ao serem chamados no Workspace, são executados.
Já os arquivos .mat contém somente as variáveis e os seus valores armazenados.
Uma das grandes virtudes do MATLAB é que todas as suas funções são escritas em
m-files, sendo que algumas delas podem ser modificadas e várias outras criadas. Este
fato possibilitou a criação de diversos conjuntos de funções específicas para determi-
nadas áreas, como controle, análise de sinais, finanças, entre outras. Estes conjuntos de
funções, ou de m-files, são chamados de toolbox.
Toolboxes direcionados para diversas áreas são distribuídos pela The MathWorks
Inc. - empresa que desenvolve o software MATLAB (http://www.mathworks.com) - e
inúmeros outros são desenvolvidos em todo o mundo, com e sem reconhecimento da
MathWorks, e podem geralmente ser encontrados na internet.
Um dos toolboxes desenvolvidos pela MathWorks é chamado Simulink. Ele é uma
ferramenta interativa para desenvolvimento, simulação e análise de sistemas dinâmicos
através da criação de modelos baseados em diagramas de blocos. Conjuntos de blocos
podem ser usados para modelar sistemas específicos. Esses conjuntos de blocos são
chamados Blocksets.
Assim como ocorre com os toolboxes, blocksets direcionados a várias áreas são tam-
bém desenvolvidos em todo o mundo. Para ilustrar a vastidão do campo de aplicação do
MATLAB, abaixo segue uma pequena listagem de toolboxes e blocksets desenvolvidos
pela MathWorks.

Aerospace Blockset
Biblioteca que utiliza os fundamentos do SIMULINK para prover ferramentas espe-
cializadas para o desenvolvimento de ferramentas de modelagem, integração e simulação
de aeronaves, naves espaciais, mísseis sistemas de propulsão ou subsistemas.

Bioinformatics Toolbox

8
Aplicativo MATLAB que possui ferramentas especializadas para análise de genoma,
visualização e normalização de micro vetores e análise das propriedades de proteínas.

Communications Blockset
Aplicativo SIMULINK composto por cerca de 150 blocos do SIMULINK dedicados
às áreas de desenvolvimento de projeto, simulação e análise de sistemas de comunicação
digitais e analógicos.

Control System Toolbox


Aplicativo MATLAB para área de modelagem e análise de sistemas automáticos de
controle. Este Toolbox permite modelar, simular e analisar sistemas contínuos e discre-
tos, com múltiplas entradas e múltiplas saídas (MIMO).

Data Acquisition Toolbox


Aplicativo MATLAB composto por funções para importação de dados obtidos a par-
tir de placas de aquisição de dados.

Curve Fitting Toolbox


Aplicativo MATLAB de ajuste de curvas. Este Toolbox permite modelar, simular e
analisar sofisticados métodos de ajuste de curvas de forma prática e flexível.

Financial Toolbox
Aplicativo MATLAB para área financeira (estudo de preços, cálculo de juros e inves-
timentos, análise de derivativos e otimização de portifólios).
Statistics e Optimization Toolboxes são necessários para o funcionamento do Finan-
cial Toolbox.

Image Processing Toolbox


Aplicativo MATLAB para área de processamento de imagens (estudo, tratamento e
análise de sinais analógicos/digitais transformados em imagens gráficas). Signal Pro-
cessing Toolbox é necessário para o funcionamento deste Toolbox.

Mapping Toolbox
Aplicativo MATLAB composto por funções para tratamento de mapas e informações
cartográficas (por exemplo: coordenadas cartográficas, deformações, representações tri-
dimensionais).

Partial Differential Equation Toolbox


Aplicativo MATLAB composto por funções para resolução de equações diferenciais
parciais em espaço bidimensional utilizando método de elementos finitos.

Statistics Toolbox
Aplicativo MATLAB para área de estatística, incluindo além de ferramentas estatís-
ticas básicas de análise de dados, recurso de modelagem e análise estatística de modelos
lineares e não-lineares.

SimMechanics

9
Biblioteca de blocos do SIMULINK que possibilita a modelagem e simulação de sis-
temas mecânicos, tais como: componentes mecânicos (corpos e juntas), simulação de
movimentos, etc.

1.2.1 Ambiente de Trabalho


Quando o MATLAB é inicializado, três janelas são exibidas: a Workspace, a Com-
mand History e a Janela de Comando (Command Window). Na aba Workspace aparecem
as variáveis, seu tamanho e valor atual, as variáveis são arrays onde cada elemento tem
8 bytes e podem ser editadas utilizando o Array Editor através de um clique duplo no
nome da variável. Na janela Command History são armazenados todos os comandos já
utilizados, sendo que estes podem ser reescritos na Command Window apenas utilizando
as teclas UP e DOWN do teclado, sem necessidade de serem digitados novamente. Por
sua vez, a Janela de Comando é a parte principal do MATLAB, onde serão escritos os
códigos, funções e demais comandos. Nessa janela, o “prompt” padrão (>>) é exibido
na tela e, a partir deste ponto, o MATLAB espera as instruções do utilizador. Para
introduzir uma pequena matriz, por exemplo, utiliza-se:

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

Colocam-se colchetes em torno dos dados e separam-se as linhas por ponto e vírgula.
Quando se pressiona a tecla <enter> o MATLAB responde com:

A =
1 2 3
4 5 6
7 8 7

Para inverter esta matriz, utiliza-se:

>> B = inv(A)
B =
-2.1667 1.6667 -0.5000
2.3333 -2.3333 1.0000
-0.5000 1.0000 -0.5000

1.2.2 Editor de Linhas de Comando


As setas para cima e para baixo do teclado podem ser usadas para navegar entre
comandos usados anteriormente, para nova execução ou reedição. No caso de pretender

10
efetuar o cálculo de:

s  !
π
log tan
5

Introduz-se na janela de comando:

>> log (sqt(tan(pi/5)))

Como para calcular a raiz quadrada o comando certo é sqrt, o MATLAB responde
com uma mensagem de erro:

??? Undefined function or variable sqt.

O comando com a resposta apropriada seria:

>> log (sqrt(tan(pi/5)))


ans=
-0.1597

NOTA: Todas as funções que utilizam algum tipo de ângulo em seus argumentos
interpretam tal ângulo como sendo em radianos.

O Matlab possui diversas variáveis predefinidas, incluindo pi, Inf, NaN, i e j. Três
exemplos são mostrados abaixo:

>> z = 3 + 4*i
z =
3.0000 + 4.0000i
>> Inf
ans =
Inf
>> 0/0
Warning: Divide by zero.
ans =
NaN

O termo NaN significa, em inglês, Not-a-Number (símbolo de indeterminação) e


resulta de operações
√ de valor indeterminado. Inf representa +∞ e pi representa π√. A
variável i = −1 é usada para representar números complexos. A variável j = −1

11
pode ser usada em vez de i nas operações aritméticas com números complexos por
aqueles que a preferem. Estas variáveis predefinidas podem ser redefinidas. É claro
que elas podem ser redefinidas intencionalmente a fim de liberar o nome da variável
para outros usos. Por exemplo, pode-se querer usar i como inteiro e reservar j para
a aritmética com números complexos. Seja cauteloso e deixe estes nomes de variáveis
predefinidas intocados, pois há uma infinidade de nomes alternativos que podem ser
usados. As variáveis predefinidas podem ser realocadas aos seus valores default usando
o comando clear nome da variável (por exemplo, clear pi).

12
2 Introdução
O MATLAB trabalha essencialmente com um tipo de objeto: uma matriz numérica
retangular podendo conter elementos complexos. Observa-se que um escalar é uma
matriz de dimensão 1x1 e que um vetor é uma matriz que possui somente uma linha ou
uma coluna.

2.1 Introdução a Matrizes Simples


As matrizes podem ser introduzidas no MATLAB de diferentes modos:
- Introduzida na Janela de Comando (lista explícita de elementos).
- Geradas por comandos e funções.
- Criadas em arquivos “.m”.
- Carregadas a partir de um arquivo de dados externo.

O método mais fácil de introduzir pequenas matrizes no MATLAB é utilizando uma


lista explícita. Os elementos de cada linha da matriz são separados por espaços em
branco ou vírgulas e as colunas separadas por ponto e vírgula, colocando-se colchetes
em volta do grupo de elementos que formam a matriz com o objetivo de limitá-la. Por
exemplo, introduzindo-se a expressão:

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

A matriz A é guardada na memória RAM do computador, ficando armazenada para


uso posterior. As matrizes podem, também, ser introduzidas linha a linha, o que é indi-
cado para matrizes de grande dimensão. Por exemplo:

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

Outra maneira para introduzir matrizes no MATLAB é através de um arquivo no


formato texto com extensão “.m”. Por exemplo, se um arquivo chamado “matriz.m”
contiver estas três linhas de texto:

13
A=
[1 2 3
4 5 6
7 8 7]

Então a expressão “matriz” lerá o arquivo e introduzirá a matriz A.

>>matriz

O comando load pode ler matrizes geradas pelo MATLAB e armazenadas em arquivos
binários ou matrizes geradas por outros programas armazenadas em arquivos ASCII. As-
sim, para ler um arquivo .mat chamado matriz.mat segue-se a seguinte estrutura: load
matriz.mat, e as variáveis salvas no arquivo binário matriz.mat serão carregadas na
Workspace.

NOTA: Em todos os exemplos, m e n são inteiros positivos.

Para especificar um único elemento da matriz utilizam-se os índices referentes ao


número de linha e número de coluna entre parênteses da matriz onde se encontra o
elemento: A(m,n).

Outra forma de gerar matrizes é através de ciclos for. Por exemplo, para gerar uma
matriz M com i linhas e j colunas, a seguinte estrutura pode ser utilizada:

>> for i = 1:3,


for j = 1:3,
M(i,j) = i+j;
end
end

E obtemos como resultado a matriz:

>> M
M =
2 3 4
3 4 5
4 5 6

OBS: o índice das matrizes começa em 1, não em 0.

14
2.2 Elementos de Matrizes
Os elementos das matrizes podem ser quaisquer expressões do MATLAB. Por exem-
plo:

>> x = [-1.3 sqrt(2) ((1+2+3)*4/5)^2]


x =
-1.3000 1.4142 23.0400

Um elemento individual da matriz pode ser referenciado com índice entre parênteses.
Continuando o exemplo:

>> x(6) = abs(x(1))


x =
-1.3000 1.4142 23.0400 0 0 1.3000

Nota-se que a dimensão do vetor x é aumentada automaticamente de 1x3 para 1x6


de modo a acomodar o novo elemento, e que os elementos indefinidos do intervalo são
estabelecidos como zero.
Matrizes de maior dimensão podem ser construídas a partir de pequenas matrizes.
Por exemplo, pode-se anexar outra linha à matriz A usando:

>> r= [ 10 11 12];
>> A= [A;r]
A =
1 2 3
4 5 6
7 8 7
10 11 12

Nota-se que o vetor r não foi listado porque ao seu final foi acrescentado “;”.

Podem ser extraídas matrizes pequenas da matriz original utilizando “:”.


Por exemplo:

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

15
Seleciona da linha 1 até a linha 3 e todas as colunas da matriz A atual.

2.3 Declaração de Variáveis


O MATLAB é uma linguagem de expressões. As expressões usadas são interpretadas
e avaliadas pelo sistema. As declarações no MATLAB são freqüentemente da forma:

>> variavel = expressao

Ou simplesmente:

>> expressao

As expressões são compostas de operadores e outros caracteres especiais, de funções


e dos nomes das variáveis. As avaliações das expressões produzem matrizes, que são
então mostradas na tela e atribuídas às variáveis para uso futuro. Se o nome da variável
e o sinal de igualdade “=” são omitidos, a variável com o nome ans, que representa a
palavra “answer” (resposta), é automaticamente criada. Por exemplo, introduzindo a
expressão:

>> 1900/81
ans=
23.4568

Se o último caractere da declaração é um ponto e vírgula, “;”, a impressão na tela


é suprimida, mas a tarefa é realizada. Esse procedimento é usado em arquivos com
extensão “.m” e em situações onde o resultado é uma matriz de grandes dimensões e há
interesse em apenas alguns dos seus elementos.
Se a expressão é tão grande que não cabe em apenas uma linha, pode-se continuar
a expressão na próxima linha usando um espaço em branco e três pontos, “...”, ao final
das linhas incompletas. Por exemplo:

>> s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 ...


- 1/8 + 1/9 - 1/10 + 1/11 - 1/12 + 1/13;

Calcula o resultado da série, atribuindo o somatório à variável s, mas não imprime o


resultado na tela.
As variáveis e funções podem ser formadas por um conjunto de letras, ou por um
conjunto de letras e números, onde somente os primeiros 19 caracteres do conjunto são
identificados. O MATLAB faz distinção entre letras maiúsculas e minúsculas,

16
assim a e A não são as mesmas variáveis, exceto para os argumentos do comando
help . Todas as funções devem ser escritas em letras minúsculas: inv(A) calcula a
inversa de A, mas INV(A) é uma função indefinida.

2.4 Informações sobre a Área de Trabalho


Os exemplos de declarações mostrados nos itens acima criaram variáveis que são
armazenadas na Área de Trabalho do MATLAB. Executando:

>> who

Obtém-se uma lista das variáveis armazenadas na Área de Trabalho:

Your variables are:


A B ans r s x

que mostra as seis variáveis geradas nos exemplos, incluindo ans.


Observe que o comando who está em letras minúsculas. Todo comando no MATLAB
deve ser inserido dessa forma.
Uma informação mais detalhada que indica a dimensão de cada uma das variáveis
correntes é obtida com whos, que para o exemplo produz:

>> whos
Name Size Bytes Class

A 4x3 96 double array


B 3x3 72 double array
ans 3x3 72 double array
r 1x3 24 double array
s 1x1 8 double array
x 1x3 24 double array

Grand total is 37 elements using 296 bytes

Cada elemento de uma matriz real requer 8 bytes de memória, assim a matriz A de
dimensão 4x3 faz uso de 96 bytes e todas as variáveis utilizadas um total de 296 bytes.

2.5 Números e Expressões Aritméticas


A notação decimal convencional, com ponto decimal opcional e o sinal negativo, é
usada para números. A potência de dez pode ser incluída como um sufixo. A seguir são

17
mostrados alguns exemplos de números aceitos:

3 -99 0.00001
9.637458638 1.602E-20 6.06375e23

As expressões podem ser construídas através dos operadores aritméticos usuais e das
regras de precedência:


1 Potenciação
2 / Divisão à direita
2 \ Divisão à esquerda
3 * Multiplicação
4 + Adição
4 - Subtração

Deve-se notar que existem dois símbolos para divisão: as expressões 1/4 e 4\1 pos-
suem o mesmo valor numérico, isto é, 0.25.

São usados parênteses na sua forma padrão para alterar a procedência usual dos
operadores aritméticos.

2.6 Números e Matrizes Complexas


Os Números Complexos são permitidos em todas as operações e funções no MAT-
LAB. Os números complexos são introduzidos utilizando as funções especiais i ou j que
correspondem à parte imaginária de um número complexo. Por exemplo:

>> z= 3 + 4*i

ou

>> z= 3 + 4*j

Sabendo que um número complexo é constituído por uma parte real Re e por uma
parte imaginária Im, tal que:

z = Re + Im*i

ele pode ser expresso na forma:

18
>> z= r*exp(i*theta)

em que:

>> r = abs(z)
>> theta = angle(z)*180/pi

As seguintes declarações mostram dois caminhos convenientes para se introduzir ma-


trizes complexas no MATLAB:

>> A= [1 2; 3 4]+i*[5 6;7 8]

ou

>> A= [1+5*i 2+6*i; 3+7*i 4+8*i]

Ambas produzem o mesmo resultado.


Se quisermos determinar a parte real da matriz A usamos a função real(A), já a parte
imaginária pode ser visualizada com a função imag(A) como pode ser visualizado abaixo:

>> real(A)
ans =
1 2
3 4
>> imag(A)
ans =
5 6
7 8

2.7 Formatação de Saída


O formato numérico exibido na tela pode ser modificado utilizando o comando for-
mat, que afeta somente o modo como as matrizes são mostradas, e não como elas são
calculadas ou guardadas (o MATLAB efetua todas as operações em dupla precisão).
Se todos os elementos da matriz são inteiros exatos, a matriz é mostrada num for-
mato sem qualquer ponto decimal. Por exemplo:

19
>> x = [-1 0 1]
x =
-1 0 1

Se pelo menos um dos elementos da matriz não é inteiro exato, existem várias pos-
sibilidades de formatar a saída. O formato padrão, chamado de formato short, mostra
aproximadamente 5 dígitos significativos ou usam notação científica. Para modificar o
formato da saída, devemos inserir o comando format. A tabela abaixo mostra os princi-
pais formatos:

short 5 dígitos significativos


short e 5 dígitos significativos em notação científica
long 15 dígitos significativos
long e 15 dígitos significativos em notação científica
hex em sistema hexadecimal
rat em formato de número racional
bank duas casas após a vírgula
+ Mostra o sinal do número sem o seu valor,
a parte imaginária do número é ignorada

Com o formato short e long, se o maior elemento da matriz é superior a 1000 ou


inferior a 0.001, é aplicado um fator de escala comum para que a matriz completa seja
mostrada. Por exemplo:

>> X = 1e20*x
X =
1.0e+020 *
1.3333 0 0.0000

Com o comando format + os símbolos “+”, “-”, e “espaço em branco” são mostra-
dos, respectivamente para representar elementos positivos, elementos negativos e zeros.

2.8 Utilização do comando help


O MATLAB possui um comando de ajuda: help , que fornece informações sobre a
maior parte dos tópicos:

>> help

Para obter informações sobre um tópico específico, referir help tópico. Por exemplo,

20
>> help plot

fornece uma lista de todos os comandos relacionados com gráficos bidimensionais.


A mesma sintaxe é usada para obter informações sobre um comando específico.
Temos como usar, além da linha de comando, o botão F1, que chama o MATLAB
help, que se localiza nos tópicos de ajuda

2.9 Utilização do comando lookfor


Embora o comando help forneça permita-lhe conseguir uma ajuda, ele pode não
ser a maneira mais conveniente, a menos que você saiba o tópico exato sobre o qual
necessita de informações.
Para isso, o comando lookfor fornece ajuda fazendo uma busca em toda primeira
linha dos tópicos de ajuda e retornando aqueles que contém as palavras-chave que você
especificou. O mais importante é que a palavra-chave não precisa ser um comando MAT-
LAB. Por exemplo, faz-se uma busca por funções relacionadas à palavra-chave "fourier":

FFT Discrete Fourier transform.


FFT2 Two-dimensional discrete Fourier Transform.
FFTN N-dimensional discrete Fourier Transform.
IFFT Inverse discrete Fourier transform.
IFFT2 Two-dimensional inverse discrete Fourier transform.
IFFTN N-dimensional inverse discrete Fourier transform.
lookfor laplace
DFTMTX Discrete Fourier transform matrix.
SPECGRAM Spectrogram using a Short-Time Fourier Transform (STFT).
TDAFDFT Transform-domain adaptive filter using discrete Fourier
transform.
FFT Quantized Fast Fourier Transform.
FREQS Laplace-transform (s-domain) frequency response.

2.10 Funções
As potencialidades do MATLAB residem no seu extenso conjunto de funções. O
MATLAB possui um grande número de funções intrínsecas que não podem ser alteradas
pelo utilizador. Outras funções estão disponíveis numa biblioteca externa distribuída
com o programa original (MATLAB TOOLBOX), que são na realidade arquivos com a
extensão “.m” criados a partir das funções intrínsecas. As categorias gerais de funções
matemáticas disponíveis no MATLAB incluem:

- Matemática elementar;
- Funções especiais;

21
- Matrizes elementares;
- Matrizes especiais;
- Decomposição e fatoração de matrizes;
- Análise de dados;
- Polinômios;
- Solução de equações diferenciais;
- Equações não-lineares e otimização;
- Integração numérica;
- Processamento de sinais;
- Entre outras

As seções subseqüentes mostram mais detalhadamente as diferentes categorias de


funções. Qualquer informação adicional sobre os conteúdos das diversas categorias
poderá ser encontrado no arquivo de ajuda de cada função obtido digitando o comando
help na janela de comando.

22
3
Manipulação de Matrizes e Vetores
3.1 Operações com Matrizes
O MATLAB possui dois tipos diferentes de operações aritméticas. As operações arit-
méticas matriciais são definidas pelas regras da Álgebra Linear. As operações aritméticas
com arrays (conjuntos) são efetuadas elemento por elemento. O caractere de ponto dec-
imal “.” distingue as operações matriciais das operações com arrays. No entanto, como
as operações matriciais e com arrays são iguais para a soma e para a subtração, o par
de caracteres “.+” e “.-” não é usado para estas.
As operações com matrizes no MATLAB são as seguintes:
- Transposição;
- Adição;
- Subtração;
- Multiplicação;
- Divisão à direita;
- Divisão à esquerda;
- Potenciação.

A seguir cada uma destas operações é apresentada com maior detalhe.

3.1.1 Transposição
O caractere apóstrofo ( ’ ) indica a transposta de uma matriz, por exemplo:

>> B = A’ % A variável B recebe a matriz transposta de A

Se Z for uma matriz complexa, Z’ será a matriz conjugada complexa transposta.

>>Z = [1 2; 3 4] + [5 6; 7 8]*i
Z =
1.0000+ 5.0000i 2.0000+ 6.0000i
3.0000+ 7.0000i 4.0000+ 8.0000i
>>Z1 = Z’
Z1 =
1.0000- 5.0000i 3.0000- 7.0000i
2.0000- 6.0000i 4.0000- 8.0000i

Para obter simplesmente a transposta de Z deve-se usar Z.’, como mostra o exemplo:

23
>>Z2 = Z.’
Z2 =
1.0000+ 5.0000i 3.0000+ 7.0000i
2.0000+ 6.0000i 4.0000+ 8.0000i

Caso desejar apenas a matriz complexa conjugada de Z deve-se usar Z.”

>> Z3 = Z.’’
Z3 =
1.0000 - 5.0000i 2.0000 - 6.0000i
3.0000 - 7.0000i 4.0000 - 8.0000i

3.1.2 Adição e Subtração


A adição e a subtração de matrizes são indicadas, respectivamente, por “+” e “-”.
As operações são definidas somente se as matrizes possuírem as mesmas dimensões.
A adição e a subtração também são definidas se um dos operadores for um escalar,
ou seja, uma matriz 1x1. Neste caso, o escalar é adicionado ou subtraído de todos os
elementos do outro operador. Por exemplo:

>> y = [1 2; 3 8] - 1
y =
0 1
2 7

3.1.3 Multiplicação
A multiplicação de matrizes é indicada por “*”. A multiplicação x*y é definida
somente se a segunda dimensão de x for igual à primeira dimensão de y.
Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz.
Por exemplo:

>> x=[-1; 0; 2];


>> pi*x
ans=
-3.1416
0
6.2832

24
Se os tamanhos das matrizes forem incompatíveis para a operação matricial, será
gerada uma mensagem de erro, com exceção do caso de operações entre escalares e
matrizes (para adição, subtração, divisão e multiplicação).

3.1.4 Divisão
A divisão de matrizes requer especial atenção, pois existem dois símbolos para divisão
de matrizes no MATLAB “\” e “/”". Se A for uma matriz inversível quadrada e b for um
vetor coluna (ou linha) compatível, então A\b e b/A corresponderão respectivamente à
multiplicação à esquerda e à direita da matriz b pela inversa da matriz A, ou inv(A)*b
e b*inv(A), mas o resultado é obtido diretamente:

X = A\b é a solução de A*X = b


X = b/A é a solução de X*A = b

Deve-se ter o cuidado de observar as dimensões das matrizes que estão envolvidas
na operação, o número de colunas de A deve ser igual ao número de linhas de b em
A\b, já em b/A o número de linhas de A deve ser igual ao número de colunas de b em
A\b. A divisão à direita é definida em termos da divisão à esquerda por:

b/A = (A’\b)

3.1.5 Potenciação
A expressão A∧ p eleva A à p-ésima potência e é definida se A é matriz quadrada
e p um escalar. Se p é um inteiro maior do que um, a potenciação é calculada como
múltiplas multiplicações.
Se A é uma matriz e a é um escalar, a∧ A calcula o escalar elevado à matriz A
fazendo uso dos autovalores e autovetores.
NOTA: X∧ A, sendo X e A matrizes, apresenta erro.

3.2 Operações Elemento a Elemento (Conjuntos)


O termo operações com conjuntos é utilizado quando as operações aritméticas são
realizadas entre os elementos que ocupam as mesmas posições em cada matriz (elemento
por elemento). As operações com conjuntos são efetuadas como as operações usuais,
utilizando-se os mesmos caracteres (“ * ”, “ / ”, “ \ ”, “ ∧ ” e “ ’ ”) precedidos por um
ponto “ . ” (“ .* ”, “ . /”, “ .\ ”, “ .∧ ” e “ .’ ”).

3.2.1 Adição e Subtração


Para a adição e a subtração, as operações com conjuntos e as operações com matrizes
são iguais. Deste modo os caracteres “+” e “-” são empregados do mesmo modo e
considerando as mesmas restrições de utilização.

25
3.2.2 Multiplicação e Divisão
A multiplicação de conjuntos é indicada por “.*”. Se A e B são matrizes com as
mesmas dimensões, então A.*B indica um conjunto cujos elementos são simplesmente
o produto dos elementos individuais de A e B. As expressões A./B e A.\B formam um
conjunto cujos elementos são simplesmente os quocientes dos elementos individuais de
A e B. Assim:

>> a=[1 2 3];


>> b=[2 4 6];
>> x=a./b >> x=b./a
x = x =
0.5000 0.5000 0.5000 2 2 2

3.2.3 Potenciação
A potenciação de conjuntos é indicada por “ .∧ ”. A seguir são mostrados alguns
exemplos utilizando os vetores x e y. A expressão:
A potenciação pode usar um escalar:

>> x=[1 2 3];


>> a=x.^3
a =
1 8 27

Ou a base pode ser um escalar:

>> 2.^x
ans =
2 4 8

3.3 Matrizes Elementares


Além das já descritas, o MATLAB dispõe de diversas funções que permitem a rápida
elaboração de matrizes padrão, dentre elas:

3.3.1 Geração de Vetores


O caractere dois pontos, “:”, permite a geração de vetores no MATLAB. A declaração:

26
>> x = 1 : 5

Gera um vetor linha contendo os números de 1 a 5 com incremento unitário. Pro-


duzindo:

x =
1 2 3 4 5

Outros incrementos, diferentes da unidade podem ser utilizados, como seja o caso
do seguinte exemplo que impõe um incremento de pi/4.

>> y = 0 : pi/4 : pi
y =
0 0.7854 1.5708 2.3562 3.1416

Também são possíveis incrementos decrescentes (negativos).


Pode-se, também, gerar vetores linearmente espaçados fazendo uso da função linspace.
Por exemplo,

>> k = linspace (0, 1, 6)


k =
0 0.2000 0.4000 0.6000 0.8000 1.0000

Cria um vetor linearmente espaçado de 0 a 1, contendo 6 elementos.


Ao pretender-se um espaçamento logarítmico desde o valor inicial 10x1 até ao valor
final 10x2 do vetor composto por k elementos, a função a utilizar será:

>> logspace (x1 , x2 , k)

A exceção para essa função é quando x2 = π. Caso isso ocorra, os k pontos estarão
espaçados desde 10x1 até π.

3.3.2 Matriz Identidade


De modo a construir uma matriz identidade (quadrada ou com dimensão n x m, a
função a utilizar é dada por):

27
>> eye(m,n)

3.3.3 Matriz Composta por Elementos Unitários


No caso de ser necessário a obtenção de uma matriz composta apenas por elementos
unitários, temos que:

>> ones(m,n)

3.3.4 Matriz Nula


Para efetuar qualquer tipo de manipulação matricial, poderá ser útil a construção de
uma matriz composta por elementos nulos:

>> zeros(n,m)

3.3.5 Matriz Aleatória


A elaboração de testes a qualquer programa desenvolvido no MATLAB, ou para
utilização de um outro qualquer modo, poderá fazer uso de matrizes compostas por
números aleatórios uniformemente distribuídos no intervalo entre 0 e 1. A função que
realiza esta operação é:

>> rand(m,n)

onde m representa o número de linhas e n o número de colunas da matriz desejada.


No caso de se pretender uma distribuição normal dos números aleatórios, com média
zero, variância um e desvio padrão um, a função a ser utilizada será:

>> randn(m,n)

Cabe salientar que em uma distribuição normal, 68% dos valores estão compreendidos
entre – 1 e 1.
O comando magic(n) cria uma matriz quadrada integral de dimensões n x n (linhas
e colunas têm a mesma soma).

28
>>x=magic(4)

3.4 Elementos de Matrizes


Um elemento individual da matriz pode ser indicado incluindo os seus subscritos en-
tre parênteses. Por exemplo, dada a matriz A:

A =
1 2 3
4 5 6
7 8 9

A declaração:

>> A(3,3) = A(1,3) + A(3,1)


A =
1 2 3
4 5 6
7 8 10

Um subscrito pode ser um vetor. Se X e V são vetores, então X(V) é:

[X(V(1)), X(V(2)), .... X(V(n))].

Para as matrizes, os subscritos vetores permitem o acesso às submatrizes contínuas


e descontínuas. Por exemplo, suponha que A é uma matriz 10x10.

29
A =
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
>> A(1:5,7:10)
ans =
7 8 9 10
17 18 19 20
27 28 29 30
37 38 39 40
47 48 49 50

É uma submatriz 5x4 que consiste nas primeiras cinco linhas e nas últimas quatro
colunas.
Utilizando os dois pontos no lugar de um subscrito denota-se todos elementos da
linha ou coluna. Por exemplo,

>> A(1:2:5,:)
ans =
1 2 3 4 5 6 7 8 9 10
21 22 23 24 25 26 27 28 29 30
41 42 43 44 45 46 47 48 49 50

É uma submatriz 3x10 que consiste da primeira, terceira e quinta linhas e todas
colunas da matriz A.

3.5 Manipulação de Matrizes


Do mesmo modo, estão implementadas no código diversas funções que permitem a
manipulação e construção de matrizes genéricas.

3.5.1 Matriz Diagonal ou Diagonal de uma Matriz


Se x for um vetor, diag(x) será a matriz diagonal com x na diagonal;

30
>> x=[1 2 3 1 -1 4];
>> diag(x)
ans =
1 0 0 0 0 0
0 2 0 0 0 0
0 0 3 0 0 0
0 0 0 1 0 0
0 0 0 0 -1 0
0 0 0 0 0 4

Se A for uma matriz quadrada, então diag(A) será um vetor cujos componentes são
os elementos da diagonal de A.

>> A=[3 11 5; 4 1 -3; 6 2 1]


A =
3 11 5
4 2 -3
6 2 1
>> diag(A)
ans =
3
2
1

3.5.2 Matrizes Triangulares


O código possui duas funções que permitem a extração das matrizes riangular supe-
rior e triangular inferior de uma matriz quadrada. São elas, espectivamente:

triu(A);
tril(A);

3.5.3 Redimensionamento de Matrizes


Dada a matriz A composta por m linhas e n colunas A(m,n), esta poderá ser red-
imensionada, através do comando reshape (A,n,m), desde que o produto de mxn se
mantenha constante.

31
>>A(m,n)
>> B = reshape(A,n,m)
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B=reshape(A,3,2)
B =
1 5
4 3
2 6

3.5.4 Rotação dos Elementos da Matriz


Os elementos da matriz A poderão ser rodados 90o no sentido anti-horário (ou ro-
dados k*90o ) através do uso da função:

>>rot90(A,k)
A =
1 2 3
4 5 6
>> rot90(A,1)
ans =
3 6
2 5
1 4

32
4 Funções
4.1 Funções Escalares
Algumas funções no MATLAB operam essencialmente sobre escalares, mas operam
sobre cada elemento se aplicadas a uma matriz. As funções escalares mais comuns são:

exp Exponencial;
ebs Valor absoluto;
log Logaritmo natural;
log10 Logaritmo base 10;
sqrt Raiz quadrada;
sin Seno;
asin Arco seno;
cos Coseno;
acos Arco Coseno;
tan Tangente;
atan Arco Tangente;
round Arredondamento ao inteiro mais próximo;
floor Arredondamento ao inteiro mais próximo na direção de menos infinito;
ceil Arredondamento ao inteiro mais próximo na direção de mais infinito;
rem Resto da divisão;
sign Para cada elemento de x, sign(x) retorna 1 se o elemento é maior
que zero, 0 se é igual a zero e -1 se ele é menor que zero

4.2 Funções Vetoriais


Opera com elementos de colunas desejadas, caso seja desejado operar com linhas ao
invés de colunas deve-se transpor a matriz e então operá-la com a sua coluna que antes
era sua linha. Abaixo estão alguns exemplos de funções:

max Valor máximo dos elementos de cada coluna;


sum Soma dos elementos de cada coluna;
median Valor mediano dos elementos de cada coluna;
any Devolve 1 se qualquer elemento da coluna for diferente de 0;
min Valor mínimo dos elementos de cada coluna;
prod Produto dos elementos de cada coluna;
all Devolve 1 se todos os elementos de cada coluna forem diferentes de 0;
sort Organização dos elementos da coluna por ordem decrescente de valor;
std Desvio padrão dos elementos de cada coluna.

33
4.3 Funções Matriciais
Uma boa aplicação do MATLAB é suas funções matriciais. Dentre as mais usadas
estão essas:

eig Valores próprios e vetores próprios;


chol Fatorização de Cholesky
svd Decomposição em fator singular;
inv Inversa;
lu Fatorização triangular LU;
qr Fatorização ortogonal QR;
hess Forma de Hessenberg;
schur Decomposição de Schur;
expm Matriz Exponencial;
sqrtm Matriz de raiz quadrada;
poly Polinômio característico;
det Determinante;
size Tamanho;
norm Norma 1, Norma 2, Norma F, Norma Infinita;
cond Número de condição na norma 2;
rank Número de linhas linearmente independentes.

Vamos dar um exemplo para ilustrar algumas funções:

» P=[1 0 0; 0 2 2; 2 3 1]
P =
1 0 0
0 2 2
2 3 1
» inv(P)
ans =
1.0000 0 0
-1.0000 -0.2500 0.5000
1.0000 0.7500 -0.5000
» poly(P)
ans =
1 -4 -1 4
» size(P)
ans =
3 3
» det(P)
ans =
-4

34
5 Polinômios
Embora o MATLAB não permita trabalhar diretamente com polinômios, dispõe de
um conjunto de funções dedicadas à sua manipulação.
Os polinômios são representados no MATLAB por vetores linhas que contêm os
coeficientes das sucessivas potências do polinômio ordenados por ordem significativa de-
crescente. Vamos ilustrar com um exemplo:

» p = [1 -6 -72 -27]
p =
1 -6 -72 -27
» x=roots(p)
x =
12.1229
-5.7345
-0.3884
» p=poly(x)
p =
1.0000 -6.0000 -72.0000 -27.0000

No exemplo acima definimos um polinômio qualquer p sendo (p = s3 −6s2 −72s−27)


a seguir calculamos suas raízes através do comando roots e na seqüência pegamos os
resultados das raízes e aplicamos a função poly chegando novamente no polinômio inicial
p.
É válido relembrar de uma importante observação caso o nosso polinômio inicial
tivesse um coeficiente diferente de 1 para o maior grau (s3 ) quando aplicássemos a
função poly sobre as raízes o novo polinômio seria com coeficiente 1 para o maior grau,
o que não mudaria nada pois é uma equação em que um lado tem um polinômio p e de
outro zero, logo podemos multiplicar ambos os lados por qualquer variável.

x2 + 2x + 4 = 0

ax2 + 2ax + 4a = 0

ax2 + 2ax + 4a = 0

Além das duas operações já citadas há ainda as básicas, soma, subtração, multipli-
cação e divisão. Soma e subtração faz-se normalmente sem maiores problemas, para
multiplicação usa-se conv e para a divisão deconv.

35
Exemplo:

» p=[3 2 1] %definindo um primeiro polinômio


p =
3 2 1
» q=[4 3 1] %definindo um segundo polinômio
q =
4 3 1
» M=conv(p,q) %efetuando a multiplicação entre
%os dois polinômios
M =
12 17 13 5 1
» [d,r]=deconv(M,q) %vamos dividir a multiplicação feita
%anteriormente, por o polinômio q e isto
%deverá resultar no polinômio p, a variável
%r corresponde ao resto que nesse caso, será 0
d =
3 2 1
r =
0 0 0 0 0

36
6Aná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 compor-
tamento. 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.

6.1 Avaliação do polinômio


Como exemplo vamos tomar o seguinte polinômio:

f (x) = 3x4 − 0.5x3 + x − 5.2

Se x assumir valores escalares, podemos escrever:

fx = 3*x ^4 - 0.5*x ^3 + x - 5.2;

Se x for um vetor ou uma matriz devemos escrever:

fx = 3* x .^4 - 0.5* x .^3 + x - 5.2;

onde o tamanho da matriz f será o mesmo da matriz x.

6.2 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);

37
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.
Supondo que queiramos o valor da função g(x) = −x5 + 3x3 − 2.5x2 − 2.5 para x
no intervalo de [0,5]:

x:0:0.025:5;
a = [-1,0,3,-2,5,0,-2.5];
g = polyval(a,x)

Quando x for um escalar ou um vetor, polyval consegue calcular o valor da função


operando elemento por elemento. Mas quando x for uma matriz usa-se o comando
polyvalm:

fx = 3* x .^4 - 0.5* x .^3 + x - 5.2;

sendo a matriz x, uma matriz quadrada.

6.3 Operações Aritméticas


Podemos trabalhar com polinômios armazenando seus coeficientes em vetores, e
trabalhar apenas com estes vetores.

6.3.1 Soma e subtração


Para somar ou subtrair polinômios basta somar ou subtrair seus respectivos coefi-
cientes. 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) = x4 − 3x2 − x + 2.4

h(x) = 4x3 − 2x2 + 5x − 16


som(x) = g(x) + h(x)
sub(x) = g(x) − h(x)

38
6.3.2 Multiplicação
A multiplicação polinomial é efetuada por meio do comando conv (que faz a con-
volução entre dois conjuntos). A multiplicação de mais de dois polinômios requer o uso
repetido de conv.

m = conv(g,h)

6.3.3 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.

6.4 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 (a1, , ...) 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) = x2 + 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;

39
- 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:

f (x) = x3 − 2x2 − 3x + 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 apro-
priado, com o objetivo de verificar se o polinômio atravessa o eixo x bem nos locais das
raízes.

a. f (x) = x3 − 5x2 + 2x + 8

40
b. g(x) = x2 + 4x + 4
c. h(x) = x5 + 3x4 − 11x3 + 27x2 + 10x − 24
d. i(x) = x5 − 3x3 + 4x2 − 1

41
7 Gráficos
A construção de gráficos no MATLAB é mais uma das potencialidades do sistema.
Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais
com qualquer tipo de escala e coordenada. No MATLAB existe uma vasta biblioteca de
comandos gráficos.

7.1 Gráficos X-Y


Comandos de geração de gráficos bidimensionais:

plot Gráfico linear.


loglog Gráfico em escala logarítmica.
semilogx Gráfico em escala semi-logarítmica (eixo x).
semilogy Gráfico em escala semi-logarítmica (eixo y).
fill Desenhar polígono 2D.
polar Gráfico em coordenadas polar.
bar Gráfico de barras.
stem Gráfico de seqüência discreta.
stairs Gráfico em degrau.
errorbar Gráfico do erro.
hist Histograma.
rose Histograma em ângulo.
compass Gráfico em forma de bússola.
feather Gráfico em forma de pena.
fplot Gráfico da função.
comet Gráfico com trajetória de cometa.

Se Y é um vetor, plot(Y) produz um gráfico linear dos elementos de Y versus o índice


dos elementos de Y. Por exemplo, para exibir os números [0.0, 0.48, 0.84, 1.0, 0.91, 0.6,
0,14], basta introduzir o vetor e executar o comando plot:

>> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0.14];


>> plot(Y)

O MATLAB pode também exibir múltiplas linhas em apenas um gráfico. Exis-


tem duas maneiras, a primeira resulta no uso de apenas dois argumentos, como em
plot(X,Y), onde X e/ou Y são matrizes. Então:

• Se Y é uma matriz e X um vetor, plot(X,Y) exibe sucessivamente as linhas ou


colunas de Y versus o vetor X.

42
• Se X é uma matriz e Y é um vetor, plot(X,Y) exibe sucessivamente as linhas ou
colunas de X versus o vetor Y.

• Se X e Y são matrizes com mesma dimensão, plot(X,Y) exibe sucessivamente as


colunas de X versus as colunas de Y.

• Se Y é uma matriz, plot(Y) exibe sucessivamente as colunas de Y versus o índice


de cada elemento da linha de Y.

O segundo método (e mais fácil) de exibir gráficos com múltiplas linhas faz uso do
comando plot com múltiplos argumentos. Vamos explorá-lo em um exemplo mais detal-
hado. Primeiramente, preparemos os dados, escolhendo o domínio e as funções a serem
mostradas:

>> x = 0:0.3:30;
>> y1 = exp(-.01*x).*sin(x);
>> y2 = exp(-.05*x).*sin(.7*x);
>> y3 = exp(-.1*x).*sin(.5*x);

Escolhamos uma janela para traçar o gráfico:

>> figure(1)

O comando figure abre uma janela gráfica intitulada “Figure No.1". Este comando
é opcional; se não for utilizado, o MATLAB abrirá uma janela gráfica padrão. Agora
utilizaremos a função plot para plotar os três gráficos na mesma janela:

>> h = plot ( x , y1 , ’b+:’ , x , y2 , ’ro-’ , x , y3 , ’gx-.’ );

O terceiro, o sexto e o nono argumento representam a seqüência de propriedades:


cor, ponto e traço. Em ’ro-.’ temos uma linha vermelha com cada ponto representado
por um círculo e o espaço entre ele preenchido por ponto-e-traço.
Observa-se que ’h’ é uma referência ao gráfico plotado (neste caso, ’h’ é um vetor de
referências). Através do comando set, após os gráficos terem sido desenhados, é possível
alterar os tipos de linhas, marcadores e cores para as curvas. Por exemplo, poderíamos
fazer:

>> set(h,’LineWidth’,2,’LineStyle’,’--’)
>> set(h,’Color’,’r’)

Se desejássemos alterar apenas uma das curvas, passaríamos para o comando ’set’
um elemento do vetor (h(2), por exemplo).

43
Vejamos resumidamente os principais tipos de linhas e cores:

7.1.1 Acessórios para os Gráficos


Definamos agora os limites dos eixos, pelo comando axis. Linhas em grade podem
ser ativadas pela propriedade grid:

>> axis([0 20 -1 1]);


>> grid on

Para adicionarmos anotações no gráfico, como identificação dos eixos, título e leg-
enda, usamos os seguintes comandos:

Eixos:

>> xlabel(’Tempo’); ylabel(’Amplitude’);

Legenda e título:

>> legend(h,’Primeiro’,’Segundo’,’Terceiro’); title(’Resposta no


Tempo’);

Obs.: Se dois gráficos tiverem sido adicionados separadamente em uma janela gráfica,
o argumento de referência não é utilizado no comando ’legend’.
E eis o gráfico resultante:
Para plotar mais de um gráfico na mesma janela, têm-se três opções. A primeira foi
utilizada no exemplo anterior, que seria usar um único comando com vários argumentos.
A segunda é ativar a propriedade hold, que permite a inserção de dois ou mais gráficos,

44
Figura 3: Resultante

inserindo os comando separadamente.

>> hold on

Dessa forma, os gráficos serão sobrepostos em uma mesma janela gráfica. No en-
tanto, se não desejarmos mais essa função ativa, basta digitar:

>> hold off

E por última opção temos o comando subplot, que divide uma janela gráfica em
várias janelas no seu interior.

>>subplot(2,2,3)

Este comando divide a janela gráfica em uma matriz 2x2 (4 elementos portanto) e
prepara o terceiro elemento (linha 2, coluna 1) para receber futuros gráficos.

45
7.1.2 Números Complexos
Quando os argumentos a exibir são complexos, a parte imaginária é ignorada, exceto
quando é dado simplesmente um argumento complexo. Para este caso especial é exibida
a parte real versus a parte imaginária. Então, plot(Z), quando Z é um vetor complexo,
é equivalente a plot(real(Z),imag(Z)).

>> Z=[1+i*1;3+i*3;5+i*5;7+i*10;9+i*15];
>> plot(real(Z),imag(Z))

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 θ varia geralmente entre 0 e 2θ. A magnitude
é um valor positivo que representa a distância do eixo que fornece o angulo até o ponto.
polar(theta,r): Este 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 abaixo:

>> theta = 0:2*pi / 100 : 2*pi;


>> r = theta / (2*pi);
>> polar(theta,r);

Transformação retangular / polar ; polar / retangular: As vezes, devido a praticidade


é interessante transformarmos coordenadas de um sistema para outro.
As equações abaixo relacionam os sistemas polar e retangular:
polar / retangular =⇒ x = √r cos q ; y = r sin q ;
retangular / polar =⇒ r = x2 + y 2 ; q = atan (y/x);

7.3 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 representam 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

46
Figura 4: Gráfico em coordenadas polares

de 2 variáveis e construção de gráfico 3D.

Exemplo: Gerar o gráfico 3D da função -0.5 < x < 0.5 ; -0.5 < y < 0.5 ;
f (x, y) = z = 1 − x2 − y 2
1 = |x2 + y 2 + z 2 |

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);

47
Figura 5: Gráfico em 3D

Estes são alguns dos comandos de exibição de gráficos tridimensionais e de contornos:

plot3 Exibição do gráfico em espaço 3D.


fill3 Desenhar polígono 3D.
comet3 Exibir em 3D com trajetória de cometa.
contour Exibir contorno 2D.
contour3 Exibir contorno 3D.
clabel Exibir contorno com valores.
quiver Exibir gradiente.
mesh Exibir malha 3D.
meshc Combinação mesh/contour.
surf Exibir superfície 3D.
surfc Combinação surf/contour.
surfil Exibir superfície 3D com iluminação.
slice Plot visualização volumétrica.
cylinder Gerar cilindro.
sphere Gerar esfera.

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 ).

48
Exemplo: Rotação horizontal:
f (x, y) = z = 1 − x2 − y 2
1 = |x2 + y 2 + z 2 |

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 6: Gráfico em 3D, Rotação horizontal

49
Exemplo: Rotação vertical:
f (x, y) = z = 1 − x2 − y 2
1 = |x2 + y 2 + z 2 |

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]);

Figura 7: Gráfico em 3D, Rotação vertical

50
8 Programação
8.1 Arquivo.m
Os comandos do MATLAB são normalmente introduzidos através da janela de co-
mando, onde uma única linha de comando é introduzida e processada imediatamente.
O MATLAB é, no entanto, capaz também de executar seqüências de comandos ar-
mazenadas em arquivos.
Os arquivos que contêm as declarações do MATLAB são chamados arquivos ”.m“,
e consistem em seqüências de comandos normais do MATLAB, possibilitando incluir
outros arquivos ”.m“ escritos no formato texto (ASCII).
Para editar um arquivo texto na janela de comando do MATLAB selecione New M-
File para criar um novo arquivo ou Open M-File para editar um arquivo .m já existente,
a partir do menu File.
Os arquivos podem, também, ser editados fora do MATLAB utilizando qualquer
editor de texto. Para isso, basta salvar os arquivos com a extensão ”.m“.
Para executar um programa do tipo M-File, deve-se selecionar Run Script, também
a partir do menu File.
Existem alguns comandos e declarações especiais para serem usadas nos arquivos.
Alguns comandos importantes para se trabalhar com arquivos.m são:

% Usado para inserir comentários no texto;


clear Apaga todo os dados da memória;
input Usado quando se deseja adicionar um dado
ao problema pela janela de comando;
pause Causa uma pausa na execução do programa
até que uma tecla seja digitada;
clc Limpa a janela de comando
figure(n) Mostra a janela gráfica de número n;
close all Fecha todas as janelas gráficas.

8.2 Operadores Lógicos e Relacionais


Os operadores usados para a comparação de duas matrizes com as mesmas dimensões
são expressos por:

51
8.2.1 Operadores Relacionais
Símbolo Descrição
< Menor
<= Menor ou igual
> Maior
>= Maior ou igual
== Igual
∼= Diferente
A comparação é feita entre os pares de elementos correspondentes e o resultado
é uma matriz composta de números um(1) e zero(0), representando respectivamente
verdadeiro e falso.
Por exemplo:

» 2+2 ~ = 4
ans =
0

Observação: Apenas os operadores ”==“ e ”∼=“ testam tanto a parte real como a
imaginária, os demais, apenas a parte real.

» x=5; y=3*(x= =3)


y =
0
» x=5; y=3*(x= =5)
y =
3
» x=5; y=3*(x~ =5)
y =
0
» x=5; y=3*(x~ =3)
y =
3

8.2.2 Operadores Lógicos


Símbolo Descrição
& AND
| OR
∼ NOT
xor XOR
Esses operadores operam da mesma forma que os operadores relacionais, dando como

52
resposta verdadeiro ou falso. Exemplo:

INPUTS AND OR XOR


AB & | xor
00 0 0 0
01 0 1 1
10 0 1 1
11 1 1 0

» A = [ 1 0 1
0 0 0
1 1 1]
A =
1 0 1
0 0 0
1 1 1
» B= [ 0 1 0
0 0 1
-1 10 0]
B =
0 1 0
0 0 1
1 1 0
» A&B
ans =
0 0 0
0 0 0
1 1 0

Note que foi aplicado o operador lógico AND e esse comparou cada elemento da
matriz A com cada elemento da matriz B, sendo que sua resposta pode ser apenas 0 ou
1. Sendo que qualquer número diferente de 0, inclusive os negativos, é considerado 1
pois o MATLAB trabalha na linguagem binária.
Os operadores lógicos possuem a precedência mais baixa relativamente aos oper-
adores aritméticos e relacionais.
A precedência entre os operadores lógicos se dá da seguinte maneira:

NOT Maior precedência


AND e OR Têm igual precedência após NOT

8.3 Comandos For, While e If


Os comandos FOR, WHILE e IF controlam o fluxo e especificam a ordem e a estrutura
de cálculo do programa. No MATLAB estes comandos são semelhantes aos usados na

53
linguagem de programação C, mas com uma estrutura diferente. Nas próximas seções
deste capítulo apresentaremos a estrutura de tomada de decisões IF e os dois comandos
para gerar loops no MATLAB: o comando FOR e o comando WHILE.

8.3.1 Ciclo For


O ciclo for é controlador de fluxo mais simples usado na programação MATLAB.
Analisando a expressão:

for i=1:5,
x(i)=i^2;
end

Pode-se notar que o ciclo for é dividido em três partes:


• i =1 é realizado antes do ciclo começar.
• Testando a condição que controla o ciclo (i<=5). Se for o ciclo é executado.
• Se o teste do ciclo for falso o ciclo termina devido ao comando end.
Exemplo:

for i = 1:8
for j = 1:8,
A(i,j) = i + j;
B(i,j) = i - j;
end
end
C= A + B
C =
2 2 2 2 2 2 2 2
4 4 4 4 4 4 4 4
6 6 6 6 6 6 6 6
8 8 8 8 8 8 8 8
10 10 10 10 10 10 10 10
12 12 12 12 12 12 12 12
14 14 14 14 14 14 14 14
16 16 16 16 16 16 16 16

Neste exemplo fizemos duas matrizes através de dois ciclos variando de 1 a 8 e ao


fim disso fizemos a operação da soma dessas duas matrizes gerando uma matriz C que
é dada por:

C = A + B −→ C = ( i + j ) + ( i - j ) −→ C = 2i

54
8.3.2 Comando If
Esta instrução permite que executemos um comando se a expressão lógica é ver-
dadeira 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

A seguir é apresentado um exemplo do uso da declaração if no MATLAB. Você pode


fazê-lo na janela de comando ou ainda através do método .m novamente.

for i = 1:5,
for j = 1:5,
if (i == j)
A(i,j)=2;
else if (abs(i-j) == 1)
A(i,j) = -1;
else
A(i,j) = 0;
end
end
end
end
A
A =
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2

Neste exemplo fizemos o uso do comando if, sendo que utilizamos, o que é normal,
um dentro de outro. Sempre lembrando que no uso do comando if devemos ter uma
seqüência que executa caso a condição seja verdadeira e outra que não é requerida, mas
pode-se ter também, que execute um outro processo caso a condição seja falsa (else).
Após o ciclo, pediu-se o valor da variável A para sabermos se realmente o comando
funcionou.

8.3.3 Ciclo While


No ciclo while apenas a condição é testada. Vamos fazer um exemplo agora utilizando
o arquivo.m:

55
Primeiro abra o menu File vá em New e em seguida seleciona M-file
Agora na janela correspondente ao M-File escreva o seguinte comando:

a=1;b=15;
while a<b,
clc
disp(’loop em curso’)
a=a+1
b=b-1
pause(2)
end
clc
disp(’fim do loop’)

Antes de mais nada, salve o arquivo como loop.m na mesma pasta onde você está
rodando o programa.
Nesse comando teremos uma comparação de dados entre as variáveis a e b começando
com a valendo 1 e b valendo 15 e enquanto a for menor que b o ciclo segue e a cada
ciclo a variável a é incrementada em 1 e a b perde uma unidade, isso ocorrerá até que
a fique maior que b. Também é importante salientar o comando pause que é o tempo
que o ciclo irá levar a mais que o normal, pois como sabemos o processamento se daria
em frações de segundos e consequentemente não poderíamos observar o comando, por
isso o pause de 2 segundos.
Agora volte a janela de comando e digite loop que a instrução toda será processada.

8.4 Declarando Funções


Para criarmos funções necessitamos trabalhar na janela de M-Files, para tanto, como
você já sabe, vá em File −→ New −→ M −→ File. Antes de apresentarmos vamos dar
as 3 regras principais para a criação de funções no MATLAB:

• Deve-se ter ao menos o nome da função, a variável de entrada e a função f.

• O arquivo .m deve ser salvo com o mesmo nome da função.

• A função f deve ser igualada a função operacional.

Vamos tornar mais claro esses pontos com um exemplo:

function f = hema(x)
f = x/24/30/12

Abrimos o M-File e digitamos function f e após isso igualamos a uma função que
criaremos, no caso hema, que significa horas em ano sendo uma transformação. Na

56
linha abaixo igualamos a função f ao corpo da função hema. E por último temos a nossa
variável de entrada que é o x, que representa as horas. Pronto, agora basta salvar esse
arquivo com o nome idêntico da função hema, após isso vamos à janela de comando
principal e chamamos pela nova função:

» hema(8640)
f =
1
ans =
1

No caso, está digitado exatamente o valor de um ano em horas, portanto a


resposta é 1.

57
9
Sistemas de Equações Lineares
9.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. Há 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 pos-
samos corrigir e interpretar os resultados do computador. Uma equação linear com duas
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.

Figura 8: (a) - Retas que se interceptam,(b) - Retas paralelas,(c) - Retas iguais

Equações que representam duas retas que se interceptam podem ser facilmente iden-
tificadas porque possuem diferentes coeficientes angulares.

Exemplo:

58
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 an-
gular 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 tivermos 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 determiná-la. Vamos discutir dois métodos para solução
de sistemas de equação usando MATLAB.

9.2 Solução usando operação com matrizes


Considerando o sistema seguinte de três equações com três incógnitas:

3x + 2y − z = 10
−x + 3y + 2z = 5
x − y − z = −1

Podemos reescrever 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

Usando multiplicação de matrizes, o sistemas de equações pode ser escrito na forma:

Ax = B

59
9.3 Divisão de matrizes
No MATLAB, um sistema de equações simultâneas 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.

9.4 Matriz inversa


O sistema de equações pode ser resolvido usando matriz inversa. Por exemplo as-
sumimos 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 ∗ Ax = 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;

60
10 Cálculo
10.1 Zeros de Funções
O MATLAB encontra zeros de funções usando o comando fzero. A função, da qual
deseja-se encontrar os zeros, deve ser definida em um arquivo .m como definido previ-
amente. Considere a seguinte função f (x) = sin(x) - cos(x). A função func1 é então
escrita:

function f = func1(x);
f = sin(x) - cos(x);

A raiz pode ser determinada usando o comando fzero no comand window do MAT-
LAB ou no interior de um arquivo .m.

>> fzero(’func1’,1)
ans =
0.7854

Note que o segundo argumento, 1, é um chute inicial para o cálculo da raiz. Note
também que o valor do ângulo x que satisfaz f (x) = 0 está em radianos (0.7854 radianos
= 45 graus). No entanto, existem outros valores de x para os quais f (x) = 0, isto é, a
função f (x) tem outras raízes. Dando o chute inicial 3, por exemplo, tem-se

>> fzero(’func1’,3)
ans =
3.9270

ou, em graus, 225◦ . Este comando pode ser utilizado com qualquer outra função
escrita no MATLAB.
Os dois zeros calculados anteriormente podem ser verificados no gráfico da função.

>> fplot(’func1’,[0 2*pi]);grid;

10.2 Minimização de Funções


Continuando o exemplo anterior, a localização do ponto de mínimo da função
func1(x) no intervalo de -1 a 2pi é obtido da seguinte maneira, a partir do uso da

61
Figura 9: Verificação gráfica dos zeros da função

função fminbnd.

>> [xmin ymin] = fminbnd(’func1’,0,2*pi)


xmin =
5.49778788018538
ymin =
-1.41421356237271

10.3 Limites
Para efetuar uma operação com limites no MATLAB, o comando que se deve dar
é: limit(f(x),x,a) onde f(x) é a função que se quer achar o limite, x é a variável e a é o
número no qual o x está tendendo (x −→ a).
Exemplo: Achar o limite abaixo:

1 + x2
lim
x→2 1 − x2

>> syms x
>> limit(((1+x^2)/(1-x^2)),x,2)
ans=
-5/3

62
10.4 Limites à esquerda e à direita
Para calcular limites à esquerda e àdireita, o comando é: limit(f(x),x,a,’left’) e
limit(f(x),x,a,’right’), onde ’left’ e ’right’ são os comandos para clacular à esquerda
e à direita, respectivamente.
Exemplo: Achar os limites abaixo:
x+1
lim−
x→1 (x − 1)3

x
lim+
x→3 x−3

>> syms x
>> limit((x/(x-3)),x,3,’right’)
ans=
inf

>> limit(((x+1)/(x-1)^3),x,1,’left’)
ans =
-inf

10.5 Integração
10.5.1 Solução Simbólica
Na integração de funções, o comando que o MATLAB reconhece para tal operação
é int(f(x)).
Exemplo: Integrar as funções abaixo:

Z √
x(1 − x)2 dx

Z
2x4 − 3x3 + 5
dx
7x2

Utilizando o comando acima explicado:

63
>> syms x
>> f=((x^1/2)*(1-x)^2);
>> int(f)
ans =
1/8*x^4-1/3*x^3+1/4*x^2
>> f=(((2*x^4)-(3*x^3)+5)/(7*x^2));
>> int(f)
ans =
2/21*x^3-3/14*x^2-5/7/x

Integrais Definidas As integrais definidas podem ser calculadas com o comando


int(f(x),a,b), onde a é o limite inferior e b, o limite superior da integral.
Exemplos:

Z 2
2x
dx
0 (x − 3)2

Z 1
(1 − 2x − 3x2 )dx
0

>> syms x
>> int(((2*x)/(x-3)^2),0,2)
ans =
4-2*log(3)
>> int((1-2*x-3*x^2),0,1)
ans =
-1

10.5.2 Solução Numérica


As integrais definidas podem ser aproximadas usando a regra de Simpson com o
comando quad ou usando a regra trapezoidal com o comando trapz. Os dois comandos
trabalham de maneira bem diferente.

Regra Trapezoidal 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:

b−a
Kt = (f (x0 ) + 2f (x1 ) + ... + 2f (xn−1 ) + f (xn ))
2n

64
onde os valores de xi representam os pontos no final da cada trapézio e x0 = a
e xn = 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.
O comando trapz aproxima a integral usando os pontos da função definidos pelo
usuário. Assim, para usar este comando primeiro deve-se definir os vetores x, no inter-
valo [a, b], e f, os valores da função correspondentes aos valores definidos no vetor x.
Considere, por exemplo, a seguinte integral.

Z 1
2
I= 2xe−x dx
0

A aproximação para esta integral pode ser calculada através do seguinte programa:

function I = Integral(dx);
x = 0:dx:1;
y = 2*x.*exp(-x.^2);
I = trapz(x,y);

Este programa cria um vetor x de a = 0 até b = 1, com incremento dx definido pelo


usuário, calcula os valores de f (x) nestes pontos e usa o comando trapz para aproximar
a integral de f (x). O cálculo da integral é feito no MATLAB, usando a recém-definida
função “Integral”, da seguinte maneira.

>> integral(.1)
ans =
0.6298

Para um dx menor.

>> integral(.02)
ans =
0.6320

Observe que as aproximações da integral para dx = 0.1 e dx = 0.02 são diferentes.


De fato, usando o incremento menor dx = 0.02 aproxima-se melhor a área sob a curva
f(x). O valor exato desta integral é
Iexato = 1 − exp (−1)
ou, calculando no MATLAB I = 0.63212055882856.
A figura seguinte mostra graficamente a função para dx = 0.1 e para dx = 0.02. A
área sob a curva é a integral definida da função f(x).

65
Figura 10: Integral - Área abaixo da curva

Observando o gráfico da função, é fácil imaginar porque a diminuição do incremento


dx melhora a aproximação da integral. No entanto, na próxima seção, um método mais
eficiente para o cálculo da integral é apresentado.

Regra de Simpson O comando quad permite que se calcule a integral I usando a


Regra de Simpson. A sintaxe deste comando é a seguinte:

quad(’fc’,a,b,tol)

Entre os argumentos, ’fc’ é um arquivo.m em que se define a função da qual se quer


calcular a integral, a e b são os limites de integração e tol é a tolerância de erro exigida
para a aproximação da integral. Mostra-se mais adiante que, quanto menor a tolerância
de erro exigida, mais preciso é o cálculo da integral.
Primeiro cria-se o programa func2.m que define a função f (x).

function y=func2(x)
y=2*x.*exp(-x.^2);

O cálculo da integral I pode ser efetuado usando a tolerância usual que é de 10−3 .
Neste caso, é desnecessário definir tol no comand window.

>> quad(’func2’,0,1)
ans =
0.63212053454568

66
Calculando agora com uma tolerância de 10−8 .

>> quad(’func2’,0,1,1e-8)
ans =
0.63212055882677

Note que, comparando-se com o valor exato apresentado na seção anterior, quando
se diminui a tolerância melhora-se a aproximação da integral.

Regra de Newton-Cotes O comando quad8 usa uma forma adaptada da regra de


Newton-Cotes. Este comando funciona melhor em certas funções com certos tipos de
singularidades como, por exemplo:

Z 1√
k= xdx
0

Lembrando que uma singularidade é um ponto no qual uma função ou sua derivada
não é definida ou tende para o infinito.
Tanto quad8 quanto quad8 escrevem na tela uma mensagem quando detectam uma
singularidade, mas ainda assim o valor estimado da integral é retornado.

Exercício:

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

10.6 Diferenciação
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.

67
10.6.1 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 . Essa aproximação pode
ser feita de vários modos.
Assim, dependendo dos pontos, temos três técnicas:

A derivada segunda pode ser achada através da fórmula:

f 0 (xk ) − f 0 (xk − 1)
f 00 (x) =
xk − (xk − 1)

68
10.6.2 Comando diff
Para o cálculo de derivadas, o comando no MATLAB é dif f (f (x)), onde f(x) é a
função que se quer determinar a derivada.
Exemplo: Derivar as funções abaixo:

f (x) = 2x2 + 3x
1
f (x) =
3−x

Utilizando o comando acima explicado:

>> syms x
>>diff((2*x^2)+3*x)

ans =
4*x+3

>>diff((1/(3-x)))

ans =
1/(3-x)^2

69
10.6.3 Derivadas de ordem superior
As derivadas superiores podem ser calculadas através do comando dif f (f (x), 2),
onde essa representação é para a derivada segunda da função f(x), para derivada terceira,
coloca-se 3 no lugar do número 2, para derivada quarta, o número 4 e assim por diante.
Exemplo: Achar a derivada segunda das seguintes funções:
1
f (x) =
3−x
1
f (x) = x −
x

Utilizando o comando acima explicado:

>> syms x
>> diff((1/(3-x)),2)

ans =
2/(3-x)^3

>>diff((x-(1/x)),2)

ans =
-2/x^3

70
10.6.4 Derivadas Trigonométricas:
Exemplo: Derivar as seguintes funções:

f (x) = sen(x)

f (x) = cos(2x)
f (x) = tan(3x + 5)

Utilizando o comando acima explicado:

>> syms x
>> diff(sin|x|)

ans =
cos(x)

>>diff(cos|2*x|)

ans =
-2*sin|2*x|

>>diff(tan|3*x+5|)

ans =
3+3*tan(3*x+5)^2

71
11Ajuste de Curvas
Em numerosas áreas, precisa-se do uso de uma equação para se resolver um problema.
O que fazer se nós só estivermos com os dados na mão? Nesse caso, o uso do ajustamento
e interpolação poderá nos facilitar essa resolução.

11.1 Ajuste de Curvas


No MATLAB, a função polyfit pode resolver quando você tem os dados e tem que
transformar em polinômios. A ilustração abaixo, permite-nos ver o uso dessa função.
Depois, vamos plotar para ver se o ajustamento está certo:

» x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];
» y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];

Para usar o comando polyfit deve-se indicar qual o grau do polinômio para se tentar
ajustar. Por exemplo, se n=1, ele tentará ajustar para uma reta.
Agora, se for n=2, como o nosso caso, ele indicará um polinômio de grau 2.

Exemplo:

» n=2;
» p=polyfit(x,y,n)
p =
-9.8108 20.1293 -0.0317

O resultado do nosso ajuste é: −9.8108x2 + 20.1293x − 0.0317 . Vamos agora


verificar se o ajuste está certo:

» xi=linspace(0,1,100);
» z=polyval(p,xi);
» plot(x,y,’o’,x,y,xi,z,’:’)
» xlabel(’x’),ylabel(’y’)
» title(’Ajuste para uma curva quadrática’)

72
Figura 11: Ajuste para uma curva quadrática

11.2 Interpolação Unidimensional


Para ilustrar uma interpolação unidimensional, vamos considerar o seguinte exemplo:
fazendo parte de um projeto científico, foram coletadas informações sobre temperaturas
durante um dia, num período de doze horas.
Como saber a temperatura em uma hora qualquer?

Vamos plotar esses dados:

» horas=1:12;
» temps=[5 8 9 15 25 29 31 30 22 25 27 24];
» plot(horas,temps,horas,temps,’+’)
» title(’Temperaturas’)
» xlabel(’Hora’),ylabel(’GrausCelcius’)

Para estimar a temperatura numa determinada hora, usamos a função interp1.

Exemplo:

73
Figura 12: Ajuste para uma curva quadrática

» t=interp1(horas,temps,9.3) % Estimar a hora 9,3


t =
22.9000

» t=interp1(horas,temps,4.7) % Estimar a hora 4,7


t =
22

» t=interp1(horas,temps,[3.2 6.5 7.1 11.7])


t =
10.2000
30.0000
30.9000
24.9000

Para se ter uma precisão ainda maior, deve-se usar o argumento spline.

Exemplo:

74
» t=interp1(horas,temps,9.3,’spline’)
t =
21.8577

» t=interp1(horas,temps,4.7,’spline’)
t =
22.3143

» t=interp1(horas,temps,[3.2 6.5 7.1 11.7],’spline’)


t =
9.6734
30.0427
31.1755
25.3820

A interpolação tipo spline é diferente da linear, pois emprega o conceito diferencial,


sendo por isso que os resultados diferem. O tipo spline é mais indicado quando se quer
utilizar para gráficos.

Exemplo:

» h=1:0.1:12;
» t=interp1(horas,temps,h,’spline’);
» plot(horas,temps,’--’,horas,temps,’+’,h,t,’r’)
» title(’Temperaturas’);
» xlabel(’Hora’),ylabel(’Graus Celcius’) ;

Figura 13: Interpolação tipo spline

75
12 Transformadas
As transformadas são manipulações matemáticas para representar os mesmos elemen-
tos em diferentes domínios por meio de transformações nos mesmos. Na Engenharia, elas
são usadas com muita freqüência 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 anal-
isar 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.
A função impulso δ(t) é a derivada da função R∞
Degrau u(t). A função Degrau K
δ(t-a) é definida como K δ(t-a) = 0 para t<a e −∞ kδ(t − a)dt para t =a. Quando
representada em gráfico ela é comumente representada como uma seta de amplitude K
em t = a:

Figura 14: Gráfico da função δ(t - a)

12.1 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 e
representada na figura a seguir.

Exemplo:

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

76
Figura 15: Gráfico da função Degrau Ku(t - a)

12.2 Transformada de Laplace


A Transformada de Laplace realiza a operação
Z ∞
F (s) = f (t)e−st dt
0

Para transformar f(t), no domínio do tempo, em F(s), no domínio de s. A Transfor-


mada de Laplace da função cosseno amortecido e−at cos(ωt) é encontrada usando-se a
função Laplace:

syms a t w
f=sym(’exp(-a*t)*cos(w*t)’)
F= laplace(f)
pretty(F)
laplace(sym(’Dirac(t)’))
laplace(sym(’Heaviside(t)’))

As expressões podem ser transformadas novamente para o domínio do tempo, usando-


se a Transformada Inversa de Laplace ilaplace que realiza a operação f(t). Usando F
do exemplo acima temos:

ilaplace(F)

12.3 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 ifourier para transformar ex-
pressões entre domínios. A Transformada de Fourier e sua inversa são definidas por:

77
Z ∞
F (s) = f (t)e−jwt dt
−∞
Z ∞
f (t) = F (w)ejwt dw
−∞

O MATLAB usa um w para representar ω em expressões simbólicas.

Exemplo:

syms t
f= sym(’t*exp(-t^2)’)
F= fourier(f)
invfourier(F)

12.4 Transformada Z
As transformadas de Laplace e Fourier são usadas para analisar sistemas de tempo
contínuos. A Transformada Z, por outro lado, é usadas para analisar sistemas de tempo
discreto. A Transformada Z é definida como:

f (k)z −k
X
F (z) =
k=0
,
onde z é um número complexo.

A Transformada Z e a Transformada Inversa de Z são obtidas usando-se as funções


ztrans e iztrans. O formato é similar ao das funções de Transformadas de Laplace e
Fourier.

12.5 Exercícios
12.5.1 Exercício 1: Sistemas Lineares
O circuito mostrado abaixo possui uma fonte de tensão contínua de 60V e quatro
resistores distribuídos em três malhas. Utilize o MATLAB para resolver o sistema linear
e achar as correntes no circuito.

7I1 + 12(I1 − I2 ) = 60
12(I2 − I1 ) + 6(I2 − I3 ) = 0
6(I2 − I3 ) + 12I3 = 0

78
Figura 16: Circuito elétrico do exercício 1

Aplicando as leis de Kirchhoff no circuito, têm-se três equações para três incógnitas
linearmente independentes (I1 , I2 e I3 ).

19I1 − 12I2 = 60
−12I1 + 18I2 − 6I3 = 0
6I2 + 18I3 = 0

Reorganizado as equações, tem-se o sistema pronto para ser passado para forma
matricial e então ser resolvido, sendo, no caso do sistema elétrico R3X3 .I3X1 = V3X1 .

Comandos utilizados em sistemas lineares:

x=A\B Divisão à esquerda para sistemas Ax=B


x=B/A Divisão à esquerda para sistemas xA=B
inv(A) Inversão de A
det(A) Determinante de A
rank(A) Oposto de A

12.5.2 Exercício 2: Equações Diferenciais e Transformadas


Achar a equação para a tensão no capacitor no circuito abaixo utilizando solução por
equações diferenciais considerando nulas as condições iniciais, ou seja, vC (0).

Figura 17: Circuito elétrico do exercício 2

Aplicando a lei das malhas de Kirchhoff, tem-se

79
Ri(t) + vC − VS (t) = 0 (1.1)
Como os elementos estão todos em série, a corrente que flui pelo resistor é a mesma
que flui pelo capacitor:
i(t) = iC (t) = C dtd vC dt (1.2)
Substituindo (1.2) em (1.1) tem-se a equação diferencial de 1a ordem para um circuito
RC série:
RC dtd vC dt + vC (t) − V = 0 (1.3)
A tensão no capacitor é dada pela equaçao diferencial, que é mostrada na equaçao
abaixo:

−1t
vC (t) = V (1 − e RC ) (1.4)
a. Função dsolve

A funçao dsolve fornece solução simbólica para equações diferenciais ordinárias.


Basta simplesmente entrar com uma ou mais equações diferenciais e suas respectivas
condições iniciais que a resposta é fornecida. Por exemplo, para resolver a equação
d2
dt2
y = t com condições iniciais y(0) = −2 e y 0 (0) = 0, entra-se no MATLAB com

dsolve (’D2y=t’,’y(0)=2’,’Dy(0)=0’)
ans =
1/6*t^3-2

Agora resolva a equação (1.3) utilizando a função dsolve.

b. Transformada de Laplace

A seguir, tem-se uma tabela com os pares mais simples da Transformada de Laplace.
Teste alguns deles no MATLAB, sem se esquecer de declarar as variáveis simbólicas com
o comando sym(’var1’) ou syms var1 var2 var3 ....
Voltando ao exercício 2, a solução da equação (1.3) pode ser obtida a partir da
Transformada de Laplace da mesma, obtendo VC (S), que é a tensão do capacitor no
domínio s. Utilizando a função de laplace, tem-se o resultado em (1.5).

syms R C V
vR=R*C*diff(sym(’vC(t)’));
vC=sym(’vC(t)’);
Y=laplace(vR+vC-V)
y =

R*C*(s*laplace(vC(t),t,s)-vC(0))+laplace(vC(t),t,s)-V/s

80
Figura 18: Transformadas de Laplace para algumas funções δ(t - a)

V
RCs(VC (s) − vC (0)) + VC (s) − s
= 0 (1.5)

A partir dessa simples manipulação algébrica da equação para isolar a variável VC (s)
e expansão em frações parciais, pode-se então aplicar a Transformada Inversa de Laplace
para achar vC (t)utilizando a função ilaplace do MATLAB.
V V
VC (s) = s
− 1
s+ RC
(1.6)

E o resultado da manipulação através do domínio s deve coincidir com a resolução


obtida pelos métodos tradicionais para solução de equações diferenciais ordinárias de 1a
ordem:

1t
L−1 {VC (s)} = vC (t) = V (1 − e RC ) (1.7)

Tabela de Comandos úteis - Transformadas

laplace(f) Transformada de Laplace de f


ilaplace(F) Transformada Inversa de Laplace de F
fourier(f) Transformada de Fourier de f
ifourier(F) Transformada Inversa de Fourier de F
ztrans(f) Transformada Z de f
iztrans (F) Transformada Inversa de Z de F

12.5.3 Exercício 3: Transformada de Fourier


Para fazer uso da Transformada Discreta de Fourier (DFT) ou da Transformada
Discreta Rápida de Fourier (FFT), vamos gerar um sinal composto de três freqüências
distintas e analisar seu espectro de freqüências através do comando fft.

81
1) Declare as constantes da rotina no MATLAB. São elas:
a. Freqüência de amostragem (Fs): número de pontos por período que o sinal será
amostrado (medido);
b. Ciclos de amostragem (k): número de períodos que o sinal vai ser amostrado em
relação à freqüência mais baixa;
c. Freqüências 1, 2, 3 (f1, f2, f3): definir valor de uma freqüências quaisquer que com-
porão o sinal a ser analisado. O sinal será da forma

y(t) = 100 ∗ (sin(2.π.f 1.t + 2.π.f 2.t + 2.π.f 3.t)

2) Construa o vetor do tempo para a função y a partir da geração de um vetor da


k
seguinte forma: ”t = (0 : passo : ttotal )” sendo ”passo = F1s ” e ”ttotal = min([f 1,f 2,f 3])
”.

3) Tendo gerado o vetor do tempo e declarado as constantes na 1a etapa, plote a


função y(t). Um exemplo para freqüências de 100, 200 e 300 Hz está na figura 19.

Figura 19: Forma de onda de y(t) para f1=100, f2=200 e f3=300.

4) Para a análise do espectro, execute a FFT (Fast Fourier Transform) do sinal da


função y(t) por meio do comando fft da seguinte forma: "Y = f f t(y)".

5) Construa um vetor de freqüências para a plotagem da seguinte forma: "F = (0 :


Fs
length(y) − 1) ∗ lenght(Y )
;", Onde Fs é a freqüência de amostragem do sinal, que pode
ser considerada como 1 para exibir um espectro de freqüências normalizado, ou seja, de
zero a 1, independentemente da freqüência de amostragem do sinal.

6) Por fim, plote o módulo da série Y em função de F. Não se esqueça de, além de
operar o módulo de Y, deve-se dividir os valores do mesmo pelo número de pontos do
vetor da seguinte forma "abs(Y)/lenght(Y)". Isto deve ser feito, pois a Transformada
de Fourier gera pontos de amplitude multiplicados pelo número de termos da série que
foi transformada. A FFT de um exemplo está mostrada na figura 20.

82
Figura 20: Resultado da FTT mostrado de 0 a 500 Hz.

7) Após analisar o espectro, faça o caminho inverso tentando reconstruir o sinal e


plotá-lo usando a Transformada Inversa de Fourier através do comando ifft.

OBS: A título de curiosidade, verifique como ficaria a forma de onda e o espectro


de uma série de valores aleatórios gerados pelo Matlab através da troca da função y
original por ”y = 100 ∗ rand(1, length(t))”.

83
Solução:

Figura 21: Solução do exercício 3

84
13 SIMULINK
O que é SIMULINK?
O Simulink é um pacote computacional voltado para a modelagem, simulação e
análise de sistemas dinâmicos, tanto lineares quanto não-lineares, contínuos e/ou dis-
cretos no tempo.

Figura 22: Diversas aplicações do Matlab e do Simulink em engenharia e ciências exatas.

A modelagem de sistemas dinâmicos no Simulink se dá através de diagramas de


blocos. De fato, o Simulink possui centenas de blocos com funções pré-definidas que
permitem que um determinado modelo seja perfeitamente representado. Existem ainda
arquivos com exemplos que ilustram algumas aplicações e potencialidades do Simulink.
Tais exemplos podem ser acessados através da biblioteca de blocos. Além de facilitar
a visualização de um sistema ou processo, a representação por diagramas de blocos é
bastante utilizada em se tratando de controle de sistemas. Dessa forma, o Simulink
provém uma interface adequada para a simulação de tais sistemas. O Simulink possui
ainda uma série de configurações que dão flexibilidade ao usuário, permitindo, por ex-
emplo, a escolha entre os métodos numéricos empregados durante as simulações. Dessa
forma, é possível adequadar uma simulação de acordo com às necessidades de um de-
terminado sistema. Conforme será visto neste curso, a análise de sistemas compõe-se

85
de um conjunto de ferramentas tais como: linearização, blocos de verificação e gráficos.

13.1 Introdução
13.1.1 Diagrama de Blocos
Um diagrama de blocos é uma forma de representar um modelo de sistema como um
todo. Em um diagrama como este, cada bloco desempenha uma determinada função.
Dessa forma, as inter-conexões dos blocos permitem a representação de um processo.
As setas indicam a sequência de operações as quais uma constante, variável ou função
serão submetidas.

Figura 23: Exemplo de um diagrama de blocos complexo: Motor, transmissão e freios


de um automóvel.

Uma forma usual de representar sistemas dinâmicos lineares é através de funções de


transferência. Uma função de transferência pode ser obtida através da transformada de
Laplace e de manipulações algébricas. Dessa forma, é grande o número de blocos no
Simulink destinados a utilização de funções como essas. Um bloco pode, por exemplo,
representar uma função de transferência.
Partindo-se de um diagrama de blocos, é possível, mediante o uso de regras especiais,
denominadas "Álgebra dos diagramas de bloco", reduzir um diagrama de blocos a um
único bloco e, assim, achar a função de transferêcia global sistema.

86
13.1.2 Símbolos
Os símbolos mais utilizados em diagramas de blocos encontram-se representados a
seguir:

Figura 24: Símbolos utilizados em diagramas de blocos

13.2 Conhecendo o Simulink


13.2.1 Iniciando o Simulink
Para acessar o SIMULINK deve-se, inicialmente, abrir o Matlab, pois apesar do
Simulink ser uma aplicação específica, este utiliza-se das ferramentas de computação
numérica do Matlab.
Uma vez que o Matlab está sendo executado, deve-se clicar no ícone “Start Simulink”
na barra de ferramentas do Matlab ou digitar “simulink” na linha de comando e pressionar
enter em seguida, como mostrado a seguir:
» simulink <enter>
Após aberto o Simulink, duas janelas aparecerão na tela: a biblioteca de blocos do
Simulink e uma janela em branco para construção do modelo.
Caso a biblioteca não esteja aberta, clique em Library Browser,localizado na barra
de ferramentas do Simulink para acessá-la. Uma vez que a biblioteca estiver aberta,

87
Figura 25: Janela destinada à criação do modelo

Figura 26: Biblioteca de blocos

basta selecionar os blocos desejados e arrastá-los para a janela em branco do Simulink.


As conexões entre os blocos são feitas a partir do mouse, clicando-se sobre as conexões
existentes nos blocos e arrastando-as até o bloco desejado.
No Simulink, os blocos estão separados de acordo com as funções que desempenham.
Assim, é importante determinar quais blocos representam o sistema em si e quais blocos
atuam como entradas, saídas, ou se desenvolvem funções de análise.

13.2.2 Construindo e analisando um modelo simples


A partir de um problema, deve-se criar um modelo capaz de solucioná-lo e então
verificar se a solução está correta. Para exemplificar essa idéia, um modelo será densen-
volvido para resolver a seguinte equação diferencial, que é o problema em questão.

x0 = sen(t) onde x(0) = 0

Uma forma de solucionar esta equação diferencial é integrar a função seno e encontrar
o valor para uma constante de forma que a condição inicial seja satisfeita. A partir desta
proposta, será criado um diagrama de blocos. Então o diagrama deverá ter, pelo menos,
um bloco que representa a função seno, assim como outro para realizar a integração da
função seno. A função seno funciona, neste exemplo, como uma fonte, então, dê um
duplo clique no ícone Sources na janela de bibliotecas do Simulink.

88
Figura 27: Fonte senoidal inserida no projeto

Arraste o bloco da onda senoidal (Sine Wave) para a janela do modelo. Uma cópia
deste bloco deverá aparecer nesta janela.
Em seguida arraste o bloco integrator, presente na biblioteca continuous. Faça o
mesmo para o Scope, que está na biblioteca Sinks.

Figura 28: Blocos utilizados no exemplo.

A seguir, conecte os blocos para completar o modelo como na figura a seguir:

Figura 29: Conexões entre os blocos.

Após adicionar os blocos ao modelo, é possível configurá-los através de um duplo


clique sobre eles. No bloco da função seno, por exemplo, é possível configurar, entre
outros parâmetros, a amplitude da função, a frequência e a fase. O valor inicial da
função x(t) é configurado no bloco da integral, assim como os limites superior e inferior.
Dê um duplo click no bloco SCOPE e na barra de menu do SIMULINK clique SIM-
ULATION:START. A simulação será executada, resultando no gráfico gerado no bloco
SCOPE, mostrado a seguir:
Para verificar se o gráfico gerado representa a solução da equação diferencial desejada,
deve-se resolver a mesma analiticamente, cujo resultado é: x(t) = 1 − cos(t), que

89
Figura 30: Gráfico gerado no Scope.

corresponde ao gráfico apresentado. É interessante alterar o valor inicial de x(t) no


bloco da integral e verificar o resultado obtido.

13.2.3 Exemplo: Modelo de um processo biológico


Neste exemplo será desenvolvido um diagrama de blocos para um processo biológico.
Trata-se de um modelo para o crescimento de bactérias, isoladas do ambiente externo,
descrito por Scheinerman. Admite-se que as bactérias nascem numa taxa proporcional
ao número de bactérias presentes em um instante e que morrem a uma taxa proporcional
ao quadrado do número de bactérias presentes. Se x representa o número de bactérias
presentes, a taxa em que as bactérias nascem é definida por:

Taxa de Natalidade = bx; Taxa de Mortalidade = px2

A taxa total de mudança na população de bactérias é a diferença entre a natalidade


e a mortalidade de bactérias. O sistema pode ser então descrito pela equação diferencial
a seguir: x0 = bx − px2
Partindo desta equeção será então construído um modelo para este sistema dinâmico.
Supondo que b=1 bactéria/hora e p=0,5 bactéria/hora, será determinado o número de
bactérias contidas no pote após 1 hora, admitindo que inicialmente existiam 100 bactérias
presentes. Crie uma nova janela de modelo na barra de menu escolhendo FILE:NEW.
Este é um sistema de primeira ordem, o que quer dizer que requer somente um
integrador para resolver a equação diferencial. A entrada do integrador é x0 e a saída é
x. Abra o biblioteca linear e arraste o integrador para a janela do modelo, seguindo a
posição mostrada na figura:
Ainda na biblioteca Linear, arraste dois blocos de ganhos (Gain) para a janela do
modelo e posicione-os como na figura seguinte. O Simulink exige que cada bloco tenha
seu nome único. Devido a isto, o segundo bloco de ganho será nomeado GAIN1. Arraste
ainda um bloco de soma (Sum) e a seguir feche a janela da biblioteca linear.
Abra agora a biblioteca de blocos de operações matemáticas (Math Operations) e
arraste um bloco de produto (Dot Product) para a posição mostrada. Este bloco será
utilizado para calcular o valor de x2 .

90
Figura 31: Integrador inserido no projeto

Abra a seguir a biblioteca dispositivos de saída (Sinks) e arraste um bloco SCOPE


para a janela do modelo seguindo a posição mostrada.

Figura 32: Blocos inseridos

A orientação padrão dos blocos no SIMULINK é posicionar as entradas à esquerda e


as saídas à direita. Porém, neste modelo, será mais legível os blocos de ganho e produto
forem invertidos. Iniciando com o bloco do Produto, deve-se primeiro clicar sobre ele de
modo a selecioná-lo. Pequenos quadros pretos aparecerão nas quinas do bloco indicando
seleção. Pressione o botão direito. No menu, escolha FORMAT: FLIP BLOCK. Agora
as entradas estão à direita e as saídas à esquerda. Repita a operação de inversão para
cada bloco de Ganho. O modelo agora deve estar semelhante à figura que segue abaixo:
Trace agora uma linha de sinal da saída do bloco de soma para a entrada do inte-
grador e outra da saída do integrador para a entrada do SCOPE.

91
Figura 33: Blocos inseridos após rotação

A seguir é necessário conectar a linha que liga o integrador ao SCOPE até bloco
de ganho situado na parte inferior da janela, pois esta linha contém o valor de x. Para
fazê-lo, pressione a tecla CTRL do teclado e clique na linha de sinal. O cursor do mouse
irá mudar para uma cruz. Conserve a tecla do mouse pressionada enquanto a ligação
é feita e solte agora a tecla CTRL. Leve a linha até a entrada do bloco de ganho. O
SIMULINK automaticamente ajusta a linha com um ângulo de 90o . Se o mouse possuir
três botões, as operações de clicar e arrastar podem ser feitas utilizando o botão direito.
Repita a operação ligando a linha de sinal Integrator-SCOPE até a entrada superior
do bloco de produto. Da linha de sinal que liga a entrada superior do bloco de produto
repita a operação de ligação para a entrada inferior do mesmo bloco, de modo que o
bloco execute a operação x.x = x2 . Conecte agora a saída do bloco de produto à entrada
do ganho na parte superior da janela de modelo. Após isso, é necessario conectar a saída
do ganho superior à entrada superior do bloco de soma e a saída do ganho inferior à
entrada inferior do mesmo bloco de soma.
O modelo agora está completo, mas os blocos devem ser configurados (parametriza-
dos) para que este represente o sistema desejado. O Simulink tem o valor 1.0 como
padrão(default) para os blocos de ganho, entradas positivas no bloco de soma e o valor
inicial 0.0 para o integrador. O valor inicial do integrador representa o número inicial de
bactérias presentes no pote. Para acessar as configurações de um bloco, basta dar um
duplo clique sobre o bloco. Para parametrizar os blocos de ganho. Dê um duplo clique
no ganho da parte superior e mude o valor de 1.0 para 0.5 na caixa de diálogo que irá
aparecer, a seguir clique em Close. Note que o valor do ganho do bloco muda para 0.5
no diagrama em blocos.
Agora dê um duplo clique no bloco de soma e no campo List of signs mude de ++
para −+ na caixa de diálogo que abrirá. Os sinais representam os próprios sinais de
entrada no bloco. A seguir clique em Close.
Note agora que no bloco de soma o sinal superior é negativo e o inferior é positivo,
sendo então a saída a diferença das entradas que representa x0 de acordo com a equação

92
Figura 34: Blocos conectados

diferencial após substituir os valores de p e b.

Para finalizar a configuração, deve-se definir o número inicial de bactérias. Para isto,
dê um duplo clique no integrador e no campo "Initial condition"mude para 100, e após

93
clique Close.

Figura 35: Parâmetros do bloco integrador

A duração da simulação é, por padrão, ajustada para ir de 0 a 10 segundos. Neste


caso, deseja-se saber o resultado após 1 hora. Para mudar este tempo, seleciona-se na
barra de menu a opção SIMULATION:PARAMETERS e no campo "Start Time"digita-
se 3600. Dessa forma será tomado os valores da simulação após uma hora. Em "Stop
Time"o tempo final da simulação. Por exemplo, 3610, para que a simulação dure 10
segundos.

Figura 36: Parâmetros da simulação

94
O modelo agora está completo e pronto para ser executado. Para salvar, vá à barra
de menu e selecione FILE:SAVE e entre com o nome desejado. O modelo será salvo com
o nome digitado e a extensão .mdl, e seu nome aparecerá na barra de título da janela de
edição. Abra agora o SCOPE com um duplo clique e a seguir na barra de menu, clique
em SIMULATION:START para iniciar a execução.

Figura 37: Resultado da simulação

O SCOPE nem sempre mostra a figura numa boa escala para visualização. O botão
Autoscale na barra de ferramentas do SCOPE redimensiona a escala para acomodar
todos os valores.

95
Figura 38: Resultado da simulação redimensionado

13.3 Principais blocos do Simulink e suas funções


Conforme exemplificado, um modelo Simulink consiste basicamente de três tipos de
componentes: fontes de sinais, o próprio sistema a ser modelado e as saídas. O modelo
de um sistema é geralmente composto por mais de um bloco.

Figura 39: Fontes, sistema e saídas.

As fontes caracterizam-se por fornecer valores às entradas do sistema incluem blocos


que representam constantes, funções, valores aleatórios ou ainda sinais personalizados
pelo usuário. Estes blocos são encontrados na biblioteca de fontes (Sources). As saídas
do sistema possuem os resultados obtidos ao longo do processo. Em geral, há interesse
em se conhecer estes valores, de forma que o bloco SCOPE é usualmente conectado a
uma saída para plotar um gráfico. Abaixo encontra-se uma lista com os principais blocos
e suas funções. É importante observar que todos os blocos possuem parâmetros que
podem ser configurados. Para isto, dê um duplo clique sobre o bloco.
As entradas de um modelo são chamadas fontes (Sources) e podem ser encontradas
na biblioteca de fontes. Um bloco de fonte não possui entrada e deve possuir pelo
menos uma saída. A documentação detalhada de cada fonte pode ser encontrada no
help do Simulink. No texto que segue serão mencionadas somente os tipos mais comuns
e utilizados de fontes. Serão ainda discutidas as operações de importação do MATLAB
e de arquivos que contenham dados os quais se deseja inserir no modelo. Tal facilidade
permite que se tenha qualquer tipo de sinal de entrada, exista ele no Simulink ou não.

Fontes Comuns

96
Exemplo: Impulso Unitário

Um sinal muito utilizado para determinar o comportamento dinâmico de sistemas é


o Impulso Unitário, também conhecido como Função Delta ou Função Delta de Dirac.
O Impulso Unitário δ = (t-a) é definido como um sinal de duração igual a zero, tendo
as seguintes propriedades:

δ(t − a) = 0; t 6= a
Z ∞
δ(t)dt = 1
−∞

Embora o impulso unitário seja um sinal que teoricamente não existe existem boas
aproximações do caso ideal que são muito comuns. Exemplos físicos são colisões, como
uma roda se chocando com o meio-fio ou um bastão rebatendo uma bola ou ainda
mudanças instantâneas de velocidade como a de uma bala sendo disparada de um ri-
fle. Outra utilidade da função impulso é a determinação da dinâmica do sistema. O
movimento causado em um sistema que sofre uma força impulsional unitária é a própria
dinâmica inerente ao sistema. Partindo disto, pode-se utilizar a resposta à um impulso
unitário de um sistema complexo para se determinar sua freqüência natural e suas car-
acterísticas de vibração.

Pode-se criar uma aproximação de um impulso unitário utilizando duas fontes de


função degrau e um bloco de soma. A idéia é produzir num tempo definido “a” um
pulso de duração muito curta “d” e de magnitude “M’, tal que M.d=1. A dificuldade
consiste em se definir um valor apropriado para d. Deve ser um valor pequeno quando
comparado à mais rápida dinâmica do sistema Porém, se for muito curto, podem ocorrer
problemas numéricos como erros de aproximação. Se for muito longo a simulação não
será adequada à um impulso verdadeiro. Usualmente, valores adequados podem ser
determinados experimentalmente.

Figura 40: Um modelo para o impulso unitário.

O modelo na figura acima deve ser ajustado para simular um impulso unitário ocorrido
aos 0.5 segundos de simulação com uma duração de 0.01 segundos e a magnitude de
100. A fonte degrau na parte superior deve ter a seguinte configuração: Step time: 0.5,
Initial value: 0, Final value: 100. Já a fonte situada na parte inferior deve ser configurada
da seguinte forma: Step time: 0.51, Initial value: 0, Final value: 100. A simulação deve
ser configurada para terminar em 1 segundo.

97
13.3.1 Principais Fontes(Sources):
Essas são as principais fontes:
Constant - Fornece um valor constante.
Sin Wave - Função seno. É possível configurar os parâmetros.
Ramp - Uma reta linear. É possível configurar a inclinação.
Step - Função degrau. Pode-se configurar o tempo, amplitude e valor inicial.
Pulse Generator - Gera uma onda quadrada.
Ramdon Number - Números aleatórios no tempo.
Signal Generator - Gera as ondas típicas de um gerador de sinais: quadrada, serra,
senóide, etc.

13.3.2 Principais blocos usados na modelgem de sistemas dinâmi-


cos
Os principais blocos são:
Derivative - Calcula a derivada da função em relação ao tempo.
Integrator - Calcula a integral da função em relação ao tempo.
Transfer Fcn - Adiciona uma função de transferência. Os valores podem ser ajustados
nas configurações (duplo clique sobre o bloco).
Transport Delay e Variable Transport Delay - Adiciona um delay de tempo.
Zero-Pole - Semelhante a função de transferência.
Abs - Calcula o valor absoluto.
Add - Soma ou subtrai as entradas (inputs).
Sum - Soma ou subtrai valores, tais como em feedbacks.
Gain - Ganho. Multiplica a entrada pelo valor configurado.
Dot Product - Faz o produto escalar com as entradas.
Min - A saída deste bloco é o valor máximo, ou mínimo da entrada, de acordo com a
configuração.
Product - Faz o produto entre as entradas.
Divide - Faz o produto e/ou a divisão entre as entradas.
Real-Imag to complex - Transforma dois números em um único número complexo.

13.3.3 Verificação do modelo


Os blocos para a verificação de modelo são úteis quando se deseja saber se os valores
de entrada ou saída de um determinado bloco estão, por exemplo, dentro de uma faixa
de valores. Sempre que a condição não for satisfeita, aparecerá uma mensagem de erro
durante a simualção.
Assertion - Verifica se um valor é diferente de zero.
Check Dynamic Gap: - Checa se um sinal é menor ou maior que dois outros sinais.
Check Dynamic Lower Bound: - Checa se um sinal é sempre menor que outro.
Check Dynamic Range: - Verifica se um sinal sempre tem valores entre outros dois sinais.
Check Dynamic Upper Bound: - Verifica se um sinal é sempre maior que o outro.
Check Static Gap: Checa se um sinal é menor ou maior que dois outros valores estáticos.
Check Static Lower Bound: Verifica se um sinal é maior ou igual a um valor estático
definido.

98
Check Static Range: - Verifica se um sinal está sempre outros dois valores estáticos.
Check Static Upper Bound: Checa se um sinal é menor ou igual a um limite superior.

13.3.4 Blocos de saídas(Sinks)


Esses são os blocos de saídas:
Display - Mostra em uma tela os valores da entrada durante a simulação.
Scope - Exibe um gráfico dos valores de entrada em relção ao tempo.
Stop Simulation - Quando a entrada deste bloco for diferente de zero, a simulção será
interrompida.
Terminator - Uma terminação. Pode ser usado para evitar erros gerados por blocos com
saídas não conectadas.
To file - Escreve os valores de saída em uma matriz.

13.3.5 Criando blocos de sub-sistemas


Um sub-sistema é um sistema menor que está contido no sistema principal. Dessa
forma, ele também é composto por blocos. Esta é uma forma eficaz de organizar
um diagramas de blocos. Por exemplo, se um determinado processo bem definido é
composto por dezenas de blocos, é possível substituir todos estes blocos por apenas um
bloco utilizando um sub-sistema. Para isso, selecione todos os blocos que deseja incluir
no sub-sistema e clique com botão direito do mouse. Vá até a opção Create Subsystem.
Assim irá surgir um único bloco que contém em seu interior todos os outros blocos. Para
acessá-lo, basta dar um duplo clique que o sub-sistema será exibido em nova janela.

13.3.6 Blocos condicionais


É possível ainda utilizar-se de blocos condicionais, tais como o bloco If. Neste bloco
há entradas para sinais e uma comparação é feita. Se for verdadeira, o bloco libera um
sinal de nível alto na saída. Observe que este sinal não é o valor da entrada do bloco
e sim um sinal que afirma se é verdadeira ou falsa a afirmativa. As saídas dos blocos
condicionais podem ser conectadas aos blocos If Action Subsystem. Estes blocos são
sub-sistemas que irão atuar quando for verdadeiro o sinal presente na entrada if. Dessa
forma, é necessário editar os blocos do If Action Subsystem para que as saídas sejam as
desejadas.
Exemplo: Construa o sequinte diagrama de blocos no Simulink. Este modelo limita
o valor de uma função qualquer, por exemplo, uma senóide. O valor da senóide é
comparado com outro valor estabelecido no bloco if. Se a condição for verdadeira,
então um sub-sistema é acionado. Este sub-sistema nada mais é que uma entrada e
uma saída, porém ele pode ser modificado a fim de atigir o resultado desejado.

13.3.7 Personalizando o modelo e manipulando Blocos


É possível personalizar o modelo através da mudança de cores, tanto do background
como dos blocos em si. Esta é uma forma de tornar mais visível ou mesmo organizar
partes de um sistema complexo. Para alterar a cor do background, clique com o botão
direito em algum ponto da tela e vá até "screen color"e selecione a cor desejada. O

99
Figura 41: Um diagrama de blocos condicional.

mesmo pode ser feito para um bloco. Neste caso, clique com o botão sobre um bloco e
vá em background color para mudar a cor do bloco; e em foreground color para modificar
as cores do contorno do bloco.
A tabela a seguir contém as operações básicas de manipulação de blocos como red-
imensionar, rotacionar, copiar e renomear blocos.

100
Ação Descrição
Seleção simples de objeto Clique no objeto com o botão esquerdo do mouse.
Seleção múltipla de objetos Pressione a tecla SHIFT e clique no outro objeto.
Selecionar com uma caixa de Clique com o botão esquerdo do mouse no local onde
seleção se deseja que seja uma das quinas da caixa de seleção.
Continue com a tecla do mouse pressionada e arraste
a caixa para encobrir a área esejada.
Copiar um bloco de uma bib- Selecione o bloco e arraste para a janela do modelo
lioteca ou de outro modelo para a qual se quer copiar.
Inverter blocos Selecione o bloco e no menu Format:Flip Block.
Tecla de atalho: CTRL–F.
Rotacionar blocos Selecione o bloco e no menu Format:Rotate Block.
Tecla de atalho: CTRL–R.
Redimensionar blocos Selecione o bloco e arraste o canto.
Adicionar sombra Selecione o bloco e no menu Format:Show Drop
Shadow.
Editar o nome de um bloco Clique no nome.
Ocultar o nome de um bloco Selecione o nome, no menu Format:Hide Name
Inverter o nome de um bloco Selecione o nome, no menu Format:Flip Name
Apagar Objetos Selecione o objeto, no menu Edit:Clear. Tecla de
atalho: Del.
Copiar objetos para a área de Selecione o objeto, no menu Edit:Copy. Tecla de
transferência atalho: CTRL–C.
Recortar objetos para a área Selecione o objeto, no menu Edit:Cut. Tecla de
de transferência atalho: CTRL–X.
Colar objetos a partir da área No menu Edit:Paste. Tecla de atalho: CTRL–V.
de transferência
Traçar uma linha de sinal Arrastar com o mouse da saída do bloco para a en-
trada do outro.
Traçar uma linha de sinal em Arraste com o mouse da saída do bloco até o primeiro
segmentos ponto. Repetir deste ponto até o seguinte e assim por
diante.
Traçar uma linha ligada a Mantenha a tecla CTRL pressionada e clique sobre a
outra linha de origem. Tecla de atalho: Clicar com o botão
direito do mouse a partir da linha de origem.
Separar uma linha Selecione a linha. Mantendo a tecla SHIFT pression-
ada, clique e arraste o novo vertex para a posição
desejada.
Mover um segmento de linha Clique e arraste o segmento desejado.
Mover um vertex de um seg- Clique e arraste o vertex desejado.
mento.
Nomear uma linha de sinal Duplo clique na linha e digite o nome.
Mover o nome de uma linha Clique e arraste o nome para a posição desejada.
de sinal

101
Ação Descrição
Copiar o nome de uma linha Mantendo a tecla CTRL pressionada, arraste o nome
de sinal para a posição desejada. Tecla de atalho: clique e
arraste com o botão direito do mouse para a posição
desejada.
Sinais de propagação numa Dê um nome aos sinais conhecidos (entrada) com um
linha de sinal único caracter e nas linhas em que se deseja saber seu
conteúdo, deve-se digitar somente o caracter “<”.
Após isso, no menu Edit:Update Diagram.
Acrescentar anotação ou ob- Dê um duplo clique no local em que se deseja e digite
servação no modelo o texto.

102
14
Referências Bibliográficas
• Curso de MATLAB for Windows, Departamento de Engenharia Mecânica, UNESP,
Campus de Ilha Solteira.

• Trindade, Marcelo A. e Sampaio, Rubens, Introdução ao MATLAB, Departamento


de Engenharia Mecânica, Laboratório de Dinâmica e Vibrações, PUC-Rio.

• Noções Básicas de Utilização e Programação em Matlab, Curso de Matemática,


Programa de Educação Tutorial, Universidade Federal de Santa Maria, 2008.

• Hey, H. L., Caderno didático de Sistemas de Controle I, Departamento de Eletrônica


e Computação, UFSM, Santa Maria.

• www.mathworks.com.

103

Potrebbero piacerti anche