19

私は部分的に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を特定する)を指定してから緩めるという考え方があります。

だから、私の質問は以下のとおりです。

  • は私の仮定が正しいですか?
  • ルールを適用するための検索戦略は何ですか?例えば。深みのあるもの、幅の広いもの、深みのもの、反復深いもの、何か一番最初のもの?
  • "ベストファースト"の場合、特定のルールアプリケーションが私たちの目標に近づいている可能性が高いかどうかを判断するヒューリスティックスが使用されますか?

私は他のアドバイスもありがとうございます(「あきらめる」を除いて - 私は定期的にそのアドバイスを無視しています。

+9

してください人、周りに他の方法で、えー...この広くないが近すぎるとして行います。これは興味深く、答えることができます。そして、とにかく、それらの "gimme teh codez"や "foo" [0] = 'b'; 'segfault?あなたの履歴書はもっと良い目的を果たすでしょう。 –

+0

方程式の解法や式の解析について質問していますか? "((((x + 1)-1)+1)-sin(x)-1))")はもう一つのことですが、 "150sin(x)-gamma(x)= 0"最初のものは2番目のものを含むかもしれない。 – hexafraction

+0

良い質問です。 LastCalcは、構文解析、単位変換の実行、式の簡略化、方程式の解法のいずれの場合でも、トークンのリストである一連の変換に過ぎないという点で、かなり変わっています。しかし、解析は難しいことではないので、解析に集中してください。 – sanity

答えて

10

私はしばらく前にこのような質問に対処しました。私は式の簡素化についてthis documentを見つけました。 ルールベースの式の簡略化であり、後でMatlabの一部となるMupadの簡略化の詳細を示しています。

この文書によれば、あなたの前提は正しいです。式を操作するための一連の規則があります。ヒューリスティックな品質メトリックは、簡略化のための目標関数として使用される。

+0

非常に参考になりました、ありがとうございます。残念ながら、それは多かれ少なかれ私が期待した、または多分それは幸運です、私はわからない:-) – sanity

+0

見つからない:(あなたは現在のリンクがどこにあるかも知っていますか? – Uzebeckatrente

2

ウォルフラムアルファは

  • Mathematicaはスティーブンwolphramの発案によるものであるのMathematica

    によって開発されています。 Mathematica 1.0は1988年にリリースされました。mathematicaはMapleによく似ていて、LaPackのような古いソフトウェアライブラリに大きく依存しています。
  • これらのプログラムは、レガシーソフトウェアに基づいていることが多く、単にレガシーソフトウェアであることが多いライブラリです。彼らは非常に長い間、周りにいて、変更されてきました。

実行しているバックグラウンドプログラムについて知りたい場合は、sagemathは無料のオープンソースの代替手段です。あなたは、可能な逆のご質問へのソリューションを設計できます。

SageMath.org

関連する問題