2016-08-30 22 views
2

有沒有辦法檢查一個有理函數是否是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:

由於數值不精確,我無法想出一個可靠的方法來做到這一點。

+0

您是否嘗試過簡單地使用餘數執行除法?如果餘數爲零,那麼分母恰好分成分子。 – LutzL

回答

2

這是一個不太容易的問題,找到多項式的最大公約數是一個非常活躍的研究領域。有大量的出版物,你可以在網上找到它們。

主要問題是根發現是一個病態的問題。最近一些專家正試圖將數值計算與符號表示相結合。如果你的谷歌爲ERES方法你將有一個切入點與Christou的論文。

由於傳遞函數表示和極點零點取消,此問題對於信號和控制人員尤其重要。 Matlab走出很長的路要確保一切正常,並且每個極點零的最小鄰域被接受爲取消。

因此,作爲一種快速補救措施,將多項式係數轉換爲1D向量,如ab,並使用minreal(tf(a,b))。然後,您可以提取該傳輸表示的num和den。

無恥的插件:我是一個python3庫的作者,我也實現了一個系統理論方法。 Herehere是有關LCM和GCD操作引用的完整實施細節。

相關問題