检查有理函数是否简化为 Matlab 中的多项式
Checking if a Rational Function Simplifies to a Polynomial in Matlab
有没有办法在 Matlab 中检查有理函数是否为多项式?
我有一个很大的有理函数,称之为 R
,我试图证明它是一个多项式。我已经尝试了 simplify
和 simplifyFraction
函数以及以下(不是很有效)程序:
将其拆分为分母和分子:
[num,den] = numden(R);
计算两个多项式的根:
r_num = roots(sym2poly(num));
r_den = roots(sym2poly(den));
检查r_den的所有元素是否都属于r_num:
由于数值不精确,我无法想出一个可靠的方法。
这是一个不太容易的问题,寻找多项式的最大公约数是一个非常活跃的研究领域。有大量的出版物,您可以在网上找到它们。
主要问题是求根是病态问题。最近,一些专家正在尝试将数值计算与符号表示相结合。如果你 google ERES 方法 你将有一个切入点和 Christou 的论文。
由于传递函数表示和零极点抵消,此问题对于信号和控制人员尤为重要。 Matlab 竭尽全力确保一切正常,并且接受每个零极点的最小邻域作为取消。
因此,作为快速补救措施,将多项式系数转换为一维向量,例如 a
和 b
,然后使用 minreal(tf(a,b))
。然后您可以提取该传输表示的 num 和 den。
无耻插件:我是一个python3库的作者,我也实现了一个系统的理论方法。 Here and here 是包含有关 LCM 和 GCD 操作的引用的完整实现细节。
有没有办法在 Matlab 中检查有理函数是否为多项式?
我有一个很大的有理函数,称之为 R
,我试图证明它是一个多项式。我已经尝试了 simplify
和 simplifyFraction
函数以及以下(不是很有效)程序:
将其拆分为分母和分子:
[num,den] = numden(R);
计算两个多项式的根:
r_num = roots(sym2poly(num)); r_den = roots(sym2poly(den));
检查r_den的所有元素是否都属于r_num:
由于数值不精确,我无法想出一个可靠的方法。
这是一个不太容易的问题,寻找多项式的最大公约数是一个非常活跃的研究领域。有大量的出版物,您可以在网上找到它们。
主要问题是求根是病态问题。最近,一些专家正在尝试将数值计算与符号表示相结合。如果你 google ERES 方法 你将有一个切入点和 Christou 的论文。
由于传递函数表示和零极点抵消,此问题对于信号和控制人员尤为重要。 Matlab 竭尽全力确保一切正常,并且接受每个零极点的最小邻域作为取消。
因此,作为快速补救措施,将多项式系数转换为一维向量,例如 a
和 b
,然后使用 minreal(tf(a,b))
。然后您可以提取该传输表示的 num 和 den。
无耻插件:我是一个python3库的作者,我也实现了一个系统的理论方法。 Here and here 是包含有关 LCM 和 GCD 操作的引用的完整实现细节。