式の簡素化
答えて
ここでスタートだ:
変更(define (diff x expr) ...)
から(define (simp expr) ...)
ような何かにあなたの導関数。 x + x
場合の
、
(case (car expr)
((+) (if (equal u v) ; check for identical subexpressions
`(* ,(simp u) 2) ; if u==v, simplify 2u
`(+ ,(simp u) ,(simp v))))
...)
ような何かをx * x
場合は類似していなければなりません。さまざまな簡略化が必要な場合は、if
をcond
に変換することをおすすめします。
これは完全に解決するのは難しい問題であり、elibenが提供するリンクは見ておく価値があります。
代数式の簡略化は、特に派生物の計算と比較すると非常に困難です。簡略化は再帰的に行う必要があります。最も内側の式を最初に簡略化します。一度にあまり試してはいけません。私は、最も基本的な単純化だけ例えばで開始したい:
0 + x -> x
0 * x -> 0
1 * x -> x
x^0 -> 1
x^1 -> x
これは単純化として見ていないかもしれないが、それはあなたのコードを簡素化します乗算
x - y -> x + (-1)*x
x/y -> x^(-1)
により加算と除算減算を交換してください。最後にこのステップをいつでも元に戻すことができます。
次に、結合性と可換性を使用して用語をソートします。
(x * y) * z -> x * (y * z)
x * 2 -> 2 * x
2 * (x * 3) -> 2 * (3 * x)
簡素化指数
(x^y)^z -> x^(y * z)
は、数値を簡素化(それはアルファベットである必要はありませんが、それは常に同じである必要があります)いくつかの事前定義された順序で変数をソートし、左側に数値を移動します部品。
2 * (3 * x) -> 6 * x
2 + (3 + x) -> 5 + x
これを済ませたら、一般的な表現を収集することができます。
一般的な問題は難しいですが、キー(変数名)から係数までの有限マップとして表される積和の正規形では、長い道のりを得ることができます。この形式は、線形方程式と線形解法に最適であり、多大なトラブルを伴わずに乗算と累乗に拡張することができます。このフォームで算術演算に "スマートコンストラクタ"を定義すると、妥当なシンボリックな微分と方程式の解法が得られます。
これは簡単なハックですが、いくつかのアプリケーションで使用しました。それはいくつか働いていました。数回それは十分ではなかった。より深刻なことに対して、あなたは長年の仕事を話しています。
コード例が必要な場合は、one of my equation solversを参照してください。
面白いですね。あなたは.pdfのような論文を持っていますか? – Accipitridae
- 1. SymPyの式の簡素化
- 2. 簡素化ブール式は
- 3. 3つの公式の簡素化
- 4. 簡素化
- 5. 簡素化テンプレートパラメータ
- 6. 簡素化データ
- 7. 簡素化ソリューション
- 8. セットの簡素化
- 9. インクリメンタルラインの簡素化
- 10. ルーティングの簡素化
- 11. 条件式の簡略化
- 12. ブール式アルゴリズムの簡略化
- 13. ブール式の簡略化
- 14. 簡素化作業
- 15. 簡素化JSONツリー
- 16. 簡素化定数は以下の式で
- 17. 私は、次の式簡素化したい
- 18. MySQLのクエリの簡素化
- 19. 簡素化if文、Javaの
- 20. コントロールMapboxGLジオメトリの簡素化
- 21. 簡素化ステートメントのpython
- 22. C++ 11バウンドメソッドシグネチャの簡素化
- 23. Prologのセールスマン簡素化
- 24. PDO関数の簡素化
- 25. 簡素化、複数のスクリプト
- 26. VBAコードの簡素化
- 27. YACC(バイソン)ASTの簡素化
- 28. typescriptコーディングワークフローの簡素化
- 29. 数式は最小演算で簡素化
- 30. 簡素化T-SQL要求
多くの具体的で簡単な実装ルールを含む素敵な要約については、「計算の歴史とコンピュータ代数システムの開発」を参照してください。関連する章は次のとおりです。http://www.math.wpi.edu/IQP/BVCalcHist/calc5.html#_Toc407004393 – dsg