在 MATLAB 中实现电机系统最小二乘估计的最佳方法是什么?

计算科学 matlab 矩阵 最小二乘 实验
2021-11-29 15:31:26

基本上,我正在尝试使用最小二乘法来估计直流电机的参数。

我的系统可以通过以下矩阵方程建模:

[Vinput(t)0]=[didt(t)I(t)ω(t)0000I(t)dωdt(t)ω(t)]×[LRktJB]

据我了解(诚然可能还不够),如果我碰巧知道少数数据点的时间相关变量。如果我将方程的形式设为,那么在特定离散时刻的最小二乘估计应该由[L,R,kt,J,B]TY=M×KK^=(MTM)1MTY

我有一个电机设置为由正弦电压信号驱动,偏移以使电流不会反转(为简单起见)。我测量了角速率、施加的电压和施加的电流。为了从噪声信号中获得必要的导数,我在 MATLAB 中构建了一个正弦拟合脚本,它可以最小化所有测量数据点的拟合信号和噪声信号之间的平均绝对差。我不是统计学家,但最终的拟合结果被认为是“好的”,所以我继续前进。

角速率信号

更大的版本

对每个测量参数使用平滑拟合曲线,我计算了必要的导数并将所有内容插入 MATLAB。(我知道 K = inv(M.'*M)*(M.'*Y) 不是对计算最友好的,但我需要坚持我在文章中列出的实验程序。 )

拟合曲线和导数

更大的版本

我对的输出是绝对垃圾,MATLAB 吐出的值似乎都不合理。有大得离谱的值,非常小的值,还有很多负值。(物理性质不应该是负数。)[L,R,kt,J,B]T

糟糕的参数估计

更大的版本

我曾计划为我的每个数据向量估计然后平均这些结果,但是当我的结果时我显然不会得到任何有意义的东西已经没用了。[L,R,kt,J,B]T

这里有人会碰巧知道我可能出错的地方吗?

我一直盯着我的代码,直到我没有取得太大进展而交叉眼睛,所以我怀疑这可能是“垃圾输入导致垃圾输出”的情况。我对正在发生的事情的稍微受过教育的猜测是:

  1. 我忽略了数学中一些基本的东西。
  2. 某处存在数据不匹配。
  3. 我会迷失在浮点错误中。(符号 MATLAB 表示的行列式,但我知道人们相当频繁地使用这种数学。因此,我只能得出这样的结论:计算有效,但对测量值或其他东西的变化非常敏感.)MTM0

有人有想法吗?老实说,我不确定我错过了什么。(这是基于本文的修改。)

注意:这个问题被转发到 SciComp.SE,因为有人建议Physic.SE可能不太适合它。

编辑: 使用伪逆并让 MATLAB 更有效地执行$(M^TM)^{-1)M^T$部分有所帮助,但我的输出仍然看起来像垃圾。

还是垃圾结果

更大的版本

0个回答
没有发现任何回复~