Escolar Documentos
Profissional Documentos
Cultura Documentos
Instituto Tecnológico
Junho - 2009
Este roteiro tem por objetivo mostrar a implementação do algoritmo de
mínimos quadrados recursivo (MQR) no ambiente MATLAB, considerando
parâmetros de planta que variam com o tempo. (Mudança no ponto de
operação)
I – Considerações Iniciais
E representado por:
(II.1)
(II.2)
(II.3)
(II.4)
(II.6)
(II.7)
(II.8)
%---------------------Parte 1----------------------------
clear; %limpa o workspace
close all; %fecha todas as figuras abertas
%parâmetros da "planta";
a1o=-1.7896; a2o=0.9590; boo=0.0853; b1o=0.0841;
P=1000*eye(4,4); % valor inicial da matriz de covariância.
tamanho = 500; %comprimento dos vetores de entrada/saída/iterações
nit=tamanho; %numero de iterações
U=zeros(tamanho,1); %vetor de entrada
%---------------------Parte 2----------------------------
%condições iniciais do sistema (K=0)
yk=0; %saída no instante K
yk_1=0; %saída no instante (K-1)
yk_2=0; %saída no instante (K-2)
uk=0; %entrada no instante K
uk_1=0; %entrada no instante (K-1)
uk_2=0; %entrada no instante (K-2)
ek=0; %erro no instante K
a1=zeros(tamanho,1); %vetor com todos os valores de "a1" com variação
a2=zeros(tamanho,1); %vetor com todos os valores de "a2" com variação
bo=zeros(tamanho,1); %vetor com todos os valores de "bo" com variação
b1=zeros(tamanho,1); %vetor com todos os valores de "b1" com variação
%---------------------Parte 3----------------------------
%estimador de MQR
for t=3:nit;
yk_2=yk_1;
yk_1=yk;
yk= -a1(t)*yk_1-a2(t)*yk_2+bo(t)*uk_1+b1(t)*uk_2;
Y(t)=yk;
yhat= PHI'*theta_hat;
Yhat(t)=yhat;
% (4) : Calcula o valo do erro de estimação no instante k;
ek=yk-yhat;
denominador= 1 + PHI'*P*PHI;
K=(1/denominador)*P*PHI;
P= P - K*(P*PHI)';
TRACOP(t)= trace(P);
-1.4317 %MATLAB
0.7672 a1(tamanho)
a2(tamanho)
0.0682
bo(tamanho)
0.0673 b1(tamanho)
THETA(tamanho,:)
-1.6772
0.8922
0.0779
0.0723
tempo = 0.050*[1:tamanho];
plot(tempo,a1,’b’)
hold
plot(tempo,THETA(:,1),'r')
XLABEL('Parâmetro a1 real (azul) e estimado (vermelho)')
YLABEL('Valor do Parâmetro')
-0.2
-0.4
-0.6
Valor do Parâmetro
-0.8
-1
-1.2
-1.4
-1.6
-1.8
0 5 10 15 20 25
Parâmetro a1 real (azul) e estimado (vermelho)
0.3
0.25
Erro absoluto
0.2
0.15
0.1
0.05
0
0 50 100 150 200 250 300 350 400 450 500
Amostras
plot(abs(Y-Yhat))
XLABEL('Amostras')
YLABEL('Erro absoluto')
(II.9)
(II.10)
%---------------------Parte 3----------------------------
%estimador de MQR
lambda = 0.95;
for t=3:nit;
yk_2=yk_1;
yk_1=yk;
yk= -a1(t)*yk_1-a2(t)*yk_2+bo(t)*uk_1+b1(t)*uk_2;
Y(t)=yk;
yhat= PHI'*theta_hat;
Yhat(t)=yhat;
ek=yk-yhat;
P= (P - K*(P*PHI)') / lambda;
TRACOP(t)= trace(P);
tempo = 0.050*[1:tamanho];
plot(tempo,a1,’b’)
hold
plot(tempo,THETA(:,1),'r')
XLABEL('Parâmetro a1 real (azul) e estimado (vermelho)')
YLABEL('Valor do Parâmetro')
-0.2
-0.4
-0.6
Valor do Parâmetro
-0.8
-1
-1.2
-1.4
-1.6
-1.8
0 5 10 15 20 25
Parâmetro a1 real (azul) e estimado (vermelho)
0.3
0.25
Erro absoluto
0.2
0.15
0.1
0.05
0
0 50 100 150 200 250 300 350 400 450 500
Amostras
plot(abs(Y-Yhat))
XLABEL('Amostras')
YLABEL('Erro absoluto')
plot(TRACOP)
XLABEL('Amostras')
YLABEL('Traço da matriz de covariância P')
4500
4000
3000
2500
2000
1500
1000
500
0
0 50 100 150 200 250 300 350 400 450 500
Amostras
Para este caso, pode-se plotar o traço da matriz P (covariância) que será
como a Fig. 7:
307
x 10
9.6872
Valor do Traço de P
-0.131
-9.9492
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Amostras 4
x 10
plot(TRACOP)
XLABEL('Amostras')
YLABEL('Valor do Traço de P')
-1000
Valor do Parâmetro
-2000
-3000
-4000
-5000
-6000
0 100 200 300 400 500 600 700 800 900 1000
Parâmetro a1 real (azul) e estimado (vermelho)
%---------------------Parte 1----------------------------
clear; %limpa o workspace
close all; %fecha todas as figuras abertas
%parâmetros da "planta";
a1o=-1.7896; a2o=0.9590; boo=0.0853; b1o=0.0841;
P=1000*eye(4,4); % valor inicial da matriz de covariância.
tamanho = 20000; %comprimento dos vetores de entrada/saída/iterações
nit=tamanho; %numero de iterações
U=zeros(tamanho,1); %vetor de entrada
Y=zeros(tamanho,1); %vetor de saída "real"
Yhat=zeros(tamanho,1); %vetor de saída estimado
yhat=0; %saída estimada no instante K
PHI=zeros(4,1); %vetor de medidas
THETA=zeros(tamanho,4); %vetor de parâmetros estimados
theta_hat= zeros(4,1); %valor inicial do vetor de parâmetros (instante K=0)
K=zeros(4,1); %ganho do estimador
TRACOP=zeros(tamanho,1); %matriz traço de P
%---------------------Parte 2----------------------------
%condições iniciais do sistema (K=0)
yk=0; %saída no instante K
yk_1=0; %saída no instante (K-1)
yk_2=0; %saída no instante (K-2)
uk=0; %entrada no instante K
uk_1=0; %entrada no instante (K-1)
uk_2=0; %entrada no instante (K-2)
ek=0; %erro no instante K
%---------------------Parte 3----------------------------
%estimador de MQR
lambda = 1.0;
for t=3:nit;
% (1) : "mede" os valores de entrada e saída da planta;
uk_2=uk_1;
uk_1=uk;
uk=U(t);
yk_2=yk_1;
yk_1=yk;
yk= -a1(t)*yk_1-a2(t)*yk_2+bo(t)*uk_1+b1(t)*uk_2;
Y(t)=yk;
yhat= PHI'*theta_hat;
Yhat(t)=yhat;
ek=yk-yhat;
P= (P - K*(P*PHI)') / lambda;
if mod(t,100)==0 %a cada 1000 iteracoes, reinicia P
P=1000*eye(4,4); %pode-se mudar este valor
end
TRACOP(t)= trace(P);
-0.2
-0.4
-0.6
Valor do Parâmetro
-0.8
-1
-1.2
-1.4
-1.6
-1.8
0 100 200 300 400 500 600 700 800 900 1000
Parâmetro a1 real (azul) e estimado (vermelho)
0.35
0.3
0.25
Erro absoluto
0.2
0.15
0.1
0.05
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Amostras 4
x 10
tempo = 0.050*[1:tamanho];
plot(tempo,a1)
hold
plot(tempo,THETA(:,1),'r')
XLABEL('Parâmetro a1 real (azul) e estimado (vermelho)')
YLABEL('Valor do Parâmetro')
plot(abs(Y-Yhat))
XLABEL('Amostras')
YLABEL('Erro absoluto')