Matlab PDF

Você também pode gostar

Você está na página 1de 94

Faculdade de Engenharia Industrial

Fundao de Cincias Aplicadas

Matlab &
Simulink
So Bernardo do Campo - Dezembro de 1994
Departamento de Eletricidade
ndice Analtico

1. Tutorial do Matlab & Simulink......................................................................... 2

1.1 Matlab Bsico.............................................................................................. 2


1.1.1 Introduo............................................................................................. 3
1.1.2 Operaes Matriciais............................................................................ 8
1.1.3 Operaes em Array........................................................................... 10
1.1.4 Manipulao Matricial e Vetorial ...................................................... 13
1.1.5 Anlise de Dados................................................................................ 18
1.1.6 Funes Matriciais ............................................................................. 20
1.1.7 Polinmios e Processamento de Sinais .............................................. 20
1.1.8 Funes de Funes ........................................................................... 23
1.1.9 Grficos .............................................................................................. 27
1.1.10 Controles de Fluxo ........................................................................... 37
1.1.11 Arquivos M ...................................................................................... 39
1.1.12 Arquivos de Disco............................................................................ 46
1.1.13 O Depurador do Matlab ................................................................... 48

1.2 Toolboxes do Matlab................................................................................. 49


1.2.1 Sistemas de Controle.......................................................................... 50
1.2.2 Outros Toolboxes ............................................................................... 54

1.3 Simulink Bsico ........................................................................................ 55


1.3.1 Linhas Gerais...................................................................................... 55
1.3.2 Construo de Modelos...................................................................... 56
1.3.3 Anlise dos Modelos .......................................................................... 69
1.3.4 Como o Simulink Funciona ............................................................... 80
1.3.5 S-Functions ........................................................................................ 80
1.3.6 Mascarando Blocos ............................................................................ 84
1.3.7 Adicionando um novo bloco .............................................................. 87

2. Bibliografia...................................................................................................... 93
1. Tutorial do
Matlab & Simulink

1.1 Matlab Bsico

MATLAB um ambiente de computao tcnica de visualizao e


processamento numrico de alto desempenho. Ele integra anlise numrica,
clculo matricial, processamento de sinais, vrios aplicativos e grficos num
ambiente amigvel onde problemas e solues so expressos como eles so
representados matematicamente sem a necessidade da programao tradicional.

O nome MATLAB acrnimo de laboratrio de matemtica. Ele foi


originalmente escrito para permitir um acesso fcil aos programas de clculo
matricial desenvolvidos pelos projetos LINSPACK e EISPACK, que juntos
representam o estado da arte em programas de clculo matricial.

MATLAB tambm contempla uma famlia de aplicativos especficos


chamados toolboxes. Esses aplicativos foram desenvolvidos por profissionais
de expresso em cada uma das reas e foram totalmente concebidos na forma de
colees de funes MATLAB (M-files), estendendo o ambiente MATLAB na
soluo de problemas particulares. Entre outros, temos os seguintes toolboxes:
Processamento de Sinais; Projeto de Sistemas de Controle; Simulao de
Sistemas Dinmicos; Identificao de Sistemas; Redes Neurais; Splines;
Otimizao ; Anlise e Sntese , etc.

Provavelmente a caracterstica mais importante do MATLAB sua


ampliabilidade. Isto permite que qualquer um possa ser um autor de um toolbox .
Aplicativos matemticos complexos so facilmente desenvolvidos em poucas
linhas no ambiente MATLAB sem a necessidade de programao de uma nica
linha de cdigo C, FORTRAM ou outro cdigo de baixo nvel.

2
Tutorial do Matlab & Simulink 3

1.1.1 Introduo

O MATLAB trabalha essencialmente com um tipo de objeto: Matriz


retangular numrica (real ou complexa). Em algumas situaes existe
significado especial agregado matrizes de dimenso 1 (escalares) e matrizes
com uma s linha ou coluna (vetores). A linguagem MATLAB no usa
declarao preliminar ou dimensionamento de variveis. Isso feito de forma
automtica.

Matrizes podem ser adicionadas no ambiente de vrias formas, contudo a


forma mais simples para matrizes pequenas entrando com a lista dos
elementos, seguindo a seguinte conveno:

Separe os elementos com espaos ou vrgulas.


Delimite os elementos com colchetes [].
Use ; (ponto-e-vrgula) para indicar o final da linha.

Exemplo:

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

Resulta:
A=
1 2 3
4 5 6
7 8 9

Elementos de uma matriz podem ser quaisquer expresses MATLAB. Por


exemplo:

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

Resulta:
x=
-1.3000 1.7321 4.8000

Elementos individuais podem ser referenciados pelo seu ndice (linha,coluna):


assim. para acrescentar elementos ao exemplo anterior

FEI - FCA
Tutorial do Matlab & Simulink 4

x(5) = abs(x(1))

Resulta:
x=
-1.3000 1.7321 4.8000 0 1.3000

Ao atribuir um valor numrico x(5), automaticamente x(4) criado com valor


nulo. Voc pode construir matrizes maiores usando matrizes menores como seus
elementos. Por exemplo, vamos adicionar uma linha a matriz A:

r = [10 11 12];
A = [A; r]

Isto resulta em:

A=
1 2 3
4 5 6
7 8 9
10 11 12

Voc pode extrair sub-matrizes de uma matriz maior usando : (dois pontos). Por
exemplo:

A = A(1:3,:);

Remove as trs primeiras linhas e todas as colunas da matriz atual A e coloca o


resultado em A.

A=
1 2 3
4 5 6
7 8 9

Variveis e Declaraes do MATLAB

FEI - FCA
Tutorial do Matlab & Simulink 5

Declaraes no MATLAB so freqentemente feitas da seguinte forma:

varivel = expresso

ou simplesmente,

expresso

Quando o nome da varivel omitido, o nome ans usado como varivel


default.

Uma definio normalmente termina com ENTER. Contudo, se o ltimo


caracter um ponto-e-vrgula, ele suprime a apresentao no vdeo, embora faa
a atribuio do mesmo jeito. Isto especialmente importante nas situaes que o
resultado muito grande, tal como uma matriz de 10 linhas e 10 colunas.

Se a expresso muito grande e no cabe em uma linha, use (...) para


continuar a definio na linha seguinte. 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;

Voc pode formar uma varivel ou nome de funo com uma letra seguida
de qualquer quantidade de letras (ou underscore) . MATLAB diferencia letras
maisculas de minsculas e usa somente os primeiros 19 caracteres do nome.

Obtendo Informao da rea de Trabalho (workspace)

Para listar as variveis ativas use o comando who. Para obter mais
informaes sobre as variveis como: nome, tamanho, nmero de elementos,
etc., use o comando whos.

O Utilitrio de HELP

FEI - FCA
Tutorial do Matlab & Simulink 6

O comando help produz informao on-line da maioria dos tpicos do


MATLAB, mostrando uma lista dos diretrios que contm arquivos do
MATLAB. Para listar as funes de um diretrio particular, digite help seguido
do nome do diretrio. Exemplo:

help matfun

Para obter auxlio sobre uma funo especfica digite help e o nome da
funo. Exemplo:

help inv

Para localizar palavras-chaves em todos os arquivos do MATLAB, use o


comando lookfor. Exemplo:

lookfor inverse

INVHILB Inverse Hilbert matrix
ACOS Inverse cosine
ACOSH Inverse hyperbolic cosine
ACOT Inverse cotangent
ACOTH Inverse hyperbolic cotangent
ACSC Inverse cosecant
ACSCH Inverse hyperbolic cosecant

# #
Salvando e Saindo

Para sair do MATLAB digite exit. Encerrando uma seo do MATLAB,


apaga-se todas as variveis da rea de trabalho (workspace). Se for necessrio,
salve suas variveis digitando save. Este comando salvar todas as variveis em
um arquivo chamado matlab.mat. Para recuperar as variveis use o comando
load. Voc tambm pode salvar somente algumas variveis e usar o nome de
um arquivo qualquer. O exemplo a seguir salva as variveis x, y e z no arquivo
temp.mat.

save temp x y z

FEI - FCA
Tutorial do Matlab & Simulink 7

Nmeros e Expresses Aritmticas

O MATLAB usa notao convencional com potncia de dez ou unidade


complexa como sufixo:

-4.534i
1.760217e-11

O MATLAB usa 16 dgitos significativos e expresses aritmticas so


calculadas com a seguinte prioridade

^ potenciao
\ diviso esquerda
/ diviso direita
* multiplicao
- subtrao
+ adio

Algumas funes internas retornam valores especiais. A funo pi retorna


o valor de , a funo inf retorna , etc. O MATLAB dispes das funes
matemticas elementares normalmente encontradas em calculadores cientficas.
Essas funes incluem por exemplo: abs, sqrt, log, sin. Se uma operao
resultar em infinito isso no implica em erro, simplesmente aquela varivel ter
o valor infinito. O mesmo ocorre para operaes invlidas como / ou 0/0. O
resultado NaN (Not a Number).

Formato de Sada

Para alterar a formatao do nmero a ser apresentado na tela, utilize o


comando format. Exemplos:

x = [4/3 1.2345e-6]

format short

1.3333 0.0000

format short e

1.3333e+00 1.2345e-06

FEI - FCA
Tutorial do Matlab & Simulink 8

Funes

Grande parte do poder do MATLAB vem do enorme conjunto de funes.


Algumas das funes so internas ao processador MATLAB e outras so
disponveis como bibliotecas externas na forma de M-files. O conjunto de
funes aplicadas a uma rea especfica so denominadas toolboxes. Cada
usurio pode criar suas prprias funes que se comportam como se fossem
funes internas. As sees adiante discutem cada uma das diferentes categorias
de funes analticas do MATLAB bsico.

possvel combinar funes de vrias formas. Exemplo:

x = sqrt(log(z))

Algumas funes usam dois ou mais argumentos, e cada argumento pode


ser uma expresso. Exemplo:

angulo = atan2(y,3*x)

Existem funes que retornam dois ou mais valores. Nestes casos, os


valores de sada devem estar entre colchetes [] e separados por vrgula. Exemplo:

[V,D] = eig(A)

A funo eig calcula os autovetores e os autovalores de A,


respectivamente. Havendo dvida, deve-se usar help eig.

1.1.2 Operaes Matriciais

Transposta de uma Matriz

O caracter ' (apstrofe) denota transposta de uma matriz. Se z for


complexo, z' o transposto conjugado complexo de z. Exemplo:

A = [1 2; 3 4]

FEI - FCA
Tutorial do Matlab & Simulink 9

A=
1 2
3 4

B = A'
B=
1 3
2 4

Adicionando e Subtraindo Matrizes

Os smbolos + e - denotam adio e subtrao de matrizes. A operao


definida sempre que as matrizes tenham a mesma dimenso. Exemplo:

C=A+B
C=
2 5
5 8

A adio e subtrao tambm definida quando um dos operandos for um


escalar. Exemplo:

D=C-2
D=
0 3
3 6

Multiplicao de Matrizes

O smbolo * denota multiplicao de matrizes e vlida sempre que


dimenses internas dos dois operandos for igual. Exemplo:

E=A*B
E=
5 11
11 25

Naturalmente, um escalar (matriz de dimenso 1) pode multiplicar ou ser


multiplicado por qualquer matriz. Exemplo:

F = 2*E

FEI - FCA
Tutorial do Matlab & Simulink 10

F=
10 22
22 50

Diviso de Matrizes

Existe dois smbolos de diviso de matrizes: / e \. Os significados so:

X = A\B soluo do sistema A*X = B


X = B/A soluo do sistema X*A = B

Funes Elementares e Transcendentais

O MATLAB enxerga expresses como exp(A) e sqrt(A) como operao


sobre cada um dos elementos de um vetor (linha ou coluna). Existem funes
para calculo de funes transcendentais de matrizes, quando essas so
quadradas. Exemplos:

expm exponencial de uma matriz


logm logaritmo de uma matriz
sqrtm raiz quadrada de uma matriz

Outras funes elementares sobre matrizes incluem:

poly polinmio caraterstico


det determinante
trace trao

1.1.3 Operaes em Array

Refere-se a operaes em array as operaes aritmticas realizadas


elemento a elemento ao invs da operao matricial algbrica usual definida
pelos smbolos * \ / ^ e '. Para indicar que a operao elemento-a-elemento usa-
se um ponto (.) antes do smbolo da operao.

FEI - FCA
Tutorial do Matlab & Simulink 11

Somando e Subtraindo Arrays

Para a adio e subtrao, as operaes de arrays e as de matrizes so as


mesmas. Neste caso + e - podem ser usados sem o ponto.

Multiplicando e Dividindo Arrays

O smbolo .* denota multiplicao elemento-a-elemento. Se A e B tm


mesma dimenso, ento A.*B resulta num array cujos elementos so o produto
dos elementos individuais de A e de B. Exemplo:

x = [1 2 3]; y = [4 5 6];
z = x.*y
z=
4 10 18

