主要内容gydF4y2Ba

估计ode系数以拟合给定解gydF4y2Ba

这个例子展示了如何使用线性和非线性灰箱建模估计模型参数。gydF4y2Ba

利用灰盒辨识来估计描述模型动力学的ode系数,以拟合给定的响应轨迹。gydF4y2Ba

  • 对于线性动力学,使用线性灰箱模型表示模型(gydF4y2BaidgreygydF4y2Ba).估计模型系数使用gydF4y2Ba感动的gydF4y2Ba.gydF4y2Ba

  • 对于非线性动力学,使用非线性灰箱模型(gydF4y2BaidnlgreygydF4y2Ba).估计模型系数使用gydF4y2BanlgreyestgydF4y2Ba.gydF4y2Ba

在这个例子中,你用单摆的振荡数据来估计它的摩擦系数的值。单摆的运动方程为:gydF4y2Ba

$m{l^2}\ddot \theta + b\dot \theta + mglsin\theta = 0$gydF4y2Ba

${\θ}$gydF4y2Ba为钟摆相对于其静止状态的角位移。gydF4y2BaggydF4y2Ba为重力加速度常数。gydF4y2Ba米gydF4y2Ba钟摆的质量是和吗gydF4y2BalgydF4y2Ba为钟摆的长度。gydF4y2BabgydF4y2Ba为粘滞摩擦系数,为拟合给定的角位移数据而估计其值。没有外部驱动力对钟摆运动起作用。gydF4y2Ba

负载测试数据。gydF4y2Ba

负载(fullfile (matlabrootgydF4y2Ba“工具箱”gydF4y2Ba,gydF4y2Ba“识别”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“iddemos”gydF4y2Ba,gydF4y2Ba“数据”gydF4y2Ba,gydF4y2Ba“pendulumdata”gydF4y2Ba));data = iddata (y, [], 0.1,gydF4y2Ba“名字”gydF4y2Ba,gydF4y2Ba“摆”gydF4y2Ba);数据。OutputName =gydF4y2Ba“摆的位置”gydF4y2Ba;数据。OutputUnit =gydF4y2Barad的gydF4y2Ba;数据。Tstart = 0; data.TimeUnit =“年代”gydF4y2Ba;gydF4y2Ba

测量的角位移数据加载并保存为gydF4y2Ba数据gydF4y2Ba,一个gydF4y2BaiddatagydF4y2Ba对象的采样时间为0.1秒。的gydF4y2Ba集gydF4y2Ba命令用于指定输出名称、输出单位、起始时间和时间矢量的单位等数据属性。gydF4y2Ba

进行线性灰盒估计。gydF4y2Ba

假设摆只发生很小的角位移,则描述摆运动的方程可以简化为:gydF4y2Ba

$m{l^2}\ddot \theta + b\dot \theta + mgl\theta = 0$gydF4y2Ba

利用角位移(gydF4y2Ba\θ美元gydF4y2Ba)和角速度(gydF4y2Ba点\ \θ美元gydF4y2Ba)为状态变量,简化后的方程可以重写为:gydF4y2Ba

数组$ $ \开始{}{1}& # xA; \ mathop ^ {X (t)} \限制。布鲁里溃疡= AX (t) + (t) \ \ & # xA; y (t) =残雪(t) + Du (t) & # xA; \{数组}$ $gydF4y2Ba

在这里,gydF4y2Ba

数组$ $ \开始{}{1}& # xA;左X (t) = \[{\开始数组{}{* {20}{c}} & # xA; \θ\ \ & # xA;{\点\θ}& # xA;结束\{数组}}\右]\ \ & # xA;左= \[{\开始数组{}{* {20}{c}} & # xA; 0 & # 38; 1 \ \ & # xA;{\压裂{{- g}} {l}}和{\压裂{{- b}} {{m {l ^ 2}}}} & # xA;结束\{数组}}\右]\ \ & # xA; b = 0 \ \ & # xA;左c = \[{\开始数组{}{* {20}{c}} & # xA; 1 & # 38; 0 & # xA;结束\{数组}}\右]\ \ & # xA; D =0
\end{array}$$

的gydF4y2BaBgydF4y2Ba和gydF4y2BaDgydF4y2Ba矩阵为零,因为对于单摆没有外力。gydF4y2Ba

