主要内容

两个物体之间的干摩擦:参数估计使用多个实验数据

这个例子展示了如何估计参数的非线性灰色框模型使用多个实验数据。展示两个固体之间的干摩擦系统将作为讨论的基础。在此系统中,一个身体是固定的,而其他身体向前和向后移动的固定的身体由于根据图1的外生力量。

图1:两个身体系统的示意图。

建模两具尸体之间的干摩擦

使用牛顿第三运动定律,描述的移动身体的运动:

F_tot (t) = m * (t) = m * d / dt v (t) = m ^ 2 * d / dt ^ 2 s (t)

F_tot (t) = F (t) -的外生力量摩擦力引起的两具尸体之间的联系。摩擦力是假定为滑动摩擦力之和f (t)和干摩擦力F_d (t)。前者通常是建模为速度的线性函数,即:f (t) = k * v (t), k是一个未知的滑动摩擦参数。干摩擦,另一方面,是一个相当复杂的现象。摘要:

a . Clavel m . Sorine和问:张。“一个钢板弹簧系统建模和识别”。在第三IFAC研讨会上控制汽车的进步,2001年。

它是由一个常微分方程建模:

d / dt F_d (t) = 1 / e * v (t) | | * F_d (t) + f / e * v (t)

e和f两个未知参数与尺寸距离和力量,分别。

表示输入信号u (t) = F (t) [N],引入状态为:

x1 (t) = s (t)的位置移动身体[m]。x2 (t) = v (t)移动身体的速度(米/秒)。x3 (t) = F_d (t)干摩擦力之间的身体[N]。

和模型参数为:

米的质量移动身体[m]。k滑动摩擦力系数(公斤/ s)。e Distance-related干摩擦参数[m]。f Force-related干摩擦参数[N]。

我们到达状态空间模型结构如下:

d / dt x1 (t) = x2 (t) d / dt x2 (t) = 1 / m * (u (t) - k * x2 (t) - x3 (t)) d / dt x3 (t) = 1 / e * (- | x2 (t) | * x3 (t) + f * x2 (t))
y (t) = x1 (t)

这些方程是进入C-MEX模型文件,twobodies_c.c。它的状态和输出更新方程,compute_dx compute_y,如下:

/ *状态方程。* /空白compute_dx(双* dx,双t,双* x,双* u,双* * p, const mxArray * auxvar){/ *检索模型参数。k * /双*,*,*,* f;m = p [0];/ *移动身体的质量。* / k = p [1];/ *滑动摩擦力系数。* / e = p [2];/ * Distance-related干摩擦参数。* / f = p [3]; /* Force-related dry friction parameter. */
/ * x[0]:位置。* / / * x[1]:速度。* / / * x[2]:干摩擦力。* / dx [0] = x [1];dx [1] = (u [0] - k [0] * x [1] - x [2]) / m [0];dx[2] =(晶圆厂(x [1]) * x [2] + f [0] * x [1]) / e [0];}
/ *输出方程。* /空白compute_y(双* y,双t,双* x,双* u,双* * p, const mxArray * auxvar) {/ * y[0]:位置。* x / y [0] = [0];}

有书面文件描述模型结构,下一步是创建一个IDNLGREY对象反射建模的情况。我们也添加的名称和单位信息输入、输出、状态和模型参数模型的结构。注意,参数和InitialStates在这里指定为向量,默认情况下,这意味着所有模型参数和初始状态向量估计NLGREYEST时调用。