A expresso A./B e A.\B resulta no quociente de cada elemento. Exemplo:

z = x.\y
z=
4.0000 2.5000 2.000

Usando Potenciao com Arrays

O smbolo .^ denota potenciao elemento-a-elemento. Exemplo:

z = x.^y
z=
1 32 729

Operadores Relacionais

Para comparar-se matrizes de dimenses idnticas existem seis (6)


operadores relacionais.

< menor
<= menor ou igual

FEI - FCA
Tutorial do Matlab & Simulink 12

> maior
>= maior ou igual
== igual
~= diferente

O MATLAB compara os pares de elementos correspondentes. O resultado


uma matriz de "uns" e "zeros", onde "um" representa "verdadeiro" e "zero"
representa "falso". Exemplo:

2 + 2 ~= 4
ans =
0

O exemplo abaixo, ilustra como encontrar os elementos das matriz A que


so divisveis por 3:

A = [8 1 6; 3 5 7; 4 9 2];
G = rem(A,3);
P = (G == 0)
P=
0 0 1
1 0 0
0 1 0

A funo rem(A,3) retorna a matriz dos restos da diviso por 3. Cada um


dos elementos de G informa se a operao relacional falsa (0) ou verdadeira
(1).

A funo find muito usada em conjunto com operadores relacionais. O


exemplo abaixo ilustra como localizar todos os elementos de Y que so maiores
que 3 e substitu-los por 10.

Y = [1 2 3 4 5 6 7 8 9];
i = find(Y > 3.0);
Y(i) = 10*ones(size(i));

Operadores Lgicos

FEI - FCA
Tutorial do Matlab & Simulink 13

Os operadores &, |, e ~ so os operadores lgicos "e", "ou" e "no"


respectivamente. As funes any e all so muito utilizadas em conjunto com
operadores lgicos. A funo any(x) retorna "1" se qualquer elemento de x for
no nulo e retorna "0" caso contrrio. A funo all(x) retorna "1" somente se
todos os elementos de x so no nulos. Essas funes so particularmente teis
na declarao de um if.

if all(A < 0.5)


faa alguma coisa
end

Funes Matemticas

Um conjunto de funes matemticas elementares so aplicveis


elemento-a-elemento num array.

A = [ -1 2 -3; 4 -5 6];
B = abs(A)
B=
1 2 3
4 5 6

1.1.4 Manipulao Matricial e Vetorial

A capacidade de indexao do MATLAB permite manipulao de linhas e


colunas, elementos individuais e submatrizes de matrizes. Os vetores so o
ponto central da indexao e eles so gerados com o uso de : (dois pontos).

Gerando Vetores

A declarao abaixo ilustra a criao de um vetor usando (:) dois pontos:

x = 1:5
x=
1 2 3 4 5

FEI - FCA
Tutorial do Matlab & Simulink 14

Voc pode tambm criar o vetor com incrementos diferentes da unidade.


No exemplo a seguir o passo de /4.

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

z = 6: -1 : 1
z=
6 5 4 3 2 1

A uso de (:) permite a criao rpida de tabelas como ilustrado a seguir:

x = (0 : 0.2 : 3)';
y = exp(-x).*sin(x);
[x y]
ans =
0 0
0.2000 0.1627
0.4000 0.2610
0.6000 0.3099
0.8000 0.3223
1.0000 0.3096
1.2000 0.2807
1.4000 0.2430
1.6000 0.2018
1.8000 0.1610
2.0000 0.1231
2.2000 0.0896
2.4000 0.0613
2.6000 0.0383
2.8000 0.0204
3.0000 0.0070

Existem outras funes para a gerao de vetores tal como logspace que
gera um vetor espaado logaritmicamente:

w = logspace(-1,1,5)
w=
0.1000 0.3162 1.0000 3.1623 10.0000

Indexando

FEI - FCA
Tutorial do Matlab & Simulink 15

Elementos individuais de matrizes podem ser referenciados inserindo seus


ndices de linha e coluna entre parnteses. Se uma expresso for usada como
ndice, o resultado aproximado paro o inteiro mais prximo.

A = [1 2 3; 4 5 6; 7 8 9];
A(3,3) = A(1,3) + A(3,1)
A=
1 2 3
4 5 6
7 8 10

Usando (:) dois pontos, podemos indexar todas as linhas ou colunas ou


uma parte:

A(:,1)
A=
1
4
7

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

O exemplo a seguir mostra como fazer referncia explcita a algumas


linhas ou colunas. Coloca-se os nmeros das linhas e colunas dentro de
colchetes:

A([1 3],[1 3])


A=
1 3
7 10

Um outro uso para os dois pontos (:) no empilhamento das colunas de


uma matriz qualquer. No caso de vetores, obteremos sempre o vetor coluna:

A = [1 2; 3 4; 5 6];
B = A(:)
B=
1

FEI - FCA
Tutorial do Matlab & Simulink 16

2
3
4
5
6

Usando Vetores de 0s-1s na Indexao

Voc pode usar vetores de "uns", usualmente criados a partir de


operadores relacionais no referenciamento de submatrizes. Suponha que A uma
matriz de dimenso m-por-n e L um vetor linha de "zeros" e "uns" de dimenso
m. Ento,

A(L,:)

especifica as linhas de A cujos elementos de L so no nulos. Ou seja, os uns de


L apontam para as linhas de A. O exemplo a seguir mostra como extrair de X as
linhas cuja terceira coluna maior ou igual a 100.

L = X(:,3) > 100;


Y = X(L,:);

Matrizes vazias

A declarao,

X = []

atribui a matriz de dimenso zero-por-zero X, sendo possvel usar a varivel X


em clculos. Criar a matriz X vazia diferente do que apagar a varivel X com o
comando clear X. Com o uso de matrizes vazias possvel remover linhas e
colunas de uma matriz, como mostra o exemplo a seguir que apaga as colunas 2
e 4 da matriz A:

A(:,[2 4]) = []

Matrizes Especiais

FEI - FCA
Tutorial do Matlab & Simulink 17

Existe uma coleo de funes que geram matrizes que so encontradas


nos problemas de lgebra linear e processamento de sinais. Exemplos:

compan - gera a matriz a partir do polinmio caraterstico


diag - matriz diagonal
pascal - constri o tringulo de Pascal
zeros - matriz de "zeros"
ones - matriz de "uns"
eye - matriz identidade
logspace - vetores espaados logaritmicamente
linspace - vetores espaados linearmente
rand - elementos randmicos uniformemente distribudos
randn - elementos randmicos normalmente distribudos
etc ...

Construindo Matrizes Grandes

possvel formar matrizes maiores a partir de matrizes menores,


envolvendo as matrizes menores entre colchetes . Por exemplo, se A uma
matriz quadrada,

