Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 具有线性等式约束和稳定性的ARX模型的辨识_Matlab_Optimization_Signal Processing_Linear Regression_System Identification - Fatal编程技术网

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

Matlab 具有线性等式约束和稳定性的ARX模型的辨识,matlab,optimization,signal-processing,linear-regression,system-identification,Matlab,Optimization,Signal Processing,Linear Regression,System Identification,根据输入和输出数据,我必须用最小二乘法确定ARX模型 y(n)=-a1y(n-1)-…-any(n-n)+b1x(n-1)+…+bmx(n-M) 这必须是稳定的(其所有极点都在单位圆内),同时参数也必须是稳定的 a1,…,aN,b1,…,bM 必须满足一些线性等式约束。 例如,我需要一个等于1的静态增益,这意味着 -a1-a2…-aN+b1+b2…+bM=1 在矩阵形式中,我可以将约束写为: θ=[a1a2…a1b2…bM] Aeq=[-个(1,N)个(1,M)] beq=1 Aeq*θ=beq

根据输入和输出数据,我必须用最小二乘法确定ARX模型

y(n)=-a1y(n-1)-…-any(n-n)+b1x(n-1)+…+bmx(n-M)

这必须是稳定的(其所有极点都在单位圆内),同时参数也必须是稳定的

a1,…,aN,b1,…,bM

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

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

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

θ=[a1a2…a1b2…bM]

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

beq=1

Aeq*θ=beq

使用下面的Matlab函数arx_stable我可以使用Matlab函数“arx”设置参数
“Focus”=“stability”
(但没有等式线性约束)来识别稳定的
arx

通过以下函数
arx\u 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

这个问题还存在吗?是的,这个问题仍然存在。好吧,让我们一劳永逸地解决这个问题。我们明天再谈。。。。现在有点晚了。。。