2016-08-30 12 views
2

有理関数がMatlabの多項式であるかどうかをチェックする方法はありますか?Rational関数がMatlabの多項式に簡略化されているかどうかをチェック


私は大きな合理的な機能を持って、私は多項式で表示するようにしようとしていますことを、Rそれを呼び出します。分母と分子に

  1. スプリット、それを::

    [num,den] = numden(R); 
    
  2. は、両方の多項式の根を計算します。

    私はsimplifysimplifyFraction機能と、以下の(非常に効果的ではない)の手順を試してみました
    r_num = roots(sym2poly(num)); 
    r_den = roots(sym2poly(den)); 
    
  3. r_denのすべての要素がr_numに属していることを確認してください。

数値の不正確さのため、私はこれを行う信頼できる方法を考え出すことができませんでした。

+0

あなたは残りの部分を簡単に実行しようとしましたか?剰余がゼロの場合、デノネータは分子に正確に分割されます。 – LutzL

答えて

2

これはあまりにも簡単な問題であり、多項式の最大公約数を見出すことは、研究の非常に活発な分野です。たくさんの出版物があり、オンラインで見つけることができます。

主な問題は、ルート検索が悪条件問題であるということです。そして、最近、いくつかの専門家が数値計算と記号表現を組み合わせようとしています。 ERESメソッドのgoogleの場合は、Christouの論文とともにエントリポイントがあります。

この問題は、伝達関数の表現とポールゼロキャンセルのために、信号と制御人にとって特に重要です。 Matlabは、すべてがOKであり、各極の極小の近傍がキャンセルとして受け入れられることを確認するために長い道を行く。

速い救済策として、多項式係数を1Dベクトル、たとえばabに変換し、minreal(tf(a,b))を使用してください。次に、その転送表現のnumとdenを抽出することができます。

恥知らずのプラグイン:私はpython3ライブラリの作成者ですが、私もシステム理論的アプローチを実装しました。 Hereおよびhereは、LCMおよびGCD操作に関する引用を含む完全な実装の詳細です。

関連する問題