Пређи на садржај

SymPy

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

Image

SymPy је пајтонова библиотека за симболичко израчунавање. Она омогућава компјутерско израчунавање било као самостална апликација, као библиотека у другим апликацијама, или директном применом на веб страницама као што су SymPy Live или SymPy Gamma Архивирано на веб-сајту Wayback Machine (31. октобар 2015). 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    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

Плотовање - Цртање

[уреди | уреди извор]
Image
Пример плотованог излаза
>>> 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

Виде још 

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

Референце

[уреди | уреди извор]
  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).

Спољашње везе

[уреди | уреди извор]