ような代数式を単純化できるオープンソースまたはアクセスしやすいソフトウェアはありますか


17

私は常に物事を手作業で計算しますが、今では私の仲間は厄介になり、上の表現のように物事をプラグインするだけで多くの反復運動をしています。これらの種類の方程式を単純化するためのPythonやRなどのオープンソースソフトウェアに特に興味があります。私はウルフラムアルファを使用してみましたが、私は失敗しました。式x = を置き換えることができるオープンソースソフトウェアパッケージを方程式x 2 +2x+3に代入し、結果を単純化しますか?具体的には、コマンドのようなソフトウェアパッケージを探しています。x=2t1x2+2x+3simplify

回答:


28

SymPyを調べてください。SymPyは、目的の単純化コマンドを備えたPythonライブラリです。

>>> from sympy.abc import t
>>> import sympy
>>> x = t*2**(1/2) - 1
>>> x**2 + 2*x + 3
2*t + (t - 1)**2 + 1
>>> sympy.simplify(x**2 + 2*x + 3)
t**2 + 2

2
私はSageを提案するつもりでしたが、まだ象徴的な機能を持っていないように見えますが、MapleとMathematicaのオープンソースの代替になることを目指しているため、最終的には象徴的な機能を組み込むと思います。
ジェフオックスベリー

1
Sageにはシンボリック機能があります(シンボリック積分を行うために使用しました)が、探していない限り、その方法は特に明確ではありません。をシンボルとして使用する場合は、のように事前に宣言する必要がありますvar('a')。少なくともこれは、3年または4年前にセージを頻繁に使用していたときに当てはまりました。一般に、数学はシンボリックな結果が欲しいと仮定し、セージは数値的な結果が欲しいと仮定します。
ダン

1
@hhh:誤解がない限り、コードフラグメントは、評価および簡略化する式に対応していません。
ジェフオックスベリー

@GeoffOxberry:元の質問のLaTeXの問題と同様に、私はその問題を修正しようとしました。
ジャックポールソン

1
私の理解では、Sageは実際にSymPyコードベースの多くを組み込んでいます。
MRocklin

9

Sageはそれを行うことができます(単純化の部分に到達するには、ページをかなり下までスクロールする必要があります)。

また、Sageの記号数学の一般的な紹介を必ず読んでください。セマンティクスと構文は、ほとんどの人がよく知っているMathematicaとはまったく異なります。

リンク先のドキュメントの例を次に示します。

sage: var('x,y,z,a,b,c,d,e,f')
(x, y, z, a, b, c, d, e, f)
sage: t = a^2 + b^2 + (x+y)^3
# substitute with keyword arguments (works only with symbols)
sage: t.subs(a=c)
(x + y)^3 + b^2 + c^2

あなたの場合、これはうまくいくはずです:

var(f,x,t)
f=x^2+2*x+3
f.subs(x=(sqrt(2)*t-1))
f.simplify()

そのため、ドキュメント検索エンジンを改善する必要があります。「単純化」と入力しましたが、そのページはまったく表示さませんでした。素敵な発見!
ジェフオックスベリー

Googleに「sage簡素化」と入力しました。
ダン

8

高品質の高度なオープンソースパッケージで既にいくつかの良い答えを得ています。

http://www.mathics.net/を指すようにしたい(あなたがそれをダウンロードしたい場合はhttp://mathics.org/)あなたはおなじみとすることができる(Mathematicaの構文を使用して、オープンソースのCASです、 WolramAlphaを使用している場合は少し)。あなたが得た他の提案のどれほども完全ではありません。ただし、質問で説明した(非常に単純な)操作は実行できます。

質問で話しているのは、実際には単純化ではなく、置換拡張です(より複雑な単純化とは異なり、最も基本的なCASでも利用可能な操作を実装するのは非常に簡単です)。

Mathicsでは、次のようになります。

eq = x^2 + 2x + 3

eq /. x -> Sqrt[2] t - 1

Expand[%]

単純化関数が必要な場合、それはと呼ばれSimplify[]Expand[]上記の例の代わりに機能します。


8

以下のようAKIDが提案され、wxMaximaは由緒あるに素晴らしいグラフィカルなフロントエンドですlispのベースのコンピュータ代数システムが呼ばマキシマ

あなたの例を使用すると、次のようなものが得られます:

(%i1)eq1: x=t*2**(1/2)-1;
(%o1)バツ=2t1
(%i2)eq2: x**2+2*x+3;
(%o2)バツ2+2バツ+3
(%i3)eq3: subst(eq1, eq2);
(%o3)2t12+22t1+3
(%i4)ratsimp(eq3);
(%o4)2t2+2

または、直接行うことができます:

(%i5)ratsimp(subst(x=t*2**(1/2)-1, x**2+2*x+3));
(%o5)2t2+2

Maximaにはさまざまな単純化の方法がありますratsimpが、最初の一歩としては良い方法です。





弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.