检查有理函数是否简化为 Matlab 中的多项式

Checking if a Rational Function Simplifies to a Polynomial in Matlab

有没有办法在 Matlab 中检查有理函数是否为多项式?


我有一个很大的有理函数,称之为 R,我试图证明它是一个多项式。我已经尝试了 simplifysimplifyFraction 函数以及以下(不是很有效)程序:

  1. 将其拆分为分母和分子:

    [num,den] = numden(R);
    
  2. 计算两个多项式的根:

    r_num = roots(sym2poly(num));
    r_den = roots(sym2poly(den));
    
  3. 检查r_den的所有元素是否都属于r_num:

由于数值不精确,我无法想出一个可靠的方法。

这是一个不太容易的问题,寻找多项式的最大公约数是一个非常活跃的研究领域。有大量的出版物,您可以在网上找到它们。

主要问题是求根是病态问题。最近,一些专家正在尝试将数值计算与符号表示相结合。如果你 google ERES 方法 你将有一个切入点和 Christou 的论文。

由于传递函数表示和零极点抵消,此问题对于信号和控制人员尤为重要。 Matlab 竭尽全力确保一切正常,并且接受每个零极点的最小邻域作为取消。

因此,作为快速补救措施,将多项式系数转换为一维向量,例如 ab,然后使用 minreal(tf(a,b))。然后您可以提取该传输表示的 num 和 den。

无耻插件:我是一个python3库的作者,我也实现了一个系统的理论方法。 Here and here 是包含有关 LCM 和 GCD 操作的引用的完整实现细节。