1.创建一个ODE文件,将模型系数与其状态空间表示关联起来。gydF4y2Ba

函数gydF4y2Ba[A,B,C,D] =线性摆(m,g,l, B, Ts)- g / l - b / m / l ^ 2);B = 0 (2,0);C = [1 0];D = 0 (1,0);gydF4y2Ba结束gydF4y2Ba

这个函数,gydF4y2BaLinearPendulumgydF4y2Ba,利用模型系数返回单摆线性运动模型的状态空间表示gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba,gydF4y2BabgydF4y2Ba.gydF4y2BaTsgydF4y2Ba为采样时间。将此函数保存为gydF4y2BaLinearPendulum.mgydF4y2Ba.这个函数gydF4y2BaLinearPendulumgydF4y2Ba必须在MATLAB®路径上。或者,您可以为这个函数指定完整的路径名。gydF4y2Ba

2.创建一个线性灰盒模型gydF4y2BaLinearPendulumgydF4y2Ba函数。gydF4y2Ba

m = 1;g = 9.81;l = 1;b = 0.2;linear_model = idgrey (gydF4y2Ba“LinearPendulum”gydF4y2Ba, {m g, l b},gydF4y2Ba“c”gydF4y2Ba);gydF4y2Ba

米gydF4y2Ba,gydF4y2BaggydF4y2Ba而且,gydF4y2BalgydF4y2Ba指定已知模型系数的值。gydF4y2BabgydF4y2Ba指定粘性摩擦系数的初始猜想。的gydF4y2Ba“c”gydF4y2Ba的调用中的输入参数gydF4y2BaidgreygydF4y2Ba指定gydF4y2Balinear_model.gydF4y2Ba作为一个连续时间系统。gydF4y2Ba

3.指定gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba作为已知参数。gydF4y2Ba

linear_model.Structure.Parameters(1)。自由= false;linear_model.Structure.Parameters(2)。自由= false;linear_model.Structure.Parameters(3)。自由= false;gydF4y2Ba

如前一步所定义的,gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba的前三个参数是gydF4y2Balinear_model.gydF4y2Ba.使用gydF4y2BaStructure.Parameters.FreegydF4y2Ba字段,gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba指定为固定值。gydF4y2Ba

4.创建估计选项集,指定要估计的初始状态并打开估计进度显示。还强制估计算法返回稳定模型。此选项仅适用于线性模型(Idgrey)估计。gydF4y2Ba

opt = greyestoptions(gydF4y2Ba“InitialState”gydF4y2Ba,gydF4y2Ba“估计”gydF4y2Ba,gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“上”gydF4y2Ba);opt.EnforceStability = true;gydF4y2Ba

5.估算粘性摩擦系数。gydF4y2Ba

linear_model =老龄化最严重的(数据、linear_model选择);gydF4y2Ba

的gydF4y2Ba感动的gydF4y2Ba命令,更新参数gydF4y2Balinear_model.gydF4y2Ba.gydF4y2Ba

b_est = linear_model.Structure.Parameters (4) value;[linear_b_est, dlinear_b_est] = getpvec (linear_model,gydF4y2Ba“免费”gydF4y2Ba)gydF4y2Ba
线性_b_est = 0.1178gydF4y2Ba

getpvecgydF4y2Ba回报,gydF4y2Badlinear_b_est.gydF4y2Ba,对应的1个标准差不确定度gydF4y2BabgydF4y2Ba的自由估计参数gydF4y2Balinear_model.gydF4y2Ba的估计价值gydF4y2BabgydF4y2Ba,粘性摩擦系数,采用线性灰箱估计返回gydF4y2Balinear_b_estgydF4y2Ba.gydF4y2Ba

6.比较线性灰箱模型与实测数据的响应。gydF4y2Ba

linear_model对比(数据)gydF4y2Ba

线性灰箱估计模型对实测数据的拟合率为49.9%。差的拟合是由于假设摆经历小的角位移,而实测数据显示大的振荡。gydF4y2Ba

进行非线性灰箱估计。gydF4y2Ba

非线性灰箱估计要求将微分方程表示为一阶方程集。gydF4y2Ba

