実行する C++ オープン ソース ライブラリ (またはオープン ソースの Unix ツール) を探しています。
式は、実行時に AST ツリー、文字列、またはその他の形式で作成できます。
方程式はほとんどが単純な代数であり、未知の関数に関するいくつかの仮定があります。ドメインは、整数演算になります (関連する問題はよく知られているため、浮動小数点の問題はありません。@hardmath にストレスを与えてくれてありがとう、私はそれが既知であると仮定しました)。
例: 入力には function が含まれphi
ており、それに関する仮定 (ほとんどの場合)phi(x,y)=phi(y,x)
があり、 を解決しようとします。
equality_test( phi( (a+1)*(a+1) , a+b ) = phi( b+a, a*a + 2a + 1 )
ファジーまたは任意の等式テストである可能性があります-つまり、常に成功する必要はありません(方程式が等しい場合でも「false」を返す場合があります)。
phi
関数に関する上記のような仮定をサポートすることに問題がある場合は、私はこれを処理できます。そのため、単純な線形代数方程式の等価テスターも同様に歓迎されます。
- C/C++ プログラミング ライブラリまたは Unix ツールの推奨事項を教えてください。(オープンソース)
- 可能であれば、そのような等価テストが特定のライブラリ/ツールでどのように見えるかの例を添付していただけますか?
PS そのような equality_test が (成功した場合) 2 つの与えられた方程式の間で同形性 (つまり、一種の「マッピング」) を返すことができれば、大歓迎です。しかし、そのような機能を持たないツールも大歓迎です。
PS「ファジーテスター」とは、ランダムな入力に対するテストではなく、2つの関数の「同形」を探すという点で、内部方程式ソルバーが「ファジー」になることを意味します-確かにこれを実装できますが、試してみますより精度の高いものを見つけるために。
PPSブルートフォース「すべての入力テスト」よりも優れたパフォーマンスソリューションが必要な理由は別の問題です。上記の方程式は、方程式内の変数間のマッピングを持たない、私の内部問題の単純化された形式です。つまり、私にはeq1=phi( (a+1)*(a+1) , a+b )
とがありeq2=phi( l+k, k*k + 2k + 1 )
、それと を見つけなければなりませa==k
んb==l
。しかし、このサブ問題は、「総当たり」アプローチ (このアプローチの漸近的な複雑さでさえ) で処理できます。変数がわずかしかない場合は、8 とします。そのため、可能なマッピングごとにこの equation_test を実行する必要があります。その仕事を丸ごとできるツールがあれば、とてもありがたいし、そのようなプロジェクトに貢献できます。しかし、私はそのような機能を必要としません。単にequation_test()で十分であり、残りを簡単に処理できます。
要約すると:
- equality_test() は、私が解決しなければならない多くの下位問題の 1 つにすぎないため、計算の複雑さが重要になります。
- 100% 信頼できる必要はありませんが、いくつかのランダムな入力と変数マッピングを使用して方程式をテストするだけでなく、可能性が高くなります:)。
- 「はい」または「いいえ」の出力 (すべての追加情報は役立つかもしれませんが、将来的には、この段階で「はい」/「いいえ」が必要です)