C = [A A'; ones(size(A)) A.^2]

cria a matriz C com o dobro do tamanho de A. Note que na construo de


matrizes usando matrizes, as dimenses das matrizes menores devem ser
compatveis ou ento aparecer uma mensagem de erro.

Manipulando Matrizes

Vrias funes esto disponveis para a manipulao matricial como:


rot90 (rotao), tril (parte triangular superior), triu (parte triangular inferior),
reshape (alterao da dimenso) etc.

FEI - FCA
Tutorial do Matlab & Simulink 18

1.1.5 Anlise de Dados

Esta seo apresenta uma introduo anlise de dados usando o


MATLAB. Tcnicas mais poderosas esto disponveis usando funes de
lgebra linear e funes de processamento de sinais na seo 1.1.7 (polinmios e
processamento de sinais).

Conveno

Por conveno, as diferentes variveis em um conjunto de dados so


colocadas em colunas, permitindo observao vertical dos dados atravs das
linhas. Portanto, um conjunto de dados de 50 amostras de 13 variveis
armazenado numa matriz de dimenso 50-por-13.

O conjunto de dados armazenados na matriz count ser usado para ilustrar


o uso de algumas funes

count =
11 57 291
43 178 1011
38 163 1095
61 420 2407
12 59 287

Para esse exemplo temos 5 observaes para 3 variveis. Isso pode ser
obtido como segue:

[n,p] = size(count)
n=
5
p=
3

Um grupo de funes (abaixo) confere a capacidade de anlise de dados


bsica:
max - mximo valor
min - mnimo valor
mean - valor mdio
median - mediana
std - desvio padro

FEI - FCA
Tutorial do Matlab & Simulink 19

sort - ordenao
sum - soma dos elementos
prod - produto dos elementos
cumsum - soma cumulativa dos elementos
cumprod - Produto cumulativos dos elementos
diff - Aproximao da derivada
corrcoef - Coeficientes de correlao
cov - Matriz de covarincia

Para argumentos vetoriais no faz diferena se o vetor linha ou coluna.


Para arrays as funes so orientadas por colunas.

Continuando com o exemplo anterior, as declaraes abaixo

mx = max(count);
mu = mean(count);
sigma = std(count);

resultam em:
mx =
61 420 2407
mu =

1.0e+003 *

0.0330 0.1754 1.0182


sigma =

21.4126 147.9503 865.7639

Ajuste de Curvas

Uma das alternativas possveis no MATLAB para encontrarmos os


coeficientes de p(x) a partir de dados tabelados atravs da funo polyfit, onde
n o grau do polinmio.

p( x ) = c1x d + c2 x d 1 + " + cn

A sintaxe de chamada a seguinte, onde x a abcissa, p o valor da funo


para cada x(i) e n o grau do polinmio.

FEI - FCA
Tutorial do Matlab & Simulink 20

c = polifit(x,p,n)

1.1.6 Funes Matriciais

Autovalores e Autovetores

Se A uma matriz n-por-n, os n nmeros que satisfazem a equao


Ax = x, so os autovalores de A. Eles so encontrados usando

eig(A)

Se o comando for usado com dois parmetros de sada, obteremos os


autovalores em D e os autovetores em X:

[X,D] = eig(A)

Norma, Posto e Condicionamento

As funes MATLAB que calculam a norma, posto e nmero de


condicionamento de uma matriz so:

cond - nmero de condicionamento usando norma 2


norm - norma 1, norma 2, norma F e norma
rank - posto da matriz
rcond - estimativa do condicionamento

1.1.7 Polinmios e Processamento de Sinais

O MATLAB possui funes para manipulao polinomial e para o


processamento digital de sinais. Essas funes operam primordialmente com
vetores.

Representao de Polinmios

O MATLAB representa polinmios como vetores linha contendo os


coeficientes ordenados em ordem decrescente dos expoentes. Por exemplo, o
polinmio caracterstico de

FEI - FCA
Tutorial do Matlab & Simulink 21

A=
1 2 3
4 5 6
7 8 0

calculado com

p = poly(A)
p=
1 -6 -72 -27

Esta a representao MATLAB do polinmio s3 6 s2 72s 27. As razes dessa


equao so

r = roots(p)
r=
12.1229
-5.7345
-0.3884

Essas razes so os mesmos que os autovalores da matriz A. Voc pode remontar


o polinmio original com a funo poly

p2 = poly(r)
p2 =
1 -6 -72 -27

Considere os polinmios a(s) = s2 + 2s + 3 e b(s) = 4 s2 + 5s + 6 . O produto dos


polinmios a convoluo dos seus coeficientes

a = [1 2 3]; b = [4 5 6];
c = conv(a,b)
c=
4 13 28 27 18

Voc pode utilizar a convoluo inversa para dividir dois polinmios, e no


caso do exemplo, obter b novamente.

FEI - FCA
Tutorial do Matlab & Simulink 22

[q,r] = deconv(c,a)
q=
4 5 6
r=
0 0 0 0 0

A lista de funes de polinmios inclui:

poly - polinmio caracterstico


roots - razes de um polinmio
polyval - clculo do valor numrico do polinmio
polyvalm - clculo do polinmio de matrizes
conv - multiplicao (convoluo)
deconv - diviso (deconvoluo)
residue - expanso em fraes parciais
polyder - derivada do polinmio
polyfit - ajuste polinomial de curva

Processamento de Sinais

Vetores so usados para armazenar sinais de dados amostrados, ou


seqncias, para o processamento dos sinais. Para sistemas com mltiplas
entradas, cada linha da matriz corresponde a uma amostra. O MATLAB bsico
contm as funes a seguir, enquanto que o Signal Processing Toolbox contm
muitas funes adicionais.

abs - magnitude complexa


angle - ngulo de fase
conv - convoluo
deconv - deconvoluo
fft - transformada rpida de Fourier
ifft - transformada rpida inversa de Fourier
fftshift - alterna quadrantes de matrizes
fft2 - FFT de duas dimenses
ifft2 - FFT inversa de duas dimenses
fftshift - rearranja os resultados da FFT
conv2 - convoluo de duas dimenses

Filtragem de Dados

FEI - FCA
Tutorial do Matlab & Simulink 23

A funo,

y = filter(b,a,x)

filtra os dados do vetor x com o filtro descrito pelos vetores a e b, criando o


dado y filtrado.

x y
H(z)

A estrutura do filtro dada a seguir pela sua funo de transferncia de


tempo discreta

Y (z) b(1) + b(2)z1 +"+ b(nb)z ( nb 1)


H (z ) = =
X (z) 1 + a(2)z 1 +"+ a(na)z ( na 1)

A funo freqz do Signal Processing Toolbox, calcula a resposta em


freqncia de filtros digitais. Alm dessa, exemplificada abaixo, esse Toolbox
contm inmeras funes para o projeto de filtros digitais.

[h,w] = freqz(b,a,n);
mag = abs(h);
fase = angle(h);
semilogy(w,mag)
plot(w,fase)

1.1.8 Funes de Funes

A classe de funes MATLAB para clculo que no sobre matrizes


numricas, mais sim com funes matemticas aqui designada por funes de
funes e incluem:

Integrao Numrica
Equaes no lineares e Otimizao
Soluo de Equaes Diferenciais

FEI - FCA
Tutorial do Matlab & Simulink 24

O MATLAB representa funes matemticas atravs de arquivos-M (M-


files). Por exemplo, a funo

1 1
f (x ) = + 6
(x 0,3) + 0,01 (x 0,9)2 + 0,04
2

torna-se disponvel no MATLAB se criarmos um arquivo com extenso .m, por


exemplo chamado humps.m, cuja listagem mostrada a seguir:

% listagem do arquivo humps.m


function y = humps(x)
y = 1./((x-.3).^2 + .01) + 1./((x-.9).^2 + .04) - 6;

O grfico dessa funo obtido como segue

x = -1:.01:2;
plot(x,humps(x))

100

80

60

40

20

-20
-1 -0.5 0 0.5 1 1.5 2

Integrao Numrica

Uma funo, tal como humps, pode ser integrada numericamente pelo
processo chamado de quadratura. Exemplo:

FEI - FCA
Tutorial do Matlab & Simulink 25

q = quad('humps',0,1)
q=
29.8583

O MATLAB oferece duas funes para o processo de quadratura:

quad - regra de Simpson adaptativa


quad8 - regra de Newton adaptativa

Note que o primeiro argumento da funo quad uma string que contm o
nome de uma funo. Isso mostra porque essa funo chamada funo de
funo ( uma funo que opera com outras funes). Os outros dois argumentos
so os limites de integrao.

Equaes No Lineares e Funes de Otimizao

No MATLAB bsico encontramos algumas funes para a manipulao


de equaes no lineares e para otimizaes.

fmin - mnimo de uma funo de uma varivel


fmins - mnimo de uma funo multivarivel
fzero - zero de uma funo de uma varivel

Continuando com o exemplo definido pela funo humps.m, a localizao


do mnimo da funo na regio de 0.5 a 1 calculada com fmin:

xm = fmin('humps',0.5, 1)
xm =
0.6370

e o seu valor no mnimo

y = humps(xm)
y=
11.2528

A localizao do zero da funo que est prximo de x = 0 e de x = 1 ,

FEI - FCA
Tutorial do Matlab & Simulink 26

xz1 = fzero('humps',0)
xz1 =
-0.1316
xz2 = fzero('humps',1)
xz2 =
1.2995

No Optimization Toolbox temos inmeras outras funes como por


exemplo,

attgoal - goal attainment multi-objetivo


constr - minimizao com restries
fminu - minimizao sem restries
fsolve - soluo de equaes no lineares
leastsq - mnimos quadrados no linear
minimax - soluo do problema minimax
seminf - minimizao semi-infinita

Equaes Diferenciais

As funes disponveis para a soluo de equaes diferenciais ordinrias


so:

ode23 - mtodo Runge-Kutta de 2/3 ordem


ode45 - mtodo Runge-Kutta-Fehlberg de 4/5 ordem

Considere a equao diferencial de segunda ordem conhecida como


equao de Van der Pol.

x + (x 2 1)x + x = 0

Esta equao pode ser escrita como um sistema de equaes diferenciais de


primeira ordem

x1 = x1 (1 x 22 ) x 2
x 2 = x1

FEI - FCA
Tutorial do Matlab & Simulink 27

O primeiro passo para simular este sistema criar um arquivo que contem este
sistema de equaes diferenciais. Chamaremos este arquivo de vdpol.m

function xponto = vdpol(t,x)


xponto(1) = x(1).*(1-x(2).^2)-x(2);
xponto(2) = x(1);

Para simular a equao diferencial no intervalo 0 t 20 , use a funo ode23.

t0 = 0; tf = 20;
x0 = [0 0.25]'; % condicoes iniciais
[t,x] = ode23('vdpol',t0,tf,x0);
plot(t,x)

-1

-2

-3
0 5 10 15 20

Para aqueles que trabalham com equaes diferenciais recomenda-se o


SIMULINK que uma extenso grfica do MATLAB para a simulao de
equaes diferenciais.

1.1.9 Grficos

O sistema grfico do MATLAB oferece uma variedade de tcnicas


sofisticadas para representar e visualizar dados. So funes grficas em 2-D e
3-D.

Grficos 2-D

FEI - FCA
Tutorial do Matlab & Simulink 28

O MATLAB fornece uma variedade de funes para a visualizao de


dados em duas dimenses (2-D).

Funes Grficas Elementares

A lista abaixo sumariza as funes grficas bsicas. Elas diferem apenas


na escala dos eixos. Cada entrada pode ser um vetor ou uma matriz e as escalas
so ajustadas automaticamente para acomodar os dados de entrada.

plot - cria um plot de vetores ou colunas de matrizes


loglog - escala logartmica nos dois eixos
semilogx - escala logartmica no eixo x e linear em y
semilogy - escala logartmica no eixo y e linear em x
title - adiciona um ttulo ao grfico
xlabel - adiciona um nome ao eixo x
ylabel - adiciona um nome ao eixo y
text - mostra um texto na posio especificada
gtext - coloca o texto no grfico usando o mouse
grid - coloca linhas de grid

Criando um Plot

Se y um vetor, plot(y) produz um grfico linear dos elementos de y em


funo do indexador de y. Se voc especificar dois vetores como argumentos,
plot(x,y) produz um grfico de y versus x. Voc pode tambm especificar vrios
conjuntos de dados e definir o estilo da linha e sua cor para cada conjunto de
dados, tudo isso num mesmo comando:

t = 0:pi/100:2*pi;
x = sin(t);
y1 = sin(t + 0.25);
y2 = sin(t + 0.5);
plot(x,y1,'r-',x,y2,'g--')
title('Defasagem')
xlabel('x=sin(t)')
ylabel('y=sin(t+)')

FEI - FCA
Tutorial do Matlab & Simulink 29

Defasagem
1

0.8

0.6

0.4

0.2

y=sin(t+) 0

-0.2

-0.4

-0.6

-0.8

-1
-1 -0.5 0 0.5 1
x=sin(t)

Estilos de Linhas, Marcadores e Cores

Tal como mostrou-se no exemplo anterior, voc pode passar um caractere


como um argumento funo plot para especificar um dos vrios estilos de
linha, smbolos e cores. Na declarao plot(X,Y,S), S uma string de 1, 2 ou 3
caracteres (delimitados por apstrofes) com as funes definidas pela tabela a
seguir. Se voc no especificar uma cor, ele usa as cores da tabela
automaticamente.

FEI - FCA
Tutorial do Matlab & Simulink 30

Smbolo Cor Smbolo Linha


y yellow . ponto
m magenta o crculo
c cyan x marca x
r red + marca +
g green * marca *
b blue - slida
w white : pontilhada
k black -. trao-ponto
-- tracejada

Adicionando Linhas num Grfico Existente

Voc pode adicionar outras curvas em um grfico que j foi construdo


usando o comando hold. Quando voc seleciona hold on, o MATLAB no
remove as linhas atuais, ao invs disso ele adiciona as linhas atuais ao grfico
atual.

O que ele pode fazer mudar a escala dos eixos automaticamente se os novos
dados no se acomodarem dentro da escala anterior. Exemplo:

plot(x)
hold on
plot(y1,'--')
plot(y2,'-.')
hold off

Resulta,

FEI - FCA
Tutorial do Matlab & Simulink 31

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 50 100 150 200 250

Dados Imaginrios e Complexos

Quando os argumentos da funo plot so complexos, isto , eles tm


parte imaginria diferente de zero, a parte imaginria ignorada exceto quando
plot usado com um nico argumento. Nesta situao, o comando um
comando grfico resumido da parte real versus a parte imaginria. Portanto,
plot(z), quando z um vetor ou matriz complexa, equivalente ,
plot(real(z),imag(z)). Para ilustrar isso, o exemplo a seguir usa a distribuio dos
autovalores de uma matriz 20-por-20 randmica:

plot(eig(randn(20,20)),x)

Distribuio de Autovalores
4

-1

-2

-3

-4
-4 -2 0 2 4 6

FEI - FCA
Tutorial do Matlab & Simulink 32

Plotando Matrizes

A funo plot pode ter um nico argumento, como plot(Y). Ela desenha
uma curva para cada coluna de Y. O eixo x formado pelo ndice de cada linha.
Se X e Y so matrizes, plot(X,Y) plota as coluna de X versus cada as colunas de Y.

X = 0:pi/50:2*pi;
Y = sin(X); Z = cos(X); W = log(X);
A = [Y' Z' W'];
plot(A)

Resulta,
2

1.5

0.5

-0.5

-1

-1.5

-2

-2.5

-3
0 20 40 60 80 100 120

Importando Dados

Voc pode importar e plotar dados gerados fora do MATLAB. Suponha


voc tenha um arquivo chamado dados.dat contento valores de duas funes e da
varivel independente.

FEI - FCA
Tutorial do Matlab & Simulink 33

dados.dat

2.3 1.0 1.0


3.1 1.9 2.0
4.5 2.2 3.0
5.6 2.6 4.0
4.8 3.5 5.0
4.7 4.7 6.0
4.4 5.3 7.0
4.0 6.0 8.0
4.2 7.1 9.0

O comando load dados.dat produz uma matriz chamada dados, 9-por-3. A seguir,
mostra-se como renomear cada uma das variveis e como plotar cada funo
separadamente.

load dados.dat
F1 = dados(:,1);
F2 = dados(:,2);
X = dados(:,3);
subplot(211), plot(X,F1)
subplot(212), plot(X,F2)

Resulta,

2
0 2 4 6 8 10

0
0 2 4 6 8 10

Funes Grficas Especializadas em 2-D

FEI - FCA
Tutorial do Matlab & Simulink 34

O MATLAB inclui uma variedade de funes especializadas, conforme


descrito resumidamente a seguir.

bar - grfico de barras


compass - grfico de ngulos com setas
errorbar - grfico de barras de erros
feather - grfico de ngulos
fplot - calcula e plota uma funo
hist - cria um histograma
polar - grfico em coordenadas polares
quiver - cria um grfico de um gradiente
rose - histograma em ngulo
stairs - grfico similar ao de barras sem linhas internas
fill - desenha um polgono e preenche o interior

Plotando Funes Matemticas

Voc pode plotar o grfico de uma funo, y = f (x ) . A soluo pela fora


bruta calcular a funo para algumas centenas de pontos no intervalo de
interesse. Por exemplo, a funo a seguir oscila com freqncia tendendo para
infinito quando x = 0,5.

x = (0:1/2000:1)';
plot(x,cos(tan(pi*x)))

Resulta,

FEI - FCA
Tutorial do Matlab & Simulink 35

y = cos(tan(pi*x))
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 0.2 0.4 0.6 0.8 1

No exemplo, a funo plotada no intervalo [0,1]. Neste caso, a funo


fplot mais efetiva para obtermos a representao grfica da funo pois ela
escolhe automaticamente uma quantidade maior de pontos na faixa que
necessrio maior resoluo grfica. Para usar a funo fplot, primeiro crie um
arquivo que conter a funo a ser plotada, por exemplo com o nome fofx.m

function y = fofx(x)
y = cos(tan(pi*x));

Agora basta passar o nome da funo como argumento de fplot.

fplot('fofx',[0 1], 25,20,10)

Resulta,

FEI - FCA
Tutorial do Matlab & Simulink 36

1 y = cos(tan(pi*x))

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 0.2 0.4 0.6 0.8 1

Grficos 3-D

O MATLAB oferece uma variedade de funes para a visualizao de


dados em 3-D, conforme sumarizado pelas funes a seguir. Contudo, no
faremos um detalhamento, visto que o assunto muito longo e pouco
interessante para os objetivos iniciais deste trabalho.

plot3 - plota linhas e pontos em 3-D.


contour, contour3 - plotagem de contornos
pcolor - desenha uma matriz retangular de clulas cujas cores
so determinadas pelos elementos da matriz.
image - mostra uma matriz como uma imagem mapeando os
elementos da matriz para o mapa de cores atuais.
mesh, meshc, meshz - cria uma perspectiva em 3-D dos
elementos da matriz.
fill3 - cria um polgono 3-D e preenche com uma cor slida ou
interpola cores.
zlabel - cria um label para o eixo z.
clabel - adiciona um label plotagem de contorno.
view - determina o ponto de visualizao atual.
viewmtx - calcula uma transformao 4x4.

FEI - FCA
Tutorial do Matlab & Simulink 37

1.1.10 Controles de Fluxo

O MATLAB possui declaraes para controle de fluxo tal como aqueles


encontrados na maioria das linguagem de computador. O controle de fluxo torna
o MATLAB mais do que uma calculadora cientfica, permitindo que seja usado
como uma linguagem de programao de alto nvel completa.

FOR

O MATLAB possui a sua verso prpria dos loops DO ou FOR. Com isso
possvel repetir um grupo de declaraes por um nmero predeterminado de
vezes. Por exemplo,

for i = 1:n, x(i) = 0, end

impe o valor "0" para todos os primeiros n elementos de x. Se n menor que


"1", a construo ainda permitida, mas as declaraes internas ao loop no so
executadas. Se x no existe ou tem menos elementos que x, ento espaos
adicionais so alocados automaticamente.

Voc pode criar loops dentro de loops e pode fazer as declaraes


diretamente no prompt do MATLAB, embora o uso de um M-file seja
recomendado nestes casos.

for i = 1:1:m
for j = 1:1:n
A(i,j) = 1/(i+j-1);
end
end
A

A expresso do for usualmente do tipo m:i:n, onde m o valor inicial, n


o final e i o incremento, sendo que esse pode ser negativo.

WHILE

FEI - FCA
Tutorial do Matlab & Simulink 38

Tal como o for, a declarao while, tambm para realizar um grupo de


declaraes um certo nmero de vezes. A diferena bsica que no while, o
controle do loop feito por uma condio lgica. Para ilustrar, vamos resolver
um problema: Qual o primeiro inteiro n para o qual n! (fatorial de n) um
nmero de 100 dgitos ?

n = 1;
while prod(1:n) < 1.e100, n = n+1; end
n

A funo prod realiza o produtos dos elementos do argumento. Logo, prod(1:n)


o fatorial de n.

Declaraes IF e BREAK

Os exemplos a seguir ilustram a utilizao da declarao if. O primeiro


exemplo mostra como um clculo pode ser dividido em trs casos dependendo
do sinal e da paridade de n.

if n < 0
A = negative(n)
elseif rem(n,2) == 0
A = even(n)
else
A = odd(n)
end

O segundo exemplo envolve um problema no resolvido da teoria dos nmeros:

"Pegue um nmero inteiro. Se ele for par, divida por dois; se for impar,
multiplique ele por 3 e some 1. Repita esse processo at que o inteiro seja igual
a um. O problema saber se existe algum inteiro para o qual o processo nunca
termina".

Este programa MATLAB ilustra as declaraes while e if. Tambm mostrado


o uso da funo input que interrompe a execuo para a entrada de dados e da
declarao break que permite interromper um loop.

FEI - FCA
Tutorial do Matlab & Simulink 39

% Problema classico "3n+1" da teoria dos nmeros

while 1
n = input('Entre com n [negativo aborta]. ');
if n <= 0, break, end

while n > 1
if rem(n,2) == 0
n = n/2
else
n = 3*n+1
end
end
end

1.1.11 Arquivos M

O MATLAB normalmente usado no modo de comando. Quando voc


entra com uma linha de comando, ele processa e imediatamente mostra o
resultado. O MATLAB tambm pode executar uma seqncia de comandos que
est armazenada num arquivo. Estes dois modos formam um ambiente
interpretativo. Os arquivos que contm declaraes MATLAB so chamados M-
files porque usam a extenso .m. Por exemplo, o arquivo bessel.m contm
declaraes MATLAB para o clculo de funes Bessel.

Um M-file consiste de uma seqncia de declaraes MATLAB normais,


podendo incluir referencias outros M-files. Um M-file pode chamar ele prprio
de forma recursiva. Voc pode criar um M-file usando um editor de texto tal
como o Notepad do Windows, Edit do DOS ou outro qualquer. Dois tipos de
M-files podem ser usadas: manuscritas (scripts) e funes. Arquivos scripts
automatizam uma seqncia longa de comandos. Arquivos de funo permite
criar novas funes s existentes. Ambos, scripts e funes so arquivos texto
tipo ASCII.

Arquivos Scripts

O exemplo a seguir ilustra como calcular os primeiros 16 nmeros de


Fibonacci usando um arquivo script. Suponha que o nome do arquivo seja
fibno.m. Digitando fibno no prompt do MATLAB, faz com os comandos contidos
no arquivo sejam executados. Note que depois da execuo do programa as
variveis f e i permanecem na rea de trabalho (workspace) do MATLAB.
Verifique isso com who. Isso acontece porque os scripts operam globalmente

FEI - FCA
Tutorial do Matlab & Simulink 40

com dados no workspace. Os demos fornecidos junto como MATLAB so bons


exemplos de como usar scripts para realizar tarefas mais complexas. Para
chamar os demos digite demo no prompt do MATLAB.

% M-file (script) para calcular nmeros de Fibonacci

f = [ 1 1]; i = 1;

while f(i) + f(i+1) < 1000


f(i+2) = f(i) + f(i+1);
i = i + 1;
end

plot(f)

Quando voc chama o MATLAB, ele automaticamente executa um script


chamado startup.m (se voce o criou). Nesse arquivo voc pode colocar as
definies iniciais do workspace tal como constantes, fatores de converso, etc.

Arquivos de Funes

Um M-file que contm a palavra function no incio da primeira linha um


arquivo de funo. Uma funo difere de um script no fato de que argumentos
podem ser passados; variveis definidas e manipuladas no arquivo so locais
funo e no operam globalmente no workspace. A funo listada seguir do
seu disco e tem o nome mean.m.

FEI - FCA
Tutorial do Matlab & Simulink 41

function y = mean(x)

% MEAN Average or mean value.


% For vectors, MEAN(X) is the mean value of the
% elements in X.
% For matrices, MEAN(X) is a row vector containing
% the mean value of each column.

[m,n] = size(x);
if m == 1
m = n;
end
y = sum(x) / m;

Por exemplo, se z um vetor de inteiros de 1 99, sua mdia pode ser calculada
como segue:

z = 1:99;
mean(z)
ans =
50

A seguir, descreve-se alguns detalhes de mean.m:

A primeira linha declara o nome da funo, os argumentos de


entrada e os de sada. Sem esta linha, o arquivo um script ao
invs de funo;
O smbolo % indica que o resto da linha um comentrio e
deve ser ignorado;
As primeiras linhas documentam um M-file e so mostradas
quando pedimos help mean;
A primeira linha de help, conhecida como linha "H1", includa
no arquivo contents.m e usada pelo comando lookfor;
As variveis m, n e y so locais funo e no existem no
workspace depois que do trmino da funo. (Caso a varivel j
existisse antes da chamada de mean, ela continuaria existindo
depois e inalterada);
No foi necessrio colocar os inteiros de 1 a 99 numa varivel
chamada x. De fato, ns usamos mean com um varivel
chamada z. O vetor z foi passado ou copiado dentro da funo
onde ela tornou-se uma varivel local chamada x.

FEI - FCA
Tutorial do Matlab & Simulink 42

Voc pode criar uma funo um pouco mais complexa que mean,
chamada stat, que tambm calcula o desvio padro. Neste exemplos ilustramos o
uso de mltiplos argumentos de sada.

function [mean,stdev] = stat(x)

[m,n] = size(x);
if m == 1
m = n;
end
mean = sum(x) / m;
stdev = sqrt(sum(x.^2)/m - mean.^2);

Uma funo que calcula o posto de uma matriz usa mltiplos argumentos
de entrada: No caso geral teramos mltiplos argumentos de entrada e de sada.

function r = rank(x,tol)
% rank (posto em Portugues) da matrix

s = svd(x);
if (nargin == 1)
tol = max(size(x)) * s(1) * eps;
end
r = sum(s > tol);

Este exemplo tambm mostra o uso da varivel permanente nargin para encontrar
o nmero de argumentos de entrada. A varivel nargout, embora no usada neste
exemplo, contm o nmero de argumentos de sada.

Criando um Help para Seus Arquivos Pessoais

voc pode criar um help online para os seus M-files pessoais entrando o
texto em uma ou mais linhas de comentrio, comeando sempre pela segunda
linha do arquivo. Por exemplo, o arquivo da funo angle,

FEI - FCA
Tutorial do Matlab & Simulink 43

function p = angle(h)

% ANGLE Phase angle.


% ANGLE(H) returns the phase angles, in radians, of a
% matrix with complex elements.
%
% See also ABS, UNWRAP.

p = atan2(imag(h), real(h));

tm 5 linhas contguas de comentrio a partir da segunda linha. Quando


digitamos help angle, todo esse bloco mostrado. O mecanismo de help ignora
linhas de comentrio que aparecem mais a frente, depois de uma declarao ou
mesmo uma linha em branco.

Informaes teis

Quando voc chama uma funo pela primeira vez, o MATLAB compila a
funo e a coloca na memria. Ela estar ento disponvel para os usos
subseqentes sem a necessidade de ser compilada. Permanecer na memria at
o final da seo ou at que voc fique com pouca memria, acarretando na sua
eliminao automtica.

O comando what mostra uma listagem dos M-files no diretrio atual do


disco. O comando type lista os M-files e ! usado para comandos do DOS.

De uma maneira geral, quando voc digita um nome de algo no


MATLAB, por exemplo whoopie, o interpretador do MATLAB executa os
seguintes passos:

1. Procura por whoopie como varivel;


2. Verifica se whoopie uma funo interna;
3. Procura um o arquivo whoopie.m no diretrio atual;
4. Procura um o arquivo whoopie.m nos diretrios especificados
pelo path do MATLAB.

ECHO, INPUT, KEYBOARD, PAUSE

FEI - FCA
Tutorial do Matlab & Simulink 44

Normalmente, enquanto um M-file est sendo executado, os comandos


contidos no arquivo no so mostrados na tela. O comando echo permite
visualizar o comando a medida que ele vai sendo executado. Isso
especialmente til na depurao de uma programa ou para a confeco de um
programa demonstrativo.

A funo input permite obter dados do usurio. por exemplo,

n = input('Entre com o valor de n = ')

interrompe a execuo, mostra a frase na tela, espera, e ento atribui o valor ou


expresso digitada para a varivel n.

Similar input, mas muito mais poderosa, a funo keyboard. Esta


funo torna o teclado do computador um script. Quando colocada dentro de M-
files, torna gil a depurao e permite a modificao de variveis durante a
execuo.

O comando pause interrompe a execuo at que o usurio pressiona


uma tecla qualquer. pause(n) interrompe por n segundos antes de continuar.

Variveis Globais

Cada funo MATLAB possui suas prprias variveis locais que so


separadas daquelas de outras funes e daquelas que esto no workspace.
Contudo, se voc declarar uma varivel como global, todas as funes e o
workspace vo enxergar a mesma varivel. Para diferenciar das demais
variveis, costuma-se identificar uma varivel global declarando-a com um
nome longo e em letras maisculas, embora isso no seja uma imposio.

Suponha que voc queira estudar o comportamento dos coeficientes e


no problema do modelo predador-vtima de Latka-Volterra.

y1 = y1 y2 y1
y2 = y2 + y2 y1

Crie o arquivo lotka.m:

FEI - FCA
Tutorial do Matlab & Simulink 45

function yp = lotka(t,y)
% modelo Votka-Voltera
global ALFA BETA
yp = [y(1) - ALFA*y(1)*y(2); -y(2) + BETA*y(1)*y(2)];

Interativamente, entre como as seguintes declaraes:

global ALFA BETA


ALFA = 0.01;
BETA = 0.02;
[t,y] = ode23('lotka',0,10,[1; 1]);
plot(t,y)

Uma vez que ALFA e BETA so globais voc pode altera-las interativamente e
novas solues podem ser obtidas sem ter que editar nenhum arquivo e sem
passar os valores como argumentos.

Variveis Alfanumricas

Variveis tipo texto so introduzidas no MATLAB envolvendo o texto


com quotas simples (apstrofos). Por exemplo,

s = 'Ola'
s=
Ola

O texto armazenado num vetor, um caracter por elemento. Desejando


concatenar textos, use colchetes:

s = [s, ' Pessoal']


s=
Ola Pessoal

Valores numricos so convertidos em variveis tipo texto via sprintf,


num2str e int2str. Exemplo,

c = 23;
title(['A temperatura ',num2str(c),' graus C'])

A Funo EVAL

FEI - FCA
Tutorial do Matlab & Simulink 46

A funo eval lida com variveis tipo texto para implementar recursos de
macros de texto. eval(t) fora que o texto contido na varivel t seja "resolvido".
O exemplo a seguir mostra como usar o comando load para carregar 10
arquivos seqencialmente numerados: dados1.mat, dados2.mat, ...

fname = "dados";
for i = 1:10
eval(['load ',fname,int2str(i)])
end

A funo eval especialmente til na passagem de argumentos de


funes cujo parmetro um nome de outra funo. Um exemplo tpico o
funo fplot que passa como argumento o nome da funo a ser plotada,
exemplo:

fplot('sin',[0 10])

1.1.12 Arquivos de Disco

Os comandos load e save recuperam e armazenam dados do workspace


no disco.

Manipulao de Arquivos de Disco

Os comandos dir, type, delete e cd servem manipulao de arquivos.


Para a maioria desses comandos devemos especificar o path, wildcards e o drive
de destino como normalmente se faz no DOS.

O comando type difere do comando type usual de uma forma importante.


Se nenhuma extenso especificada, o MATLAB assume .m como default.
Portanto, esse comando bastante usado para obtermos a listagem de um M-file
na teta do computador.

O comando diary cria um dirio (log) da sua seo MATLAB na forma


de um arquivo ASCII. Todos os comandos e resultados, exceto grficos, so
automaticamente acrescentados ao arquivo de dirio.

Rodando Programas Externos

FEI - FCA
Tutorial do Matlab & Simulink 47

O ponto de exclamao ! a forma de acessar o DOS de dentro do


MATLAB. Voc pode executar qualquer programa externo tal como o editor
EDIT do DOS.

! edit c:\usuario\teste.doc

Transferncia de Dados

Voc pode introduzir dados de outros programas dentro do MATLAB.


Similarmente, voc pode exportar dados do MATLAB para outros programas.
Tambm possvel usar o formato que o MATLAB usa para armazenar dados:
MAT-files.

Importando Dados

O melhor mtodo de importar dados depende de quantos dados existem,


qual o seu formato, etc. A seguir, listamos algumas opes:

Entre com os dados como uma lista explcita dos elementos. Se


o nmero de elementos for pequeno (10-15 elementos) mais
simples digitar os dados explicitamente usando colchetes.

Crie um M-file e escreva os dados de forma explcita usando


um editor de texto.

Carregue do dados de um arquivo ASCII.

Escreva um programa em C ou FORTRAN para converter seus


dados no formato dos MAT-files e ento use o comando load.

Exportando dados do MATLAB

Para exportar dados tambm existem vrias opes, das quais algumas so
listadas a seguir:

FEI - FCA
Tutorial do Matlab & Simulink 48

Para matrizes pequenas use o comando diary para criar uma


arquivo de dirio e ento liste as variveis neste arquivo. Voc
pode, mais tarde, usar um editor de texto para manipular os
dados.

Salve os dados num formato ASCII usando o comando save


com a opo -ascii. Por exemplo,

A = rand(4,3);
save temp.dat A -ascii

cria um arquivo ASCII chamado temp.dat

Salve os dados como MAT-files usando o comando save e


ento escreva um programa em C ou FORTRAN para
reformatar os dados conforme necessrio para a aplicao.

1.1.13 O Depurador do Matlab

Embora o MATLAB seja uma linguagem menos complexa que outras


linguagens de programao, ele tem sua sintaxe prpria e voc pode precisar
corrigir alguns erros. O MATLAB encontra erros de sintaxe durante a fase de
compilao e esses erros, em geral, so simples de corrigir. O MATLAB
tambm encontra erros na fase de execuo do programa; esses erros tendem a
ser mais difceis de solucionar por causa do workspace local s funes ser
perdido quando um erro interrompe a execuo. Quando isto ocorre, retornamos
ao workspace base do MATLAB. Se voc usou ponto-e-vrgula para suprimir os
resultados intermedirios da tela, no ter como saber onde o erro ocorreu.

Para mostrar os resultados intermedirios, voc pode usar um dos mtodos


a seguir:

Remova os ponto-e-vrgula de interesse;


Use a declarao keyboard para permitir que o workspace seja
examinado no ponto da declarao;
Torne a primeira linha da funo uma linha de comentrio, de
tal forma que a funo possa ser executada como um script,

FEI - FCA
Tutorial do Matlab & Simulink 49

fazendo com que os resultados intermedirios sejam acessveis


no workspace base do MATLAB;
Use o depurador do MATLAB.

Comandos de Depurao

dbstop - coloca um brekpoint


dbclear - remove um brekpoint
dbcont - continua a execuo
dbdown- troca o contexto do workspace
dbstack - lista quem chamou quem
dbstatus - lista todos os brekpoint
dbstep - executa uma ou mais linhas
dbtype - lista um M-file com nmero de linhas
dbup - troca o contexto do workspace
dbquit - sai do modo de depurao

Usando o Depurador

Quando voc encontra um erro num M-file, use os comandos de


depurao para inserir breakpoints para ajuda-lo da depurao do erro. Quando
a execuo pra num breakpoint voc pode introduzir qualquer comando vlido
do MATLAB.

Lembre-se que os comandos de depurao funcionam com arquivos de


funes, no com scripts.

1.2 Toolboxes do Matlab

O MATLAB possui um rica coleo de funes imediatamente teis. Os


toolboxes estendem essa capacidade com funes especializadas. A seguir,
resume-se as funes disponveis no toolbox de sistema de controle e enumera-
se outros toolboxes. importante perceber que as ferramentas que no so
encontradas nos toolboxes podem ser criadas escrevendo-se novos M-files.

FEI - FCA
Tutorial do Matlab & Simulink 50

1.2.1 Sistemas de Controle

O toolbox de sistema de controle usa funes de matrizes do MATLAB na


construo de funes especializadas para o engenheiro de controle. Esse
toolbox uma coleo de algoritmos expresso, na sua maior parte, por M-files,
que implementam projetos comuns de sistemas de controle, anlises e tcnicas
de modelamento.

Aqui, sistemas de controle podem ser representados por funes de


transferncias ou na forma de espao de estado, permitindo que voc use
tcnicas clssicas e modernas. Trata-se tanto dos sistemas de tempo contnuo
como os de tempo discreto. Esto disponveis funes de converso entre as
vrias formas de representao de um modelo. Respostas temporais, respostas
em freqncia, lugar das razes, etc, podem ser calculados e plotados. Outras
funes fornecem recurso para a alocao de plos, controle timo e
estimao/filtragem.

Construo de Modelos

append - concatena sistemas dinmicos


augstate - aumenta estados s sadas
blkbuild - obtm equao de estado a partir do diag. em blocos
cloop - fecha a malha
connect - modelagem via diagrama em blocos
conv - convoluo de dois polinmios
destim - estimar de tempo discreto
dreg - estimador/controlador discreto
drmodel - cria um modelo discreto randmico
estim - estimador de tempo contnuo
feedback - conexo de dois sistemas numa realimentao
ord2 - cria A, B, C, D de um sistema de segunda ordem
pade - aproximao Pad de um atraso
parallel - conexo de sistemas em paralelo
reg - controlador/estimador contnuo
rmodel - cria um modelo contnuo randmico
series - conexo srie de sistemas
ssdelete - apaga, entradas, sadas ou estados de um sistema
ssselect - seleciona um subsistema de um sistema maior

FEI - FCA
Tutorial do Matlab & Simulink 51

Converso de Modelos

c2d - converso de tempo contnuo para tempo discreto


c2dm - converso de contnuo para discreto com mtodo
c2dt - converso de tempo contnuo para discreto com atraso
d2c - converso de tempo discreto para contnuo
d2cm - tempo discreto para contnuo com mtodo
poly - converso de razes para polinmio
residue - expanso em fraes parciais
ss2tf - espao de estado para funo de transferncia
ss2zp - espao de estado para zero-plo
tf2ss - funo de transferncia para espao de estado
tf2zp - funo de transferncia para zero-plo
zp2tf - zero-plo para funo de transferncia
zp2ss - zero-plo para espao de estado

Reduo de Modelos

balreal - realizao balanceada


dbalreal - realizao balanceada discreta
dmodred - reduo da ordem de modelos discretos
minreal - realizao mnima e cancelamento de plos e zeros
modred - reduo da ordem do modelo

Realizao de Modelos

canon - forma cannica


ctrbf - forma controlvel
obsvf - forma observvel
ss2ss - aplica transformao de similaridade

FEI - FCA
Tutorial do Matlab & Simulink 52

Propriedade de Modelos

covar - resposta contnua ao rudo branco


ctrb - matriz de controlabilidade
damp - fator de amortecimento e freqncia natural
dcgain - ganho DC de regime permanente contnuo
dcovar - resposta discreta rudo branco
ddamp - fator de amortecimento e freqncia natural discreta
ddcgain - ganho DC de regime permanente discreto
dgram - gramianos discretos controlabilidade/observabilidade
dsort - ordena autovalores discretos pela tamanho
eig - autovalores e autovetores
esort - ordena autovalores contnuos pela parte real
gram - gramianos de controlabilidade/observabilidade
obsv - matriz de observabilidade
printsys - mostra o sistema formatadamente
roots - razes de polinmio
tzero - zeros de transmisso
tzero2 - zeros trans. usando mtodo randmico de perturbao

Resposta Temporal

dimpulse - resposta discreta ao impulso


dinitial - resposta discreta s condies iniciais
dlsim - simulao discreta a entradas arbitrrias
dstep - resposta discreta ao degrau
filter - simulao SISO da transformada Z
impulse - resposta impulsiva
initial - resposta contnua s condies iniciais
lsim - simulao contnua a entradas arbitrrias
ltitr - funo de baixo nvel para clculo de resposta temporal
step - resposta ao degrau
stepfun - funo degrau

FEI - FCA
Tutorial do Matlab & Simulink 53

Resposta em Freqncia

bode - diagrama de Bode (resposta em freqncia)


dbode - diagrama de Bode discreto (resposta em freqncia)
dnichols - diagrama de Nichols discreto
dnyquist - diagrama de Nyquist discreto
dsigma - diagrama em freqncia de valores singulares
discretos
fbode - diagrama rpido de Bode para sistemas contnuos
freqs - resposta em freqncia da transformada de Laplace
freqz - resposta em freqncia da transformada Z
ltifr - funo de baixo nvel para resposta em freqncia
margin - margem de ganho e fase
nichols - diagrama de Nichols
ngrid - desenha um grid de linhas no diagrama de Nichols
nyquist - diagrama de Nyquist
sigma - diagrama em freqncia de valores singulares
contnuos

Lugar das Razes

pzmap - mapeamento de plos e zeros


rlocfind - determinao interativa do ganho no lugar das razes
rlocus - lugar das razes de Evans
sgrid - grid para o lugar das razes contnuo
zgrid - grid para o lugar das razes discreto

Seleo de Ganhos

acker - alocao SISO de plos


dlqe - projeto do estimador linear quadrtico discreto

FEI - FCA
Tutorial do Matlab & Simulink 54

dlqew - estimador linear quadrtico discreto generalizado


dlqr - projeto do regulador linear quadrtico discreto
dlqry - regulador discreto com penalizao nas sadas
lqe - projeto do estimador linear quadrtico
lqed - estimador discreto a partir do funcional contnuo
lqe2 - estimador linear quadrtico usando mtodo Schur
lqew - estimador linear quadrtico contnuo generalizado.
lqr - projeto do regulador linear quadrtico
lqrd - regulador discreto a partir do funcional contnuo
lqry - regulador contnuo com penalizao nas sadas
lqr2 - regulador linear quadrtico usando mtodo Schur
place - alocao multivarivel de plos

Soluo de Equaes

are - soluo da equao algbrica de Riccati


dlyap - soluo da equao discreta de Lyapunov
lyap - soluo da equao contnua de Lyapunov
lyap2 - soluo da equao de Lyapunov usando
diagonalizao

Demonstrativos

ctrldemo - Introduo ao toolbox de sistemas de controle


boildemo - projeto LQG para uma caldeira
jetdemo - o clssico projeto do jet transport yaw damper.
diskdemo - projeto do controlador digital de um winchester
kalmdemo - projeto e simulao de um filtro de Kalman

1.2.2 Outros Toolboxes

Processamento de Sinais, Otimizao, Identificao de Sistemas, Controle


Robusto, Anlise e Sntese , Splines, Redes Neurais, Estatstica, Projeto de
Controle No Linear, etc.

FEI - FCA
Tutorial do Matlab & Simulink 55

1.3 Simulink Bsico

O SIMULINK uma extenso grfica do MATLAB para a simulao


dinmica de sistemas. Existem duas fases distintas de uso: a definio do
modelo e anlise do modelo. Para facilitar a definio do modelo, o SIMULINK
fornece uma ferramenta grfica de edio em blocos, onde o modelo criado e
editado tipicamente via mouse.

Depois de definir o modelo, voc pode analis-lo diretamente do menu na


janela atual do SIMULINK ou entrando os comandos devidos pela janela de
comando do MATLAB. Dentre as ferramentas de anlise de modelos temos a
simulao propriamente dita, linearizao de modelos, etc.

1.3.1 Linhas Gerais

Descreve-se brevemente a seguir as aes que so necessrias para iniciar


o uso do SIMULINK:

1. Entre com o comando simulink no prompt do MATLAB para


abrir a biblioteca principal de blocos.

2. Clique no menu File e selecione New. O SIMULINK abre uma


janela em branco como o nome "Untitled". Esse nome pode ser
alterado na hora de salvar o arquivo.

3. Abra uma ou mais bibliotecas e arraste os blocos para a janela


ativa.

4. Depois de alocar os blocos, desenhe linhas para ligar os blocos,


movendo a ponta do seta do mouse enquanto segura o boto
esquerdo do mouse apertado.

5. Abra os blocos (dois cliques) e altere seus parmetros. Os


parmetros podem ser qualquer expresso vlida do MATLAB.

6. Salve o arquivo com o Save do menu File.

FEI - FCA
Tutorial do Matlab & Simulink 56

7. Execute a simulao selecionando Start no menu Simulation.


Durante a simulao o menu Start alterado para Stop. Se
voc seleciona-lo, voltar a aparecer Start.

8. Voc pode alterar os parmetros de simulao selecionando


Parameters no menu Simulation.

9. Voc pode monitorar o comportamento do seu sistema com um


osciloscpio (bloco Scope), ou voc pode usar o bloco
To Worksspace para enviar os dados para a rea de trabalho do
MATLAB e manipular os resultados com funes do
MATLAB.

1.3.2 Construo de Modelos

O SIMULINK permite que voc represente um sistema dinmico


por meio de diagramas em bloco.

Construo de um Modelo Elementar

Para definir um sistema, os blocos so copiados das bibliotecas de blocos


padres do SIMULINK ou daquelas criadas por voc mesmo. A biblioteca
padro organizada em vrios subsistemas que agrupam blocos de acordo com
sua funo. Para rodar o SIMULINK, primeiro inicialize o MATLAB clicando
duas vezes sobre o cone do Windows e ento entre o comando simulink.

simulink

Este comando mostra uma nova janela contendo cones dos blocos de
subsistemas que constituem a biblioteca padro.

FEI - FCA
Tutorial do Matlab & Simulink 57

Estes blocos podem ser abertos (clicando duas vezes), abrindo janelas de
onde os blocos sero copiados para a sua janela de trabalho. Abra uma nova
janela vazia selecionando New no menu File. Para copiar os blocos, clique
sobre o bloco desejado e arraste-o para a sua janela enquanto mantm o boto
esquerdo do mouse apertado. Inicialmente clique sobre a biblioteca Sources e
arraste um gerador de funes para a nova janela (untitled).

FEI - FCA
Tutorial do Matlab & Simulink 58

Os blocos arrastados so copiados com os seus parmetros originais. A


maioria dos blocos pode ser aberta mostrando seus parmetros numa janela
independente. Modificando os parmetros voc personaliza o bloco.

Clicando 2 vezes sobre o bloco gerador de sinais abre-se a janela de


parmetros. Selecione a forma de onda da sada como senoidal, sua freqncia e
amplitude iguais a 1, arrastando o cursor ou introduzindo o novo valor
diretamente no campo numrico. Quando terminar clique sobre o OK.

Abra agora a biblioteca Sinks e arraste um bloco de osciloscpio (scope)


para dentro da nova janela de sistema.

FEI - FCA
Tutorial do Matlab & Simulink 59

Para abrir a janela do osciloscpio, clique duas vezes sobre ele. Posicione
a janela num lugar conveniente com o mouse e escolha a faixa horizontal e
vertical igual a 10 e 3 respectivamente. No clique sobre OK, pois fecharia a
janela de observao do osciloscpio.

FEI - FCA
Tutorial do Matlab & Simulink 60

Usando mouse conecte a sada do gerador de sinais com a entrada do


osciloscpio. Aperte e mantenha o boto esquerdo do mouse arrastando a linha
da entrada para a sada ou vice-versa.

Enquanto puxa a linha, voc poder apertar tambm o boto central do


mouse para obter qualquer angulao da reta. Quando voc solta o boto
esquerdo muito prximo do ponto a ser conectado, ele indica a conexo
preenchendo a seta de preto. Caso voc solte o boto muito longe do ponto, ele
interrompe a linha com uma seta no preenchida e desconectada. A partir da
voc pode ligar esse pedao de linha ao destino com uma outra linha, no
precisando desenhar tudo novamente. Desta forma possvel traar uma ligao

FEI - FCA
Tutorial do Matlab & Simulink 61

com qualquer formato. A cada vez que voc solta o boto esquerdo e aperta
novamente inicia-se uma nova linha ligada a anterior a partir desse ponto. Se
voc no gostou do resultado apague a linha selecionando-a com um clique em
qualquer ponto da linha e ento pressione a tecla DELETE ou use Cut ou Clear
no menu Edit.

Depois de terminado o modelo voc pode disparar a simulao. Para


selecionar o mtodo de integrao e demais parmetros clique no menu
Simulation e escolha Parameteres.

Selecione o quadrado do parmetro de mximo passo de integraao e


altere o valor default para 0.01. Ao final clique sobre OK. Inicie a simulao
escolhendo Start no menu Simulation.

Os controle do osciloscpio e do gerador de sinais permanecem ativos


durante a simulao. Voc pode selecionar uma forma de onda diferente e
verificar o resultado imediatamente no osciloscpio. Mova os cursores dos
osciloscpio para ver o efeito. A simulao termina quando o tempo mximo de
simulao atingido ou quando selecionamos Stop no menu Simulation.

FEI - FCA
Tutorial do Matlab & Simulink 62

Voc possui agora um modelo que pode ser salvo em disco como um arquivo do
MATLAB do tipo M-file. Selecione Save no menu File e selecione um
diretrio, um nome para seu modelo e depois clique sobre o OK.

Para encerrar a edio do seu modelo selecione Close no menu File.

Construo de outro Modelo Simples

FEI - FCA
Tutorial do Matlab & Simulink 63

Se voc salvou o modelo anterior com o nome novo.m, voc pode abrir a
janela com o diagrama simplesmente, digitando "novo" na linha de comando do
MATLAB.
novo

Os blocos dentro de uma janela do SIMULINk podem ser movidos


livremente. Se mais de um bloco de movido simultaneamente, eles mantm sua
posio relativa e as linhas de conexo tambm so movidas. Selecione o
gerador de sinais, osciloscpio e a linha de conexo envolvendo-os com o
mouse. Para tanto, aperte o boto esquerdo do mouse estando acima e a esquerda
ou abaixo e a direita dos objetos, e ai arrastando o mouse at envolver todos os
objetos. Os objetos sero ento marcados com pequenos quadrados nos vrtices
dos blocos e na linha de conexo. Arraste os blocos selecionados para o topo da
janela e solte o boto do mouse. Agora copie um bloco Gain do subsistema
Linear.

FEI - FCA
Tutorial do Matlab & Simulink 64

Signal Gen. Scope

1
Gain

Clique duas vezes sobre o bloco Gain para abrir a janela de configurao
do bloco e altere o valor do ganho para 2. Para ligar a entrada do bloco Gain
linha de conexo entre o gerador e o osciloscpio, voc pode comear o traado
da entrada do bloco de ganho ou por exemplo, da sada do gerador

Signal Gen. Scope


2
Gain

Signal Gen. Scope


2
Gain

Signal Gen. Scope

2
Gain

Para mover o ponto onde dois segmentos de reta se encontram, clique no


vrtice e arraste o crculo

FEI - FCA
Tutorial do Matlab & Simulink 65

Signal Gen. Scope

2
Gain

Voc tambm pode mover o segmento de linha, clicando no meio do


segmento e arrastando-a enquanto mantm o boto esquerdo do mouse apertado.

Adicione agora um osciloscpio na sada do ganho, sendo que para isso


no necessrio copia-lo da biblioteca. Copie daquela que j existe no diagrama,
segurando o boto direito do mouse enquanto arrasta o bloco para a posio
desejada. O bloco copiado tem os mesmos parmetros do bloco original.

Signal Gen. Scope

2
Gain Scope1

A seguir, conecte o ganho do segundo osciloscpio, abra os dois e inicie a


simulao. Para parar a simulao clique sobre Stop no menu Simulation.

Para remover blocos ou linhas, selecione os objetos que deseja remover e


aperte a tecla DEL ou escolha Cut ou Clear no menu Edit. Para selecionar
mais de um objeto, mantenha apertada a tecla SHIFT enquanto aperta o boto
esquerdo do mouse. No exemplo anterior, selecione o segundo osciloscpio e a
linha que liga este bloco ao bloco de ganho e ento remova estes objetos. Insira
um bloco Mux da biblioteca Connections.

Mux

Signal Gen. Mux Scope

2
Gain

FEI - FCA
Tutorial do Matlab & Simulink 66

Abra o bloco Mux e altere o nmero de entradas para 2 e ento feche a caixa de
dilogo.

O Mux tem agora 2 entradas. Conecte o gerador de sinais e o bloco de


ganho nas entradas do Mux e ligue a sada deste ao osciloscpio. Os dois sinais
comporo um vetor de dimenso 2 que ser visualizado simultaneamente no
osciloscpio.

Mux
Signal Gen.
Mux Scope
2
Gain

Agora, copie um bloco To Workspace da biblioteca Sinks e ento abra a


caixa de dilogo.

Mux
Signal Gen.
Mux Scope

2 yout
To Workspace
Gain

O bloco To Workspace envia um vetor de qualquer tamanho para o


workspace do MATLAB como uma matriz. Essa matriz tem uma linha para cada

FEI - FCA
Tutorial do Matlab & Simulink 67

instante de tempo at o limite especificado na caixa de dilogo. Na caixa de


dilogo tambm podemos mudar o nome da varivel que conter o vetor.

Altere o nome da varivel para matriz1 e conecte o bloco To Workspace na


sada do Mux.

Mux
Signal Gen.
Mux Scope

2 matriz1
Gain To Workspace

Inicie a simulao desse modelo e obtenha a figura a seguir. Pare a


simulao e salve o modelo. Para verificar se a varivel matriz1 foi criada no
workspace do MATLAB, use o comando whos na janela de comando do
MATLAB:

Name Size Elements Bytes Density Complex


matriz1 1000 by 2 2000 16000 Full No

Grand total is 2000 elements using 16000 bytes

FEI - FCA
Tutorial do Matlab & Simulink 68

Como a varivel matriz1 est disponvel, qualquer manipulao poder ser


realizada. A coisa mais simples que podemos fazer plotar o grfico da matriz
matriz1 usando comando plot(matriz1). Cada uma das linhas contm 1000 pontos
que foram capturados durante a simulao.

1.5

0.5

-0.5

-1

-1.5

-2
0 200 400 600 800 1000

FEI - FCA
Tutorial do Matlab & Simulink 69

1.3.3 Anlise dos Modelos

Nesta seo discutiremos como usar o SIMULINK numa simulao e num


processo de linearizao.

Nveis de Uso

Existem trs formas distintas de usar o SIMULINK. A forma mais


interativa, e tambm a mais fcil, controlar a simulao de dentro da janela do
diagrama em blocos e observar os resultados com osciloscpios. Esta a forma
recomendada quando voc simular um novo sistema pela primeira vez, pois ser
mais fcil para depura-lo.

O segunda forma simulando o sistema atravs da linha de comando do


MATLAB. Esse mtodo no to interativo como o primeiro mas proporciona
maior flexibilidade. Obtendo os resultados da simulao no workspace do
MATLAB, voc poder fazer outras anlises e tambm plotar os resultados
usando todos os recursos do MATLAB.

A forma mais complexa e flexvel de usar o SIMULINK acessando


diretamente a S-function do modelo. Todo modelo SIMULINK disponvel no
MATLAB como uma S-function de mesmo nome que o diagrama. O prprio
simulador usa essas funes para realizar suas tarefas. Nessas S-functions esto
presentes informaes como o nmero de entradas e sadas, a equao de estado
que descreve o diagrama, etc.

Simulao

Simular um modelo do SIMULINK significa resolver numericamente um


conjunto de equaes diferenciais ordinrias. Esto disponveis para isso um
conjunto de mtodos de integrao. Infelizmente, devido diversidade de
comportamentos dinmicos que os sistemas podem apresentar, no existe um
mtodo nico capaz de garantir sempre a melhor exatido e eficincia de
simulao. Logo, a escolha do mtodo e dos parmetros de simulao so
cruciais para uma simulao apurada.

Simulao via Menu

FEI - FCA
Tutorial do Matlab & Simulink 70

A simulao pode ser iniciada tanto pela linha de comando como pelo
menu Simulation. Selecione Start nesse menu depois de colocar o valor de
cada parmetro ou o nome da varivel MATLAB correspondente.

A linha Return Variables pode ser usada para colocar o tempo, vetor de
estado e vetor de sada no workspace do MATLAB. Se este campo for deixado
em branco nenhuma varivel ser enviada ao workspace.

Simulao a partir da Linha de Comando

O exemplo a seguir realiza a mesma simulao anterior.

[t,x,y] = euler('novo',[T_inicial, T_final],...


x0, [Tolerancia, Passo_Minimo_Integracao,...
Passo_Maximo_Integracao]);

As condies iniciais, as quais no podem ser definidas no menu de


simulao, so definidas no vetor x0. O valor numrico de x0 sobrepe as
condies iniciais impostas aos blocos, a menos que x0 seja uma matriz vazia
"[]".

FEI - FCA
Tutorial do Matlab & Simulink 71

A simulao a partir da linha de comando tem as seguintes vantagens


quando comparada com a simulao via menu:

Condies iniciais dos blocos podem ser sobrepostas;


No especificando argumentos de sada na linha de comando, o
grfico das sadas as trajetrias de estado (quando no houver
sadas), automaticamente plotado;
Entradas externas podem ser especificadas usando variveis
extras na linha de comando;
A simulao pode ser incorporada a um M-file maior como uma
linha do programa, permitindo por exemplo a alterao de
parmetros dos blocos;
Para modelos pequenos, a simulao um pouco mais rpida;

Todos os algoritmos de integrao tm a mesma sintaxe de chamada, de


tal forma que mtodos diferentes podem ser selecionados simplesmente trocando
o nome da funo:

[t,x,y] = euler('nome_modelo', tfinal);


[t,x,y] = rk23('nome_modelo', tfinal);
[t,x,y] = rk45('nome_modelo', tfinal);
[t,x,y] = linsim('nome_modelo', tfinal);
[t,x,y] = adams('nome_modelo', tfinal);
[t,x,y] = gear('nome_modelo', tfinal);

Para obter informaes detalhadas sobre os argumentos de entrada digite,


por exemplo: type rk45.m

Plotando as Variveis de Sada

Os grficos das variveis de sada do SIMULINK podem ser obtidos de


uma das trs formas:

Blocos Scope (osciloscpio)


Variveis de retorno e comandos grficos do MATLAB
Blocos To Workspace e comando grficos do MATLAB

Usando o bloco Scope:

FEI - FCA
Tutorial do Matlab & Simulink 72

1
s+1
Step Fcn
Transfer Fcn Scope

Usando variveis de retorno, voc pode usar os comandos grficos do


MATLAB. A sada, neste exemplo, obtida por um bloco do tipo output aqui
denominado saida. A integrao pode ser iniciada pela linha de comando do
MATLAB como segue:

1
1
s+1
Step Fcn Saida
Transfer Fcn

[t,x,y] = linsim('novo1', 2);


plot(t,y)

Usando o bloco To Workspace:

Como o passo de integrao durante a simulao pode ser varivel,


necessrio enviarmos tambm a base temporal para o workspace quando usamos
o bloco To Workspace.

1
saida
s+1
Step Fcn To Workspace
Transfer Fcn

tempo
Clock To Workspace1

plot(tempo,saida)

Condies Iniciais

As condies iniciais, as quais so impostas no instante inicial de


simulao, so geralmente colocadas dentro dos blocos. Essas condies iniciais

FEI - FCA
Tutorial do Matlab & Simulink 73

que colocamos como parmetros de um dado bloco pode ser sobreposta usando
um argumento extra na chamada da simulao:

[t,x,y] = linsim('modelo',tfinal,x0);

Quando o vetor x0 uma matriz vazia "[]" ou no especificada, a


condio definida no bloco usada. Caso contrrio, os valores definidos em x0
sero os usados. Para determinar quais condies iniciais foram definidas nos
blocos do modelo digite,

[sizes,x0] = modelo

onde "modelo" o nome do modelo. O nome do bloco associado a cada uma das
variveis de estado obtido com um terceiro argumento de sada:

[sizes,x0,nome_bloco] = modelo

Loops Algbricos

Loops algbricos, ou implcitos, ocorrem quando blocos que possuem


ligao direta (ganho) da entrada para a sada, formam uma malha fechada.
Quando isso ocorre, o SIMULINK precisa fazer iteraes cada passo da
simulao para determinar se existe uma soluo para o problema. Loops
algbricos reduzem consideravelmente a velocidade de simulao e podem ser
insolveis. Portanto, evite-os sempre que possvel. Alguns blocos com ligao
direta da entrada para sada so:

Blocos de ganho;
A maioria dos blocos no lineares;
Funo-de-transferncia quando numerador e denominador so
da mesma ordem;
Blocos Zero-Plo-Ganho quando existem tantos zeros quanto
plos;
Blocos Espao-de-Estado quando a matriz D no nula;

O sistema abaixo um exemplo de loop algbrico:

FEI - FCA
Tutorial do Matlab & Simulink 74

1 + s+2
+ 1
Inport s+1
Sum Outport
Transfer Fcn

1
Gain

Interpolao de Dados

As funes de integrao do SIMULINK so de passo varivel. Isso


significa que a integrao pode resultar em intervalos no igualmente espaados
no tempo, tornando difcil a comparao de diferentes simulaes. Nestas
situaes recomenda-se o uso de funes de interpolao. O exemplo a seguir
mostra como gerar um grfico com uma resoluo temporal maior.

[t,x,y] = rk45('modelo',10,[],[tol mstep Mstep]);


tfino = 0:mstep/100:10;
yfino = spline(t,y,tfino);
plot(tfino,yfino,t,y)

Escolha do Algoritmo de Simulao

O desempenho da simulao em termos de velocidade e exatido,


funo do modelo e das condies. A seguir d-se algumas sugestes para a
seleo do mtodo.

linsim

usado para modelos lineares. Modelos lineares so aqueles compostos


por blocos lineares tais como: funes de transferncia, ganhos, somadores,
espao de estado, etc.

Se o sistema quase que totalmente composto por blocos lineares e


poucos blocos no lineares, ento linsim ainda funciona bem. Esse algoritmo
particularmente recomendado quando os blocos lineares tm dinmicas muito
distintas (problemas mal condicionados "stiff").

rk45, rk23

FEI - FCA
Tutorial do Matlab & Simulink 75

Os mtodos de Runge-Kutta de terceira e quinta ordem, em geral, tm


desempenho superior aos outros mtodos quando o sistema altamente no
linear e/ou possui descontinuidades. Este mtodo no funciona bem para
problemas stiffs, sendo que nestes casos recomenda-se o linsim e gear.

gear

Use este mtodo quando o sistema no apresentar descontinuidades e for


no linear. Ele funciona comparativamente muito bem para problemas stiff e
menos eficiente que os demais quando o problema no stiff.

adams

Use este mtodo quando o sistema no apresentar descontinuidades e for


no linear e no for stiff.

euler

Use este mtodo apenas para fins didticos.

Controle do Passo de Integrao

O parmetro tol, usado na integrao, especifica o valor aceitvel do erro


relativo em cada passo da simulao.

[t,x,y] = linsim('modelo',tf,x0,[tol,mpasso,Mpasso]);

Como regra geral, este parmetros est entre 0.1 e 1e-6. Quanto menor o
valor de tol, mais passos sero necessrios na simulao.

Sistemas de Tempo Discreto

O SIMULINK possui a habilidade de simular sistemas discretos (dados


amostrados). Os modelos podem ter mltiplas taxas de amostragem e conter
tanto blocos discretos como contnuos. Todos os blocos discretos encontrados
nas bibliotecas possuem embutido um amostrador nas entradas e seguradores de
ordem zero nas sadas.

O perodo de amostragem introduzido na caixa de dilogo dos blocos.


Normalmente o perodo de amostragem definido por um escalar; contudo,

FEI - FCA
Tutorial do Matlab & Simulink 76

possvel definir um offset ao perodo, usando um vetor de 2 elementos no


mesmo campo.

O vetor [Ts, offset] define o perodo de amostragem Ts e o valor do offset,


significando que o bloco s atualizado nos instantes mltiplos inteiros do
perodo de amostragem mais o offset:

t = n*Ts + offset

onde n um inteiro e o offset pode ser tanto positivo como negativo. O offset
especialmente til quando desejamos que certos blocos sejam atualizados antes
ou depois que outros.

Nos Sistemas puramente discretos, para obtermos a informao somente


nos perodos de amostragem, basta selecionar o passo de integrao mnimo
maior que o passo de integrao mximo.

Linearizao

O SIMULINK oferece as funes linmod e dlinmod para extrair


modelos lineares do diagrama, na forma de espao de estado,

x = Ax + Bu
y = Cx + Du

FEI - FCA
Tutorial do Matlab & Simulink 77

onde x, u e y so vetor de estado, vetor de entrada e vetor de sada,


respectivamente. Crie o modelo a seguir e chame-o de modelo.

2
y(2)

1 + 1
- 1
Inport 2
s +2s+1 y(1)
Planta

1
s+1
Realimentacao

Para extrair o modelo linear associado a esse diagrama entre com o comando:

[A,B,C,D] = linmod('modelo')

A=
-1 0 1
-1 -2 -1
0 1 0

B=
0
1
0

C=
0 0 1
-1 0 0

D=
0
1

As entradas e sadas do modelo devem ser definidas usando blocos Input e


Output da biblioteca Connections. Note que geradores de sinais e osciloscpios
no funcionam como blocos desse tipo. Blocos Input podem ser usados junto
com geradores de sinais usando blocos somadores.

Uma vez que o dado est na forma de espao de estado, as funes do


Control System Toolbox podem ser utilizadas para outras anlises, tais como:

FEI - FCA
Tutorial do Matlab & Simulink 78

converso para a forma de funo de transferncia

[num,den] = ss2tf(A,B,C,D)

diagramas de Bode

bode(A,B,C,D)

resposta temporal linearizada

step(A,B,C,D)
impulse(A,B,C,D)
lsim(A,B,C,D,u,t)

Quando o modelo no linear, um ponto de operao deve ser escolhido


para o qual o modelo linearizado ser obtido. O modelo no linear tambm
sensvel ao tamanho da perturbao utilizada para extrair o modelo. Argumentos
extras permitem escolher o ponto de operao e as perturbaes:

[A,B,C,D] = linmod('modelo',x,u,xpert,upert)

Para sistemas de tempo discreto ou sistemas mistos, use a funo


dlinmod para a linearizao. Utilize o help para saber mais sobre essa funo.

Determinao do Estado Estacionrio

A funo trim do SIMULINK permite determinar os pontos de equilbrio


do estado estacionrio. Considere, por exemplo, o modelo chamado modelo:

FEI - FCA
Tutorial do Matlab & Simulink 79

2
y(2)

1 + 1
- 1
Inport 2
s +2s+1 y(1)
Planta

1
s+1
Realimentacao

Determine os valores da entrada e dos estados que fazem as duas sadas


serem iguais 1. Primeiro, fornea uma estimativa inicial para as variveis e
para a entrada:
x = [0; 0; 0];
u = 0;

Em seguida, imponha os valores desejados para as sadas:

y = [1; 1];

Use os ndices das variveis para indicar quais delas podem variar livremente e
quais devem ficar inalteradas:

ix = []; % permita a variacao dos estados


iu = []; % permita a variacao da entrada
iy = [1;2]; % fixe tanto a saida 1 como a 2

Chame a funo trim:

[x,u,y,dx] = trim('modelo',x,u,y,ix,iu,iy)

x=
1.0000
0.0000
1.0000

u=
2

FEI - FCA
Tutorial do Matlab & Simulink 80

y=
1.0000
1.0000

dx =
1.0e-015 *

-0.3331
-0.2244
0.0567

1.3.4 Como o Simulink Funciona

No SIMULINK. o diagrama em blocos convertido numa estrutura mais


apropriada simulao. Primeiro, cada um dos parmetros dos blocos
calculado pelo MATLAB, trocando variveis pelo valor numrico. Em seguida,
os blocos so ordenados, desfeitos os agrupamentos de blocos e os loops
algbricos so detectados. Finalmente, ele confere as ligaes entre os blocos.

Terminada a converso de estrutura, a simulao est pronta para ser


iniciada. O sistema ento simulado via integrao numrica e o modelo
tratado como uma funo do tipo S-function que fornece as derivadas de todos
os estados a cada passo. Sabendo o valor das derivadas num instante, a
integrao determina qual o novo vetor de estado e assim por diante.

1.3.5 S-Functions

Quando voc cria um modelo no SIMULINK, uma nova funo do tipo


S-function, com o mesmo nome do diagrama, fica disponvel no MATLAB.
Essa funo define as dinmicas do modelo e se comporta operacionalmente
como qualquer outra funo MATLAB. essa funo que ser usada pelo
mtodo de integrao para simular o modelo. Sua sintaxe de chamada ,

sys = modelo(t,x,u,flag)

onde modelo o nome do modelo e flag quem define qual informao vai ser
colocada de volta em sys. Por exemplo, se flag colocado em 1, o contedo de
sys aps a chamada da funo ser o vetor de estado no instante t. Note portanto
que voc pode criar seu modelo diretamente escrevendo uma S-function sem ter
que desenhar o diagrama em blocos. Essa forma aconselhada nos casos que seu
modelo pode ser escrito de forma concisa como um conjunto de equaes
diferenciais.

FEI - FCA
Tutorial do Matlab & Simulink 81

Tal como qualquer outra funo, as S-function podem ser encadeadas,


fazendo com que uma S-function chame outras.

Um outro mecanismo interessante o mascaramento de blocos que


permite que voc defina uma janela particular de dilogo com o usurio, seu
cone, e os comandos de inicializao. Voc pode ento mascarar uma S-
function e tornar um modelo inteiro, disponvel como um bloco.

Argumentos das S-function

As possveis opes numricas da varivel flag e o contedo retornado no


argumento de sada so:

flag = 0 - tamanho dos parmetros e condies iniciais


flag = 1 - derivadas dos estados de tempo contnuo
flag = 2 - estados de tempo discreto
flag = 3 - vetor de sada
flag = 4 - prximo t para atualizao de tempo discreto

Para entender melhor as S-functions, coloque-se na posio do


SIMULINK. Cada um dos valores possveis do flag corresponde a algo que voc
vai precisar em instantes distintos da simulao. Por exemplo, no incio da
simulao voc precisa saber quantas variveis sero simuladas, quantas delas
so de tempo contnuo, quantas so discretas e as condies iniciais associadas
com essas variveis. Para ter a resposta a essas perguntas, chame a S-function
com flag = 0:

[sizes,x0] = modelo([],[],[],0);

onde x0 contm as condies iniciais de cada estado e sizes as seguintes


informaes:

sizes(1) - nmero de estados contnuos


sizes(2) - nmero de estados discretos
sizes(3) - nmero de sadas
sizes(4) - nmero de entradas
sizes(5) - nmero de razes descontnuas
sizes(6) - usado para encontrar loops algbricos

FEI - FCA
Tutorial do Matlab & Simulink 82

Nas outras etapas da simulao voc chamar novamente a S-function


com outros valores em flag para obter outras informaes.

Exemplo de uma S-function

Considere a equao diferencial de segunda ordem conhecida como


equao de Van der Pol.

x + (x 2 1)x + x = 0

Esta equao pode ser escrita como um sistema de equaes diferenciais de


primeira ordem.

x1 = x1 (1 x 22 ) x 2
x 2 = x1

Como neste caso, muitas vezes mais interessante transcrever o sistema


de equaes como uma S-function ao invs de criar o diagrama de blocos
associado.

X2

- X1'
f(u) 1/s 1/s
* +
(1-x2*x2) Scope

X1

A M-file que realiza a S-function com as equaes de Van der Pol


resulta:

FEI - FCA
Tutorial do Matlab & Simulink 83

function [sys, x0] = vdpm(t,x,u,flag)


% equacao de Vanderpol como uma M-file.
if abs(flag) == 1,
% Retorna as derivadas
sys(1) = x(1) .* (1 - x(2).^2) - x(2);
sys(2) = x(1);
elseif flag == 0,
% Retorna as condicoes iniciais
sys = [2;0;0;0;0;0];
x0 = [0.25; 0.25];
else
sys = [];
end

Esta funo pode ser chamada com diversos valores de flag para retornar a
informao necessria. Os algoritmos de integrao tal como o rk45, lidam
convenientemente com o flag durante a simulao. Note portanto, que seria
muito fcil voc desenvolver seu prprio algoritmo de integrao.

[t,x] = rk45('vdpm',10);
plot(t,x)

Van der Pol


3

-1

-2

-3
0 2 4 6 8 10
Tempo (seg)

Voc pode preferir construir o diagrama em blocos que realiza as


equaes. Contudo, quando voc salvar o diagrama um arquivo ser criado com
o mesmo nome da diagrama e com um contedo muito parecido com o do vdpm.
A grande diferena que o SIMULINK tambm salva todos os desenhos para
reconstruir o diagrama.

Convertendo uma S-function em Bloco

FEI - FCA
Tutorial do Matlab & Simulink 84

Um recurso bastante poderoso converter a S-function criada num


bloco. Ou seja, voc optou por escrever diretamente a S-function que realiza
as equaes, mas est interessado que sejam usadas dentro do ambiente do
SIMULINK.

Para converter a S-function vdpm.m num bloco, simplesmente coloque


seu nome dentro de um bloco do tipo S-function, que encontrado na biblioteca
Nonlinear.

Os campo Function parameters, permite que parmetros adicionais sejam


passados a cada iterao.

1.3.6 Mascarando Blocos

A funo Masking permite que voc altere a caracterstica de um bloco.


possvel marcar qualquer bloco, incluindo subsistemas e blocos S-function.

O exemplo a seguir mostra como converter um bloco Zero-Pole em um


bloco de filtro Butterworth que mostra sua resposta impulsiva no prprio cone.
Inicie com um bloco Zero-Pole:

FEI - FCA
Tutorial do Matlab & Simulink 85

(s-1)
s(s+1)
Zero-Pole

As variveis z, p e k so respectivamente os zeros, plos e o ganho.


Selecione o bloco com um clique nico do mouse e altere o nome o bloco
marcando o nome dele e digitando filtro PB. Selecione ento Mask no menu
Options. O caixa de dilogo a seguir ento mostrada:

Os campos da caixa de dilogo so descritos a seguir:

Block Type

filtro LP

Este nome define o tipo do bloco mascarado.

Dialog Strings

FEI - FCA
Tutorial do Matlab & Simulink 86

Butterworth passa baixas | Freqncia de corte (rad/s) | Ordem

Esta string define a nova caixa de dilogo que aparecer quando o bloco for
clicado duas vezes. Separe os dados com o smbolo "|". O primeiro dos dados o
ttulo da caixa de dilogo. Os demais so os nomes dos campos que apareceram
na nova caixa de dilogo. O nmero mximo de campos seis.

Ao invs de abrir a caixa de dilogo quando voc clica sobre o novo


bloco, voc pode fazer com que um comando do MATLAB seja executado. Isso
possvel usando a funo eval. Por exemplo, entrando com

eval('plot(1:10')

no campo Dialog Strings, uma linha plotada na janela grfica do MATLAB


toda vez que o bloco clicado duas vezes.

Initialization Commands

[z,p,k] = buttap(@2); z = @1*z; p = @1*p;


[a,b,c,d] = zp2ss(z,p,k); t = [0:0.2:3*@2]/@1;
[y,x] = impulse(a,b,c,d,1,t);

Os comandos de inicializao definem as funes que sero executadas pelo


bloco durante a simulao. Os valores das expresses MATLAB colocadas
como parmetros na caixa de dilogo do novo bloco, podem ser acessados com
@1, @2, etc. Neste exemplo, o valor da freqncia de corte obtida com @1 e o
parmetro associado ordem do filtro obtido com @2.

Qualquer expresso MATLAB pode ser usada. As variveis so locais e elas no


se sobrepem s do workspace do MATLAB.

Drawing Commands

plot(t,y,[0;max(t),[0;0])

Os trs comandos a seguir so reconhecidos no processo de mascaramento:

dpoly(num,den) desenha o numerador e denominador da funo


de transferncia.

FEI - FCA
Tutorial do Matlab & Simulink 87

droots(z,p,k) desenha a funo de transferncia no formato Zero-


Plo-Ganho.
plot(x,y,x1,y1) plota o grfico no bloco.

O comando plot similar ao plot do MATLAB, exceto que a opo tipo de


linhas no disponvel. Qualquer outra informao colocada neste campo
aparece desenhada no interior do bloco.

Help String

Este bloco realiza um filtro Butterworth passa baixas

Esta mensagem mostrada quando voc clica no boto Help na caixa de


dilogo criada.

1.3.7 Adicionando um novo bloco

Nesta seo mostra um exemplo completo da criao de um novo bloco


usando uma S-function e mascarando-a.

Imagine que voc deseja criar um integrador com limite superior e


inferior. Este modelo pode ser descrito facilmente por uma equao diferencial
de primeira ordem. Por exemplo, se (x lb e u < 0) ou (x ub e u > 0), ento

dx = 0
dt
Caso contrrio,


dx = u x = udt
dt
onde x o estado, u a entrada do integrador e lb e ub so respectivamente o
limite inferior e superior.

Existem trs etapas na definio de um novo bloco do tipo S-function:

1. Crie uma S-function atravs de um diagrama no SIMULINK ou


escrevendo diretamente o arquivo da funo.

FEI - FCA
Tutorial do Matlab & Simulink 88

2. Converta a S-function num bloco S-function.

3. Mascare o bloco S-function criando seu cone personalizado,


sua caixa de dilogo e os comandos de inicializao.

Passo 1: Crie a S-function

Uma das vrias formas de entrar com a equao diferencial e as condies


que descrevem o integrador com limitao usando o bloco de propsito geral
chamado Fcn:

1
Mux f(u) 1
1 s
Outport
Inport Mux Fcn Integrador

O bloco Fcn contem a expresso relacional a seguir:

u[2]*((((u[1]>lb)+(u[2]>=0))>0)*(((u[1]<ub)+(u[2]<=0))>0))

Onde u[1] e u[2] denotam a sada do integrador e a entrada do sistema. As


expresses relacionais (>, >=, <, <=) e as multiplicaes imitam uma declarao
do tipo if.

A partir do instante que voc entrar com o diagrama e der um nome a ele,
a S-function passa a estar disponvel no MATLAB e com o mesmo nome que
o diagrama.

Alternativamente voc pode criar a S-function diretamente como uma


M-file,

FEI - FCA
Tutorial do Matlab & Simulink 89

function [sys,x0]=limintm(t,x,u,flag, lb, ub, xi)


% integrator com limite superior e inferior.
if abs(flag) == 1
if (x <= lb & u < 0) | (x>= ub & u>0 )
sys = 0;
else
sys = u;
end
elseif flag == 3
sys = x;
elseif flag == 0
sys=[1,0,1,1,0,0]'; x0=xi;
else
sys = [];
end

onde flag indica as vrias informaes que a funo pode retornar.

Uma vez que a S-function foi definida, voc pode simula-la diretamente
como ilustrado abaixo para uma entrada senoidal, ou ento converte-la num
bloco.

x0 = []; % condicoes iniciais default


opcoes = []; % opcoes default
lb = -0.6; % limite inferior
ub = 0.4; % limite superior
rk45('limintm',10,x0,opcoes,'sin',lb,ub,xi)

FEI - FCA
Tutorial do Matlab & Simulink 90

Output trajectory
0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8
0 2 4 6 8 10

Tim e

Note que ao invs de 'sin', qualquer outra funo, mesmo as que voc
criou, poderiam ter sido usadas como argumento.

Passo 2: Converta a S-function em Bloco

O bloco S-function pede o nome da funo e quais variveis devem ser


passadas durante a simulao. No exemplo do integrador com limites, o nome da
funo o nome da M-file. As variveis so os trs parmetros, lb, ub e xi que
definem os limites e a condio inicial do integrador.

Passo 3: Mascare a S-function

Para mascar um bloco necessrio definir:

New block type

integrador com limite

Dialog strings

integrador com limite|limite inferior|limite superior| condio inicial

Initialization commands

FEI - FCA
Tutorial do Matlab & Simulink 91

lb = @1; ub = @2; xi = @3;

Drawing commands

plot(-1,-0.1,-1,1.1,[0,1,2,3],[0,0,1,1]);1/s

Help string

Integrador com limite de integracao

Desta forma obtemos um novo cone com a forma a seguir:

1/s

Int. com Limite

Clique duas vezes sobre ele para abrir a caixa de dilogo:

FEI - FCA
Tutorial do Matlab & Simulink 92

Os valores dos campos podem ser qualquer varivel do MATLAB ou


expresso.

FEI - FCA
2. Bibliografia

[1] MATLAB - Users Guide - The Mathworks Inc

[2] SIMULINK - Users Guide - The Mathworks Inc

[3] CONTROL SYSTEM TOOLBOX - Users Guide - The Mathworks Inc

[4] SIGNAL PROCESSING TOOLBOX - Users Guide - The Mathworks Inc

[5] OPTIMIZATION TOOLBOX - Users Guide - The Mathworks Inc

[6] SYSTEM IDENTIFICATION TOOLBOX- Users Guide - The Mathworks Inc

[7] ROBUST CONTROL TOOLBOX - Users Guide - The Mathworks Inc

[8] ANALYSIS & SYNTHESIS TOOLBOX - Users Guide - The Mathworks Inc

[9] STATISTICS TOOLBOX - Users Guide - The Mathworks Inc

[10] IMAGE PROCESSING TOOLBOX - Users Guide - The Mathworks Inc

[11] CODE GENERATOR - Users Guide - The Mathworks Inc

[12] NONLINEAR CONTROL DESIGN TOOLBOX - Users Guide - The Mathworks Inc

[13] KUO, B. C. & HANSELMAN, D. C. - Matlab Tools for Control System Analysis and
Design - Prentice Hall, 1994.

[14] OGATA, K. - Solving Control Engineering Problems with Matlab - Prentice Hall, 1994.

[15] OGATA, K. - Designing Linear Control Systems with Matlab - Prentice Hall, 1994.

93

Você também pode gostar