Sie sind auf Seite 1von 94

Matlab & Simulink

1994

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

Tutorial do Matlab & Simulink

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: Exemplo:
A = [1 2 3; 4 5 6; 7 8 9]

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

Resulta:

A=

1 4 7

2 5 8

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

Tutorial do Matlab & Simulink

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

Resulta:

x=

-1.3000

1.7321

4.8000

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

2 5 8 11

3 6 9 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 4 7

2 5 8

3 6 9

Variveis e Declaraes do MATLAB

Tutorial do Matlab & Simulink

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

Tutorial do Matlab & Simulink

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 ACOS ACOSH ACOT ACOTH ACSC ACSCH

Inverse Hilbert matrix Inverse cosine Inverse hyperbolic cosine Inverse cotangent Inverse hyperbolic cotangent Inverse cosecant 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

Tutorial do Matlab & Simulink

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

Tutorial do Matlab & Simulink

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:

Tutorial do Matlab & Simulink A = [1 2; 3 4] A= 1 3 B = A' B=

2 4

1 2

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

Tutorial do Matlab & Simulink

10

F = 2*E 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 logm sqrtm exponencial de uma matriz logaritmo de uma matriz raiz quadrada de uma matriz

Outras funes elementares sobre matrizes incluem: poly det trace polinmio caraterstico determinante 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

Tutorial do Matlab & Simulink

11

pelos smbolos * \ / ^ e '. Para indicar que a operao elemento-a-elemento usase um ponto (.) antes do smbolo da operao. 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=

32

729

Operadores Relacionais Para comparar-se matrizes de dimenses idnticas existem seis (6) operadores relacionais.

Tutorial do Matlab & Simulink

12

< <= > >= == ~=

menor menor ou igual 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));

Tutorial do Matlab & Simulink

13

Operadores Lgicos 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 4 5

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

Tutorial do Matlab & Simulink 1 2 3 4 5

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

Tutorial do Matlab & Simulink

15

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

5 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(:)

Tutorial do Matlab & Simulink B=

16

1 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]) = []

Tutorial do Matlab & Simulink

17

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

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 43 38 61 12

57 178 163 420 59

291 1011 1095 2407 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

Tutorial do Matlab & Simulink

19

sort sum prod cumsum cumprod diff corrcoef cov

- ordenao - soma dos elementos - produto dos elementos - soma cumulativa dos elementos - Produto cumulativos dos elementos - Aproximao da derivada - Coeficientes de correlao - 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 = mu =

61

420

2407

1.0e+003 * sigma = 0.0330 0.1754 1.0182

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.

Tutorial do Matlab & Simulink c = polifit(x,p,n)

20

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 norm rank rcond - nmero de condicionamento usando norma 2 - norma 1, norma 2, norma F e norma - posto da matriz - 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

Tutorial do Matlab & Simulink

21

A=

1 4 7

2 5 8

3 6 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) = 4s2 + 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.

Tutorial do Matlab & Simulink [q,r] = deconv(c,a) q= 4 5 6 r= 0 0 0 0 0

22

A lista de funes de polinmios inclui: poly roots polyval polyvalm conv deconv residue polyder polyfit - polinmio caracterstico - razes de um polinmio - clculo do valor numrico do polinmio - clculo do polinmio de matrizes - multiplicao (convoluo) - diviso (deconvoluo) - expanso em fraes parciais - derivada do polinmio - 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 angle conv deconv fft ifft fftshift fft2 ifft2 fftshift conv2 - magnitude complexa - ngulo de fase - convoluo - deconvoluo - transformada rpida de Fourier - transformada rpida inversa de Fourier - alterna quadrantes de matrizes - FFT de duas dimenses - FFT inversa de duas dimenses - rearranja os resultados da FFT - convoluo de duas dimenses

Filtragem de Dados

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

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)z1 + + a(na)z ( na1)

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

Tutorial do Matlab & Simulink

24

O MATLAB representa funes matemticas atravs de arquivos-M (Mfiles). Por exemplo, a funo
f (x ) = 1 1 + 6 2 (x 0,3) + 0,01 (x 0,9)2 + 0,04

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

1.5

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

Tutorial do Matlab & Simulink


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

