Apakah ada perangkat lunak sumber terbuka atau mudah diakses yang dapat menyederhanakan ekspresi aljabar seperti

17

Saya selalu menghitung hal-hal dengan tangan, tetapi sekarang kawan-kawan saya menjadi jahat dan membuat banyak latihan berulang yang melibatkan hanya memasukkan hal-hal seperti ungkapan di atas. Saya terutama tertarik pada perangkat lunak sumber terbuka seperti Python atau R untuk menyederhanakan persamaan semacam ini. Saya mencoba menggunakan Wolfram Alpha , tetapi saya tidak berhasil. Paket perangkat lunak open-source apa yang dapat menggantikan ekspresi ke dalam persamaan dan menyederhanakan hasilnya? Secara khusus, saya mencari paket perangkat lunak yang memiliki sesuatu seperti perintah.x 2 +2x+3x=2t-1x2+2x+3simplify

Jack Poulson
sumber

Jawaban:

28

Anda mungkin ingin melihat SymPy , yang merupakan pustaka Python dengan perintah simplify yang Anda inginkan .

>>> 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
Jack Poulson
sumber
2
Saya akan menyarankan Sage , tetapi tampaknya belum memiliki kemampuan simbolis, meskipun orang akan berpikir bahwa itu akhirnya akan menggabungkan kemampuan simbolis karena bertujuan untuk menjadi alternatif open-source untuk Maple dan Mathematica.
Geoff Oxberry
1
Sage memang memiliki kemampuan simbolik (saya sudah menggunakannya untuk melakukan integral simbolik), tetapi tidak terlalu jelas bagaimana melakukannya kecuali Anda mencarinya. Jika Anda ingin menggunakan sebagai simbol, Anda harus mendeklarasikannya sebelumnya, seperti pada var('a'). Setidaknya ini benar ketika saya terakhir menggunakan bijak 3 atau 4 tahun yang lalu. Secara umum, Mathematica berasumsi bahwa Anda menginginkan hasil simbolik dan orang bijak menganggap Anda menginginkan hasil numerik.
Dan
1
@ hhh: Kecuali saya salah, fragmen kode Anda tidak sesuai dengan ekspresi yang ingin Anda evaluasi dan sederhanakan.
Geoff Oxberry
@ GeoffOxberry: Saya mencoba untuk memperbaiki masalah itu, serta satu di LaTeX dalam pertanyaan awal.
Jack Poulson
1
Pemahaman saya adalah bahwa Sage sebenarnya menggabungkan banyak basis kode SymPy.
MRocklin
9

Sage dapat melakukan itu (Anda harus menggulir cukup jauh ke bawah halaman untuk sampai ke bagian penyederhanaan).

Juga, pastikan Anda membaca pengantar umum untuk matematika simbolik di Sage. Semantik dan sintaksisnya sangat berbeda dari Mathematica , yang dikenal oleh kebanyakan orang.

Berikut ini contoh dari dokumentasi yang saya tautkan dengan Anda:

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

Untuk kasus Anda, ini harus bekerja:

var(f,x,t)
f=x^2+2*x+3
f.subs(x=(sqrt(2)*t-1))
f.simplify()
Dan
sumber
Mesin pencari dokumentasi mereka perlu ditingkatkan. Saya mengetik "sederhanakan" dan tidak mendapatkan halaman itu sama sekali . Temuan yang bagus!
Geoff Oxberry
Saya baru saja mengetik "sage simplify" ke google.
Dan
8

Anda sudah mendapatkan beberapa jawaban yang baik dengan paket open source canggih berkualitas tinggi.

Saya ingin mengarahkan ke http://www.mathics.net/ (http://mathics.org/ jika Anda ingin mengunduhnya), yang merupakan CAS open source menggunakan sintaks Mathematica (yang mungkin Anda kenal dengan sedikit jika Anda menggunakan WolramAlpha). Itu hampir tidak selengkap salah satu saran lain yang Anda dapatkan. Tetapi itu dapat melakukan operasi (sangat sederhana) yang Anda bicarakan dalam pertanyaan Anda.

Apa yang Anda bicarakan dalam pertanyaan Anda sebenarnya bukan penyederhanaan, tetapi substitusi dan perluasan (yang, tidak seperti penyederhanaan yang lebih kompleks, sangat mudah untuk mengimplementasikan operasi yang tersedia bahkan dalam CAS paling dasar):

Dalam Matematika akan terlihat seperti ini:

eq = x^2 + 2x + 3

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

Expand[%]

Jika Anda membutuhkan fungsi penyederhanaan, itu disebut Simplify[], dan juga akan bekerja di tempat Expand[]dalam contoh di atas.

Szabolcs
sumber
8

Sebagai Akid menyarankan, wxMaxima adalah grafis front end besar untuk terhormat cadel berdasarkan Aljabar Komputer Sistem yang disebut Maxima .

Menggunakan contoh Anda, Anda akan mendapatkan sesuatu seperti:

eq1: x=t*2**(1/2)-1;
x=2t-1
eq2: x**2+2*x+3;
x2+2x+3
eq3: subst(eq1, eq2);
(2t-1)2+2(2t-1)+3
ratsimp(eq3);
2t2+2

atau Anda bisa langsung melakukannya:

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

Maxima memiliki sejumlah cara penyederhanaan yang berbeda, tetapi ratsimpmerupakan langkah pertama yang baik.

Mark Booth
sumber
5

Saya pikir saya bisa membuat Wolfram Alpha bekerja . Mungkin saya salah tentang apa yang Anda cari.

tanpa
sumber
1

Anda dapat melakukannya dengan Aksioma (atau OpenAxiom atau Fricas ):

(1) -> eval( x^2 + 2*x + 3, x=sqrt(2)*t-1)
(1) -> 
          2
   (1)  2t  + 2
                                            Type: Polynomial(AlgebraicNumber)
(2) ->  
Thomas Baruchel
sumber