Está en la página 1de 8

Laboratorio 5: Minimos cuadrados recursivos

Alvaro Andres Peña Garizao


20 de Agosto 2020

1. Objetivos
1. Obtener analiticamente las ecuaciones recursivas del metodo de minimos cuadrados.

2. Programar el algoritmo recursivo de mı́nimos cuadrados empleando Matlab

3. Validar el algoritmo recusivo de mı́nimos cuadrados para identificar los parámetos de sistemas
lineales y no lineales empleando la funcion de ajuste goodnessOfFit de Matlab

2. Ecuaciones Recursivas
Se parte que:
y[k] = F[k] θ[k]
Se propone como funcion de costo a minimizar:
n
1X T 1 −1
J[k] = (y[k] − f[k] θ[k] )2 + (θ[k] − θ[0]
T
)P[0] (θ[k] − θ[0] )
2 k=1 2

∂J
=0
∂θ
se llegan a las siguientes tres soluciones:
T
e[k] = y[k] − F[k] θ[k−1]

P[k−1] F[k] e[k]


θ[k] = θ[k−1] + T
1 + F[k] P[k−1] F[k]
T
P[k−1] F[k] F[k] P[k−1]
P[k] = P[k−1] − T
1 + F[k] P[k−1] F[k]
Donde:
1. e[k] es el error de prediccion.

1
2. θ[k] es el vector de parametros.
3. P[k] es la matriz de covariancias.
4. y[k] es la data experimental de salida.
5. F[k] es el regresor.

3. Programa Algoritmo Recursivo


Se creó en Matlab una funcion con parametros de entrada el vector regresor F[k] y el vector de
data experimental de salida y[k] . Al implementar esta funcion tenemos como salida el vector de
parametros θ[k] . A continuacion el codigo de esta función.
function [theta]=miniCuadradosRecursivo(y,F)
[n,m] = size(F);%n=numero muestras ,m= numero de parametros
%inicializacion variables
thetak_1=(zeros(1,m))’;
pk_1=eye(m,m)*10e20; %matriz de covarianzas
for(k=1:n)
for(i=1:m)
Fi(i,1)=F(k,i);
end
ek= y(k) - Fi’*thetak_1;
theta= thetak_1 + (pk_1*Fi*ek)/(1 + Fi’*pk_1*Fi);
pk=pk_1 - (pk_1*Fi*Fi’*pk_1)/(1 + Fi’*pk_1*Fi);
%Actualizacion
thetak_1=theta;
pk_1=pk;
end
end

4. Desarrollo Practica
4.1. Ejercicio 1
Se propone hallar los parametros del siguiente modelo:

y(t) = a0 + a1 t + a2 t2 + a3 t

El vector F[k] es: √


F[k] = [1 t t2 t]
Y el vector y[k] es obtenido de la data experimental de este modelo. A continuacion se visualiza el
codigo en Matlab que implementa a la funcion definida previamente, el modelo del ejercicio 1.

2
clear all
clc
%modelo a identificar y[k]= a0+a1*t+a2*t^2+a3*sqrt(t)

x = importdata(’data_1.txt’);
u = x(:,1);
y = x(:,2);
u1 = ones(size(u));
plot(u,y)
F = [u1 u u.^2 sqrt(u)];
theta = miniCuadradosRecursivo(y,F)

Los parametros obtenidos fueron:

theta =

114.0000
18.0000
-5.7000
12.5000

Para verificar que tan similar es el modelo obtenido, se utiliza la funcion goodnessOf F it(modeloe stimado, mode
Esta funcion retorna valores entre 0-1, donde 1 siginifica que la similud entre las dos funciones es
del 100 %. Para hacer uso de esta funcion primero se debe construir el modelo estimado teniendo
en cuenta los parametros obtenido con la funcion miniCuadrados(y, F ).

%validacion parametros hallados


a0= theta(1);
a1= theta(2);
a2= theta(3);
a3= theta(4);
for(i=1:length(u))
t = u(i);
y_estimado(i) = a0 + a1*t + a2*t^2 + a3*sqrt(t);
end
hold on
plot(u,y_estimado)
fit_nrmse = goodnessOfFit(y_estimado’,y,’NRMSE’)

El resultado obtenido fue:

fit_nrmse =

1.0000

3
Figura 1: Modelo Original vs Modelo Estimado

Lo cual nos indica que el modelo estimado es el mismo al modelo original. Al utilizar datos con
ruido los resultados fueron los siguientes:

theta =

114.6175
18.6106
-5.7204
11.1149

fit_nrmse =

0.9839

Como podemos ver en el resultado de la funcion de goodnessOf F it() la funcion estimada se parece
en un 98 % a la funcion orginal. Lo cual nos indica que hay un error del 2 %, un error aceptable
que nos afirma que para este sistema podemos trabajar con el modelo de estimacion.

4
Figura 2: Modelo Original vs Modelo Estimado

4.2. Ejercicio 2
Se propone hallar los parametros del siguiente modelo:

y(t) = a0 t + a1 sin(t)t + a2 cos(t) + a3 tanh(t)

El vector F[k] es:


F[k] = [t sin(t) cos(t) tanh(t)]
Y el vector y[k] es obtenido de la data experimental de este modelo. A continuacion se visualiza el co-
digo en Matlab que implementa a la funcion definida previamente miniCuadradosRecursivo(y, F )
junto con la implementacion de validacion, en el modelo del ejercicio 2.
clear all
clc
%modelo a identificar y[k]= a0*t+a1*sin(t)+a2*cos(t)+a3*tanh(t)

x = importdata(’data_2.txt’);
u = x(:,1);
y = x(:,2);
u1 = ones(size(u));
plot(u,y)
F = [u sin(u) cos(u) tanh(u)];
theta = miniCuadradosRecursivo(y,F)

5
%validacion parametros hallados
a0= theta(1);
a1= theta(2);
a2= theta(3);
a3= theta(4);
for(i=1:length(u))
t = u(i);
y_estimado(i) = a0*t + a1*sin(t) + a2*cos(t) + a3*tanh(t);
end
hold on
plot(u,y_estimado)
fit_nrmse = goodnessOfFit(y_estimado’,y,’NRMSE’)

Los resultados obtuvidos fueron:

theta =

4.4560
7.4560
-0.0890
12.3700

fit_nrmse =

1.0000

6
Figura 3: Modelo Original vs Modelo Estimado

Los resultados para data con ruido fueron los siguientes:

theta =

4.4987
7.5532
0.2675
12.2200

fit_nrmse =

0.9286

7
Figura 4: Modelo Original vs Modelo Estimado

Al igual que el ejercicio uno, al tomar la data sin ruido, la similaridad entre los modelos obtenidos
y el original es del 100 %. Para una data con ruido, la similaridad fue de aproximadamente el 93 %,
lo cual indica un error del 7 %.

5. Conclusiones
1. El metodo de minimos cuadrados recursivos a comparacion con la resolucion de Gauss es
mucho mas rapido porque este metodo no requiere de operaciones de inversion matricial, lo
cual generaba una actualizacion lenta de los parametros.

2. Otra ventaja de este metodo es que es dinamico, es decir se puede implementar en un sistema
on line.

3. La implementacion de la funcion goodnessOf F it() es un metodo muy eficiente para conocer


el error entre dos señales.