【质量-弹簧-阻尼系统】基于脉冲响应约束的子空间辨识研究(Matlab代码实现)

2024-01-12

???????????????? 欢迎来到本博客 ❤️❤️????????

????博主优势: ???????????? 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️ 座右铭: 行百里者,半于九十。

???????????? 本文目录如下: ????????????

目录

????1 概述

????2 运行结果

????3 参考文献

????4 Matlab代码、数据、文章


????1 概述

文献来源:

摘要
当只有少量嘈杂的测量数据可用时,子空间辨识方法可能会产生不可靠的模型估计。在这种情况下,通过利用关于系统的先验知识可以提高估计参数的准确性。本文考虑的先验知识是对脉冲响应的约束。这是受到有关系统稳态增益、超调和上升时间的信息的影响,这些信息可以表达为对脉冲响应的约束。所提出的方法包括两个步骤:(1) 带有线性等式和不等式约束的脉冲响应估计,以及 (2) 估计脉冲响应的实现。第一步的问题被证明是一个凸二次规划问题。在将先验知识表达为等式约束的情况下,第一步的问题有一个封闭形式的解决方案。在一般情况下,包括等式和不等式约束,解决方案通过标准的数值优化方法计算。我们通过一个质量-弹簧-阻尼系统来说明该方法的性能。

本文的主要目标是在用户对待识别的过程具有先验信息时,改进标准子空间算法的效率。这些信息可能来自控制系统的物理定律、初步实验(如阶跃响应或正弦输入信号的响应),或专家知识。例如,用户可能了解系统的稳态增益、调节时间或主导时间常数。开发的识别方法是一种通用建模工具,并不局限于特定的应用领域。实际上,任何应用都可以从在识别过程中利用先验知识中受益,只要(1)存在这样的先验知识,以及(2)存在可以利用它的方法。

对于系统的先验知识可以自然地表达为其行为的约束,例如,超调和上升时间是用阶跃响应来定义的(Merćère, 2016)。然而,在参数辨识中,模型由参数向量表示 - 传递函数或状态空间表示的系数。然后,识别问题就变成了参数估计问题,而先验知识的包含需要将其重新表述为对参数向量的约束。这可能是不平凡的,并导致更复杂的优化问题。事实上,对系统行为的线性约束通常会导致对参数向量的非线性约束(Rothenberg, 1973)。

当我们处理子空间辨识时,很难直接将这样的先验知识引入模型结构中。子空间辨识不依赖于显式的成本函数,并使用系统的状态空间表示,该表示已知直到相似变换。因此,将具有物理意义的先验信息引入到由子空间辨识算法估计的状态空间模型中似乎是一个具有挑战性的问题。

在本文中,我们通过以下两步方法绕过了与将先验知识包含在参数估计中相关的困难:
(1)脉冲响应的估计,以及
(2)估计脉冲响应的实现。
在第一步中,先验知识被强加在估计的脉冲响应上。该方法基于Markovsky和Rapisarda(2008)的一个结果,其中它表明,对于精确的数据,线性时不变系统的脉冲响应可以通过解一个超定的线性方程组直接从数据中计算出来。

???? 2 运行结果

可视化代码:

figure, hold on,
plot(Esys(:, 1), 'b.', 'MarkerSize', 30), h(1) = plot(Esys(:, 1), 'b--', 'linewidth', 2);
plot(Esys(:, 2), 'r.', 'MarkerSize', 30), h(2) = plot(Esys(:, 2), 'r-', 'linewidth', 2);
plot(Esys(:, 3), 'r.', 'MarkerSize', 30), h(3) = plot(Esys(:, 3), 'r-.', 'linewidth', 2);
title(''), xlabel('number of equality constraints'), ylabel('esys')
legend(h, {'uy2ss\_pk', 'uy2ss', 'n4sid'}, 'location', 'SouthWest'),
ax = axis; set(gca, 'xTick', 1:10), set(gca, 'yTick', [0 ax(4)])
ax = axis; axis([1 i ax(3:4)])
set(gca, 'fontsize', 15)

