Você está na página 1de 35

Introdução ao MATLAB

Leandro Baroni
APOSTILA

Universidade Federal do ABC


São Bernardo do Campo
7 de fevereiro de 2023
SUMÁRIO

I MATLAB 3

1 Introdução 4

1.1 Comandos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2 Vetores e matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Gráficos 11

3 Script do Matlab 13

4 Funções 14

5 Controle de execução 14

5.1 Declarações de controle condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

5.1.1 Declaração if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

5.1.2 Declaração switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5.2 Declarações de controle de loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

5.2.1 Declaração for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

5.2.2 Declaração while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

5.2.3 Declaração continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5.2.4 Declaração break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

6 Solução de equações diferenciais 18

6.1 Equações diferenciais ordinárias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6.1.1 Exemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

7 Sistemas de controle 21

7.1 Espaço de estados no MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1
7.2 Funções de transferência no MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

7.3 Respostas de um sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

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

8.1.2 Configurações da simulação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

9 Interação do Simulink com o MATLAB 30

10 Alguns blocos de comando 30

11 Exemplos 32

11.1 Exemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

11.2 Exemplo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Parte I

MATLAB

3
1. INTRODUÇÃO

O MATLAB é um software matemático otimizado para a resolução de problemas científicos e de en-


genharia. A linguagem do MATLAB é baseada no tratamento de matrizes e possui recursos de progra-
mação estruturada que permitem a implementação de códigos mais complexos, visualização gráfica
e simulação de sistemas dinâmicos entre outras características.

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.

1.1 Comandos básicos

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

Pode-se armazenar valores em variáveis no MATLAB, no qual todas as variáveis constituem-se em


matrizes. Assim, as operações aritméticas de adição (+), subtração (-), multiplicação (*), divisão (/)
e exponenciação (^) são designadas como operações matriciais, enquanto que operações com esca-
lares podem ser realizadas utilizando os símbolos .+, .-, .*, ./ e .^. Quando o arranjo é um número
pode-se usar um ou outro símbolo indistintamente. Adicionalmente, funções trigonométricas e lo-
garitmos, além de números imaginários (i, j), são definidas no MATLAB.

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

distancia =

100

>> tempo = 3

tempo =

4
Figura 1.1: Janela de comando do MATLAB.

>> velocidade_media = distancia / tempo

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

Your variables are:

ans tempo distancia velocidade_media

O comando clear limpa uma ou mais variáveis.

5
>> clear tempo

Para apagar TODAS as variáveis da sessão:

>> clear all

A Tabela 1.1 mostra algumas variáveis especiais. A Tabela 1.2 mostra algumas funções especiais.

Tabela 1.1: Variáveis especiais


ans Nome de variável padrão usado para resultados
pi 3.1416
eps Menor número que somado a 1, cria um número maior do que 1
inf Infinito
NaN Não número
p
iej −1
realmin menor número real positivo
realmax maior número real positivo

Tabela 1.2: Funções matemáticas elementares


abs(x) Valor absoluto
sqrt(x) Raiz quadrada
sin(x) Seno
cos(x) Cosseno
tan(x) Tangente
asin(x) Arco seno
acos(x) Arco cosseno
atan(x) Arco tangente
exp(x) Exponencial (e x )
log(x) Logaritmo natural (base e)
log10(x) Logaritmo na base 10
sind(x) Seno (x em graus)
cosd(x) Cosseno (x em graus)
tand(x) Tangente (x em graus)

Para sair do MATLAB, digite quit ou exit no prompt.

1.2 Vetores e matrizes

No MATLAB, um vetor é definido como:

6
>> A = [1 2 3 4 5 6]

A =

1 2 3 4 5 6

>> X = [0 0.2*pi 0.4*pi 0.6*pi 0.8*pi pi]

X =

0 0.6283 1.2566 1.8850 2.5133 3.1416

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 =

0 0.6283 1.2566 1.8850 2.5133 3.1416

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 = linspace(0, pi, 6)

X =

0 0.6283 1.2566 1.8850 2.5133 3.1416

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 =

1.0000 3.1623 10.0000 31.6228 100.0000

Matrizes são criadas da seguinte forma:

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 =

0 0.5878 0.9511 0.9511 0.5878 0.0000

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

▶ A^2 significa potência de matrizes (A * A).

▶ A.^2 significa elevar cada elemento do vetor A ao quadrado.

