Least square parameter estimation of MIMO ARX model
    17 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
I know that the ARX function in Matlab can estimate the parameters of the multi input multi output ARX model. 
But I can't find the estimated main program when I open ARX function. 
I want to find a program to estimate the parameters of MIMO ARX model with least square method.
 I came to ask for help.
0 comentarios
Respuestas (1)
  Ivo Houtzager
      
 el 22 de Sept. de 2021
        
      Editada: Ivo Houtzager
      
 el 22 de Sept. de 2021
  
      Example script to obtain the parameters of a MIMO ARX model (VARX) using least squares.
N = 1000; % number of samples
p = 5; % past window of VARX model
directfeedthrough = 1; % VARX model includes direct feedthrough
r = 2; % number of inputs
l = 3; % number of outputs
u = randn(r,N); % input data
y = randn(l,N); % output data
% concatenate the past data vectors
m = r+l;
z = [u; y];
Z = zeros(p*m,N-p);
for i = 1:p
    Z((i-1)*m+1:i*m,:) = z(:,i:N+i-p-1);
end
% solve VARX problem
Y = y(:,p+1:N);
U = u(:,p+1:N);
if directfeedthrough
    Z = [Z; U];
end  
VARX = Y/Z; % least squares estimate
% convert solution to idpoly object 
A = cell(l,l);
B = cell(l,r);
if directfeedthrough
    VARX0 = [VARX eye(l)];
else
    VARX0 = [VARX zeros(l,r) eye(l)];
end
for i = 1:l
    for j = 1:l
        A{i,j} = fliplr(VARX0(i,r+j:m:m*p+r+j));
    end
    for k = 1:r
        B{i,k} = fliplr(VARX0(i,k:m:m*p+k));
    end
end
Ts = 1; % sample time
E = Y - VARX*Z;
NoiseVariance = cov(E');
sys = idpoly(A,B,[],[],[],NoiseVariance,Ts); % MIMO ARX model object
For larger models, the least squares problem can become ill conditioned and would require regularization to get good estimate. If regularization is needed, I recommend to look at source code of the following matlab function.
0 comentarios
Ver también
Categorías
				Más información sobre Nonlinear ARX Models en Help Center y File Exchange.
			
	Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

