【问题标题】:Matlab - find dominant poles programmaticallyMatlab - 以编程方式查找主导极点
【发布时间】:2015-11-13 21:20:53
【问题描述】:

我有一个具有 48 个特征值的 SISO 系统(tf 形式),我想找到主导极点(假设将其减少到一阶或二阶)。我需要知道它们来近似计算我系统的阻尼和带宽。我不想依赖时间响应的识别,也不想看 pzmap(因为我必须做很多次)。有没有人有解决它的想法?提前感谢您的帮助。

【问题讨论】:

  • 您可以通过查看零极点图来找到最主要的极点……或者只是极点……并找到最接近虚轴的极点。除非我看到你写的一些代码,否则我真的不能再告诉你了。
  • 这就是我现在正在做的事情......但是由于我必须做很多次(比如说超过 30 次),所以我正在寻找一个程序化的解决方案......跨度>
  • 我试了一下。看看吧。
  • 这个答案对你有帮助吗?如果是,请考虑接受我的回答。

标签: matlab system eigenvalue transfer-function ss


【解决方案1】:

如果您已经给出了传递函数,您可以做的是分析极点并根据它们的实际值进行排序。 稳定(即在复平面的左侧)并且最接近虚轴的极点或复极点对将是您选择的最主要的极点.

考虑到您的传递函数存储在TF 对象中,我们将其称为T

%// Get numerator and denominator data
[num,den] = tfdata(T, 'v');

%// Get the poles
pl = roots(den);

%// Get the stable poles only
pl_stable = pl(real(pl) < 0);

%// Determine the closest real location to the imaginary axis
[~,ind] = min(abs(real(pl_stable)));

%// Find all poles that share this same real location
tol = 1e-10;
ind_final = find(abs(real(pl_stable - pl_stable(ind))) <= tol);
final_poles = pl_stable(ind_final);

此代码的第一部分查找传递函数的分子和分母系数,并将它们分别存储在numden 中。之后,我们通过找到分母的根来获得传递函数的极点。之后,我们通过搜索实部为负的所有极点,仅分离出稳定极点。

一旦我们隔离出这些极点,我们就会通过使用min 并使用第二个输出来确定这个最小值的位置来确定最接近假想访问的极点。

之后,我们希望通过搜索在这个最小实数值的小容差范围内的所有极点来找到共享这个最小实分量的所有极点。我将此容差设置为1e-10。一旦我们找到这些位置,我们就可以索引到稳定的极点阵列并取出我们需要的东西。


这是一个小例子:

>> T = tf([1 1], [1 3 2 1])

T =

          s + 1
  ---------------------
  s^3 + 3 s^2 + 2 s + 1

Continuous-time transfer function.

检查两极,我们得到:

>> pl

pl =

  -2.3247 + 0.0000i
  -0.3376 + 0.5623i
  -0.3376 - 0.5623i

如您所见,有一对主极点的实分量为-0.3376,而另一个更远的实极点位于-2.3247s = -0.3376 +/- 0.5623i 的那对极点是我们需要提取出来的。

运行上面的代码,我们得到:

>> final_poles

final_poles =

  -0.3376 + 0.5623i
  -0.3376 - 0.5623i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多