Чи є програмне забезпечення з відкритим кодом або з легким доступом, яке може спростити алгебраїчні вирази, такі як


17

Я завжди обчислюю речі вручну, але зараз мої товариші стають неприємними і роблять багато повторюваних вправ, що включають просто підключення речей, як вираз вище. Мене особливо цікавить програмне забезпечення з відкритим кодом, таким як Python або R для спрощення таких рівнянь. Я спробував використовувати Wolfram Alpha , але мені не вдалося. Які програмні пакети з відкритим кодом можуть замінити вираз у рівняння і спростити результат? Зокрема, я шукаю програмний пакет, який має щось на зразок команди.x=2t1x2+2x+3simplify

Відповіді:


28

Ви можете заглянути в 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
Мудрець має символічні можливості (я використовував це для символічних інтегралів), але не особливо зрозуміло, як це зробити, якщо ви цього не шукаєте. Якщо ви хочете використовувати символ як символ, ви повинні заздалегідь оголосити його, як в 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.
День

8

Ви отримали кілька хороших відповідей уже з високоякісними сучасними пакетами з відкритим кодом.

Я хотів би вказати на http://www.mathics.net/ (http://mathics.org/ якщо ви хочете завантажити його), що є CAS з відкритим кодом, використовуючи синтаксис Mathematica (який вам може бути знайомий трохи, якщо ви використовуєте WolramAlpha). Він майже не такий повний, як будь-які інші пропозиції, які ви отримали. Але це може зробити (дуже прості) операції, про які ви говорили у своєму запитанні.

Те, про що ви говорите у своєму запитанні, насправді не є спрощенням, а заміщенням та розширенням (які, на відміну від більш складних спрощень, дуже легко здійснити операції, доступні навіть у самому простому CAS):

У Mathics це виглядатиме так:

eq = x^2 + 2x + 3

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

Expand[%]

Якщо вам потрібна функція спрощення, вона називається Simplify[], а також працює замість Expand[]наведеного вище прикладу.


8

Як AKID припустив, wxMaxima є великим графічним інтерфейсом до поважної шепелявості на основі системи комп'ютерної алгебри під назвою Maxima .

Використовуючи свій приклад, ви отримаєте щось на кшталт:

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

або ви могли просто зробити це безпосередньо:

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

У Maxima є кілька різних способів спрощення, але ratsimpце хороший перший крок.





Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.