SymPy

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

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    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).

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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.