文件名=“twobodies_c”;%文件描述模型结构。订单= (1 1 3);%模型[纽约νnx]命令。参数= [380;2200;0.00012;1900);%初始参数向量。InitialStates = [0;0;0);%初始状态。t = 0;%的时间连续系统。nlgr = idnlgrey(文件名、秩序、参数、InitialStates Ts,“名字”,“两个体系”,“InputName”,“外生力量”,“InputUnit”,“N”,“OutputName”,“移动身体的位置”,“OutputUnit”,“米”,“TimeUnit”,“年代”);nlgr = setinit (nlgr,“名字”,{“移动身体的位置”“移动身体的速度”“干摩擦力之间的身体});nlgr = setinit (nlgr,“单位”,{“米”“米/秒”“N”});nlgr = setpar (nlgr,“名字”,{“移动身体的质量”“滑动摩擦力系数”,“Distance-related干摩擦参数的“Force-related干摩擦参数的});nlgr = setpar (nlgr,“单位”,{“米”公斤/年代”“米”“N”});

输入输出数据

在这一点上,我们可用(模拟)的输入-输出数据加载。从三个不同的文件包含的数据(模拟)测试运行每个持有1000的输入输出样本生成使用采样率(Ts)的0.005秒。输入u (t) [N]的外生力量作用于移动身体。在实验中,输入是一个对称的锯齿波形成的信号,在所有实验的波形重复频率是一样的,但在测试运行之间的最大信号幅度不同。输出y (t)的位置[m]移动身体(相对于固定一个)。对于我们的建模的目的,我们创建一个IDDATA对象持有三种不同的实验:

负载(fullfile (matlabroot“工具箱”,“识别”,“iddemos”,“数据”,“twobodiesdata”));z =合并(iddata (u1,日元0.005),iddata (y2, u2, 0.005), iddata (y3, u3, 0.005));z。Name =“两个体系”;z。InputName = nlgr.InputName;z。InputUnit = nlgr.InputUnit;z。OutputName = nlgr.OutputName;z。OutputUnit = nlgr.OutputUnit;z。Tstart = 0; z.TimeUnit = nlgr.TimeUnit;

使用的输入输出数据开始识别实验图所示窗口。

图(“名字”,(z.Name:输入输出数据的]);i = 1: z。不子= getexp (z,我);次要情节(z。不2张2 *);%的输入。情节(子。SamplingInstants zi.InputData);标题([z.ExperimentName{我}“:”zi.InputName {1}));如果(我< z.Ne)包含();其他的包含([z.Domain“(”zi.TimeUnit“)”]);结束轴(“紧”);次要情节(z。Ne、2、2 *我);%输出。情节(子。SamplingInstants zi.OutputData);标题([z.ExperimentName{我}“:”zi.OutputName {1}));如果(我< z.Ne)包含();其他的包含([z.Domain“(”zi.TimeUnit“)”]);结束轴(“紧”);结束

图二体系统:投入产出数据包含6轴对象。与标题Exp1坐标轴对象1:外生力量包含一个类型的对象。与标题Exp1坐标轴对象2:移动身体的位置包含一个类型的对象。与标题Exp2坐标轴对象3:外生力量包含一个类型的对象。轴与标题Exp2对象4:移动身体的位置包含一个类型的对象。坐标轴对象与标题Exp3 5:外生力量,包含时间(秒)包含一个类型的对象。坐标轴对象与标题Exp3 6:移动身体的位置,包含时间(秒)包含一个类型的对象。

图2:从两个身体系统输入-输出数据。

最初的二体模型的性能

之前我们模拟系统使用四个未知参数估计的初始参数值。我们使用默认的微分方程解算器(数值)解决使用默认选项。当叫只有两个输入参数,比较将估计初始状态向量,在这种情况下,每一个实验,即。3实验每3×1状态向量意味着9估计初始状态。模拟输出和真正的阴谋所示窗口中,可以看到,适合体面但不如预期。

clf比较(z, nlgr);

图二体系统:投入产出数据包含一个坐标轴对象。坐标轴对象ylabel位置移动的身体包含2线类型的对象。这些对象代表验证数据:Exp1(移动身体的位置),两个体系:74.38%。

图3:比较真实的输出和模拟输出的初始二体模型。

参数估计

