私は数学とプログラミングに非常に興味があり、記号数学プロジェクトをゼロから始めることを計画しています。
これは良いプロジェクトのアイデアですか?
どこから始めれば?
このプロジェクトにどのようにアプローチすべきですか?
良いリソースはありますか?
前もって感謝します。
私は数学とプログラミングに非常に興味があり、記号数学プロジェクトをゼロから始めることを計画しています。
これは良いプロジェクトのアイデアですか?
どこから始めれば?
このプロジェクトにどのようにアプローチすべきですか?
良いリソースはありますか?
前もって感謝します。
プログラミングスキルを練習するのに良いプロジェクトです。しかし、他の人が使いたくなる本物のライブラリを作りたいなら、これは一人でゼロから始めたくないプロジェクトです...
どこから始めればよいか:すでに存在するソリューションを見て、何を変えたいかを考えてください。あなたのプロジェクトは他のプロジェクトとどのように異なりますか?
1.これは良いプロジェクトのアイデアですか?
はい; 興味深い作業の無限のソースを提供し、非常に迅速にプログラミング能力をテストおよび拡張することを期待しています.
2.どこから始めますか?
私は、既存の作業を検討する必要があるという他の提案を支持します。SAGE は非常に印象的です。私のアドバイスを求められた場合は、最初に数値と記号を使って算術演算を行うための基本的なシステムを作成することをお勧めします。次に、SAGE を調べて、システムを拡張するためのモジュールを作成します。つまり、すべてを自分でやろうとするのではなく、より大きなものへの貢献者になります。Mathematica と Maple、Macsyma と Axiom も見てください。後者の 2 つは無料 (だと思います) ですが、すべてオンラインで十分に文書化されており、アイデアや課題の優れた情報源です。
3. このプロジェクトにどのように取り組むべきですか?
象を食べるように。一度に一口。もっと深刻なことに、式の表現や基本的な機能 (多項式の演算) など、歯を削ることができるいくつかのコアの問題があると思います。
4.良いリソースはありますか?
とてもたくさん。「コンピュータ代数」、「用語書き換え」のグーグル。Amazonで購入できるものを見てみましょう。また、アクセスできる場合は、ACM デジタル ライブラリをチェックしてください
幸運を。
記号数学は楽しいプロジェクトです。誰かがそれを使用しているかどうかは、あなたの質問では問題にならないようです。
私はこれらのうちの2つを何年にもわたって書いてきました。最もクールなのは、SQL の where 句に対するものでした。これは、SQL に対して簡単な記号操作を行って、いくつかの追加の AND 条件を折り畳みました。完全な「ソルバー」や「オプティマイザー」などではなく、SQL where 句のいくつかの記号操作が可能です。あまりクールではないのはデバッガー用でした。複雑な計算を行って、変数のスタック オフセットを (シンボリックに) 計算しました。
数式の要素 (オペランド、演算子、関数など) のクラスを定義することから始めます。
これらのオブジェクトが参加しなければならない操作を決定する必要があります。式の具体的な値を取得するのは簡単で明白です。すべての変数にバインディングがある場合から始めます。
次に、一部の変数がバインドされていない場合を処理し、式の一部のみを評価できます。
次に、式を正規の形式に再配置します。つまり、部分的な評価を行い、Add( Variable(x), Add( Variable(x), Lit(3) ) )
. これを に変換するルールを記述する必要がありますAdd( Multiply( Lit(2), Variable(x) ), Lit(3) )
。
非常に優れた演習の 1 つは、括弧を最適化して、印刷出力で意味を捉えるのに必要な括弧が最小限になるようにすることです。
代数操作を行うために学校で学ぶ、他にも非常に多くの「式変換」ルールがあります。それらの多くは。
特に、方程式を並べ替えて変数を分離することは、場合によっては非常に難しい場合があります。
導関数変換を行うのは簡単ですが、記号積分は非常に多くの特殊なケースで非常に困難です。
基本は楽しい。あなたがどこまで行きたいかによって、それは次第に難しくなります。
@Resources: pythonicaを参照してください。これは、Mathematica タイプのプログラムを Python で実装する試みでした (ソース コードをダウンロードできます)。
このpySym ブログは、アイデアやスターターを得たり、他の人が python と記号数学で何をしているかを学ぶのにも興味があるかもしれません.
リソースの方法でさらに: SympyCore :
SympyCore プロジェクトの目的は、Python プログラミング言語でシンボリック式を表現および操作するための新しい高性能ソリューションを探し出し、新しいシンボリック モデルを試して、基本的に一貫性があり、十分に一般的なシンボリック モデルを実現することです。コンピューター代数システム (CAS)。
これは、あらゆるスキル レベルのプログラマーにとって素晴らしいプロジェクトだと思います。便利なだけの強力なシンボリック計算機を実装するのは非常に簡単です。幅を広げて作業を続けると、追加できる楽しい機能がたくさんあるので、長い間夢中になれます。深みを求めると、すぐに物事が非常に難しくなることがわかります。それが好きなら、無期限に自分自身に挑戦することができます。
多くの優れたリソースがあります。zur Gathen と Gerhard による本「Modern Computer Algebra」をお勧めしますが、一般的な記号操作よりも特殊な形式 (多項式、整数、行列) での算術演算に実際に関係しています。始めたばかりのときは、実際には Lisp や Scheme のチュートリアルを見た方が助けになるかもしれません。Lisp で記号演算を行うのは概念的に非常に簡単で、Python で記号エンジンを構築するには多かれ少なかれ基礎としてミニ Lisp を実装します。
他の人が指摘しているように、インスピレーションや具体的なアルゴリズムについては、SymPy と sympycore を見ることができます。どちらのプロジェクトのソース コードも少し複雑です (ただし、学ぶのはそれほど難しくありません)。
(少し差し込むと、私はしばらく前に小さなシンボリック エンジンを作成しました (週末のプロジェクトとして -- 非常に小さく、それ以来取り組んでいません)。約 200 行のコードで汎用シンボリック エンジンを実装します。 , そして, 記号演算と記号ブール代数を実装する 300 行のコードがあり, いくつかの非常に初歩的な単純化があります. おそらく SymPy よりも掘り下げる方が簡単です.そうする。)