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

标签 matlab symbolic-math

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


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

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

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

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

由于数值不精确,我无法想出一种可靠的方法来做到这一点。

最佳答案

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

主要问题是根查找是一个病态问题。最近,一些专家正在尝试将数值计算与符号表示结合起来。如果你用谷歌搜索ERES方法,你将会得到一个切入点以及Christou的论文。

由于传递函数表示和零极点抵消,这个问题对于信号和控制人员来说尤其重要。 Matlab 付出了很大的努力来确保一切正常,并且每个零极点的最小邻域被接受为取消。

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

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

关于matlab - 在 Matlab 中检查有理函数是否简化为多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39236777/

相关文章:

matlab - Matlab 中的多个 pathdef 文件?

matlab - CPLEX API for MATLAB 中的分段线性约束

python - 计算机代数软件,用于最小化一组多项式中的运算次数

python - Sympy 中使用动态符号的微分方程

octave - Octave 中的符号集成? (需要安装扩展?如何? - 使用 Ubuntu 12.04)

matlab - 我如何知道 syms 向量中的元素是否已分配 (MATLAB)?

matlab - matlab中数组转向量的方法

matlab - 每个状态的隐马尔可夫模型多个观察值

c++ - sub2Ind matlab 到 c++/opencv 的转换

python - SymPy:如何使用常量计算表达式?