25

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 fmins fzero - mnimo de uma funo de uma varivel - mnimo de uma funo multivarivel - 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 ,

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 constr fminu fsolve leastsq minimax seminf - goal attainment multi-objetivo - minimizao com restries - minimizao sem restries - soluo de equaes no lineares - mnimos quadrados no linear - soluo do problema minimax - minimizao semi-infinita

Equaes Diferenciais so: As funes disponveis para a soluo de equaes diferenciais ordinrias

ode23 ode45

- mtodo Runge-Kutta de 2/3 ordem - 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
2 x1 = x1 (1 x 2 ) x2

x 2 = x1

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)


3

-1

-2

-3

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

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 loglog semilogx semilogy title xlabel ylabel text gtext grid - cria um plot de vetores ou colunas de matrizes - escala logartmica nos dois eixos - escala logartmica no eixo x e linear em y - escala logartmica no eixo y e linear em x - adiciona um ttulo ao grfico - adiciona um nome ao eixo x - adiciona um nome ao eixo y - mostra um texto na posio especificada - coloca o texto no grfico usando o mouse - 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+)')

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 x=sin(t)

0.5

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.

Tutorial do Matlab & Simulink

30

Smbolo y m c r g b w k

Cor yellow magenta cyan red green blue white black

Smbolo . o x + * : -. --

Linha ponto crculo marca x marca + marca * slida pontilhada 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,

Tutorial do Matlab & Simulink

31

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1

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 3 2 1 0 -1 -2 -3 -4 -4

-2

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 1 0.5 0 -0.5 -1 -1.5 -2 -2.5 -3

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.

Tutorial do Matlab & Simulink dados.dat


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

33

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,
6 5 4 3 2

10

8 6 4 2 0

10

Funes Grficas Especializadas em 2-D

Tutorial do Matlab & Simulink

34

O MATLAB inclui uma variedade de funes especializadas, conforme descrito resumidamente a seguir. bar compass errorbar feather fplot hist polar quiver rose stairs fill - grfico de barras - grfico de ngulos com setas - grfico de barras de erros - grfico de ngulos - calcula e plota uma funo - cria um histograma - grfico em coordenadas polares - cria um grfico de um gradiente - histograma em ngulo - grfico similar ao de barras sem linhas internas - 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,

Tutorial do Matlab & Simulink


y = cos(tan(pi*x))

35

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1

0.2

0.4

0.6

0.8

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,

Tutorial do Matlab & Simulink


y = cos(tan(pi*x))

36

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1

0.2

0.4

0.6

0.8

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.

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

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.

Tutorial do Matlab & Simulink


% 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

39

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

Tutorial do Matlab & Simulink

40

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

Tutorial do Matlab & Simulink


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;

41

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.

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,

Tutorial do Matlab & Simulink


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

43

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. 2. 3. 4. Procura por whoopie como varivel; Verifica se whoopie uma funo interna; Procura um o arquivo whoopie.m no diretrio atual; Procura um o arquivo whoopie.m nos diretrios especificados pelo path do MATLAB.

ECHO, INPUT, KEYBOARD, PAUSE

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 Mfiles, 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:

Tutorial do Matlab & Simulink


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

45

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

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

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:

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,

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 enumerase outros toolboxes. importante perceber que as ferramentas que no so encontradas nos toolboxes podem ser criadas escrevendo-se novos M-files.

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

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

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

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

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 diagonalizao

usando

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

Tutorial do Matlab & Simulink

55

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.

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.

Tutorial do Matlab & Simulink

56

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

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

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.

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.

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

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.

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

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.

Tutorial do Matlab & Simulink

64

Signal Gen. 1 Gain

Scope

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

Scope

Signal Gen. 2 Gain

Scope

Signal Gen. 2 Gain

Scope

Para mover o ponto onde dois segmentos de reta se encontram, clique no vrtice e arraste o crculo

Tutorial do Matlab & Simulink

65

Signal Gen. 2 Gain

Scope

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

Scope

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

Mux

Scope

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. 2 Gain Mux Scope

Agora, copie um bloco To Workspace da biblioteca Sinks e ento abra a caixa de dilogo.

Mux Signal Gen. Mux Scope

2 Gain

yout To Workspace

O bloco To Workspace envia um vetor de qualquer tamanho para o workspace do MATLAB como uma matriz. Essa matriz tem uma linha para

Tutorial do Matlab & Simulink

67

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