Elevando cada elemento do vetor A ao quadrado:

>> Z = A.^2

Z =

0 4 16 36 64 100

Elevando o vetor A ao quadrado:

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

O símbolo ' (aspas simples) significa transposição:

>> M'

ans =

1 2 -4
2 3 -5
3 5 -6

Acesso a um elemento de um vetor:

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

Pode-se criar matrizes a partir de vetores ou outras matrizes:

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

As funções det(M) e inv(M) produzem o determinante e a inversa de uma matriz:

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

Quando se tem um problema de resolver um sistemas de equações lineares como Ax = B para x, ou


seja, x = A −1 b, geralmente usa-se x = inv(A) * b somente se o sistema for de posto completo e
bem condicionado. O MATLAB define o operador \, que representa uma divisão matricial à esquerda.
Deve-se usar x = A \ b sempre que possível, pois este operador é mais robusto e lida com sistemas
sobre- ou subdeterminados, ou mal condicionados.

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

Pode-se gerar gráficos a partir de matrizes:

>> X = linspace(0, 2*pi, 100);


>> Y = sin(X);
>> plot(X, Y)

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:

>> plot(X, Y);


>> hold;
>> plot(X, Y2)

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

Figura 2.1: Gráficos gerados no MATLAB

>> plot(X, Y, 'r-', X, Y2, 'g.')

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.

Tabela 2.1: Cores e símbolos dos gráficos


Cores Símbolos
b blue . point - solid
g green o circle : dotted
r red x x-mark -. dashdot
c cyan + plus - - dashed
m magenta * star d diamond
y yellow s square (none) no line
k black < triangle (left) ^ triangle (up)
w white v triangle (down) > triangle (right)
h hexagram p pentagram

O comando legend insere uma legenda:

>> legend('Seno de X', 'Cosseno de X');

Outras personalizações (Figura 2.2(b)):

▶ Título para o gráfico:

12
>> title('seno(x) e cosseno(x)')

▶ Nome para os eixos x e y:

>> xlabel('Ângulo (em radianos)')


>> ylabel('Variáveis dependentes')

▶ Insere linhas de grade:

>> grid

▶ Dimensões dos eixos:

>> axis([xmin xmax ymin ymax]);

(a) Gráfico com ajuste de cores e símbolos (b) Nomes dos eixos e legenda

Figura 2.2: Gráficos personalizados

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

Tabela 3.1: Script graficos.m

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 caractere % insere um comentário, que é ignorado na execução.

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:

function [variaveis_de_saida] = nome_da_função (variaveis_de_entrada)

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.

function [r1, r2] = raizes (a, b, c)


% Entradas: a, b, c (coeficientes da equação de 2o. grau)
% Saídas: r1, r2 (raízes)
delta = b^2 - 4 * a * c;
r1 = ( -b + sqrt(delta) ) / (2 * a);
r2 = ( -b - sqrt(delta) ) / (2 * a);

Tabela 4.2: Arquivo principal.

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

5.1 Declarações de controle condicional

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

A forma geral para o uso da declaracao if é a seguinte:

if <expressão booleana 1>


<sequência de comandos 1>
elseif <expressão booleana 2>
<sequência de comandos 2>
else
<sequência de comandos 3>
end

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.

Tabela 5.1: Operadores lógicos e relacionais.


Lógicos Relacionais
& e < menor que
| ou > maior que
~ não > maior que
=< menor ou igual
>= maior ou igual
== igual
~= diferente

Uma forma mais simples da declaração if é:

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.

Tabela 5.2: Exemplo do uso do if.

% Generate a random number


a = randi(100, 1);
% If it is even, divide by 2
if rem(a, 2) == 0
disp('a is even')
b = a/2;
end

5.1.2 Declaração switch

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:

[dayNum, dayString] = weekday (date, 'long', 'local');


switch dayString

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.

5.2 Declarações de controle de loop

As declarações de controle de loop (for, while, continue, break) permitem controlar a exe-
cução de loops no programa.

5.2.1 Declaração for

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

for <contador> = <valor inicial> : <incremento> : <valor final>


<sequência de comandos>
end

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.

5.2.2 Declaração while

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

while <expressão booleana>


<sequência de comandos>
end

Na estrutura, a <sequência de comandos> sera executada enquanto a <expressão booleana>


retornar um valor verdadeiro. A Tabela 5.4 apresenta um código para calcular a raiz do polinômio
x 3 − 2x − 5 usando o método da bisseção.

