Escolar Documentos
Profissional Documentos
Cultura Documentos
Leandro Baroni
APOSTILA
I MATLAB 3
1 Introdução 4
2 Gráficos 11
3 Script do Matlab 13
4 Funções 14
5 Controle de execução 14
5.1.1 Declaração if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.1.1 Exemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7 Sistemas de controle 21
1
7.2 Funções de transferência no MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.3.1 Exemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7.3.2 Exemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
II Simulink 27
8 Introdução 28
8.1 Início . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
8.1.1 Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
11 Exemplos 32
11.1 Exemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
11.2 Exemplo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Parte I
MATLAB
3
1. INTRODUÇÃO
Este texto introdutório foi escrito para o MATLAB R2014b. A interface do MATLAB está bastante con-
solidada, de modo que outras versões não devem apresentar alterações significativas. A referência
Get Started with MATLAB é um guia introdutório ao MATLAB produzido pela MathWorks.
Ao iniciar o MATLAB a tela da Figura 1.1 aparece em conjunto com o símbolo >>, indicando que o
software está pronto para receber comandos. Este é o prompt do MATLAB. Ao digitar a expressão
abaixo seguida da tecla <enter>:
>> 12/2+3*(2^4)
Tem-se a resposta:
ans =
54
As variáveis devem ter um nome único, começando com uma letra e podem conter dígitos ou o sím-
bolo _ (underline). O MATLAB distingue letras maiúsculas de minúsculas.
distancia =
100
>> tempo = 3
tempo =
4
Figura 1.1: Janela de comando do MATLAB.
velocidade_media =
33.3333
Note que ao digitar o nome da variável, o símbolo = e o seu valor, o MATLAB armazena a variável e
a apresenta na tela. Para suprimir a exibição da variável adiciona-se um ponto-e-vírgula ao final do
comando. Quando uma expressão é criada e não armazenada em uma variável, o MATLAB a salva
automaticamente na variável ans.
O comando who mostra todas as variáveis armazenadas durante uma sessão do MATLAB. O comando
whos tem a mesma função de who, porém exibindo mais detalhes.
>> who
5
>> clear tempo
A Tabela 1.1 mostra algumas variáveis especiais. A Tabela 1.2 mostra algumas funções especiais.
6
>> A = [1 2 3 4 5 6]
A =
1 2 3 4 5 6
X =
Outra forma de se criar um vetor (o primeiro valor é o valor inicial, o segundo o passo e o terceiro o
valor final):
>> A = 0 : 2 : 10
A =
0 2 4 6 8 10
>> X = 0 : pi/5 : pi
X =
A função linspace gera um vetor linearmente espaçado a partir de um valor inicial, um valor final e
um número de elementos:
X =
De forma semelhante, a função logspace gera um vetor logaritmicamente espaçado a partir de uma
potência inicial, uma potência final e um número de valores. Neste exemplo, são criados 5 valores
entre 100 e 102 .
>> V = logspace(0, 2, 5)
V =
7
>> M = [1 2 3 ; 2 3 5 ; -4 -5 -6]
M =
1 2 3
2 3 5
-4 -5 -6
Esta é uma matriz 3 × 3. Note que os elementos da linha são separados por espaço em branco e as
linhas são separadas por ponto-e-vírgula. Note também que um vetor é uma matriz com uma linha
(ou uma coluna). As operações com matrizes ou vetores são feitas usando os operadores básicos:
>> B = 2 * A
B =
0 4 8 12 16 20
>> Y = sin(X)
Y =
>> Z = A.^2
Z =
0 4 16 36 64 100
Os operadores *, / e ^ devem ser precedidos por um ponto para serem utilizados em matrizes ou
vetores quando deseja-se que a operação seja realizada sobre cada um de seus elementos.
>> Z = A.^2
Z =
0 4 16 36 64 100
8
>> Z = A^2
Error using ^
Inputs must be a scalar and a square matrix.
To compute elementwise POWER, use POWER (.^) instead.
Tem-se um erro pois o vetor A é uma matriz 1 × 5 e a operação A*A não existe neste caso. Assim,
deve-se tomar o cuidado em operações que exigem concordância das dimensões das matrizes:
>> A = [1 2 3];
>> B = [4 5 6];
>> A*B
Error using *
Inner matrix dimensions must agree.
>> A*B'
ans =
32
>> M'
ans =
1 2 -4
2 3 -5
3 5 -6
>> Z(1)
ans =
>> Z(2)
ans =
>> Z(6)
Index exceeds matrix dimensions.
Tem-se um erro quando acessa-se uma posição inexistente do vetor. Para acessar vários elementos:
9
>> Z(1:3)
ans =
0 4 16
>> Z(3:5)
ans =
16 36 64
>> Z(2:4)
ans =
4 16 36
Para acessar um elemento de uma matriz é necessária a especificação de dois índices (linha e coluna):
>> M(2, 1)
ans =
>> b = [2 -3 1];
>> F = [b' M(:, 2:3)]
F =
2 2 3
-3 3 5
1 -5 -6
M(:, 2:3) significa a parte da matriz M compreendida por todas as linhas (:) e as colunas 2 e 3
(2:3). A matriz Mx foi gerada concatenando-se o vetor b transposto e as colunas 2 e 3 da matriz M.
>> det(M)
ans =
-3
>> inv(M)
ans =
10
-2.3333 1.0000 -0.3333
2.6667 -2.0000 -0.3333
-0.6667 1.0000 0.3333
Ao digitar no prompt help nome_do_comando, exibe-se uma pequena explicação sobre a função do
comando e sua sintaxe.
2. GRÁFICOS
O gráfico é gerado pelo comando plot. A variável X contém os valores do eixo x e a variável Y contém
os valores do eixo y. As variáveis X e Y devem ter a mesma dimensão (Figura 2.1(a)). Pode-se desenhar
duas curvas no mesmo gráfico (Figura 2.1(b)):
>> Y2 = cos(X);
>> plot(X, Y, X, Y2)
Ou de outra forma:
O comando hold mantém o gráfico anterior na janela que se desenha o próximo gráfico.
A cor e o tipo da linha podem ser especificadas dentro do comando plot, após as variáveis de cada
curva (Figura 2.2(a)):
11
(a) Uma curva (b) Duas curvas no mesmo gráfico
O parâmetro 'r-', por exemplo, significa que a curva será desenhada como uma linha na cor ver-
melha. 'g.' significa que a curva será de pontos na cor verde. A Tabela 2.1 mostra algumas opções
possíveis.
12
>> title('seno(x) e cosseno(x)')
>> grid
(a) Gráfico com ajuste de cores e símbolos (b) Nomes dos eixos e legenda
3. SCRIPT DO MATLAB
Os comandos podem ser escritos em um arquivo de texto, conhecidos como arquivo de script do
MATLAB, e salvo com extensão .m. Os comandos no script são executados sequencialmente, como
se estivessem sendo inseridos no prompt. Os arquivos de script podem ser executados no prompt
digitando o nome do arquivo de script. Por exemplo, os comandos da Tabela 3.1 salvo em um arquivo
chamado graficos.m são executados como:
13
>> graficos
clear all;
clc; % limpa a tela
T = 0 : 0.1 : 10; % define o vetor tempo
X1 = T.^2;
X2 = exp(T);
plot(T, X1, 'r.', T, X2, 'bo'); % desenha os gráficos
axis([0 5 0 100]);
legend('t^2', 'e^{t}');
xlabel('Tempo [s]');
ylabel('Resposta');
O MATLAB possui um editor de texto integrado (M-file Editor), que pode executar o script apertando
a tecla <F5>.
4. FUNÇÕES
Pode-se definir funções no MATLAB, que são chamadas dentro de um script. As funções são definidas
em arquivos de texto salvos com o nome da função e com extensão .m, na mesma pasta onde o
programa principal está sendo executado e cuja primeira linha deve conter o comando function.
Este comando deve ter a seguinte sintaxe:
Pode-se ter várias variáveis de entrada e saída na função, separadas por vírgula. Por exemplo, dada a
equação de segundo grau:
ax 2 + bx + c = 0
pode-se criar uma função que retorna as raízes desta equação, com o código dado na Tabela 4.1. O
arquivo da Tabela 4.2 faz uso da função raizes.m.
5. CONTROLE DE EXECUÇÃO
Em um determinado programa, muitas vezes torna-se necessário repetir um bloco de código ate que
uma determinada condição seja verificada ou ainda mudar a ordem de execução dos comandos. Para
isso, é definido no MATLAB declarações de controle condicional e controle de loop.
14
Tabela 4.1: Arquivo raizes.m.
clear all;
clc;
% definição dos parâmetros da eq. de 2o. grau: a*x^2 + b*x + c
= 0
a = 1;
b = -3;
c = 2;
[r, s] = raizes (a, b, c);
v = [r s]';
disp('As raízes são:');
disp(v);
As declarações de controle condicional (if, else, switch) permitem selecionar quando um bloco
de código deve ser executado.
5.1.1 Declaração if
Quando a <expressão booleana 1> for verdadeira, as linhas de comandos definidas em <sequên-
cia de comandos 1> serão executadas e, caso contrário, se a <expressão booleana 2> for
15
verdadeira, os comandos definidos em <sequência de comandos 2> serão executados e, caso
contrário, serão executadas os comandos definidos na <sequência de comandos 3>. O resul-
tado da <expressão booleana> é verdadeiro ou falso e é definido a partir de operadores lógicos e
relacionais, descritos na Tabela 5.1.
if <expressão booleana>
<sequência de comandos>
end
Neste caso, a <sequência de comandos> será executada somente quando a <expressão boo-
leana> for verdadeira. Um exemplo do uso da declaração if está na Tabela 5.2.
Por outro lado, quando deseja-se um teste com relação a um conjunto de valores conhecidos, usa-se
a declaração switch. Por exemplo:
16
case 'Segunda-feira'
disp('Início da semana de trabalho')
case 'Terça-feira'
disp('Dia 2')
case 'Quarta-feira'
disp('Dia 3')
case 'Quinta-feira'
disp('Dia 4')
case 'Sexta-feira'
disp('Último dia da semana de trabalho')
otherwise
disp('Fim de semana!')
end
Tanto para if quanto para switch, o MATLAB executa o código correspondente até a primeira con-
dição verdadeira, então termina o bloco. Cada declaração requer um end correspondente.
As declarações de controle de loop (for, while, continue, break) permitem controlar a exe-
cução de loops no programa.
O loop for repete um bloco de código um número fixo e predeterminado de vezes. Um end delimita
a declaração. A forma geral do loop for é:
onde <contador> é a variável de controle, <valor inicial> é o valor inicial da variável, <incre-
mento> é o incremento dado à variável <contador>, podendo ser positivo ou negativo (quando o
incremento for igual a 0, o loop não será executado) e <valor final> é o maior ou menor valor que
a variável <contador> pode assumir. Um end correspondente delimita a declarações. A Tabela 5.3
mostra um exemplo do uso do for para loops agrupados.
O loop while repete um grupo de declarações um número indefinido de vezes, sob o controle de uma
condição lógica. Um end correspondente delimita as declarações. A estrutura de um loop while é:
17
Tabela 5.3: Exemplo do uso do for.
for i = 1 : m
for j = 1 : n
H(i,j) = 1 / (i + j);
end
end
a = 0; fa = -Inf;
b = 3; fb = Inf;
while b - a > eps * b
x = (a + b) / 2;
fx = x^3 - 2 * x - 5;
if sign(fx) == sign(fa)
a = x; fa = fx;
else
b = x; fb = fx;
end
end
A declaração continue passa o controle para a próxima iteração do loop for ou while no qual
aparece, saltando quaisquer declarações restantes. Isto também é válido para loops agrupados, ou
seja, a execução continua no início do loop no qual a declaração continue está colocada.
A declaração break permite terminar um loop for ou while. Em loops agrupados, break termina
somente o loop mais interno.
18
6. SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS
O MATLAB possui funções nativas para resolução numérica de equações diferenciais, descritas na
Tabela 6.1.
O MATLAB apenas calcula soluções numéricas de sistemas de equações diferenciais de 1.a ordem.
Uma equação diferencial ordinária (EDO) deve ser formatada como:
dy
= f (t , y)
dt
Uma EDO, para ser resolvida usando as funções do MATLAB, deve ser escrita em um arquivo defi-
nindo uma função. Por exemplo, a EDO
ẏ + 5y = 0 ⇒ ẏ = −5y
Obs.: mesmo que a variável t não apareça explicitamente na equação diferencial, deve ser colocado
na definição da função.
Para resolver EDOs de ordem superior, deve-se convertê-las, por intermédio de uma mudança de
19
variáveis, em um sistema de EDOs de 1.a ordem. Por exemplo, a EDO de 2.a ordem:
ẍ + 4ẋ + 6x = 0
com condições iniciais x(0) = x 0 e ẋ(0) = ẋ 0 deve ser convertida em um sistema de EDOs de primeira
ordem:
ẋ 1 = x 2
ẋ 2 = −4x 2 − 6x 1
Observe que esse sistema de EDOs de 1.a ordem deve ser escrito na forma de equação de estados. A
solução deste sistema de EDOs pode ser obtida usando a função ode45. A sintaxe é dada por:
onde:
As saídas da função ode45 são os vetores T, com os valores da variável independente, e X, matriz
com os valores de cada variável do sistema de EDOs. Para resolver o sistema definido pelo código da
Tabela 6.3, condições iniciais x 1 = 3 e x 2 = 0 e 0 ≤ t ≤ 5, usa-se o comando:
A função ode45 retorna o vetor T de dimensão n×1 (n pode ser obtido com o comando n = size
(T, 1)) e a matriz X de dimensão n×2, com os valores de x 1 na primeira coluna e x 2 na segunda
coluna.
20
Caso seja útil passar valores de parâmetros para a função que define a EDO, ela deve ser definida de
acordo com o código da Tabela 6.4:
6.1.1 Exemplo 1
Seja o sistema massa-mola-amortecedor da Figura 6.1. Este sistema é definido pela EDO:
b k 1
ẍ(t ) + ẋ(t ) + x(t ) = f (t )
k m m
u(t )
m
ẋ 1 = x 2
k b 1
ẋ 2 = − x 1 − x 2 + f (t )
m m m
y = x1
Dados os valores m = 1,5 kg, b = 0,9 Ns/m e k = 60 N/m, desenhar os gráficos de x 1 e x 2 no Matlab
considerando as condições iniciais x(0) = 0,05 m e ẋ(0) = 0 m/s e f (t ) nula.
2) Programa principal (arquivo sim_mma.m) que resolve as EDOs e desenha os gráficos (Tabela 6.6).
O resultado são os gráficos da Figura 6.2. Observe que a saída do sistema é o estado x 1 .
21
Tabela 6.5: Arquivo mma.m
clear all;
clc;
[T, X] = ode45 (@mma, [0 20], [0.05 ; 0]); % Resolve as EDOs
figure; % Abre uma nova janela de gráfico
plot (T, X(:, 1));
grid;
xlabel ('Tempo [s]');
ylabel ('x [m]');
figure; % Abre outra janela de gráfico
plot (T, X(:, 2));
grid;
xlabel ('Tempo [s]');
ylabel ('\dot{x} [m]');
7. SISTEMAS DE CONTROLE
Os comandos apresentados neste capítulo fazem parte do Toolbox Control Systems, o qual deve estar
instalado.
Um sistema de EDOs com coeficientes constantes pode representado no espaço de estados, da se-
guinte forma:
ẋ = Ax + Bu
y = Cx + Du
22
(a) Curva de x 1 (b) Curva de x 2
b0 s 3 + b1 s 2 + b2 s + b3
G(s) =
a0 s 4 + a1 s 3 + a2 s 2 + a3 s + a4
pode ser definida no MATLAB a partir dos polinômios do numerador e denominador, os quais devem
ser declarados como um vetor com os coeficientes:
>> s = tf('s');
>> sys = (b0*s^3 + b1*s^2 + b2*s + b3) / (a0*s^4 + a1*s^3 + a2*s^2 + a3*s
+ a4);
23
Da mesma forma que o comando ss(), tf() retorna um objeto que representa o sistema no MA-
TLAB.
Pode-se obter as respostas a um degrau unitário, impulso ou uma entrada qualquer usando o sistema
definido na variável sys com os seguintes comandos:
▶ lsim(sys, u, t): plota a resposta do sistema sys a uma entrada u no intervalo de tempo t
7.3.1 Exemplo 2
[ ]T
considerando o estado como x = x(t ) ẋ(t ) .
A resposta ao degrau pode ser obtida com o código do arquivo sim_mma2.m, Tabela 7.1. O comando
step no script sim_mma2.m produz o gráfico da Figura 7.1.
m = 1.5; % [kg]
b = 0.9; % [Ns/m]
k = 60; % [N/m]
A = [0 1 ; -k/m -b/m];
B = [0 ; 1/m];
C = [1 0];
D = 0;
sys = ss(A, B, C, D);
step(sys);
24
Figura 7.1: Resposta ao degrau unitário do sistema massa-mola-amortecedor.
7.3.2 Exemplo 3
b k 1
ẍ(t ) + ẋ(t ) + x(t ) = f (t )
k m m
Para calcular a função de transferência do sistema, aplica-se a transformada de Laplace (com condi-
ções iniciais nulas):
b k 1
s 2 X (s) + s X (s) + X (s) = F (s)
k m m
1
X (s) m
=
F (s) s + s + k
2 b
m m
Usando os valores de m, b e k definidos na Subseção 6.1.1, a resposta à rampa unitária pode ser obtida
executando o script sim_mma3.m.
m = 1.5; % [kg]
b = 0.9; % [Ns/m]
k = 60; % [N/m]
num = 1/m; % Numerador da função de transferência
den = [1 b/m k/m]; % Denominador da função de transferência
sys = tf(num, den); % Função de transferência
step(sys);
26
Parte II
Simulink
27
8. INTRODUÇÃO
O Simulink é uma ferramenta integrante do MATLAB que permite a modelagem, simulação e análise
de sistemas dinâmicos. Sua interface é um ambiente gráfica baseado em diagramas de blocos e pos-
sui bibliotecas de blocos configuráveis. O Simulink oferece integração com o ambiente do MATLAB,
permitindo que se aproveite as vantagens de ambos os softwares.
8.1 Início
>> simulink
A janela de trabalho, mostrada na Figura 8.3, é criada quando se inicia um novo modelo de sistemas
ou abre um existente, pelos ícones indicados na Figura 8.2.
28
Figura 8.2: Janela principal do Simulink.
29
Os modelos são construídos na janela de trabalho a partir dos blocos de comando das bibliotecas,
arrastando ou copiando-os para a janela de trabalho. A conexão entre os blocos é feita arrastando a
saída de um bloco até a entrada de outro. Um clique duplo sobre os blocos abre a janela de configu-
ração dos parâmetros, específica para cada bloco.
Para iniciar a simulação, basta usar a opção 'Simulation > Run' do menu principal.
8.1.1 Organização
Uma forma de organizar os blocos quando o sistema se torna complexo é o agrupamento de blocos
em subsistemas. Para isso, arraste uma área de seleção sobre os blocos desejados e selecione o menu
'Diagram > Subsystem & Model Reference > Create Subsystem from Selection'. Os
sinais entram e saem dos subsistemas usando as portas 'Inport' e 'Outport', respectivamente.
A seleção do menu 'Display > Signal & Ports > Signal Dimensions' permite visualizar a
dimensão de cada sinal do sistema.
O Simulink, como todos os programas que de simulação de sistemas dinâmicos, utiliza-se de algo-
ritmos de integração para resolver numericamente as equações diferenciais do sistema. A janela de
configuração da simulação (Figura 8.4), acessada a partir do menu 'Simulation > Model Con-
figuration Parameters', permite ao usuário fazer a configuração do tempo de simulação, inte-
grador, passo de integração tolerâncias, entre outras características.
O Simulink utiliza algoritmos de passo variável por padrão, isto é, o passo de integração varia entre
os valores mínimo e máximo da janela de parâmetros conforme um algoritmo interno de escolha,
relacionado com os valores dos parâmetros de tolerância. Pode-se alterar para algoritmos de passo
fixo, se necessário. É importante sempre verificar se as configurações estão adequadas e a simulação
ocorre como esperado.
Variáveis definidas na área de trabalho do MATLAB podem ser usadas pelo Simulink. Para isso, deve-
se previamente definir o nome e o valor da variável no MATLAB e configurar o bloco de comando
para usar esta variável. É uma prática comum definir os valores de constantes em um script do MA-
TLAB para usá-las em simulações do Simulink. Pode-se também usar dados usando os blocos From
Workspace e From File para carregá-los no Simulink.
O Simulink envia variáveis para a área de trabalho do MATLABpor meio do bloco To Workspace. O
bloco To File salva o sinal em um arquivo no formato .mat.
30
Figura 8.4: Janela de configuração da simulação.
31
▶ To Workspace: salva o sinal na área de trabalho do MATLAB
▶ Transfer Fcn: permite definir uma função de transferência especificando os coeficientes dos
polinômios do numerador e denominador
11. EXEMPLOS
11.1 Exemplo 4
As respostas para x ('x') e ẋ ('xp') dadas as condições iniciais podem ser vistas nos blocos 'Scope'
correspondentes (Figura 11.2).
11.2 Exemplo 5
A resposta do sistema massa-mola-amortecedor pode ser obtida usando o bloco 'Transfer Fcn'
para definir a função de transferência do sistema no Simulink. Este bloco deve ser configurado com
32
(a) Resposta de 'x' (b) Resposta de 'xp'
33
Figura 11.3: Sistema massa-mola-amortecedor definido pela função de transferência.
34