SymPy - SymPy
Vývojáři | Vývojový tým SymPy |
---|---|
První vydání | 2007 |
Stabilní uvolnění | 1.6.2[1] / 9. srpna 2020 |
Úložiště | |
Napsáno | Krajta |
Operační systém | Cross-platform |
Typ | Počítačový algebraický systém |
Licence | Nová licence BSD |
webová stránka | www |
SymPy je open-source Krajta knihovna pro symbolický výpočet. Poskytuje možnosti počítačové algebry buď jako samostatná aplikace, jako knihovna pro jiné aplikace, nebo živě na webu jako SymPy Live nebo SymPy Gamma. SymPy se snadno instaluje a kontroluje, protože je napsán výhradně v Pythonu s několika závislostmi.[2][3][4] Tato snadnost přístupu v kombinaci s jednoduchou a rozšiřitelnou kódovou základnou ve známém jazyce činí ze SymPy počítačový algebraický systém s relativně nízkou bariérou vstupu.
SymPy zahrnuje funkce od základní symbolické aritmetiky po počet, algebru, diskrétní matematika a kvantová fyzika. Je schopen formátovat výsledek výpočtů jako Latex kód.[2][3]
SymPy je svobodný software a má licenci pod Nová licence BSD. Hlavními vývojáři jsou Ondřej Čertík a Aaron Meurer. Zahájil ji v roce 2005 Ondřej Čertík.[5]
Funkce
Knihovna SymPy je rozdělena na jádro s mnoha volitelnými moduly.
V současné době má jádro SymPy kolem 260 000 řádků kódu[6] (zahrnuje také komplexní sadu autotestů: více než 100 000 řádků v 350 souborech od verze 0.7.5) a jeho možnosti zahrnují:[2][3][7][8][9]
Základní schopnosti
- Základní aritmetika: *, /, +, -, **
- Zjednodušení
- Expanze
- Funkce: trigonometrické, hyperbolické, exponenciální, kořeny, logaritmy, absolutní hodnota, sférické harmonické, faktoriály a gama funkce, zeta funkce, polynomy, hypergeometrické, speciální funkce, ...
- Střídání
- Libovolná přesnost celá čísla, racionální a plovoucí hodnoty
- Nezávazné symboly
- Shoda vzoru
Polynomy
- Základní aritmetika: divize, gcd, ...
- Faktorizace
- Faktorizace bez čtverců
- Gröbnerovy základny
- Rozklad částečné frakce
- Výsledníci
Počet
- Limity
- Diferenciace
- Integrace: Implementováno Risch – Norman heuristický
- Taylor série (Laurentova řada )
Řešení rovnic
Diskrétní matematika
- Binomické koeficienty
- Shrnutí
- produkty
- Teorie čísel: generování prvočísel, testování primality, celočíselná faktorizace, ...
- Logické výrazy
- Logické uvažování[10]
Matice
- Základní aritmetika
- Vlastní čísla /vlastní vektory
- Determinanty
- Inverze
- Řešení
Geometrie
- Body, čáry, paprsky, segmenty, elipsy, kruhy, mnohoúhelníky, ...
- Křižovatky
- Tečnost
- Podobnost
Vykreslování
Plotování vyžaduje externí matplotlib nebo Pyglet modul.
- Souřadnicové modely
- Vynesení geometrických entit
- 2D a 3D
- Interaktivní rozhraní
- Barvy
- Animace
Fyzika
Statistika
Kombinatorika
- Permutace
- Kombinace
- Příčky
- Podmnožiny
- Permutační skupina: Polyhedral, Rubik, Symetric, ...
- Sekvence Prufer a Šedé kódy
Tisk
- Pěkný tisk: ASCII / Unicode pěkný tisk, Latex
- Generování kódu: C, Fortran, Python
Související projekty
- SageMath: alternativa open source k Mathematica, Javor, MATLAB, a Magma (SymPy je součástí Sage)
- SymEngine: přepsání jádra SymPy v C ++ za účelem zvýšení jeho výkonu. V současné době probíhají práce na tom, aby se i SymEngine stal základním motorem Sage.
- mpmath: knihovna Pythonu pro aritmetiku s plovoucí desetinnou čárkou s libovolnou přesností
- SympyCore: další počítačový algebraický systém Python
- SfePy: Software pro řešení systémů spojených parciálních diferenciálních rovnic (PDE) metodou konečných prvků v 1D, 2D a 3D.
- GAlgebra: Geometrická algebra modul (dříve sympy.galgebra).
- Quameon: Kvantové Monte Carlo v Pythonu.
- Lcapy: Experimentální balíček Pythonu pro výuku analýza lineárních obvodů.
- Projekt LaTeX Expression: Snadná sazba LaTeXu algebraických výrazů v symbolické formě s automatickým nahrazováním a výpočtem výsledků.
- Symbolické statistické modelování: Přidávání statistických operací ke složitým fyzikálním modelům.
- Diofant: vidlice SymPy, kterou založil Sergey B Kirpichev
Závislosti
Od verze 1.0 má SymPy balíček mpmath jako závislost.
Existuje několik volitelných závislostí, které mohou vylepšit jeho schopnosti:
- gmpy: Pokud je nainstalován gmpy, polynomický modul SymPy jej automaticky použije pro rychlejší typy terénu. To může poskytnout několikanásobné zvýšení výkonu určitých operací.
- matplotlib: Pokud je nainstalován matplotlib, může jej SymPy použít k vykreslování.
- Pyglet: Alternativní balíček vykreslování.
Příklady použití
Pěkný tisk
Sympy umožňuje formátování výstupů do atraktivnějšího formátu pomocí tisk
funkce. Případně init_printing ()
metoda umožní pěkný tisk, takže tisk
není třeba volat. Pretty-printing bude používat symboly unicode, pokud jsou k dispozici v aktuálním prostředí, jinak se vrátí zpět ASCII postavy.
>>> z sympy import tisk, init_printing, Symbol, hřích, cos, exp, čtv, série, Integrální, Funkce>>>>>> X = Symbol("X")>>> y = Symbol("y")>>> F = Funkce('F')>>> # pprint bude výchozí pro unicode, pokud je k dispozici>>> tisk( X**exp(X) ) ⎛ x⎞ ⎝ℯ ⎠X >>> # Výstup bez unicode>>> tisk(Integrální(F(X), X), use_unicode=Nepravdivé) / | | f (x) dx | / >>> # Porovnat se stejným výrazem, ale tentokrát je unicode povolen>>> tisk(Integrální(F(X), X), use_unicode=Skutečný)⌠ ⎮ f (x) dx⌡ >>> # Alternativně můžete volat init_printing () jednou a pěkně tisknout bez funkce pprint.>>> init_printing()>>> čtv(čtv(exp(X))) ____4 x x ╲╱ ℯ >>> (1/cos(X)).série(X, 0, 10) 2 4 6 8 x 5⋅x 61⋅x 277⋅x ⎛ 10⎞1 + ── + ──── + ───── + ────── + O⎝x ⎠ 2 24 720 8064
Expanze
1 >>> z sympy import init_printing, Symbol, rozšířit 2 >>> init_printing() 3 >>> 4 >>> A = Symbol('A') 5 >>> b = Symbol('b') 6 >>> E = (A + b)**3 7 >>> E 8 (a + b) ³ 9 >>> E.rozšířit()10 a³ + 3⋅a²⋅b + 3⋅a⋅b² + b³
Příklad libovolné přesnosti
>>> z sympy import Racionální, tisk>>> E = 2**50 / Racionální(10)**50>>> tisk(E)1/88817841970012523233890533447265625
Diferenciace
>>> z sympy import init_printing, symboly, ln, rozdíl>>> init_printing()>>> X, y = symboly('x y')>>> F = X**2 / y + 2 * X - ln(y)>>> rozdíl(F, X) 2⋅x ─── + 2 y >>> rozdíl(F, y) 2 x 1 - ── - ─ 2 r y>>> rozdíl(rozdíl(F, X), y) -2⋅x ──── 2 y
Vykreslování
>>> z sympy import symboly, cos>>> z sympy. vykreslování import plot3d>>> X, y = symboly('x y')>>> plot3d(cos(X*3)*cos(y*5)-y, (X, -1, 1), (y, -1, 1))<sympy.plotting.plot.Plot object at 0x3b6d0d0>
Limity
>>> z sympy import init_printing, Symbol, omezit, čtv, oo>>> init_printing()>>> >>> X = Symbol('X')>>> omezit(čtv(X**2 - 5*X + 6) - X, X, oo)-5/2>>> omezit(X*(čtv(X**2 + 1) - X), X, oo)1/2>>> omezit(1/X**2, X, 0)∞>>> omezit(((X - 1)/(X + 1))**X, X, oo) -2ℯ
Diferenciální rovnice
>>> z sympy import init_printing, Symbol, Funkce, Rov, vyřešit, hřích, rozdíl>>> init_printing()>>>>>> X = Symbol("X")>>> F = Funkce("F")>>>>>> ekv = Rov(F(X).rozdíl(X), F(X))>>> ekvd ── (f (x)) = f (x)dx >>> >>> vyřešit(ekv, F(X)) Xf (x) = C₁⋅ℯ>>>>>> ekv = Rov(X**2*F(X).rozdíl(X), -3*X*F(X) + hřích(X)/X)>>> ekv 2 d hřích (x)x ⋅── (f (x)) = -3⋅x⋅f (x) + ────── dx x >>>>>> vyřešit(ekv, F(X)) C₁ - cos (x)f (x) = ──────────── x³
Integrace
>>> z sympy import init_printing, integrovat, Symbol, exp, cos, erf>>> init_printing()>>> X = Symbol('X')>>> # Polynomiální funkce>>> F = X**2 + X + 1>>> F 2 x + x + 1>>> integrovat(F,X) 3 2 x x ── + ── + x3 2 >>> # Racionální funkce>>> F = X/(X**2+2*X+1)>>> F X ──────────── 2 x + 2⋅x + 1>>> integrovat(F, X) 1 log (x + 1) + ───── x + 1>>> # Exponenciálně polynomiální funkce>>> F = X**2 * exp(X) * cos(X)>>> F 2 x x ⋅ℯ ⋅cos (x)>>> integrovat(F, X) 2 x 2 x x x x ⋅ℯ ⋅sin (x) x ⋅ℯ ⋅cos (x) x ℯ insin (x) ℯ ⋅cos (x)───────────── + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - -. ──── 2 2 2 2 >>> # Neelementární integrál>>> F = exp(-X**2) * erf(X)>>> F 2 -X ℯ ⋅erf (x)>>> integrovat(F, X) ___ 2 ╲╱ π ⋅erf (x)───────────── 4
Série
>>> z sympy import Symbol, cos, hřích, tisk>>> X = Symbol('X')>>> E = 1/cos(X)>>> tisk(E) 1 ──────cos (x)>>> tisk(E.série(X, 0, 10)) 2 4 6 8 x 5⋅x 61⋅x 277⋅x ⎛ 10⎞1 + ── + ──── + ───── + ────── + O⎝x ⎠ 2 24 720 8064 >>> E = 1/hřích(X)>>> tisk(E) 1 ──────hřích (x)>>> tisk(E.série(X, 0, 4)) 3 1 x 7⋅x ⎛ 4⎞─ + ─ + ──── + O⎝x ⎠x 6 360
Logické uvažování
Příklad 1
>>> z sympy import *>>> X = Symbol('X')>>> y = Symbol('y')>>> fakta = Q.pozitivní(X), Q.pozitivní(y)>>> s za předpokladu(*fakta):... tisk(zeptat se(Q.pozitivní(2 * X + y)))Skutečný
Příklad 2
>>> z sympy import *>>> X = Symbol('X')>>> # Předpoklad o x>>> skutečnost = [Q.primární(X)]>>> s za předpokladu(*skutečnost):... tisk(zeptat se(Q.Racionální(1 / X)))Skutečný
Viz také
Reference
- ^ "Vydání - sympy / sympy". Citováno 10. srpna 2020 - přes GitHub.
- ^ A b C „Domovská stránka SymPy“. Citováno 2014-10-13.
- ^ A b C Joyner, David; Čertík, Ondřej; Meurer, Aaron; Granger, Brian E. (2012). "Počítačové algebrické systémy s otevřeným zdrojovým kódem: SymPy". ACM komunikace v počítačové algebře. 45 (3/4): 225–234. doi:10.1145/2110170.2110185.
- ^ Meurer, Aaron; Smith, Christopher P .; Paprocki, Mateusz; Čertík, Ondřej; Kirpichev, Sergey B .; Rocklin, Matthew; Kumar, AMiT; Ivanov, Sergiu; Moore, Jason K. (01.01.2017). "SymPy: symbolické výpočty v Pythonu" (PDF). PeerJ Computer Science. 3: e103. doi:10,7717 / peerj-cs.103. ISSN 2376-5992.
- ^ https://github.com/sympy/sympy/wiki/SymPy-vs.-Mathematica
- ^ "Statistika projektu Sympy v Open HUBu". Citováno 2014-10-13.
- ^ Gede, Gilbert; Peterson, Dale L .; Nanjangud, Angadh; Moore, Jason K .; Hubbard, Mont (2013). „Omezená dynamika více těl s Pythonem: Od generování symbolické rovnice po publikaci“. ASME 2013 International Design Engineering Technical Conferences and Computers and Information in Engineering Conference. Americká společnost strojních inženýrů: V07BT10A051. doi:10.1115 / DETC2013-13470. ISBN 978-0-7918-5597-3.
- ^ Rocklin, Matthew; Terrel, Andy (2012). "Symbolická statistika se SymPy". Výpočetní technika ve vědě a inženýrství. 14 (3): 88–93. doi:10.1109 / MCSE.2012.56.
- ^ Asif, Mushtaq; Olaussen, Kåre (2014). Msgstr "Automatický generátor kódu pro integrátory vyššího řádu". Komunikace počítačové fyziky. 185 (5): 1461–1472. arXiv:1310.2111. Bibcode:2014CoPhC.185.1461M. doi:10.1016 / j.cpc.2014.01.012.
- ^ „Předpoklady - dokumentace k SymPy 1.4“. docs.sympy.org. Citováno 2019-07-05.
- ^ „Mechanika kontinua - dokumentace k SymPy 1.4“. docs.sympy.org. Citováno 2019-07-05.