Tabela 5.4: Exemplo do uso do while.

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

5.2.3 Declaração continue

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.

5.2.4 Declaração break

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.

Tabela 6.1: Funções de resolução de EDOs no MATLAB.


Usa métodos de Runge-Kutta de quarta e quinta ordens simultaneamente para
ode45 estimar o erro e o tamanho do passo. Use esta função como primeira escolha
para resolver uma equação diferencial.
Usa métodos de Runge-Kutta de segunda e terceira ordens simultaneamente
ode23 para estimar o erro e o tamanho do passo. ode23 é computacionalmente mais
leve do que ode45.
Usa método de Adams-Bashforth-Moulton de ordem variável. Para problemas
ode113
com pouca tolerância a erros ou problemas computacionalmente pesados.
Se ode45 se torna um processo lento, a equação diferencial deve ser de um
ode15s
problema stiff. Neste caso use ode15s, ode23s, ode23t, ode23tb.

6.1 Equações diferenciais ordinárias

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

com condição inicial y(t 0 ) = y 0 , onde t é a variável independente e y é a variável dependente.

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

deve ser escrita como a função da Tabela 6.2.

Tabela 6.2: Definição de uma EDO.

function [yp] = problema1 (t, y)


% Definição do problema
yp = -5 * y;

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

onde x 1 = x e x 2 = ẋ e condições iniciais x 1 (0) = x 0 e x 2 (0) = ẋ 0 . As variáveis em um sistema de


EDOs são colocadas em forma de vetor coluna no MATLAB. Assim, a função é escrita de acordo com
a Tabela 6.3.

Tabela 6.3: Definição de uma EDO de 2.a ordem.

function [xp] = problema2 (t, x)


% Definição da EDO de 2a. ordem como um sistema de EDOs de 1a.
ordem
xp(1, 1) = x(2);
xp(2, 1) = -4 * x(2) - 6 * x(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:

[T, X] = ode45 (@funcao_edo, [t_inicial t_final], x0)

onde:

▶ funcao_edo: nome da função que define as EDOs

▶ [t_inicial t_final]: vetor com os valores inicial e final da variável independente

▶ x0: vetor com os valores das condições iniciais

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:

>> [T, X] = ode45 (@problema2, [0 5], [3 ; 0]);

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:

Tabela 6.4: Definição de uma EDO passando os valores dos parâmetros

function [xp] = problema3 (t, x, a, b)


% Definição da EDO, passando os valores de a e b
xp(1, 1) = x(2);
xp(2, 1) = -a * x(2) - b * x(1);

Dados os valores a = 3 e b = 1, a solução é obtida por:

>> [T, X] = ode45 (@(t, x) problema2(t, x, 3, 1), [0 5], [3 ; 0]);

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

Figura 6.1: Sistema massa-mola-amortecedor.

Escrevendo na representação de espaços de estados, com x 1 = x(t ), x 2 = ẋ(t ) e y = x 1 tem-se:

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

1) Definir o código da EDO no MATLAB (arquivo mma.m, Tabela 6.5):

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

function [xp] = mma (t, x)


% Definição das EDOs do sistema massa-mola-amortecedor
m = 1.5; % [kg]
b = 0.9; % [Ns/m]
k = 60; % [N/m]
f = 0; % [N]
xp(1, 1) = x(2);
xp(2, 1) = -(k / m) * x(1) - (b / m) * x(2) + (1 / m) * f;

Tabela 6.6: Arquivo sim_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.

7.1 Espaço de estados no MATLAB

Um sistema de EDOs com coeficientes constantes pode representado no espaço de estados, da se-
guinte forma:

ẋ = Ax + Bu
y = Cx + Du

onde x é um vetor contendo as variáveis de estado, u é a entrada, y é a saída, e A, B, C e D são matrizes


constantes. Este sistema pode ser definido no MATLAB usando o comando ss(), especificando as
matrizes A, B, C e D.

22
(a) Curva de x 1 (b) Curva de x 2

Figura 6.2: Gráficos do sistema massa-mola-amortecedor.

>> sys = ss(A, B, C, D);

sys é um objeto que representa o sistema no Matlab.

7.2 Funções de transferência no MATLAB

Um função de transferência da forma:

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:

>> num = [b0 b1 b2 b3];


>> den = [a0 a1 a2 a3 a4];

