Professional Documents
Culture Documents
Solução de problemas
usando Matlab®
1
Sumário
Sistemas lineares.................................................................................................................................. 3
Problema exemplo........................................................................................................................... 3
Espaço de estados............................................................................................................................ 4
Função de transferência................................................................................................................... 8
Conversão de formas de representação............................................................................................8
Pólos, zeros, freqüência natural e fator de amortecimento............................................................. 9
Reposta a entradas padronizadas................................................................................................... 10
Resposta em freqüência................................................................................................................. 13
A ferramenta LTIview................................................................................................................... 16
Controle linear básico.................................................................................................................... 17
Controle proporcional............................................................................................................... 18
Outras configurações de controle..............................................................................................22
Ferramenta SISOtool (SISO – Single input single output)............................................................22
Simulação de sistemas de controle no Simulink................................................................................ 25
Otimização..........................................................................................................................................34
Problema exemplo ........................................................................................................................ 35
Otimização multiobjetivo.............................................................................................................. 36
Problema exemplo.....................................................................................................................37
Computação simbólica....................................................................................................................... 39
Exemplo: sistemas lineares............................................................................................................ 40
Exemplo: equações diferenciais.....................................................................................................41
2
Sistemas lineares
Ao chamar um sistema físico de linear estamos impondo sobre ele a hipótese da validade do
princípio da superposição, ou seja, para uma combinação linear das entradas, a saída é uma
combinação linear das saídas para cada entrada individualmente. Matematicamente, um sistema é
linear se suas equações de evolução dinâmica (ao longo do tempo) são difenrenciais lineares e
ordinárias.
Um sem número de sistemas de importância na engenharia são tratados como lineares. A
exemplo: circuitos analógicos, motores de corrente contínua, sistema de troca de calor e estruturas
flexíveis (metálica); outros são considerados lineares por trechos, comportam-se como lineares em
uma faixa restrita de operação, como estruturas não lineares, atuadores hidráulicos, entre outros.
Problema exemplo
3
Parâmetro Valor
J 3,4E-4 Kg.m2
L 5,03E-3 H
K 1,3E-2 N.m/A
c 6,7E-5 N.s/m
Ra 4,03
Rs 1
Espaço de estados
ẋ= A xB u
y=C xD u
em que x representa um vetor com as funções no tempo que são soluções do sistema de equações
diferenciais e é chamado vetor de estado. y é o vetor com as funções do tempo que se deseja
observar: as saídas. u, é o vetor com sinais impostos ao sistema descrito ao longo do tempo de
observação, é o vetor de entradas. As matrizes A, B, C e D contêm a representação do sistema
dinâmico.
Um resultado elementar da teoria de sistemas lineares é o de que existem infinitas matrizes
dessa forma que representam a mesma relação entre entrada e saída (o mesmo sistema), bastando
escolher vetores de estado diferentes, ajustados entre um e outro por transformações lineares.
No caso particular em que o vetor de estados é constituído de variáveis físicas, diz-se que se
possui um modelo físico nas matrizes citadas.
Para o caso do motor de corrente contínua citado um modelo físico pode ser escrito como:
[ ][ ] [ ]
− R aR s −K
[]
0 1
i˙a L L ia
̇ = K −c L V
0 0
̇ J J 0
0 1 0
[]
ia
y=[ 0 1 0 ] [ 0 ] V
Dessa forma tem-se a entrada representada por V, a saída pela velocidade angular e o vetor
de estados dados pela seqüência corrente, velocidade e posição. A saída observada, a velocidade
angular, é definida pela forma como foi escrita a matriz C.
No Matlab, sugere-se declarar o modelo como:
4
>> J = 3.4e-4;
>> c = 6.7e-5;
>> K = 1.3e-2;
>> L = 5.03e-3;
>> R = 5.03;
>> A = [-R/L -K/L 0; K/J -c/J 0; 0 1 0];
>> B = [1/L; 0; 0];
>> C = [0 1 0];
>> D =[0];
Como já dito, há outras formas possíveis de representar a mesma relação matemática entre a
entrada e a saída do sistema, porém com interpretações diferentes para os estados. Qualquer uma
dessas representações pode ser usada para calcular, a cada instante de tempo desejado, a evolução
dos estados no tempo usando os método usuais de integração direta. Dadas as matrizes, isso seria
conseguido definindo uma função e usando um método como o ode45. Para tanto, é necessário
também definir uma entrada, por exemplo senoidal.
function u=entrada(t)
u=sin(t);
function z = f_motor(t,x);
global A B
u = entrada(t);
z = A*x+B*u;
Note que as matrizes, usadas recorrentemente dentro e fora da função, foram definidas como
variáveis globais. A figura abaixo mostra as respostas temporais do sistema, ou seja, mostra a
evolução no tempo da corrente de armadura, da velocidade angular e da posição angular. Observa-
se que foi calculada a evolução temporal de todos os estados.
>> u = entrada(t);
>> figure, plot(t,y,t,u);
>> legend('Corrente de armadura [A]' , 'Velocidade Angular [rad/s]' , 'Posição angular [rad]' ,
'Tensão de alimentação [V]');
5
30
C o rre n te d e a rm a d u ra [A ]
V e lo c id a d e A n g u la r [ ra d / s ]
P o s iç ã o a n g u la r [ ra d ]
25
T e n s ã o d e a lim e n t a ç ã o [ V ]
20
15
10
-5
-1 0
0 1 2 3 4 5 6 7 8 9 10
O Matlab contém estruturas de dados específicas para lidar com sistemas lineares
representados nesse padrão. Um sistema linear é declarado numa estrutura de Matlab que mantém a
representação em espaço de estados com o comando:
>> p = ss(A,B,C,D)
>> t = 0:0.1:10;
>> u = sin(t);
>> x0 = [0;0;0];
>> figure, lsim(p,u,t,x0)
Nota-se que é visualizada apenas a saída selecionada pela matriz C do modelo no espaço de
estados. Caso seja de interesse calcular a evolução temporal de todos os estados, bastaria redefinir a
matriz C, criar sua nova representação no espaço de estados e então utilizar novamente o comando
lsim.
Verifica-se a nova resposta na figura com as três saídas. Assim, fica evidente a importância
do conhecimento da posição de cada estado dentro do vetor de variáveis de estado para a correta
observação da saída desejada.
6
L in e a r S im u la t io n R e s u lt s
12
10
4
A m p lit u d e
-2
-4
-6
-8
0 1 2 3 4 5 6 7 8 9 10
T im e ( s e c )
L in e a r S im u la t io n R e s u lt s
1
0 .5
T o : O u t( 1 )
-0 .5
-1
20
15
10
T o : O u t( 2 )
A m p lit u d e
-5
-1 0
40
30
20
T o : O u t( 3 )
10
-1 0
-2 0
0 1 2 3 4 5 6 7 8 9 10
T im e ( s e c )
7
Os gráficos gerados a partir do comando lsim podem ser editados clicando-se o botão direito
do mouse e selecionando as opções desejadas.
Caso o interesse seja armazenar os valores no tempo da saída em um vetor, ao invés de
traçar um gráfico, basta fazer o seguinte:
>> y = lsim(p,u,t,x0);
Função de transferência
s K / JL
=
V s
s² Ra Rs c
L
s
J c Ra R s K 2 .
JL
JL
>> np = [K/(J*L)];
>> dp =[1 ((Ra+Rs)/L+c/J) c*(Ra+Rs)/(J*L)+K^2/(J*L)];
>> H = tf(np,dp)
>> s = tf('s');
>> H = (K/(J*L))/(s^2 + ((Ra+Rs)/L+c/J)*s + c*(Ra+Rs)/(J*L) + K^2/(J*L))
A variável criada (H) é também um sistema linear, porém representado na forma de função
de transferência. Os comandos de manipulação, caracterização e simulação de sistemas lineares
que serão vistos a seguir aplicam-se tanto a uma quanto a outra forma de representação.
8
>> sys_fisico = ss(A,B,C,D);
>> [num,den]=ss2tf(a,b,c,d);
>> H=tf(num,den)
>> [num,den]=ss2tf(A,B,C,D);
>> H=tf(num,den)
É importante observar que as matrizes a, b, c e d fornecidas pelo comando tf2ss não são
iguais àquelas deduzidas a partir do modelo físico (A, B, C e D). Isso ocorre porque a
respresentação de um sistema no espaço de estados não é única e a representação padrão do Matlab
não é, e nem poderia ser, igual à representação baseada no modelo físico (intuitivamente mais
óbvia). É possível checar que os sistemas descritos pelas difenentes matrizes no espaço de estados
são os mesmos. Para isso, basta verificar que os autovalores da matriz A (e consequentemente os
pólos do sistema) são os mesmos para ambas as representações:
>> eig(A)
>> eig(a)
Os pólos e zeros de um sistema linear podem ser obtidos diretamente a partir da função de
transferência do mesmo, calculando-se as raízes dos polinômios do denominador e do numerador,
respectivamente:
Os pólos podem ser obtidos através da matriz A do sistema no espaço de estados pois são
iguais aos autovalores dessa matriz:
9
P o le - Z e r o M a p
1
0 .8
0 .6
0 .4
0 .2
I m a g in a r y A x is
- 0 .2
- 0 .4
- 0 .6
- 0 .8
-1
-1 0 0 0 -9 0 0 -8 0 0 -7 0 0 -6 0 0 -5 0 0 -4 0 0 -3 0 0 -2 0 0 -1 0 0 0
R e a l A x is
Conhecidos os pólos e os zeros de um dado sistema, além de seu ganho estático (ganho em
regime permanente, ou seja, s = 0 na função de transferência), pode-se definir um outra forma de
representação de sistemas lineares:
>> k=dcgain(H);
>> z=roots(np);
>> p=roots(dp);
>> zp = zpk (z,p,k)
Para um sistema definido em uma variável de uma certa estrutura (função de transferência
ou espaço de estados) é possível calcular a freqüência natural e o fator de amortecimento associados
a cada um dos pólos:
>> damp(H)
>> damp(sys_fisico)
>> [wn,z,polos]=damp(H)
Uma vez com o sistema definido em uma variável, as repostas a entradas notáveis da teoria
de sistemas lineares, usadas para caracterizar o compostamento do sistema, são obtidas
imediatamente. Por exemplo, a resposta ao degrau:
>> step(p)
10
>> step(H)
Com esse comando é traçado o gráfico da resposta ao degrau do sistema. Uma das vantagens
da utilização da função step é a possibilidade de avaliar diretamente no gráfico os parâmetros da
resposta ao degrau (sobressinal, tempo de estabilização, tempo de subida e valor de regime). Para
isso, basta pressionar o botão direito do mouse, selecionar a opção characteristics e em seguida
selecionar os parâmetros desejados (Peak Response, Settling Time, Rise Rime, Steady State).
Ou ainda, pode-se desejar obter os valores no tempo da resposta e não traçar o gráfico:
Assim é possível armazernar os valores desejados para cálculos futuros ou para traçar
gráficos de forma mais conveniente. Outro exemplo clásssico é a resposta ao impulso:
>> impulse(p)
>> impulse(s)
O gráfico gerado pela função impulse também pode ser editado clicando-se o botão direito
do mouse.
11
Im p u ls e R e s p o n s e
8
7 S y s te m : H
P e a k a m p lit u d e : 7 . 5 2
A t t im e ( s e c ) : 0 . 0 3 7 3
6
5
A m p lit u d e
1 S y s te m : H
S e t t lin g T im e ( s e c ) : 1 3 . 3
0
0 2 4 6 8 10 12 14 16 18 20
T im e ( s e c )
S te p R e s p o n s e
30
S y s te m : H
S e t t lin g T im e ( s e c ) : 1 3 . 2
25
S y s te m : H
F in a l V a lu e : 2 5 . 7
S y s te m : H
20 R is e T im e ( s e c ) : 7 . 4 3
A m p lit u d e
15
10
0
0 2 4 6 8 10 12 14 16 18 20
T im e ( s e c )
12
Resposta em freqüência
H j =Me j
onde M é o módulo da função de transferência senoidal (ou relação de amplitude entre a entrada e a
saída) e φ é a defasagem (ou diferença de fase entre a entrada e a saída). Ressalta-se que qualquer
número complexo pode ser escrito em função um módulo e uma fase.
O diagrama de Bode é constituído de dois gráficos: um é o gráfico do módulo em dB (20 log
|H(jω)|) de uma função de transferência senoidal; o outro é o gráfico do ângulo de fase (em graus).
Ambos são traçados em relação à freqüência em escala logarítmica. Ou seja, os gráficos são
traçados a partir do cômputo dos valores do módulo e da fase para toda uma faixa de freqüências.
A principal vantagem de se utilizar o diagrama de Bode é que a multiplicação dos módulos
pode ser convertida em soma. Além disso, as curvas podem ser traçadas a partir de aproximações
assintóticas simples. A expansão da faixa de baixas freqüências pelo uso da escala logarítmica de
freqüência é muito vantajosa, visto que as características dos sistemas em baixas freqüências, na
prática, são as mais importantes.
É muito simples obter o diagrama de Bode no Matlab. O código em Matlab a seguir mostra
duas formas de se obter graficamente o diagrama utilizando a função bode.
>> w = 0:0.01:10e4;
>> [mag,phase] = bode(H,w);
>> magdb = zeros(1,length(mag)); % ajuste de dimensão
>> phase_mod = zeros(1,length(phase)); % ajuste de dimensão
>> magdb(1,:) = 20*log10(mag(1,1,:));
>> phase_mod(1,:) = phase(1,1,:);
13
B o d e D ia g r a m
50
0
M a g n it u d e ( d B )
-5 0
-1 0 0
-1 5 0
0
-4 5
P h a s e (d e g )
-9 0
-1 3 5
-1 8 0
-2 -1 0 1 2 3 4 5
10 10 10 10 10 10 10 10
F r e q u e n c y ( r a d /s e c )
14
50
-5 0
-1 0 0
-1 5 0
-2 0 2 4
10 10 10 10
-5 0
-1 0 0
-1 5 0
-2 0 0
-2 0 2 4 6
10 10 10 10 10
Para analisar a estabilidade de um sistema linear pode ser utilizado o diagrama de Nyquist,
que é o lugar geométrico de H(jω) no plano complexo à medida que ω varia de -∞ a +∞. Νo
gráfico é possível perceber a marcação do ponto -1 no eixo real. Esse ponto é fundamental para a
análise da estabilidade do sistema. Sem entrar em detalhes, nesse caso percebe-se que o sistema é
estável porque o ponto -1+j0 não é envolvido pela curva fechada que representa o lugar geométrico
de H(jω).
15
N y q u is t D ia g r a m
15
10
5
I m a g in a r y A x is
-5
-1 0
-1 5
-5 0 5 10 15 20 25 30
R e a l A x is
A ferramenta LTIview
>> ltiview
Usando o menu Edit – Plot configurations escolhe-se quatro gráficos por janela e as opções
de resposta seguintes na ordem: resposta ao degrau, resposta ao impulso, diagrama de bode em
magnitude e diagrama de Nyquist. A configuração e as respostas obtidas são mostradas nas duas
figuras abaixo.
16
Controle linear básico
17
Entrada Planta Saída
Controlador
em que o controlador recebe o sinal de erro, ou seja, a diferença entre a entrada e a saída da planta.
Controle proporcional
18
Para se obter a malha fechada como variável usa-se o comando:
>> mf = feedback(p,32.9)
Nesse caso, a variável recém criada é um sistema linear que representa o motor original com
o controlador proporcional. Nota-se que esse controlador está inserido no ramo da realimentação
(conforme a primeira figura dos diagramas de controle). Podem ser traçados sua resposta ao
impulso e mapa de pólos e zeros para verificar as características do novo sistema com a inclusão do
controlador projetado.
>> step(mf)
>> pzmap(mf)
19
A posição atingida ao final das variações é próxima de 0,03, distante do valor do degrau (1).
Esse erro pode ser corrigido multiplicando a entrada do sistema por um valor de ajuste.
No mapa de pólos e zeros, pólos são representados por X e zeros por círculos. São
visualizados para esse caso, três pólos (um na origem e um par complexo conjugado com parte real
-500 e imaginária 16,9) e um zero na origem.
Verificou-se que há uma difenrença na parte imaginária, que foi definida anteriormente
como sendo 15,8. Isso surgiu devido à forma do diagrama, que possui uma mudança abrupta nessa
20
região, ou seja, é apenas uma erro devido à forma como é feita a interpolação dos pontos do gráfico.
Uma outra abordagem seria utilizar o modelo com a saída em posição e não em velocidade.
O diagrama para esse caso, depois de aproximado por zoom:
21
A figura mostra um sistema de elevada freqüência natural (com oscilações rápidas)
comparativamente com o primeiro caso.
Usando o clique direito pode-se marcar características padrão da resposta do sistema, como
o tempo de estabilização ou o valor de regime permanente.
Outros tipos de controlador e configurações são usadas. O primeiro passo nesse sentido é
supor um controlador que não é estático (um ganho) mas um sistema também dinâmico. Os mais
comuns são os controladores PID e avanço-atraso. Seus médotos de projeto podem ser executados
em Matlab usando os comandos citados e testando a resposta.
O projeto de sistemas de controle pode fazer uso da janela de funções acessada por:
>> sisotool
Acessa-se o menu File – Import para obter a variável com os dados do sistema. Ou, já
informando o sistema a ser analisado:
>> sisotool(H)
22
Na janela que se abre na parte superior direita há um diagrama de blocos indicando qual a
estrutura de controle usada. Clicando sobre o botão FS as posições dos blocos são alteradas. Nota-se
que são considerados os seguintes tipos de bloco: a planta (G), o sensor (H – caso precise ser levado
em conta no modelo), um pré-filtro da entrada (F) e o controlador (C).
A função do sensor tem o objetivo de modelar a dinâmica do transdutor utilizado para medir
a saída do sistema quando da modelagem de uma planta real. O pré-filtro simula a característica de
limitação em banda de freqüência do sinal que se pode impor à planta e ao controlador. No caso
aqui apresentado supõe-se que o sensor mede perfeitamente, sem atraso e sem ganho a saída e que a
entrada não possuirá componentes em freqüência que não possam ser realmente impostas à planta e
ao controlador. Ou seja, F = H = 1.
À esquerda mostra-se a forma do controlador a ser ajustada (current compensator). Abaixo,
os três gráficos padrão são o diagrama do lugar das raízes e os dois gráficos do diagrama de Bode.
O SISOtool se aplica apenas a sistemas com uma entrada e uma saída (como diz o nome em
inglês). Sua operação consiste em escolher uma forma no domínio de Laplace para o controlador e
ajustar seus parâmetros variando características requeridas nos gráficos de resposta mostrados.
Usando o modelo do motor com saída em velocidade e a configuração de controle fornecida
pela janela inicial, clica-se sobre a caixa de edição do controlador.
Alí pode-se escolher a função de transferência desejada acrescentado ou retirando pólos e
zeros. Para adicionar pólos ou zeros reais ou imaginários basta clicar no botão correspondente e
digitar o valor inicial desejado. Para excluir, marca-se a opção delete.
23
Sugere-se incluir um pólo e um zero reais e negativos. Essa configuração corresponde aos
controladores em avanço ou em atraso. Ou seja, um controlador com a seguinte função de
transferência:
s z
C s=K .
s p
24
Os pólos e zeros do controlador podem ser acrescntados ou retirados também usando o
clique direito sobre um dos gráficos e add pole/zero ou delete pole/zero. Os casos de derivador
(differentiator) ou integrador (integrator) presentes por exemplo em um controlador PID podem ser
acrescentador diretamente.
Outros gráficos podem ser mostrados na janela do SISOtool usando o menu View e
escolhendo o gráfico ou dado a ser mostrado. No menu Analysis pode-se acessar a resposta do
sistema em malha fechada invocando o LTIview, por exemplo, a resposta ao degrau é obtida em
uma nova janela em Analysis – Rejection of step disturbance.
25
duas hipóteses foram simuladas. Para tanto, utilizou-se o mesmo ganho proporcional (Kp) projetado
anteriormente, ou seja, um ganho de 32,9.
A figura a seguir mostra os dois esquemas de controle proporcional utilizados para
simulação.
Para a simulação, é utilizada como entrada uma função do tipo degrau unitário. Esse tipo de
entrada é gerada a partir do bloco Step disponível na opção Sources da biblioteca de blocos. Ao ser
inserido na área de criação, o bloco pode ser editado clicando-se duas vezes sobre o mesmo. Aqui o
valor do degrau é mantido unitário, mas caso fosse necessário poderia ser escolhido uma
“amplitude” diferente de 1 e também poderia ser alterado o instante no qual o degrau é aplicado.
26
O sistema sob controle (motor CC) é definido a partir de seu modelo de estados (matrizes A,
B, C e D) utilizando-se o bloco State-Space encontrado na opção Continuous. É necessário duplo
clique sobre a caixa inserida para que se defina as matrizes de estado desejadas. Pode-se digitar as
matrizes diretamente nos espaços disponíveis ou apenas digitar nos espaços adequados as variáveis
já calculadas e disponíveis na área de comando do Matlab, conforme mostra a figura a seguir.
27
A simulação das duas configurações de controle proporcional, Kp no ramo direto e Kp no
ramo inverso, são mostradas, respectivamente, nas duas figuras a seguir. Observa-se que os
resultados são os mesmos obtidos nas simulações anteriores, quando não foi utilizado o Simulink.
28
Para realizar o controle de posição, o procedimento é o mesmo adotado para o controle de
velocidade. Para tanto, basta alterar a matriz C do sistema no espaço de estados para [0 0 1], o que
pode ser feito diretamente na área de trabalho ou no próprio bloco State-Space. Utiliza-se o mesmo
ganho proporcional projetado anteriormente, ou seja Kp = 11,8. Novamente são utilizadas as
configurações com Kp no ramo direto e Kp no ramo inverso. Os diagramas são mostrados nas
figuras a seguir.
29
A simulação dos dois sistemas de controle pode ser vista nas duas figuras a seguir. A
primeira figura é resultado da aplicação de Kp no ramo direto e a segunda da aplicação de Kp no
ramo inverso.
Outro tipo de controlador projetado anteriormente, com o auxílio da ferramenta SISOtool,
foi um controlador em avanço (ou em atraso) de fase. Para inserir um controlador desse tipo, basta
escolher a estrutura Zero-Pole encontrada na opção Continuous, e então definir os pólos, os zeros e
o ganho desejados para realizar o controle em avanço (ou atraso). A figura a seguir mostra o
esquema desse tipo de controlador.
30
Também é possível definir o sistema a ser simulado diretamente a partir de sua função de
transferência. Para isso basta definir seu diagrama de blocos, o qual pode ser facilmente construído
no Simulink, conforme mostrado na figura abaixo. Nesse caso não são mostrados os valores dos
ganhos, os quais são tirados diretamente da função de transferência entre alimentação e velocidade
(motor CC).
31
Nota-se novamente a existência de um bloco somador, Sum, o qual está disponível na opção
Commonly Used Blocks. Esse bloco pode ser editado conforme os demais. Assim, é possível alterar
o número de entradas e os sinais das mesmas.
Há ainda blocos integradores, que são os responsaveis por integrar a derivada da posição
para fornecer a posição. Esses blocos estão disponíveis na opção Continuous com o nome
Integrator.
É possível criar subsistemas selecionando certos blocos, clicando-se o botão direito e
selecionando a opção Create Subsystem. Selecionando todo o subsistema correspondente ao motor
de corrente contínua, será criado um subsistema conforme mostrado na figura a seguir.
32
Também é possível fazer um controle proporcional conforme os anteriores, bastando para
isso utlizar o subsistema gerado a partir do diagrama de blocos, os ganhos e o somador para a
realimentação. Um controlador proporcional (para a velocidade) inserido no ramo direto, com o
mesmo Kp já projetado ( Kp = 32,9).
A figura com o resultado da simulação pode ser observada abaixo. Percebe-se que os
33
resultados são os mesmos já obtidos quando o sistema foi definido com o bloco State-Space.
Otimização
O problema matemático da otimização é o de encontrar, para uma dada função, seu valor
mínimo (ou máximo) e o ponto ou intervalo em que ele ocorre. Isso pode ser escrito como:
min f x ou max f x .
x x
34
• função objetivo linear e restrições lineares – problema de programação linear, resolvido
usando o algoritmo simplex ou um método de ponto interior (para muitas variáveis,
centenas);
• função objetivo quadrática e restrições lineares – algoritmo de programação quadrática;
• função objetivo não linear e restrições não lineares – programação quadrática seqüêncial,
método da penalidade, lagrangiano aumentado, métodos de ponto interior;
• função objetivo não linear, sem restrições – método de Newton;
• função objetivo descontínua ou “caixa preta” (sem informação das derivadas nem
aproximações) – método de Nelder-Mead (busca), algoritmo genéticos;
• variável de decisão restrita a ser um número inteiro – programação inteira; no caso de a
variável além de inteira ser binária tem-se a programação inteira binária.
O Matlab possui implementações para todas essas classes de problemas, em alguns casos, as
funções identificam a ordem de grandeza do problema e trocam de algoritmo ou modo de operação
dependendo do tamanho do problema.
Um problema historicamente anterior ao de otimização porém que pode ser tratado por
algoritmos semelhantes é o de resolver um sistema de equações não lineares, ou seja, encontrar x tal
que h(x) = 0. Por essa razão são incluídos no mesmo pacote de otimização no Matlab.
A funções apropriadas para lidar com esses problemas são mostradas na tabela abaixo.
Todavia, não esgotam o universo de funções de otimização do Matlab:
Problema exemplo
x 1 x 2−x 1− x 21,50
sujeito a .
x1 x 2−10
Convertendo a segunda restrição para a forma menor do que zero, podem-se definir duas
funções no Matlab para representar a função objetivo e as restrições.
35
A função das restrições, pelo padrão da método a ser usado (fmincon) deve fornecer
também restrições de igualdade como matriz vazia caso não existam.
function z = fobj(x);
% Função objetivo.
Z = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
Esse é um problema de duas variáveis. Uma chamada possível para a função fmincon,
supondo um ponto inicial de busca da solução [-1, 1] é
x0 = [-1,1];
options = optimset('LargeScale','off');
[x, fval] = ...
fmincon(@fobj,x0,[],[],[],[],[],[],@confun,options)
fval =
0.0236
A restrições foram quase exatamente satisfeitas (quase nulas), como pode ser verificado
avaliando-as:
>> [c,ceq] = confun(x)
c=
1.0e-007 *
-0.9032
0.9032
ceq =
[]
Otimização multiobjetivo
Todos esses problemas envolvem uma função objetivo escalar, ou seja, apenas um objetivo
de otimização. Uma extensão da otimização está em imaginar que várias funções devem ser
otimizadas simultaneamente. Nesse ponto entra a otimização multiobjetivo. A abordagem mais
36
comum é a de definir uma função que combina de forma monotônica todas as funções envolvidas e
minimizar essa função definida. Outra abordagem é a de obter computacionalmente o que se chama
se superfície de Pareto: o conjunto dos pontos para os quais há pelo menos uma das funções
objetivos otimizada sem que se possa melhorar outra função sem piorar alguma que já é ótimo.
O Matlab não implementa, até a presente versão, métodos de otimização que produzem
automaticamente superfícies de Pareto, isso precisaria ser programado pelo usuário. No entanto, a
primeira maneira citada de lidar com o problema pode ser usada.
Problema exemplo
1,5
H s= 3 2
,
50s 43s 3s1
em cuja entrada existam duas não linearidades: um limite de saturação e um limite no slew rate, que
é o tempo mínimo para uma rampa de 1 V.
Coloca-se um controlador PID na entrada com parâmetros iniciais provisórios inicializados
no espaço de trabalho e constrói-se o modelo no Simulink.
Coloca-se um degrau como entrada no sistema e o sinal de erro entre referência e saída é
alimentado no controlador. Dentro do bloco do controlador colocam-se variáveis como valores dos
parâmetros: Kp, Kd e Ki.
O diagrama em Simulink será então usado para simular repetidamente e obter a resposta do
sistema variando os valores dos parâmtros do controlador até atingir valores ótimos no sentido de
minimizar a soma dos quadrados dos erros entre a entrada em degrau e a saída. Aqui entra o
conceito de multiobjetivo, pois a idéia é minimizar todos os erros simultaneamente, o critário
adotador é o de minimizar a soma dos quadrados de todos eles.
Basta definir em Matlab uma função que invoca o diagrama e o simula dados os parâmetros
37
do controlador. A sugestão aqui é a de usar uma função que produzirá os parâmetros ótimos pela
seqüência: inicialização e chamada da função de minimização de quadrados.
Sugere-se também, por organização, definir a função que produz o sinal de erro a ser
minimiado dentro da função geral.
function F = erro(pid)
% Produz o sinal de erro entre a saída e o degrau unitário.
Kp = pid(1);
Ki = pid(2);
Kd = pid(3);
% Parâmetros de simulação
simopt = simset('solver','ode5','SrcWorkspace','Current');
% Simulação
[tout,xout,yout] = sim('optsim',[0 100],simopt);
% Erro entre saída e degrau
F = yout-1;
end
end
>> Kp
Kp =
0.6300
>> Kd
Kd =
1.9688
>> Ki
Ki =
0.0504
38
Computação simbólica
Para definir uma variável simbólica representada por uma string lexicamente idêntica ao seu
nome pode-se usar o atalho (variável x escrita como x)
>> syms x
Operação Função
Agrupar termos comuns collect
Expansão de polinômios expand
Fatorar factor
Separar numerador e numden
denominador
Procurar forma mais curta de simple
escrever
Simplificação simplify
Reescrever em termo de sub- subexpr
expressões
Ainda, muitas funções numéricas são sobrecarregadas no pacote simbólico, pode ser
aplicadas com a mesma chamada sobre variáveis numéricas ou simbólicas, outras são exclusivar do
pacote, algumas mais comuns:
39
Operação Função
Derivada diff
Integral int
Matriz jacobiana jacobian
Limite limit
Expressão para uma série symsum
Série de Taylor taylor
Determinante det
Autovalores e autovetores eig
Matriz inversa inv
Triângularização superior de triu
matrizes
Triângularização inferior de tril
matrizes
Valores singulares svd
Exponencial matricial expm
Composição de funções compose
Solução de equações solve
Função inversa finverse
Solução de equação diferencial dsolve
Gráfico de função simbólica ezplot
Ainda, todos os operadores do Matlab matém sua validade para variáveis simbólicas, tais
como /, *, .*, ./, \,.
>> syms a b c d r s
>> A = [a b; c d];
>> y = [r; s];
>> x = A\y
x=
-(b*s-r*d)/(a*d-c*b)
(a*s-c*r)/(a*d-c*b)
40
Exemplo: equações diferenciais
ans =
-5/7+1/2*exp(-5/4*t)*(50/21*sin(1/4*3^(1/2)*t)*3^(1/2)+10/7*cos(1/4*3^(1/2)*t))
>> resp.y
ans =
10/7+exp(-5/4*t)*(20/21*sin(1/4*3^(1/2)*t)*3^(1/2)-10/7*cos(1/4*3^(1/2)*t))
O que produziria respostas em função das constantes e com x como variável independente.
41