利用角位移(gydF4y2Ba\θ美元gydF4y2Ba)和角速度(gydF4y2Ba点\ \θ美元gydF4y2Ba)作为状态变量,可以将运动方程作为一组第一阶非线性微分方程重写:gydF4y2Ba

数组$ $ \开始{}{1}& # xA; {x_1} (t) = \θ(t) \ \ & # xA; {x_2} (t) = \点\θ(t) \ \ & # xA; {{x} \点_1}(t) = {x_2} (t) \ \ & # xA; {{x} \点_2}(t) = \压裂罪{{- g}} {1} ({x_1} (t)) - \压裂{b} {{m {l ^ 2}}} {x_2} (t) \ \ & # xA; y (t) = {x_1} (t) & # xA; \{数组}$ $gydF4y2Ba

1.创建一个ODE文件,将模型系数与其非线性表示关联起来。gydF4y2Ba

函数gydF4y2Ba(dx, y) = NonlinearPendulum (t, x, u, m, g, l, b,变长度输入宗量)gydF4y2Ba%输出方程。gydF4y2Bay = x (1);gydF4y2Ba%角位置。gydF4y2Ba%状态方程。gydF4y2Badx = [x (2);gydF4y2Ba...gydF4y2Ba%角位置gydF4y2Ba- (g / l) * sin (x (1)) - b / (m * l ^ 2) * x (2)gydF4y2Ba...gydF4y2Ba%角速度gydF4y2Ba];gydF4y2Ba结束gydF4y2Ba

这个函数,gydF4y2BaNonlinearPendulumgydF4y2Ba,利用模型系数返回摆的非线性运动模型的状态导数和输出gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba,gydF4y2BabgydF4y2Ba.将此函数保存为gydF4y2BaNonlinearPendulum.mgydF4y2Ba在MATLAB®路径上。或者,您可以为这个函数指定完整的路径名。gydF4y2Ba

2.创建一个非线性灰盒模型gydF4y2BaNonlinearPendulumgydF4y2Ba函数。gydF4y2Ba

m = 1;g = 9.81;l = 1;b = 0.2;订单= [1 0 2];参数= {m g, l b};initial_states = [1;0);t = 0;nonlinear_model = idnlgrey (gydF4y2Ba'非线性垂直'gydF4y2Ba、秩序、参数、initial_states Ts);gydF4y2Ba

3.指定gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba作为已知参数。gydF4y2Ba

setpar (nonlinear_modelgydF4y2Ba“固定”gydF4y2Ba,{真真真假});gydF4y2Ba

如前一步所定义的,gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba的前三个参数是gydF4y2Banonlinear_modelgydF4y2Ba.使用gydF4y2BasetpargydF4y2Ba命令,gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba指定为固定值和gydF4y2BabgydF4y2Ba被指定为免费估计参数。gydF4y2Ba

4.估算粘性摩擦系数。gydF4y2Ba

nonlinear_model = nlgreyest(数据、nonlinear_modelgydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“全部”gydF4y2Ba);gydF4y2Ba

的gydF4y2BanlgreyestgydF4y2Ba命令,更新参数gydF4y2Banonlinear_modelgydF4y2Ba.gydF4y2Ba

b_est = nonlinear_model.Parameters (4) value;[nonlinear_b_est, dnonlinear_b_est] = getpvec(非线性模型,gydF4y2Ba“免费”gydF4y2Ba)gydF4y2Ba
非线性_b_est = 0.1002gydF4y2Ba

getpvecgydF4y2Ba返回,gydF4y2Badnonlinear_b_estgydF4y2Ba,对应的1个标准差不确定度gydF4y2BabgydF4y2Ba的自由估计参数gydF4y2Banonlinear_modelgydF4y2Ba的估计价值gydF4y2BabgydF4y2Ba,粘性摩擦系数,采用非线性灰箱估计返回gydF4y2Banonlinear_b_estgydF4y2Ba.gydF4y2Ba

5.比较线性和非线性灰箱模型的响应与实测数据。gydF4y2Ba

比较(数据、linear_model nonlinear_model)gydF4y2Ba

非线性灰箱模型估计提供了更接近于实测数据的拟合。gydF4y2Ba

另请参阅gydF4y2Ba

|gydF4y2Ba|gydF4y2Ba|gydF4y2Ba

相关话题gydF4y2Ba