figure, hold on,
plot(Ehh(:, 1), 'b.', 'MarkerSize', 30), h(1) = plot(Ehh(:, 1), 'b--', 'linewidth', 2);
plot(Ehh(:, 2), 'r.', 'MarkerSize', 30), h(2) = plot(Ehh(:, 2), 'r-', 'linewidth', 2);
title(''), xlabel('number of equality constraints'), ylabel('ehh')
legend(h(1:2), {'uy2ss\_pk', 'uy2ss'}, 'location', 'SouthWest'),
ax = axis; set(gca, 'xTick', 1:10), set(gca, 'yTick', [0 ax(4)])
ax = axis; axis([1 i ax(3:4)])
set(gca, 'fontsize', 15)

figure, hold on,
plot(Ehhp(:, 1), 'b.', 'MarkerSize', 30), h(1) = plot(Ehhp(:, 1), 'b--', 'linewidth', 2);
plot(Ehhp(:, 2), 'r.', 'MarkerSize', 30), h(2) = plot(Ehhp(:, 2), 'r-', 'linewidth', 2);
title(''), xlabel('number of equality constraints'), ylabel('ehhp')
legend(h(1:2), {'uy2ss\_pk', 'uy2ss'}, 'location', 'NorthWest'),
ax = axis; set(gca, 'xTick', 1:10), set(gca, 'yTick', [0 ax(4)])
ax = axis; axis([1 i ax(3:4)])
set(gca, 'fontsize', 15)

figure, hold on,
plot(Ehp(:, 1), 'b.', 'MarkerSize', 30), h(1) = plot(Ehp(:, 1), 'b--', 'linewidth', 2);
plot(Ehp(:, 2), 'r.', 'MarkerSize', 30), h(2) = plot(Ehp(:, 2), 'r-', 'linewidth', 2);
plot(Ehp(:, 3), 'r.', 'MarkerSize', 30), h(3) = plot(Ehp(:, 3), 'r-.', 'linewidth', 2);
title(''), xlabel('number of equality constraints'), ylabel('ehp')
legend(h, {'uy2ss\_pk', 'uy2ss', 'n4sid'}, 'location', 'NorthWest'),
ax = axis; set(gca, 'xTick', 1:10), set(gca, 'yTick', [0 ax(4)])
ax = axis; axis([1 i ax(3:4)])
set(gca, 'fontsize', 15)

????3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

