识别具有线性等式约束和稳定性的ARX模型

时间:2014-09-14 18:18:20

标签: matlab optimization signal-processing linear-regression system-identification

根据输入和输出数据,我必须识别最小二乘ARX模型

  

y(n)= -a1 y(n-1)-....- aN y(n-N)+ b1 x(n-1)+ ... + bM x(n-M)

必须稳定(所有极点都在单位圆内)并且同时参数

  

a1,...,aN,b1,...,bM

必须满足一些线性等式约束。 例如,我需要一个等于1的静态增益,这意味着

  

-a1-a2 ...- aN + b1 + b2 ... + bM = 1

在矩阵形式中,我可以将约束写为:

  

Theta = [a1 a2 ... aN b1 b2 ... bM]';

     

Aeq = [ - (1,N)个(1,M)];

     

beq = 1;

     

AEQ * THETA = BEQ;

使用下面的Matlab函数arx_stable,我可以使用Matlab函数识别稳定的ARX' ARX'设置参数'Focus' ='stability'(但没有相等的线性约束)

使用以下函数arx_constr我可以使用线性等式约束Aeq beq(但没有稳定性)识别ARX

如何获得稳定性和尊重约束? 谢谢,

西蒙

function theta = arx_stable(N,M,t,input_data,output_data)
% input_data and output_data are column vectors
% t is the time vector
% data structure generation:
Ts = t(2)-t(1); % it is the sampling time
data = iddata(output_data,input_data,Ts);
n_k=0; % it is the Input-output delay
ARX_model = arx(data,[N M n_k]  , 'Focus','stability');  
% 'Focus','stability' in this way the identified ARX is stable
a=ARX_model.a;
a=a(2:end); % I remove the first a0=1
b=ARX_model.b;
theta=[a b];
end

function theta = arx_constr(N,M,t,input_data,output_data,Aeq,beq)
% input_data and ouput_data are row vectors
% t is the time vector
% X and y construction:
n_order=max([N M]);
X=[];  % X is the regression matrix
for nn = n_order+1:length(input_data)
    X(nn,:)=[-output_data((nn-1):-1:(nn-N)) input_data((nn-1):-1:(nn-M))];
end
X=X((n_order+1):end,:); % it cancels the first n_order rows that are full of zeros
y=output_data(n_order+1:end)' ;   %  y is a column vector
options_lsqlin=optimset('Algorithm','active-set','LargeScale','off');   
% this set is necessary to use equality constraints
theta=lsqlin(X,y,[],[],Aeq,beq,[],[],[],options_lsqlin);
end

0 个答案:

没有答案