2

C++ を使用して 4 つの二次多項式のシステムを解こうとしています。システムを解決するための最速の方法は何ですか?可能であれば、リンクするか、それを説明するための小さな疑似コードを記述していただけますか? Groebners 基底または QR 分解を含むソリューションは知っていますが、それらがどのように機能し、どのように実装するかについての明確な説明を見つけることができません。多項式に関するおそらく役立つ情報:

  • 解が存在する場合もあれば、存在しない場合もありますが、特定の範囲の解にのみ関心があります (例: [0,1] の x、y、z、t)
  • 多項式の形式は、a + bx + cy + d*x*y = e + fz + gt + h*z*t (x、y、z、t について解く) です。すべての係数は一意です。
  • 多項式は双一次補間から得られます。
  • 私は正確な解析解を見つけようとしましたが、他の人が投稿したように、Mathematica などで大規模な多項式系を解くには時間がかかります
4

2 に答える 2

1

C++ で記述された汎用ソルバーIPOPTを単純に使用します。[0, 1] 境界制約を与えることができます。これは実際に IPOPT に役立ち、解法手順を高速化します。

システムの希薄パターンは変化しますか? そうでない場合は、おそらく初期化ステップを節約できます。私は100%確かではありません。いずれにせよ、IPOPT は Mathematica の分析ソリューションに比べて非常に高速です。

于 2012-08-16T21:29:48.377 に答える
0

非線形連立方程式の解について説明している Numerical Recipes book (c バージョンの第 9 章) を見ることができます。Web サイトhttp://www.nr.com/から表示できるオンライン バージョンがあります。

それらのライセンスは非常に制限されているため、おそらくメソッドを見てから、gsl などのライブラリを使用して適応させることができます。私は試しませんでしたが、このページhttp://na-inet.jp/na/gslsample/nonlinear_system.htmlは gsl でそれを行う方法の例を示しています。

于 2012-08-16T20:18:37.120 に答える