matriz1 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 matriz1 1000 by 2 2000 Bytes Density Complex 16000 Full No

Grand total is 2000 elements using 16000 bytes

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.
2 1.5 1 0.5 0 -0.5 -1 -1.5 -2

200

400

600

800

1000

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.

Tutorial do Matlab & Simulink

70

Simulao via Menu 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 "[]".

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:

Tutorial do Matlab & Simulink

72

Step Fcn

1 s+1 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:

Step Fcn

1 s+1 Transfer Fcn

1 Saida

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

Step Fcn

1 s+1 Transfer Fcn

saida To Workspace tempo

Clock
plot(tempo,saida)

To Workspace1

Condies Iniciais As condies iniciais, as quais so impostas no instante inicial de simulao, so geralmente colocadas dentro dos blocos. Essas condies

Tutorial do Matlab & Simulink

73

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

Tutorial do Matlab & Simulink

74

1 Inport

+ + Sum

s+2 s+1 Transfer Fcn

1 Outport

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

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,

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

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 Inport + 1 s +2s+1 Planta 1 s+1 Realimentacao
2

1 y(1)

Para extrair o modelo linear associado a esse diagrama entre com o comando:
[A,B,C,D] = linmod('modelo')

A= -1 -1 0 B= 0 1 0 C= 0 -1 D= 0 1

0 -2 1

1 -1 0

0 0

1 0

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:

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:

Tutorial do Matlab & Simulink

79

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


2

1 y(1)

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

Tutorial do Matlab & Simulink y= 1.0000 1.0000 dx = 1.0e-015 * -0.3331 -0.2244 0.0567

80

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

Tutorial do Matlab & Simulink

81

seu modelo pode ser escrito de forma concisa como um conjunto de equaes diferenciais. 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 Sfunction 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 flag = 1 flag = 2 flag = 3 flag = 4 - tamanho dos parmetros e condies iniciais - derivadas dos estados de tempo contnuo - estados de tempo discreto - vetor de sada - 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) sizes(2) sizes(3) - nmero de estados contnuos - nmero de estados discretos - nmero de sadas

Tutorial do Matlab & Simulink

82

sizes(4) sizes(5) sizes(6)

- nmero de entradas - nmero de razes descontnuas - usado para encontrar loops algbricos

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.
2 x1 = x1 (1 x 2 ) x2

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 1 f(u) (1-x2*x2) * + X1'

1/s

1/s Scope

X1

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

Tutorial do Matlab & Simulink


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

83

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

4 Tempo (seg)

10

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

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:

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.

Tutorial do Matlab & Simulink

86

Dialog Strings 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:

Tutorial do Matlab & Simulink

87

de transferncia. droots(z,p,k) desenha a funo de transferncia no formato Zero-Plo-Ganho. plot(x,y,x1,y1) plota o grfico no bloco.

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

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 dt

x = u 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:

Tutorial do Matlab & Simulink

88

1. Crie uma S-function atravs de um diagrama no SIMULINK ou escrevendo diretamente o arquivo da funo. 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 Inport

Mux Mux

f(u) Fcn

1 s Integrador

1 Outport

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,

Tutorial do Matlab & Simulink


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

89

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)

Tutorial do Matlab & Simulink


Output trajectory
0.6

90

0.4

0.2

-0.2

-0.4

-0.6

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

Tutorial do Matlab & Simulink lb = @1; ub = @2; xi = @3;

91

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:

Tutorial do Matlab & Simulink

92

Os valores dos campos podem ser qualquer varivel do MATLAB ou expresso.

2. Bibliografia
[1] [2] [3] [4] [5] [6] [7] [8] [9] MATLAB - Users Guide - The Mathworks Inc SIMULINK - Users Guide - The Mathworks Inc CONTROL SYSTEM TOOLBOX - Users Guide - The Mathworks Inc SIGNAL PROCESSING TOOLBOX - Users Guide - The Mathworks Inc OPTIMIZATION TOOLBOX - Users Guide - The Mathworks Inc SYSTEM IDENTIFICATION TOOLBOX- Users Guide - The Mathworks Inc ROBUST CONTROL TOOLBOX - Users Guide - The Mathworks Inc

ANALYSIS & SYNTHESIS TOOLBOX - Users Guide - The Mathworks Inc


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

Das könnte Ihnen auch gefallen