为了改善健康,下估计的四个参数。我们使用第一个和最后一个实验的数据在评估阶段,保持纯洁的第二个实验的数据验证的目的。

选择= nlgreyestOptions (“显示”,“上”);nlgr = nlgreyest (getexp (z, [1 3]), nlgr,选择);

估计二体模型的性能

为了研究估计的性能模型,模拟的最终执行。通过调整初始状态结构数组nlgr可以完全指定哪个州来估计每个实验,例如,比较。我们这里定义和使用一个结构初始状态x1(0)和x2(0)估计为实验1,实验2 x2(0),实验3 x3 (0)。这一修改,比较测量和模型输出图所示窗口。

nlgr。InitialStates =结构(“名字”getinit (nlgr“名字”),“单位”getinit (nlgr“单位”),“价值”,0 (1、3)“最低”无穷(1、3)“最大”正(3),“固定”,{(假假真);(真的假的真的);[真真正假]});比较(z, nlgr compareOptions (“InitialCondition”,“模型”));

图二体系统:投入产出数据包含一个坐标轴对象。坐标轴对象ylabel位置移动的身体包含2线类型的对象。这些对象代表验证数据:Exp1(移动身体的位置),两个体系:99%。

图4:比较的真实输出和模拟输出估计二体模型。

的特殊利益与第二个实验的数据结果,不用于参数估计。真正的动态建模系统显然是对所有实验很好。估计的参数也相当接近的用于生成实验数据:

disp (“真正的估计参数向量”);
真正的估计参数向量
ptrue = [400;2 e3;0.0001;1700);流(“% 10.5 f % 10.5 f \ n”[ptrue ';getpvec (nlgr) '));
400.00000 402.16624 2000.00000 1987.96042 0.00010 0.00010 1700.00000 1704.51209

通过最后使用目前的命令,我们可以获得更多信息估计模型:

礼物(nlgr);
nlgr =连续时间非线性灰色矩形模型定义为“twobodies_c”(MEX-file): dx / dt = F (t, u (t) x (t) p1,…p4) y (t) = H (t, u (t) x (t) p1,…,p4) + e(t) with 1 input(s), 3 state(s), 1 output(s), and 4 free parameter(s) (out of 4). Inputs: u(1) Exogenous force(t) [N] States: Initial value x(1) Position of moving body(t) [m] xinit@exp1 0 (estimated) in [-Inf, Inf] xinit@exp2 0 (estimated) in [-Inf, Inf] xinit@exp3 0 (fixed) in [-Inf, Inf] x(2) Velocity of moving body(t) [m/s] xinit@exp1 0 (fixed) in [-Inf, Inf] xinit@exp2 0 (estimated) in [-Inf, Inf] xinit@exp3 0 (fixed) in [-Inf, Inf] x(3) Dry friction force between the bodies(t) [N] xinit@exp1 0 (fixed) in [-Inf, Inf] xinit@exp2 0 (fixed) in [-Inf, Inf] xinit@exp3 0 (estimated) in [-Inf, Inf] Outputs: y(1) Position of moving body(t) [m] Parameters: Value p1 Mass of the moving body [m] 402.166 (estimated) in [-Inf, Inf] p2 Sliding friction force coefficient [kg/s] 1987.96 (estimated) in [-Inf, Inf] p3 Distance-related dry friction parameter [m] 0.000104534 (estimated) in [-Inf, Inf] p4 Force-related dry friction parameter [N] 1704.51 (estimated) in [-Inf, Inf] Name: Two body system Status: Model modified after estimation. More information in model's "Report" property. Model Properties

结论

这个例子描述了如何使用多个实验数据在执行IDNLGREY建模。可以使用任意数量的实验,对于每一次这样的实验是可能完全指定NLGREYEST初始状态或状态估计的比较,预测,等等。

额外的信息

更多信息的识别与系统辨识工具箱™访问动态系统系统辨识工具箱产品信息页面。