Em seguida, define-se a função de transferência pelo comando tf():

>> sys = tf(num, den);

Uma forma alternativa de definir a função de transferência é:

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

7.3 Respostas de um sistema

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:

▶ step(sys): produz a resposta e plota a resposta do sistema sys a um degrau unitário.

▶ impluse(sys): produz e plota a resposta do sistema sys a um impulso unitário

▶ lsim(sys, u, t): plota a resposta do sistema sys a uma entrada u no intervalo de tempo t

▶ Definir o tempo t, de 0 a 4 s com 0,01 s de incremento


t = 0 : 0.01 : 4;
▶ Definir a entrada u
u = sin(10 * t);

7.3.1 Exemplo 2

A representação no espaço de estados do exemplo anterior é dada por:


[ ] [ ]
0 1 0
ẋ = k b
x+ 1
f (t )
−m −m m
[ ]
y= 1 0 x

[ ]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.

Tabela 7.1: Arquivo sim_mma2.m.

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

A equação diferencial que descreve o sistema massa-mola-amortecedor dado na Subseção 6.1.1 é:

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

Assim, tem-se a função de transferência:

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.

Tabela 7.2: Arquivo 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);

O resultado deve ser o gráfico da Figura 7.2.


Figura 7.2: Resposta ao degrau unitário do sistema massa-mola-amortecedor.

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

A partir do prompt do MATLAB, pode-se iniciar o Simulink com o comando:

>> simulink

ou a partir do ícone na janela principal do MATLAB indicado na Figura 8.1.

Figura 8.1: Janela principal do MATLAB com o ícone do Simulink.

A janela principal do Simulink mostra um conjunto de blocos de comando divididos em bibliotecas,


como apresentado na Figura 8.2.

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.

Figura 8.3: Janela de trabalho 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.

Pode-se adicionar comentários na janela de trabalho para ajudar a compreensão do sistema. Um


clique duplo cria uma área na qual pode-se escrever um texto. Os nomes dos blocos também podem
ser alterados.

A seleção do menu 'Display > Signal & Ports > Signal Dimensions' permite visualizar a
dimensão de cada sinal do sistema.

8.1.2 Configurações da simulação

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.

9. INTERAÇÃO DO SIMULINK COM O MATLAB

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.

10. ALGUNS BLOCOS DE COMANDO

A biblioteca de blocos é organizada em grupos funcionais:

▶ Sources: blocos para a geração de sinais de entrada

▶ Sinks: blocos para a coleta e visualização de sinais

▶ Math: blocos para manipulação matemática

▶ Continuous: blocos para a definição de funções de transferências contínuas

Na biblioteca Source, os blocos mais comumente utilizados são:

▶ Constant: gerar um valor constante

▶ Step: gerar uma função degrau

▶ Ramp: gerar uma função rampa

▶ Sine Wave: gerar uma função senoidal

▶ From Workspace: sinal previamente gerado na área de trabalho do MATLAB

▶ Clock: tempo em cada passo de simulação

Na biblioteca Sinks, tem-se:

▶ Scope: mostra um sinal como função do tempo

▶ XYGraph: gráfico do sinal y como função do sinal x

31
▶ To Workspace: salva o sinal na área de trabalho do MATLAB

Na biblioteca Continuous, tem-se:

▶ Transfer Fcn: permite definir uma função de transferência especificando os coeficientes dos
polinômios do numerador e denominador

▶ Zero-Pole: permite definir uma função de transferência especificando os polos e zeros

11. EXEMPLOS

11.1 Exemplo 4

A implementação em Simulink da equação diferencial que descreve o sistema massa-mola-amorte-


cedor do exemplo da Subseção 6.1.1 está mostrada na Figura 11.1. Os nomes originais dos blocos
foram mantidos e os valores das variáveis m, b e k devem ser previamente definidos na área de tra-
balho do MATLAB.

Figura 11.1: Sistema massa-mola-amortecedor.

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'

Figura 11.2: Respostas do sistema massa-mola-amortecedor.

os polinômios do numerador e denominador da função de transferência do sistema (Subseção 7.3.2).


A implementação em Simulink está mostrada na Figura 11.3 e a resposta ao degrau unitário está na
Figura 11.4.

33
Figura 11.3: Sistema massa-mola-amortecedor definido pela função de transferência.

Figura 11.4: Resposta ao degrau unitário do sistema massa-mola-amortecedor.

34

Você também pode gostar