黑箱与结构化状态空间模型估计
黑盒估计
在这种方法中,您可以指定模型顺序,也可以指定配置状态空间矩阵总体结构的其他模型结构属性。您使用数据和模型顺序作为主要输入参数调用ssest、ssregest或n4sid,并使用名称-值对指定任何其他属性,例如模型采样时间、存在馈通、没有噪声分量等。您不能直接使用A、B、C、D、K和X0矩阵的系数。
结构化估计
在这种方法中,您创建并配置一个idss模型,其中包含所有系统矩阵的初始值。可以使用idss模型的Structure属性指定所有参数约束。例如,可以将系统矩阵的某些系数指定为固定系数,并对其他系数的值施加最小/最大界限。对于参数化的快速配置以及是否估计馈通和扰动动力学,请使用ssform。
使用所需约束配置idss模型后,将此模型指定为ssest命令的输入参数。不能使用n4sid或ssregest进行结构化估计。
提示
结构化估计方法也称为灰箱建模。然而,在此工具箱中,“灰盒建模”术语仅在提及idgrey和idnlgrey模型时使用。
使用结构化估计方法,无法指定状态空间系数之间的关系。每个系数基本上都被视为独立于其他系数。为了施加依赖关系,或使用更复杂的参数化形式,请使用idgrey模型和greyest估计器。
使用ssest、ssregest和n4sid估计状态空间模型
先决条件
将输入输出数据表示为iddata对象,或将频率响应数据表示为frd或idfrd对象。请参见使用iddata对象表示时域和频域数据。有关支持的数据格式,请参见状态空间模型支持的数据。
执行数据预处理。为了在使用时域数据时提高结果的准确性,可以减少数据或指定输入/输出偏移量级别作为估计选项。请参阅为系统识别准备数据的方法。
选择模型订单。当您不知道模型订单时,搜索并选择订单。有关详细信息,请参见命令行中的“使用选定订单估算模型”。
您可以使用迭代估计命令ssest估计连续时间和离散时间状态空间模型,该命令可以最小化预测误差,以获得最大似然值。
使用以下常规语法配置和估计状态空间模型:
m = ssest(data,n,opt,Name,Value)
其中,data是估计数据,n是模型顺序,opt包含用于配置状态空间模型估计的选项。这些选项包括处理初始条件、输入和输出偏移、估计焦点和搜索算法选项。opt后面可以是名称-值对输入参数,这些参数指定可选的模型结构属性,例如feedthrough的存在、模型的规范形式和输入延迟。
作为ssest的替代方法,您可以使用非迭代子空间估值器n4sid或ssregest:
m = n4sid(data,n,opt,Name,Value)
m = ssregest(data,n,opt,Name,Value)
除非将采样时间指定为名称-值对输入参数,否则n4sid和ssregest将估计离散时间模型,而ssest将估计连续时间模型。
ssest使用n4sid来初始化状态空间矩阵,估计模型所需的时间比n4sid长,但通常更适合数据。
有关验证模型的信息,请参阅估算后验证模型
A、B、C矩阵结构的选择
默认情况下,A、B和C状态空间矩阵的所有条目都被视为自由参数。使用ssest的Form-name值对输入参数,您可以选择使用较少参数的各种规范形式,如伴生形式和模态形式。
有关估计特定状态空间参数化的详细信息,请参见:
自由参数化状态空间模型的估计
用规范参数化估计状态空间模型
带结构参数化的状态空间模型估计
在连续时间和离散时间表示法之间进行选择
对于状态空间模型的估计,您可以选择在零和估计数据之间切换模型样本时间。您可以使用Ts名称-值对输入参数来实现这一点。
默认情况下,ssest估计连续时间模型。如果使用的数据集具有非零采样时间、数据(包括所有时域数据),也可以使用以下方法估计离散时间模型:
model = ssest(data,nx,'Ts',data.Ts);
如果使用的是连续时间频域数据,则无法估计离散时间模型。
默认情况下,n4sid和ssregest估计的模型的采样时间与数据的采样时间匹配。因此,对于时域数据,n4sid和ssregest提供了离散时间模型。您可以使用以下方法估计连续时间模型:
model = n4sid(data,nx,'Ts',0);
如果使用的是连续时间频域数据,则无法估计离散时间模型。
默认情况下,n4sid和ssregest估计的模型的采样时间与数据的采样时间匹配。因此,对于时域数据,n4sid和ssregest提供了离散时间模型。您可以使用以下方法估计连续时间模型:
model = n4sid(data,nx,'Ts',0);
或者
model = ssregest(data,nx,'Ts',0);
选择估计D、K和X0矩阵
对于具有任何参数化的状态空间模型,可以指定是否估计D、K和X0矩阵,这些矩阵分别表示输入到输出反馈、噪声模型和初始状态。
对于具有结构化参数化的状态空间模型,还可以指定估计D矩阵。然而,对于自由形式和规范形式,D矩阵的结构是根据您对“Feedthrough”名称-值对输入参数的选择来设置的。
D矩阵
默认情况下,不估计D矩阵,其值固定为零,静态模型除外。
黑盒估计:使用Feedthrough名称-值对输入参数表示各个输入是否存在Feedthough。例如,如果是双输入模型,只有第二个输入有馈通,则使用:
model = n4sid(data,n,'Feedthrough',[false true]);
结构化估计:配置init_sys.Structure的值。D、 其中init_sys是表示所需模型结构的idss模型。要强制第i个输入无馈通,请设置:
init_sys.Structure.D.Value(:,i) = 0;
init_sys.Structure.D.Free = true;
init_sys.Structure.D.Free(:,i) = false;
第一行将第i列D的值指定为零。下一行将D的所有元素指定为自由、可估计的参数。最后一行指定D矩阵的第i列固定用于估计。
或者,将ssform与“Feedthrough”名称值对一起使用。
K矩阵
K表示模型的噪声矩阵,即模型的噪声分量为:
x=Ax+Ke
yn=Cx+e
对于频域数据,不估计噪声模型,K设置为0。对于时域数据,默认情况下,K在黑箱估计设置中估计。yn是扰动对模型输出的贡献。
黑盒估计:使用DisturbanceModel名称-值对输入参数来指示扰动分量是固定为零(指定value='none')还是估计为自由参数(指定value='estimate')。例如,使用:
model = n4sid(data,n,'DisturbanceModel','none');
结构化估计:配置init_sys.Structure的值。K参数,其中init_sys是表示所需模型结构的idss模型。您可以将一些K矩阵系数固定为已知值,并规定自由系数的最小/最大界限。例如,要仅估计双输出模型的K矩阵的第一列:
kpar = init_sys.Structure.K;
kpar.Free(:,1) = true;
kpar.Free(:,2) = false;
kpar.Value(:,2) = 0; % second column value is fixed to zero
init_sys.Structure.K = kpar;
或者,使用ssform。
当不确定如何轻松固定或释放K的所有系数时,最初您可以忽略估算K中的噪声参数,以专注于实现系统动力学的合理模型。估算动态模型后,可以使用ssest优化模型,同时将K参数配置为自由参数。例如:
init_sys = ssest(data, n,'DisturbanceModel','none');
init_sys.Structure.K.Free = true;
sys = ssest(data,init_sys);
其中init_sys是无噪声的动态模型。
要在现有模型中将K设置为零,可以将其“值”设置为0,将“自由”标志设置为false:
m.Structure.K.Value = 0;
m.Structure.K.Free = false;
X0矩阵
初始状态向量X0作为模型估计的副产品获得。n4sid、ssest和ssregest命令返回X0的值作为第二个输出参数。您可以使用InitialState估计选项选择在模型估计期间如何处理初始条件。使用n4sidOptions(用于n4sid)、ssestOptions(对于ssest)或ssregestOptions(针对ssregest)创建估算选项集。例如,为了在使用n4sid进行估计期间保持初始状态为零:文章来源:https://www.toymoban.com/news/detail-646251.html
opt = n4sidOptions;
opt.InitialState = 'zero';
[m,X0] = n4sid(data,n,opt);
返回的X0变量是长度为n的零矢量。
当您使用多重实验数据估计模型时,X0矩阵包含的列数与数据实验的列数相同。
有关InitialStates选项值的完整列表,请参阅为迭代估计算法指定初始状态。文章来源地址https://www.toymoban.com/news/detail-646251.html
相关主题
损失函数和模型质量度量
到了这里,关于MATLAB-在命令行估计状态空间模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!