???? 4 Matlab代码、数据、文章

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【质量-弹簧-阻尼系统】基于脉冲响应约束的子空间辨识研究(Matlab代码实现) 的相关文章

  • Flask:缓存静态文件(.js、.css)

    我真的找不到任何这方面的资源 那么如何将视图 函数的缓存与静态文件 即 css js 分开 我想将静态对象缓存一周 另一方面 我只需要缓存函数 视图几分钟 当我执行以下操作时 from flask ext cache import Cach
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • django 管理站点导航侧边栏搞砸了

    我最近在我的项目中添加了一个包并做了一个pip freeze gt requirements txt然后 然后我做了pip install r requirements txt到我的本地 它添加了一个侧边栏 I did a pip inst
  • 如何在 Python 中获得两个变量的逻辑异或?

    你如何获得逻辑异或 http en wikipedia org wiki Exclusive orPython 中的两个变量 例如 我有两个希望是字符串的变量 我想测试其中只有一个包含 True 值 不是 None 或空字符串 str1 r
  • 在 Chaquopy 中转换数组和张量

    我该怎么做呢 我看到你的帖子说你可以将 java 对象传递给 Python 方法 但这不适用于 numpy 数组和 TensorFlow 张量 以下以及其各种变体是我尝试过的 但没有成功 double anchors new double
  • CodingBat sum67:为什么这个解决方案是错误的?

    我正在解决以下codingbat问题 返回数组中数字的总和 但忽略以 6 开头并延伸到下一个 7 的数字部分 每个 6 后面至少有一个 7 如果没有数字则返回 0 sum67 1 2 2 5 sum67 1 2 2 6 99 99 7 5
  • 使用 theano 进行多处理

    我正在尝试将 theano 与 cpu 多处理和神经网络库 Keras 结合使用 I use device gpu标记并加载 keras 模型 然后 为了提取超过一百万张图像的特征 我使用多处理池 该函数看起来像这样 from keras
  • Python ttk.combobox 强制发布/打开

    我正在尝试扩展 ttk 组合框类以允许自动建议 我到目前为止的代码运行良好 但我想让它在输入一些文本后显示下拉列表 而不从小部件的输入部分移除焦点 我正在努力解决的部分是找到一种强制下拉的方法 在 python 文档中我找不到任何提及这一点
  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • 如何在python中合并具有相同键的嵌套字典

    我有一个这样的数据结构 SNAPSHOT SnapshotVersion 304 SNAPSHOT SnapshotCreationDate 2015 06 21 17 33 41 CafeData CafeVersion 2807 Caf
  • Google App Engine 开发服务器中的 PyCrypto“ImportError:无法导入名称 blockalgo”

    我有一个使用 PyCrypto 使用 AES 加密字符串的函数 当我在单元测试中调用该函数时 一切正常 在生产环境中 它也运行得很好 但是 在GAE开发服务器上调用该函数时 会抛出错误 ImportError 无法导入名称blockalgo
  • 使用 Python gdata 和 oAuth 2 对日历进行身份验证

    我正在将一个 Python 应用程序从 oAuth 1 迁移到 oAuth 2 该应用程序读取用户的 Google 日历提要 使用 oAuth 1 如果用户可以使用他的 GMail 进行身份验证 我的应用程序将打开浏览器 帐户并授权访问 我
  • 使用每日频率格式化 x 轴

    我正在尝试获取每日数据图 我有 3 个月的数据 每天都很难指出 如何格式化 x 轴 以便我可以获得每个日期 可以使用以下命令更改主要刻度的频率set major locator mdates DayLocator interval 5 如下
  • Python docker 容器在完成运行应用程序后立即关闭,即使指定保留在 -d -t 中

    我有一个 dockerfile FROM python 3 WORKDIR app ADD venv venv ADD data file1 csv gz data file1 csv gz ADD data file2 csv gz da
  • Python:多重分配与单独分配速度

    我一直在寻求从我的代码中挤出更多的性能 最近 在浏览时这个 Python 维基页面 https wiki python org moin PythonSpeed 我发现了这个说法 多重分配比单独分配慢 例如 x y a b 比 x a y
  • 我的 R 平方分数为负,但使用 k 倍交叉验证的准确度分数约为 92%

    对于下面的代码 我的 r 平方分数为负 但使用 k 折交叉验证的准确度分数为 92 这怎么可能 我使用随机森林回归算法来预测一些数据 数据集的链接在下面的链接中给出 https www kaggle com ludobenistant hr
  • 按工作日分组的熊猫 (M/T/W/T/F/S/S)

    我有一个 pandas 数据框 其中包含 YYYY MM DD arrival date 形式的时间序列 作为索引 我想按每个工作日 周一到周日 进行分组 以便计算其他日期列是平均值 中位数 标准差等 我最终应该只有七行 到目前为止我只知道
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 如何从 Python 脚本捕获 Curl 的输出

    我想使用curl查找有关网页的信息 但在Python中 到目前为止我有这个 os system curl head www google com 如果我运行它 它会打印出 HTTP 1 1 200 OK Date Sun 15 Apr 20
  • 开始使用 Python 在 CSV 的特定行上读写

    我有一个 CSV 文件 如下所示 COL A COL B 12345 A 1 B 2 C 3 如何读取该文件并将其写回新文件 但只写第二行 行 我希望输出文件包含 12345 A 1 B 2 C 3 Thanks 下面读取您的 csv 提取

随机推荐