Существует ли какое-либо программное обеспечение с открытым исходным кодом или легкодоступное, которое может упростить алгебраические выражения, такие как


17

Я всегда вычисляю вещи вручную, но теперь мои товарищи становятся противными и делают много повторяющихся упражнений, в том числе просто вставляя вещи, как показано выше. Я особенно заинтересован в программном обеспечении с открытым исходным кодом, таком как Python или R, чтобы упростить эти виды уравнений. Я пытался использовать Wolfram Alpha , но мне это не удалось. Какие пакеты программного обеспечения с открытым исходным кодом могут подставить выражение в уравнение и упростить результат? В частности, я ищу программный пакет, который имеет что-то вроде команды.Иксзнак равно2T-1Икс2+2Икс+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
У Sage есть символические возможности (я использовал его для создания символьных интегралов), но не совсем понятно, как это сделать, если только вы не ищете его. Если вы хотите использовать как символ, вы должны объявить его заранее, как в var('a'). По крайней мере, это было правдой, когда я в последний раз часто использовал шалфей 3 или 4 года назад. В общем, mathematica предполагает, что вы хотите получить символический результат, а Sage предполагает, что вы хотите получить числовой результат.
Дан

1
@hhh: Если я не ошибаюсь, ваш фрагмент кода не соответствует выражению, которое вы хотите оценить и упростить.
Джефф Оксберри

@GeoffOxberry: я пытался решить эту проблему, также как и в LaTeX в первоначальном вопросе.
Джек Поулсон

1
Насколько я понимаю, Sage на самом деле включает в себя большую часть кода SymPy.
MRocklin

9

Мудрец может сделать это (вам нужно будет прокрутить довольно далеко вниз по странице, чтобы перейти к части упрощения).

Также не забудьте прочитать общее введение в символическую математику в 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()

Их система поиска документации должна быть улучшена. Я набрал «упрощение» и не получил эту страницу вообще . Хорошая находка!
Джефф Оксберри

Я просто набрал "Sage упрощение" в Google.
Дан

8

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

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

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

В математике это будет выглядеть так:

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;
Иксзнак равно2T-1
eq2: x**2+2*x+3;
Икс2+2Икс+3
eq3: subst(eq1, eq2);
(2T-1)2+2(2T-1)+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.