Có bất kỳ mã nguồn mở hoặc dễ truy cập phần mềm có thể đơn giản hóa biểu thức đại số như


17

Tôi luôn tính toán mọi thứ bằng tay, nhưng bây giờ các đồng chí của tôi đang trở nên khó chịu và thực hiện rất nhiều bài tập lặp đi lặp lại liên quan đến việc chỉ cắm các thứ vào như biểu hiện ở trên. Tôi đặc biệt quan tâm đến các phần mềm nguồn mở như Python hoặc R để đơn giản hóa các loại phương trình này. Tôi đã thử sử dụng Wolfram Alpha , nhưng tôi đã không thành công. Có gì các gói phần mềm mã nguồn mở có thể thay thế biểu thức vào phương trìnhx 2 +2x+3và đơn giản hóa kết quả? Cụ thể, tôi đang tìm kiếm một gói phần mềm có một cái gì đó giống như mộtlệnh.x= =2t-1x2+2x+3simplify

Câu trả lời:


28

Bạn có thể muốn xem xét SymPy , đây là một thư viện Python với lệnh đơn giản hóa mong muốn của bạn .

>>> 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
Tôi sẽ đề xuất Sage , nhưng dường như nó chưa có khả năng tượng trưng, ​​mặc dù người ta sẽ nghĩ rằng cuối cùng nó sẽ kết hợp một khả năng tượng trưng bởi vì nó nhằm mục đích trở thành một sự thay thế nguồn mở cho Maple và Mathicala.
Geoff Oxberry

1
Sage có khả năng tượng trưng (tôi đã sử dụng nó để thực hiện các tích hợp tượng trưng), nhưng nó không đặc biệt rõ ràng làm thế nào để làm điều đó trừ khi bạn tìm kiếm nó. Nếu bạn muốn sử dụng như một biểu tượng, bạn phải khai báo trước, như trong var('a'). Ít nhất điều này là đúng khi lần cuối tôi sử dụng cây xô thơm thường xuyên cách đây 3 hoặc 4 năm. Nói chung, mathicala giả định rằng bạn muốn có một kết quả tượng trưng và hiền giả cho rằng bạn muốn có một kết quả bằng số.
Dan

1
@hhh: Trừ khi tôi nhầm, đoạn mã của bạn không tương ứng với biểu thức bạn muốn đánh giá và đơn giản hóa.
Geoff Oxberry

@GeoffOxberry: Tôi đã cố gắng khắc phục vấn đề đó, cũng như một vấn đề trong LaTeX trong câu hỏi ban đầu.
Jack Poulson

1
Sự hiểu biết của tôi là Sage thực sự kết hợp phần lớn cơ sở mã SymPy.
MRocklin

9

Sage có thể làm điều đó (bạn sẽ phải cuộn khá xa trang để đến phần đơn giản hóa).

Ngoài ra, hãy chắc chắn rằng bạn đã đọc phần giới thiệu chung về toán học tượng trưng trong Sage. Đó là ngữ nghĩa và cú pháp khá khác biệt so với Mathematica , đó là điều mà hầu hết mọi người đều quen thuộc.

Đây là một ví dụ từ tài liệu tôi liên kết với bạn:

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

Đối với trường hợp của bạn, điều này sẽ làm việc:

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

Công cụ tìm kiếm tài liệu của họ cần phải cải thiện, sau đó. Tôi gõ vào "đơn giản hóa" và đã không nhận được trang đó ở tất cả . Đẹp tìm thấy!
Geoff Oxberry

Tôi vừa gõ "sage đơn giản hóa" vào google.
Dan

8

Bạn đã có một số câu trả lời tốt với các gói nguồn mở tiên tiến chất lượng cao.

Tôi muốn trỏ đến http://www.mathics.net/ (http://mathics.org/ nếu bạn muốn tải xuống), đây là một CAS nguồn mở sử dụng cú pháp Mathicala (mà bạn có thể quen thuộc với một chút nếu bạn đang sử dụng WolramAlpha). Nó gần như không đầy đủ như bất kỳ đề xuất nào khác mà bạn nhận được. Nhưng nó có thể thực hiện các thao tác (rất đơn giản) mà bạn đã nói trong câu hỏi của mình.

Những gì bạn đang nói trong câu hỏi của bạn không thực sự đơn giản hóa, nhưng thay thếmở rộng (không giống như đơn giản hóa phức tạp hơn, rất dễ thực hiện các thao tác có sẵn ngay cả trong CAS cơ bản nhất):

Trong toán học, nó sẽ trông như thế này:

eq = x^2 + 2x + 3

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

Expand[%]

Trong trường hợp bạn cần một hàm đơn giản hóa, nó được gọi Simplify[]và cũng sẽ hoạt động thay Expand[]cho ví dụ trên.


8

Như akid đã đề xuất, wxMaxima là một mặt trước đồ họa tuyệt vời cho Hệ thống Đại số Máy tính dựa trên lisp đáng kính gọi là Maxima .

Sử dụng ví dụ của bạn, bạn sẽ nhận được một cái gì đó như:

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

hoặc bạn có thể làm điều đó trực tiếp:

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

Maxima có một số cách đơn giản hóa khác nhau, nhưng ratsimplà bước đầu tiên tốt.





Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.