主要内容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));数据= 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 & # xA; \{数组}$ $gydF4y2Ba

的gydF4y2BaBgydF4y2Ba而且gydF4y2BaDgydF4y2Ba矩阵为零,因为单摆没有外力驱动。gydF4y2Ba

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

函数gydF4y2Ba[A,B,C,D] =线性摆(m,g,l, B, Ts) A = [0 1;- g / l - b / m / l ^ 2);B = 0 (2,0);C = [10];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;线性模型= idgrey(gydF4y2Ba“LinearPendulum”gydF4y2Ba, {m g, l b},gydF4y2Ba“c”gydF4y2Ba);gydF4y2Ba

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

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

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

如上一步定义的那样,gydF4y2Ba米gydF4y2Ba,gydF4y2BaggydF4y2Ba,gydF4y2BalgydF4y2Ba前三个参数是gydF4y2Balinear_modelgydF4y2Ba.使用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

线性模型=灰色(数据,线性模型,选择);gydF4y2Ba

的gydF4y2Ba感动的gydF4y2Ba命令更新参数gydF4y2Balinear_modelgydF4y2Ba.gydF4y2Ba

b_est = linear_model.Structure.Parameters(4).Value;[linear_b_est,dlinear_b_est] = getpvec(linear_model, dlinear_b_est)gydF4y2Ba“免费”gydF4y2Ba)gydF4y2Ba
Linear_b_est = 0.1178 dlinear_b_est = 0.0088gydF4y2Ba

getpvecgydF4y2Ba回报,gydF4y2Badlinear_b_estgydF4y2Ba的1个标准差不确定度gydF4y2BabgydF4y2Ba的自由估计参数gydF4y2Balinear_modelgydF4y2Ba的估计值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] =非线性摆(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;Order = [1 0 2];参数= {m,g,l,b};Initial_states = [1;0);Ts = 0;非线性模型= idnlgrey(gydF4y2Ba“NonlinearPendulum”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

非线性模型= nlgreyest(数据,非线性模型,gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“全部”gydF4y2Ba);gydF4y2Ba

的gydF4y2BanlgreyestgydF4y2Ba命令更新参数gydF4y2Banonlinear_modelgydF4y2Ba.gydF4y2Ba

b_est =非线性模型. parameters (4).Value;[nonlinear_b_est, dnonlinear_b_est] = getpvec(非线性模型,gydF4y2Ba“免费”gydF4y2Ba)gydF4y2Ba
Nonlinear_b_est = 0.1002 dnonlinear_b_est = 0.0149gydF4y2Ba

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