SymPy
Програмер(и) | Независна група људи |
---|---|
Прво издање | 2007.; пре 17 година (2007) |
Стабилно издање | 0.7.6.1 / 3. септембар 2015.; пре 8 година (2015-09-03) |
Репозиторијум |
|
Написан у | Пајтон |
Оперативни систем | Вишеплатформни |
Тип | Систем за компјутерско израчунавање |
Лиценца | BSD лиценца |
Веб-сајт | sympy |
SymPy је пајтонова библиотека за симболичко израчунавање. Она омогућава компјутерско израчунавање било као самостална апликација, као библиотека у другим апликацијама, или директном применом на веб страницама као што су SymPy Live или SymPy Gamma. SymPy је једноставан за инсталирање и преглед садржаја јер је у потпуности написан у Пајтону и зато што не зависи од других додатних библиотека.[1][2] Оваква једноставност приступа у комбинацији са једноставном и проширивом кодном базом на добро познатом језику чини SymPy рачунарско алгебарским системом са ниском почетном баријером.
SymPy укључује својства у опсегу од основних симболичко аритметичких израчунавања, до математичке анализе, алгебре, дискретне математике и квантне физике. Такође пружа могућност претварања резултата израчунавања у LaTeX код.[1][2]
SymPy је слободни софтвер и лиценциран од стране BSD лиценце. Главни програмери који су заслужни за развијање овог софтвера су Ondřej Čertík и Aaron Meurer.
Карактеристике
SymPy библиотека је подељена на језгра са великим бројем опционалних модула.
Тренутно, језгро SymPy има око 260,000 линија кода[3] (укључујићи обиман сет кодова за само тестирање: преко 100,000 линија у 350 fајлова верзије 0.7.5). ) и њене могућности обухватају:[1][2][4][5][6]
Основне могућности
- Основне аритметичке операције: *, /, +, -, **
- Поједностављење
- Проширење
- Функције: тригонометријске, хиперболичке, експоненцијалне, кореновање, логаритмовање, апсолутне вердности, сферни хармоници, факторијел и гама функције, зета функције, полиноми, хипергеометрија, специјалне функције, ...
- Измене
- Приближна прецизност целих, рационалних и децималних бројева
- Некомутативни симболи
- Упаривање образаца
Полиноми
- Основне аритметичке операције: дељење полинома, нзд...
- Факторизација
- Square-free факторизација
- Грубнерове основе
- Парцијална фрактална декомпозиција
- Резултанте
Рачун
- Гранична вредност
- Извод
- Интеграл: Имплементирана Risch-Norman хеуристика
- Тејлоров полином
Решавање једначина
- Полиноми
- Систем једначина
- Алгебарске једначине
- Диференцијалне једначине
- Диференцне једначине
Дискретна математика
- Биномни коефицијент
- Суме
- Производи
- Теорија бројева: одређивање простих бројева, тест простости, растављање на факторе, ...
- Логички изрази
Матрице
- Основне аритметичке операције
- Својствена вреднсот / својствени вектор
- Детерминанта
- Инверзија
- Решавање матрица
Геометрија
- Тачке, праве, равни, сегменти, елипсе, кругови, полигони, ...
- Пресеци
- Додирне тачке
- Сличност
Цртање
Напомена, цртање захтева екстерни Pyglet модул.
- Координате модела
- Цртање геометријских тела
- 2Д и 3Д
- Интерактивни приступ
- Боје
Физика
- Јединице
- Механика
- Квантна физика
- Гаусова оптика
- Паулијева алгебра
Статистика
- Нормална расподела
- Уједначена расподела
- Вероватноћа
Штампање
- Pretty printing (стилско форматирање конвенционалних текстуалних фајлова): ASCII/Unicode pretty printing, LaTeX
- Програмски кодови:Ц, Фортран, Пајтон
Повезани пројекти
- Sage:алтернатива отвореног кода за Mathematica, Maple, MATLAB, и Magma (SymPy је укључен у Sage)
- SymEngine: преведена библиотека SymPy језгра у C++, како би се побољшао његов рад. Третнутно се ради на томе да SymEngine постане основа и за Sage .
- mpmath: Пајтонова библиотека за аритметику приближне прецизности покретног зареза (постоји у оквиру SymPy)
- sympycore: још један Пајтонов систем за компјутерско израчунавање
- SfePy: Софтвер за решавање система већег броја диференцијалних једначина (PDEs) помоћу методе коначних елемената у 1Д, 2Д и 3Д.
Опцоналне зависности
SymPy за своје покретање, не захтева ништа осим Пајтона, али постоји пар опција које могу да побољшају њене могућности:
- gmpy: Ако је gmpy иснталиран, SymPy-јев модул за полиноме ће аутоматски да га користи за брже основне типове. Ово омогућава значајно побољшање рада одређених операција.
Примери коришћења
Pretty Printing - Стилско форматирање конвенционалних текстуалних фајлова
Омогућава да излазне информације буду преведене у знатно уређенији формат преко функције pprint
. Такође, init_printing()
метод ће омогућити pretty printing, тако да pprint
не мора да буде позван. Pretty printing ће користити unicode симболе који су доступни у датој околини, у супротном ће користити ASCII карактере .
>>> from sympy import pprint, init_printing, Symbol, sin, cos, exp, sqrt, series, Integral, Function >>> >>> x = Symbol("x") >>> y = Symbol("y") >>> f = Function('f') >>> # pprint ће поставити unicode као подразумеван, ако је доступан >>> pprint( x**exp(x) ) ⎛ x⎞ ⎝ℯ ⎠ x >>> # Излазна информација без unicode-a >>> pprint(Integral(f(x), x), use_unicode=False) / | | f(x) dx | / >>> # Поређење истих израза али је овога пута unicode омогућен >>> pprint(Integral(f(x), x), use_unicode=True) ⌠ ⎮ f(x) dx ⌡ >>> # Алтернативно, можете позвати init_printing() једном и pretty print без функције pprint. >>> init_printing() >>> sqrt(sqrt(exp(x))) ____ 4 ╱ x ╲╱ ℯ >>> (1/cos(x)).series(x, 0, 10) 2 4 6 8 x 5⋅x 61⋅x 277⋅x ⎛ 10⎞ 1 + ── + ──── + ───── + ────── + O⎝x ⎠ 2 24 720 8064
Проширење
>>> from sympy import init_printing, Symbol, expand >>> init_printing() >>> >>> a = Symbol('a') >>> b = Symbol('b') >>> e = (a + b)**5 >>> e 5 (a + b) >>> e.expand() 5 4 3 2 2 3 4 5 a + 5⋅a ⋅b + 10⋅a ⋅b + 10⋅a ⋅b + 5⋅a⋅b + b
Пример арбитрарне прецизности
>>> from sympy import Rational, pprint >>> >>> e = Rational(2)**50 / Rational(10)**50 >>> pprint(e) 1/88817841970012523233890533447265625
Извод
>>> from sympy import init_printing, symbols, ln, diff >>> init_printing() >>> x,y = symbols('x y') >>> f = x**2 / y + 2 * x - ln(y) >>> diff(f,x) 2⋅x ─── + 2 y >>> diff(f,y) 2 x 1 - ── - ─ 2 y y >>> diff(diff(f,x),y) -2⋅x ──── 2 y
Плотовање - Цртање
>>> from sympy import symbols, plot3d, cos >>> from sympy.plotting import plot3d >>> x,y = symbols('x y') >>> plot3d(cos(x*3)*cos(y*5)-y, (x, -1, 1), (y, -1, 1)) <sympy.plotting.plot.Plot object at 0x3b6d0d0>
Граничне вредности
>>> from sympy import init_printing, Symbol, limit, sqrt, oo >>> init_printing() >>> >>> x = Symbol('x') >>> limit(sqrt(x**2 - 5*x + 6) - x, x, oo) -5/2 >>> limit(x*(sqrt(x**2 + 1) - x), x, oo) 1/2 >>> limit(1/x**2, x, 0) ∞ >>> limit(((x - 1)/(x + 1))**x, x, oo) -2 ℯ
Диференцијалне једначине
>>> from sympy import init_printing, Symbol, Function, Eq, dsolve, sin, diff >>> init_printing() >>> >>> x = Symbol("x") >>> f = Function("f") >>> >>> eq = Eq(f(x).diff(x), f(x)) >>> eq d ──(f(x)) = f(x) dx >>> >>> dsolve(eq, f(x)) x f(x) = C₁⋅ℯ >>> >>> eq = Eq(x**2*f(x).diff(x), -3*x*f(x) + sin(x)/x) >>> eq 2 d sin(x) x ⋅──(f(x)) = -3⋅x⋅f(x) + ────── dx x >>> >>> dsolve(eq, f(x)) C₁ - cos(x) f(x) = ─────────── 3 x
Интеграли
>>> from sympy import init_printing, integrate, Symbol, exp, cos, erf >>> init_printing() >>> x = Symbol('x') >>> # Полиномске функције >>> f = x**2 + x + 1 >>> f 2 x + x + 1 >>> integrate(f,x) 3 2 x x ── + ── + x 3 2 >>> # Рационалне функције >>> f = x/(x**2+2*x+1) >>> f x ──────────── 2 x + 2⋅x + 1 >>> integrate(f, x) 1 log(x + 1) + ───── x + 1 >>> # Експоненцијално-полиномске функције >>> f = x**2 * exp(x) * cos(x) >>> f 2 x x ⋅ℯ ⋅cos(x) >>> integrate(f, x) 2 x 2 x x x x ⋅ℯ ⋅sin(x) x ⋅ℯ ⋅cos(x) x ℯ ⋅sin(x) ℯ ⋅cos(x) ──────────── + ──────────── - x⋅ℯ ⋅sin(x) + ───────── - ───────── 2 2 2 2 >>> # Сложени интеграл >>> f = exp(-x**2) * erf(x) >>> f 2 -x ℯ ⋅erf(x) >>> integrate(f, x) ___ 2 ╲╱ π ⋅erf (x) ───────────── 4
Серије
>>> from sympy import Symbol, cos, sin, pprint >>> x = Symbol('x') >>> e = 1/cos(x) >>> pprint(e) 1 ────── cos(x) >>> pprint(e.series(x, 0, 10)) 2 4 6 8 x 5⋅x 61⋅x 277⋅x ⎛ 10⎞ 1 + ── + ──── + ───── + ────── + O⎝x ⎠ 2 24 720 8064 >>> e = 1/sin(x) >>> pprint(e) 1 ────── sin(x) >>> pprint(e.series(x, 0, 4)) 3 1 x 7⋅x ⎛ 4⎞ ─ + ─ + ──── + O⎝x ⎠ x 6 360
Виде још
- Поређење компјутерских система за израчунавање
Референце
- ^ а б в "SymPy homepage".
- ^ а б в Joyner, David; Čertík, Ondřej; Meurer, Aaron; Granger, Brian E. (2012).
- ^ "Sympy project statistics on Open HUB".
- ^ Gede, Gilbert; Peterson, Dale L.; Nanjangud, Angadh; Moore, Jason K.; Hubbard, Mont (2013).
- ^ Rocklin, Matthew; Terrel, Andy (2012).
- ^ Asif, Mushtaq; Olaussen, Kåre (2014).
Спољашње везе
- SymPy Project Home
- Planet SymPy
- Code Repository on Github
- Support and development forum
- п
- р
- у
- ClassPad Manager
- Magma
- Maple
- Mathcad
- Mathematica
- muPAD
- TI InterActive!
- Кембриџки алгебарски систем
- Дирајв (рачунарски алгебарски ситем)
- ЛајвМат
- Максима
- Матоматик
- МуМАТ
- Категорија
- Упоређивање