有没有办法在Matlab中检查有理函数是否为多项式?
我有一个很大的有理函数,称之为R
,我试图证明它是一个多项式。我尝试过 simplify
和 simplifyFraction
函数以及以下(不是很有效)过程:
将其分解为分母和分子:
[num,den] = numden(R);
计算两个多项式的根:
r_num = roots(sym2poly(num)); r_den = roots(sym2poly(den));
检查r_den的所有元素是否都属于r_num:
由于数值不精确,我无法想出一种可靠的方法来做到这一点。
最佳答案
这是一个不太容易的问题,寻找多项式的最大公约数是一个非常活跃的研究领域。有大量出版物,您可以在网上找到它们。
主要问题是根查找是一个病态问题。最近,一些专家正在尝试将数值计算与符号表示结合起来。如果你用谷歌搜索ERES方法,你将会得到一个切入点以及Christou的论文。
由于传递函数表示和零极点抵消,这个问题对于信号和控制人员来说尤其重要。 Matlab 付出了很大的努力来确保一切正常,并且每个零极点的最小邻域被接受为取消。
因此,作为快速补救措施,请将多项式系数转换为一维向量,例如 a
和 b
,并使用 minreal(tf(a,b))
。然后您可以提取该传输表示的 num 和 den。
无耻插件:我是一个python3库的作者,我也实现了一个系统理论方法。 Here和 here是完整的实现细节,并引用了 LCM 和 GCD 操作。
关于matlab - 在 Matlab 中检查有理函数是否简化为多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39236777/