SymPy

С Википедије, слободне енциклопедије
SymPy
Програмер(и)Независна група људи
Прво издање2007. год.; пре 17 година (2007)
Стабилно издање
0.7.6.1 / 3. септембар 2015. год.; пре 8 година (2015-09-03)
Репозиторијум Уреди на Википодацима
Написан уПајтон
Оперативни системВишеплатформни
ТипСистем за компјутерско израчунавање
ЛиценцаBSD лиценца
Веб-сајтsympy.org

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]

Основне могућности[уреди | уреди извор]

  • Основне аритметичке операције: *, /, +, -, **
  • Поједностављење
  • Проширење
  • Функције: тригонометријске, хиперболичке, експоненцијалне, кореновање, логаритмовање, апсолутне вердности, сферни хармоници, факторијел и гама функције, зета функције, полиноми, хипергеометрија, специјалне функције, ...
  • Измене
  • Приближна прецизност целих, рационалних и децималних бројева
  • Некомутативни симболи
  • Упаривање образаца

Полиноми[уреди | уреди извор]

Рачун[уреди | уреди извор]


Решавање једначина[уреди | уреди извор]

Дискретна математика[уреди | уреди извор]

Матрице[уреди | уреди извор]

Геометрија[уреди | уреди извор]

  • Тачке, праве, равни, сегменти, елипсе, кругови, полигони, ...
  • Пресеци
  • Додирне тачке
  • Сличност

Цртање[уреди | уреди извор]

Напомена, цртање захтева екстерни Pyglet  модул.

  • Координате модела
  • Цртање геометријских тела
  • 2Д и 3Д
  • Интерактивни приступ
  • Боје

Физика[уреди | уреди извор]

Статистика[уреди | уреди извор]


Штампање[уреди | уреди извор]

Повезани пројекти[уреди | уреди извор]

  • 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    5x    61x    277x      10
1 + ── + ──── + ───── + ────── + Ox 
    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 + 5a b + 10a b + 10a b + 5ab + 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)
 2x    
 ─── + 2
  y 
>>> diff(f,y)
    2    
   x    1
 - ── - 
    2   y
   y
>>> diff(diff(f,x),y)
 -2x
 ────
   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)) = -3xf(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 + 2x + 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    5x    61x    277x      10
1 + ── + ──── + ───── + ────── + Ox 
    2     24     720     8064          
>>> e = 1/sin(x)
>>> pprint(e)
  1   
──────
sin(x)
>>> pprint(e.series(x, 0, 4))
           3        
1 x 7x  4
 +  + ──── + Ox 
x 6 360

Виде још [уреди | уреди извор]

  • Поређење компјутерских система за израчунавање

Референце[уреди | уреди извор]

  1. ^ а б в "SymPy homepage".
  2. ^ а б в Joyner, David; Čertík, Ondřej; Meurer, Aaron; Granger, Brian E. (2012).
  3. ^ "Sympy project statistics on Open HUB".
  4. ^ Gede, Gilbert; Peterson, Dale L.; Nanjangud, Angadh; Moore, Jason K.; Hubbard, Mont (2013).
  5. ^ Rocklin, Matthew; Terrel, Andy (2012).
  6. ^ Asif, Mushtaq; Olaussen, Kåre (2014).

Спољашње везе[уреди | уреди извор]