Escolar Documentos
Profissional Documentos
Cultura Documentos
Matlab &
Simulink
São Bernardo do Campo - Dezembro de 1994
Departamento de Eletricidade
Índice Analítico
2. Bibliografia...................................................................................................... 93
1. Tutorial do
Matlab & Simulink
2
Tutorial do Matlab & Simulink 3
1.1.1 Introdução
Exemplo:
» A = [1 2 3; 4 5 6; 7 8 9]
Resulta:
A=
1 2 3
4 5 6
7 8 9
Resulta:
x=
-1.3000 1.7321 4.8000
FEI - FCA
Tutorial do Matlab & Simulink 4
» x(5) = abs(x(1))
Resulta:
x=
-1.3000 1.7321 4.8000 0 1.3000
» r = [10 11 12];
» A = [A; r]
A=
1 2 3
4 5 6
7 8 9
10 11 12
Você pode extrair sub-matrizes de uma matriz maior usando : (dois pontos). Por
exemplo:
» A = A(1:3,:);
A=
1 2 3
4 5 6
7 8 9
FEI - FCA
Tutorial do Matlab & Simulink 5
» variável = expressão
ou simplesmente,
» expressão
Se a expressão é muito grande e não cabe em uma linha, use (...) para
continuar a definição na linha seguinte. Exemplo:
Você pode formar uma variável ou nome de função com uma letra seguida
de qualquer quantidade de letras (ou underscore) . MATLAB diferencia letras
maiúsculas de minúsculas e usa somente os primeiros 19 caracteres do nome.
Para listar as variáveis ativas use o comando who. Para obter mais
informações sobre as variáveis como: nome, tamanho, número de elementos,
etc., use o comando whos.
O Utilitário de HELP
FEI - FCA
Tutorial do Matlab & Simulink 6
» help matfun
Para obter auxílio sobre uma função específica digite help e o nome da
função. Exemplo:
» help inv
» lookfor inverse
»
INVHILB Inverse Hilbert matrix
ACOS Inverse cosine
ACOSH Inverse hyperbolic cosine
ACOT Inverse cotangent
ACOTH Inverse hyperbolic cotangent
ACSC Inverse cosecant
ACSCH Inverse hyperbolic cosecant
# #
Salvando e Saindo
» save temp x y z
FEI - FCA
Tutorial do Matlab & Simulink 7
-4.534i
1.760217e-11
^ potenciação
\ divisão à esquerda
/ divisão à direita
* multiplicação
- subtração
+ adição
Formato de Saída
» 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
Funções
» x = sqrt(log(z))
» angulo = atan2(y,3*x)
» [V,D] = eig(A)
» A = [1 2; 3 4]
FEI - FCA
Tutorial do Matlab & Simulink 9
A=
1 2
3 4
» B = A'
B=
1 3
2 4
» C=A+B
C=
2 5
5 8
» D=C-2
D=
0 3
3 6
Multiplicação de Matrizes
» E=A*B
E=
5 11
11 25
» F = 2*E
FEI - FCA
Tutorial do Matlab & Simulink 10
F=
10 22
22 50
Divisão de Matrizes
FEI - FCA
Tutorial do Matlab & Simulink 11
» x = [1 2 3]; y = [4 5 6];
» z = x.*y
z=
4 10 18
» z = x.\y
z=
4.0000 2.5000 2.000
» z = x.^y
z=
1 32 729
Operadores Relacionais
< menor
<= menor ou igual
FEI - FCA
Tutorial do Matlab & Simulink 12
> maior
>= maior ou igual
== igual
~= diferente
» 2 + 2 ~= 4
ans =
0
» 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
» Y = [1 2 3 4 5 6 7 8 9];
» i = find(Y > 3.0);
» Y(i) = 10*ones(size(i));
Operadores Lógicos
FEI - FCA
Tutorial do Matlab & Simulink 13
Funções Matemáticas
» A = [ -1 2 -3; 4 -5 6];
» B = abs(A)
B=
1 2 3
4 5 6
Gerando Vetores
» x = 1:5
x=
1 2 3 4 5
FEI - FCA
Tutorial do Matlab & Simulink 14
» 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
» 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 funções para a geração de vetores tal como logspace que
gera um vetor espaçado 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
» 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
» A(:,1)
A=
1
4
7
» A(2:3,1:2)
A=
4 5
7 8
» A = [1 2; 3 4; 5 6];
» B = A(:)
B=
1
FEI - FCA
Tutorial do Matlab & Simulink 16
2
3
4
5
6
» A(L,:)
Matrizes vazias
A declaração,
» X = []
» A(:,[2 4]) = []
Matrizes Especiais
FEI - FCA
Tutorial do Matlab & Simulink 17
Existe uma coleção de funções que geram matrizes que são encontradas
nos problemas de álgebra linear e processamento de sinais. Exemplos:
Manipulando Matrizes
FEI - FCA
Tutorial do Matlab & Simulink 18
Convenção
count =
11 57 291
43 178 1011
38 163 1095
61 420 2407
12 59 287
Para esse exemplo temos 5 observações para 3 variáveis. Isso pode ser
obtido como segue:
» [n,p] = size(count)
n=
5
p=
3
FEI - FCA
Tutorial do Matlab & Simulink 19
• sort - ordenação
• sum - soma dos elementos
• prod - produto dos elementos
• cumsum - soma cumulativa dos elementos
• cumprod - Produto cumulativos dos elementos
• diff - Aproximação da derivada
• corrcoef - Coeficientes de correlação
• cov - Matriz de covariância
» mx = max(count);
» mu = mean(count);
» sigma = std(count);
resultam em:
mx =
61 420 2407
mu =
1.0e+003 *
Ajuste de Curvas
p( x ) = c1x d + c2 x d −1 + " + cn
FEI - FCA
Tutorial do Matlab & Simulink 20
» c = polifit(x,p,n)
Autovalores e Autovetores
» eig(A)
» [X,D] = eig(A)
Representação de Polinômios
FEI - FCA
Tutorial do Matlab & Simulink 21
A=
1 2 3
4 5 6
7 8 0
é calculado com
» p = poly(A)
p=
1 -6 -72 -27
» r = roots(p)
r=
12.1229
-5.7345
-0.3884
Essas raízes são os mesmos que os autovalores da matriz A. Você pode remontar
o polinômio original com a função poly
» p2 = poly(r)
p2 =
1 -6 -72 -27
» a = [1 2 3]; b = [4 5 6];
» c = conv(a,b)
c=
4 13 28 27 18
FEI - FCA
Tutorial do Matlab & Simulink 22
» [q,r] = deconv(c,a)
q=
4 5 6
r=
0 0 0 0 0
Processamento de Sinais
Filtragem de Dados
FEI - FCA
Tutorial do Matlab & Simulink 23
A função,
» y = filter(b,a,x)
x y
H(z)
» [h,w] = freqz(b,a,n);
» mag = abs(h);
» fase = angle(h);
» semilogy(w,mag)
» plot(w,fase)
• Integração Numérica
• Equações não lineares e Otimização
• Solução de Equações Diferenciais
FEI - FCA
Tutorial do Matlab & Simulink 24
1 1
f (x ) = + −6
(x − 0,3) + 0,01 (x − 0,9)2 + 0,04
2
» x = -1:.01:2;
» plot(x,humps(x))
100
80
60
40
20
-20
-1 -0.5 0 0.5 1 1.5 2
Integração Numérica
Uma função, 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
Note que o primeiro argumento da função quad é uma string que contém o
nome de uma função. Isso mostra porque essa função é chamada função de
função (é uma função que opera com outras funções). Os outros dois argumentos
são os limites de integração.
» xm = fmin('humps',0.5, 1)
xm =
0.6370
» y = humps(xm)
y=
11.2528
FEI - FCA
Tutorial do Matlab & Simulink 26
» xz1 = fzero('humps',0)
xz1 =
-0.1316
» xz2 = fzero('humps',1)
xz2 =
1.2995
Equações Diferenciais
x + (x 2 − 1)x + x = 0
x1 = x1 (1 − x 22 ) − x 2
x 2 = x1
FEI - FCA
Tutorial do Matlab & Simulink 27
O primeiro passo para simular este sistema é criar um arquivo que contem este
sistema de equações diferenciais. Chamaremos este arquivo de vdpol.m
» t0 = 0; tf = 20;
» x0 = [0 0.25]'; % condicoes iniciais
» [t,x] = ode23('vdpol',t0,tf,x0);
» plot(t,x)
-1
-2
-3
0 5 10 15 20
1.1.9 Gráficos
Gráficos 2-D
FEI - FCA
Tutorial do Matlab & Simulink 28
Criando um Plot
» t = 0:pi/100:2*pi;
» x = sin(t);
» y1 = sin(t + 0.25);
» y2 = sin(t + 0.5);
» plot(x,y1,'r-',x,y2,'g--')
» title('Defasagem')
» xlabel('x=sin(t)')
» ylabel('y=sin(t+)')
FEI - FCA
Tutorial do Matlab & Simulink 29
Defasagem
1
0.8
0.6
0.4
0.2
y=sin(t+) 0
-0.2
-0.4
-0.6
-0.8
-1
-1 -0.5 0 0.5 1
x=sin(t)
FEI - FCA
Tutorial do Matlab & Simulink 30
O que ele pode fazer é mudar a escala dos eixos automaticamente se os novos
dados não se acomodarem dentro da escala anterior. Exemplo:
» plot(x)
» hold on
» plot(y1,'--')
» plot(y2,'-.')
» hold off
Resulta,
FEI - FCA
Tutorial do Matlab & Simulink 31
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 50 100 150 200 250
» plot(eig(randn(20,20)),’x’)
Distribuição de Autovalores
4
-1
-2
-3
-4
-4 -2 0 2 4 6
FEI - FCA
Tutorial do Matlab & Simulink 32
Plotando Matrizes
A função 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 são matrizes, plot(X,Y) plota as coluna de X versus cada as colunas de Y.
» X = 0:pi/50:2*pi;
» Y = sin(X); Z = cos(X); W = log(X);
» A = [Y' Z' W'];
» plot(A)
Resulta,
2
1.5
0.5
-0.5
-1
-1.5
-2
-2.5
-3
0 20 40 60 80 100 120
Importando Dados
FEI - FCA
Tutorial do Matlab & Simulink 33
dados.dat
O comando load dados.dat produz uma matriz chamada dados, 9-por-3. A seguir,
mostra-se como renomear cada uma das variáveis e como plotar cada função
separadamente.
» load dados.dat
» F1 = dados(:,1);
» F2 = dados(:,2);
» X = dados(:,3);
» subplot(211), plot(X,F1)
» subplot(212), plot(X,F2)
Resulta,
2
0 2 4 6 8 10
0
0 2 4 6 8 10
FEI - FCA
Tutorial do Matlab & Simulink 34
» x = (0:1/2000:1)';
» plot(x,cos(tan(pi*x)))
Resulta,
FEI - FCA
Tutorial do Matlab & Simulink 35
y = cos(tan(pi*x))
1
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 0.2 0.4 0.6 0.8 1
function y = fofx(x)
y = cos(tan(pi*x));
Resulta,
FEI - FCA
Tutorial do Matlab & Simulink 36
1 y = cos(tan(pi*x))
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 0.2 0.4 0.6 0.8 1
Gráficos 3-D
FEI - FCA
Tutorial do Matlab & Simulink 37
FOR
O MATLAB possui a sua versão própria dos loops DO ou FOR. Com isso
é possível repetir um grupo de declarações por um número predeterminado de
vezes. Por exemplo,
» for i = 1:1:m
» for j = 1:1:n
» A(i,j) = 1/(i+j-1);
» end
» end
» A
WHILE
FEI - FCA
Tutorial do Matlab & Simulink 38
» n = 1;
» while prod(1:n) < 1.e100, n = n+1; end
» n
Declarações IF e BREAK
if n < 0
A = negative(n)
elseif rem(n,2) == 0
A = even(n)
else
A = odd(n)
end
"Pegue um número 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".
FEI - FCA
Tutorial do Matlab & Simulink 39
while 1
n = input('Entre com n [negativo aborta]. ');
if n <= 0, break, end
while n > 1
if rem(n,2) == 0
n = n/2
else
n = 3*n+1
end
end
end
1.1.11 Arquivos M
Arquivos Scripts
FEI - FCA
Tutorial do Matlab & Simulink 40
com dados no workspace. Os demos fornecidos junto como MATLAB são bons
exemplos de como usar scripts para realizar tarefas mais complexas. Para
chamar os demos digite demo no prompt do MATLAB.
f = [ 1 1]; i = 1;
plot(f)
Arquivos de Funções
FEI - FCA
Tutorial do Matlab & Simulink 41
function y = mean(x)
[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 média pode ser calculada
como segue:
» z = 1:99;
» mean(z)
ans =
50
FEI - FCA
Tutorial do Matlab & Simulink 42
Você pode criar uma função um pouco mais complexa que mean,
chamada stat, que também calcula o desvio padrão. Neste exemplos ilustramos o
uso de múltiplos argumentos de saída.
[m,n] = size(x);
if m == 1
m = n;
end
mean = sum(x) / m;
stdev = sqrt(sum(x.^2)/m - mean.^2);
Uma função que calcula o posto de uma matriz usa múltiplos argumentos
de entrada: No caso geral teríamos múltiplos argumentos de entrada e de saída.
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 também mostra o uso da variável permanente nargin para encontrar
o número de argumentos de entrada. A variável nargout, embora não usada neste
exemplo, contém o número de argumentos de saída.
você pode criar um help online para os seus M-files pessoais entrando o
texto em uma ou mais linhas de comentário, começando sempre pela segunda
linha do arquivo. Por exemplo, o arquivo da função angle,
FEI - FCA
Tutorial do Matlab & Simulink 43
function p = angle(h)
p = atan2(imag(h), real(h));
Informações Úteis
Quando você chama uma função pela primeira vez, o MATLAB compila a
função e a coloca na memória. Ela estará então disponível para os usos
subseqüentes sem a necessidade de ser compilada. Permanecerá na memória até
o final da seção ou até que você fique com pouca memória, acarretando na sua
eliminação automática.
FEI - FCA
Tutorial do Matlab & Simulink 44
Variáveis Globais
Cada função MATLAB possui suas próprias variáveis locais que são
separadas daquelas de outras funções e daquelas que estão no workspace.
Contudo, se você declarar uma variável como global, todas as funções e o
workspace vão enxergar a mesma variável. Para diferenciar das demais
variáveis, costuma-se identificar uma variável global declarando-a com um
nome longo e em letras maiúsculas, embora isso não seja uma imposição.
y1 = y1 − α y2 y1
y2 = − y2 + β y2 y1
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)];
Uma vez que ALFA e BETA são globais você pode altera-las interativamente e
novas soluções podem ser obtidas sem ter que editar nenhum arquivo e sem
passar os valores como argumentos.
Variáveis Alfanuméricas
» s = 'Ola'
s=
Ola
» c = 23;
» title(['A temperatura é',num2str(c),' graus C'])
A Função EVAL
FEI - FCA
Tutorial do Matlab & Simulink 46
A função eval lida com variáveis tipo texto para implementar recursos de
macros de texto. eval(t) força que o texto contido na variável t seja "resolvido".
O exemplo a seguir mostra como usar o comando load para carregar 10
arquivos seqüencialmente numerados: dados1.mat, dados2.mat, ...
» fname = "dados";
» for i = 1:10
» eval(['load ',fname,int2str(i)])
» end
» fplot('sin',[0 10])
FEI - FCA
Tutorial do Matlab & Simulink 47
» ! edit c:\usuario\teste.doc
Transferência de Dados
Importando Dados
Para exportar dados também existem várias opções, das quais algumas são
listadas a seguir:
FEI - FCA
Tutorial do Matlab & Simulink 48
» A = rand(4,3);
» save temp.dat A -ascii
FEI - FCA
Tutorial do Matlab & Simulink 49
Comandos de Depuração
Usando o Depurador
FEI - FCA
Tutorial do Matlab & Simulink 50
Construção de Modelos
FEI - FCA
Tutorial do Matlab & Simulink 51
Conversão de Modelos
Redução de Modelos
Realização de Modelos
FEI - FCA
Tutorial do Matlab & Simulink 52
Propriedade de Modelos
Resposta Temporal
FEI - FCA
Tutorial do Matlab & Simulink 53
Resposta em Freqüência
Seleção de Ganhos
FEI - FCA
Tutorial do Matlab & Simulink 54
Solução de Equações
Demonstrativos
FEI - FCA
Tutorial do Matlab & Simulink 55
FEI - FCA
Tutorial do Matlab & Simulink 56
» simulink
Este comando mostra uma nova janela contendo ícones dos blocos de
subsistemas que constituem a biblioteca padrão.
FEI - FCA
Tutorial do Matlab & Simulink 57
Estes blocos podem ser abertos (clicando duas vezes), abrindo janelas de
onde os blocos serão 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 mantém o botão
esquerdo do mouse apertado. Inicialmente clique sobre a biblioteca Sources e
arraste um gerador de funções para a nova janela (untitled).
FEI - FCA
Tutorial do Matlab & Simulink 58
FEI - FCA
Tutorial do Matlab & Simulink 59
Para abrir a janela do osciloscópio, 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. Não clique sobre OK, pois fecharia a
janela de observação do osciloscópio.
FEI - FCA
Tutorial do Matlab & Simulink 60
FEI - FCA
Tutorial do Matlab & Simulink 61
com qualquer formato. A cada vez que você solta o botão esquerdo e aperta
novamente inicia-se uma nova linha ligada a anterior a partir desse ponto. Se
você não gostou do resultado apague a linha selecionando-a com um clique em
qualquer ponto da linha e então pressione a tecla DELETE ou use Cut ou Clear
no menu Edit.
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
diretório, um nome para seu modelo e depois clique sobre o OK.
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
FEI - FCA
Tutorial do Matlab & Simulink 64
1
Gain
Clique duas vezes sobre o bloco Gain para abrir a janela de configuração
do bloco e altere o valor do ganho para 2. Para ligar a entrada do bloco Gain à
linha de conexão entre o gerador e o osciloscópio, você pode começar o traçado
da entrada do bloco de ganho ou por exemplo, da saída do gerador
2
Gain
FEI - FCA
Tutorial do Matlab & Simulink 65
2
Gain
2
Gain Scope1
Mux
2
Gain
FEI - FCA
Tutorial do Matlab & Simulink 66
Abra o bloco Mux e altere o número de entradas para 2 e então feche a caixa de
diálogo.
Mux
Signal Gen.
Mux Scope
2
Gain
Mux
Signal Gen.
Mux Scope
2 yout
To Workspace
Gain
FEI - FCA
Tutorial do Matlab & Simulink 67
Mux
Signal Gen.
Mux Scope
2 matriz1
Gain To Workspace
FEI - FCA
Tutorial do Matlab & Simulink 68
1.5
0.5
-0.5
-1
-1.5
-2
0 200 400 600 800 1000
FEI - FCA
Tutorial do Matlab & Simulink 69
Níveis de Uso
Simulação
FEI - FCA
Tutorial do Matlab & Simulink 70
A simulação pode ser iniciada tanto pela linha de comando como pelo
menu Simulation. Selecione Start nesse menu depois de colocar o valor de
cada parâmetro ou o nome da variável MATLAB correspondente.
A linha Return Variables pode ser usada para colocar o tempo, vetor de
estado e vetor de saída no workspace do MATLAB. Se este campo for deixado
em branco nenhuma variável será enviada ao workspace.
FEI - FCA
Tutorial do Matlab & Simulink 71
FEI - FCA
Tutorial do Matlab & Simulink 72
1
s+1
Step Fcn
Transfer Fcn Scope
1
1
s+1
Step Fcn Saida
Transfer Fcn
1
saida
s+1
Step Fcn To Workspace
Transfer Fcn
tempo
Clock To Workspace1
» plot(tempo,saida)
Condições Iniciais
FEI - FCA
Tutorial do Matlab & Simulink 73
que colocamos como parâmetros de um dado bloco pode ser sobreposta usando
um argumento extra na chamada da simulação:
» [t,x,y] = linsim('modelo',tfinal,x0);
» [sizes,x0] = modelo
onde "modelo" é o nome do modelo. O nome do bloco associado a cada uma das
variáveis de estado é obtido com um terceiro argumento de saída:
» [sizes,x0,nome_bloco] = modelo
Loops Algébricos
• Blocos de ganho;
• A maioria dos blocos não lineares;
• Função-de-transferência quando numerador e denominador são
da mesma ordem;
• Blocos Zero-Pólo-Ganho quando existem tantos zeros quanto
pólos;
• Blocos Espaço-de-Estado quando a matriz D é não nula;
FEI - FCA
Tutorial do Matlab & Simulink 74
1 + s+2
+ 1
Inport s+1
Sum Outport
Transfer Fcn
1
Gain
Interpolação de Dados
linsim
rk45, rk23
FEI - FCA
Tutorial do Matlab & Simulink 75
gear
adams
euler
[t,x,y] = linsim('modelo',tf,x0,[tol,mpasso,Mpasso]);
Como regra geral, este parâmetros está entre 0.1 e 1e-6. Quanto menor o
valor de tol, mais passos serão necessários na simulação.
FEI - FCA
Tutorial do Matlab & Simulink 76
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.
Linearização
x = Ax + Bu
y = Cx + Du
FEI - FCA
Tutorial do Matlab & Simulink 77
2
y(2)
1 + 1
- 1
Inport 2
s +2s+1 y(1)
Planta
1
s+1
Realimentacao
Para extrair o modelo linear associado a esse diagrama entre com o comando:
» [A,B,C,D] = linmod('modelo')
A=
-1 0 1
-1 -2 -1
0 1 0
B=
0
1
0
C=
0 0 1
-1 0 0
D=
0
1
FEI - FCA
Tutorial do Matlab & Simulink 78
[num,den] = ss2tf(A,B,C,D)
• diagramas de Bode
bode(A,B,C,D)
step(A,B,C,D)
impulse(A,B,C,D)
lsim(A,B,C,D,u,t)
[A,B,C,D] = linmod('modelo',x,u,xpert,upert)
FEI - FCA
Tutorial do Matlab & Simulink 79
2
y(2)
1 + 1
- 1
Inport 2
s +2s+1 y(1)
Planta
1
s+1
Realimentacao
» y = [1; 1];
Use os índices das variáveis para indicar quais delas podem variar livremente e
quais devem ficar inalteradas:
» [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.5 S-Functions
» sys = modelo(t,x,u,flag)
onde modelo é o nome do modelo e flag é quem define qual informação vai ser
colocada de volta em sys. Por exemplo, se flag é colocado em 1, o conteúdo de
sys após a chamada da função 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 equações
diferenciais.
FEI - FCA
Tutorial do Matlab & Simulink 81
» [sizes,x0] = modelo([],[],[],0);
FEI - FCA
Tutorial do Matlab & Simulink 82
x + (x 2 − 1)x + x = 0
x1 = x1 (1 − x 22 ) − x 2
x 2 = x1
X2
- X1'
f(u) 1/s 1/s
* +
(1-x2*x2) Scope
X1
FEI - FCA
Tutorial do Matlab & Simulink 83
Esta função pode ser chamada com diversos valores de flag para retornar a
informação necessária. Os algoritmos de integração tal como o rk45, lidam
convenientemente com o flag durante a simulação. Note portanto, que seria
muito fácil você desenvolver seu próprio algoritmo de integração.
» [t,x] = rk45('vdpm',10);
» plot(t,x)
-1
-2
-3
0 2 4 6 8 10
Tempo (seg)
FEI - FCA
Tutorial do Matlab & Simulink 84
FEI - FCA
Tutorial do Matlab & Simulink 85
(s-1)
s(s+1)
Zero-Pole
Block Type
filtro LP
Dialog Strings
FEI - FCA
Tutorial do Matlab & Simulink 86
Esta string define a nova caixa de diálogo que aparecerá quando o bloco for
clicado duas vezes. Separe os dados com o símbolo "|". O primeiro dos dados é o
título da caixa de diálogo. Os demais são os nomes dos campos que apareceram
na nova caixa de diálogo. O número máximo de campos é seis.
eval('plot(1:10')
Initialization Commands
Qualquer expressão MATLAB pode ser usada. As variáveis são locais e elas não
se sobrepõem às do workspace do MATLAB.
Drawing Commands
plot(t,y,[0;max(t),[0;0])
FEI - FCA
Tutorial do Matlab & Simulink 87
Help String
dx = 0
dt
Caso contrário,
∫
dx = u ⇒ x = udt
dt
onde x é o estado, u é a entrada do integrador e lb e ub são respectivamente o
limite inferior e superior.
FEI - FCA
Tutorial do Matlab & Simulink 88
1
Mux f(u) 1
1 s
Outport
Inport Mux Fcn Integrador
u[2]*((((u[1]>lb)+(u[2]>=0))>0)*(((u[1]<ub)+(u[2]<=0))>0))
A partir do instante que você entrar com o diagrama e der um nome a ele,
a S-function passa a estar disponível no MATLAB e com o mesmo nome que
o diagrama.
FEI - FCA
Tutorial do Matlab & Simulink 89
Uma vez que a S-function foi definida, você pode simula-la diretamente
como ilustrado abaixo para uma entrada senoidal, ou então converte-la num
bloco.
FEI - FCA
Tutorial do Matlab & Simulink 90
Output trajectory
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
0 2 4 6 8 10
Tim e
Note que ao invés de 'sin', qualquer outra função, mesmo as que você
criou, poderiam ter sido usadas como argumento.
Dialog strings
Initialization commands
FEI - FCA
Tutorial do Matlab & Simulink 91
Drawing commands
plot(-1,-0.1,-1,1.1,[0,1,2,3],[0,0,1,1]);1/s
Help string
1/s
FEI - FCA
Tutorial do Matlab & Simulink 92
FEI - FCA
2. Bibliografia
[8] µ ANALYSIS & SYNTHESIS TOOLBOX - User’s Guide - The Mathworks Inc
[12] NONLINEAR CONTROL DESIGN TOOLBOX - User’s 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