私は部分的にPrologとHaskellに触発されたWebベースのプログラミング言語を構築しています(笑いません)。Wolfram AlphaやMathematicaのようなシステムは、方程式をどのように解決しますか?
既に機能がかなりあります。プロトタイプはhttp://www.lastcalc.com/で確認できます。ソースhereが表示され、アーキテクチャhereについて読むことができます。それはプロトタイプだと思います。
現在、LastCalcでは、式を簡略化したり、方程式を解くことはできません。これをJavaでハードコーディングするのではなく、Prologのように言語そのものを使ってこれらのことを行うように拡張することができるように、基本言語を拡張したいと考えています。 Prologとは異なり、LastCalcはより強力な検索アルゴリズムを備えており、Prologは「バックトラックを伴う深さ優先検索」であり、LastCalcは現在ヒューリスティックな最良優先検索を使用しています。
これを調べる前に、他のシステムがこの問題をどのように解決しているか、特にMathematica/Wolfram Alphaについてもっと知りたいと思います。
少なくとも一般的なケースでは、方程式(a*(b+c) = a*b + a+c
など)を操作するための一連のルールを指定して目標(例:変数xを特定する)を指定してから緩めるという考え方があります。
だから、私の質問は以下のとおりです。
- は私の仮定が正しいですか?
- ルールを適用するための検索戦略は何ですか?例えば。深みのあるもの、幅の広いもの、深みのもの、反復深いもの、何か一番最初のもの?
- "ベストファースト"の場合、特定のルールアプリケーションが私たちの目標に近づいている可能性が高いかどうかを判断するヒューリスティックスが使用されますか?
私は他のアドバイスもありがとうございます(「あきらめる」を除いて - 私は定期的にそのアドバイスを無視しています。
してください人、周りに他の方法で、えー...この広くないが近すぎるとして行います。これは興味深く、答えることができます。そして、とにかく、それらの "gimme teh codez"や "foo" [0] = 'b'; 'segfault?あなたの履歴書はもっと良い目的を果たすでしょう。 –
方程式の解法や式の解析について質問していますか? "((((x + 1)-1)+1)-sin(x)-1))")はもう一つのことですが、 "150sin(x)-gamma(x)= 0"最初のものは2番目のものを含むかもしれない。 – hexafraction
良い質問です。 LastCalcは、構文解析、単位変換の実行、式の簡略化、方程式の解法のいずれの場合でも、トークンのリストである一連の変換に過ぎないという点で、かなり変わっています。しかし、解析は難しいことではないので、解析に集中してください。 – sanity