Matlab Fei

download Matlab Fei

of 94

Transcript of Matlab Fei

Faculdade de Engenharia Industrial Fundao de Cincias Aplicadas

Matlab & SimulinkSo Bernardo do Campo - Dezembro de 1994 Departamento de Eletricidade

ndice Analtico1. 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 & Simulink1.1 Matlab BsicoMATLAB 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: Exemplo:

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

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

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

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

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

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 3 B = A' B= 1 2 3 4 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 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 pelos smbolos * \ / ^ e '. Para indicar que a operao elemento-a-elemento usase 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.

< >= == ~=

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

FEI - FCA

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 = 61 mu = 1.0e+003 * 0.0330 sigma = 21.4126 147.9503 865.7639 0.1754 1.0182 420 2407

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

FEI - FCA

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

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 discretaY (z) b(1) + b(2)z1 + + b(nb)z ( nb 1) H (z ) = = 1 + a(2)z 1 + + a(na)z ( na 1) X (z)

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 (Mfiles). Por exemplo, a funof (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

0

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

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 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 As funes disponveis para a soluo de equaes diferenciais ordinrias so:

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 = 0Esta equao pode ser escrita como um sistema de equaes diferenciais de primeira ordem2 x1 = x1 (1 x 2 ) 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)3

2

1

0

-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 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+)')

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

0.5

1

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

FEI - FCA

Tutorial do Matlab & Simulink

31

1 0.8 0.6 0.4 0.2 0 -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

3

2

1

0

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

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 0 2 4 6 8 10

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

FEI - FCA

Tutorial do Matlab & Simulink

35

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

y = cos(tan(pi*x))

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 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 0.2

y = cos(tan(pi*x))

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

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

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

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

FEI - FCA

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

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

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

1.5

1

0.5

0

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

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

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

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:

FEI - FCA

Tutorial do Matlab & Simulink

78

converso para a forma de funo de transferncia[num,den] = ss2tf(A,B,C,D)

diagramas de Bodebode(A,B,C,D)

resposta temporal linearizadastep(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 Inport + 1 s +2s+1 Planta 1 s+1 Realimentacao2

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

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 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) sizes(4) sizes(5) sizes(6)

- nmero de estados contnuos - nmero de estados discretos - nmero de sadas - nmero de entradas - nmero de razes descontnuas - 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 = 0Esta equao pode ser escrita como um sistema de equaes diferenciais de primeira ordem.2 x1 = x1 (1 x 2 ) x 2

x 2 = x1Como 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 * + X1' 1/s

1/s Scope

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

2

1

0

-1

-2

-3 0 2 4 Tempo (seg) 6 8 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

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 bloc