SageMath
SageMath (претходно Sage ili SAGE, систем за алгебарско и геометријско експериментисање[1]) је математички софтвер са функцијама које покривају многе аспекте математике, укључујући алгебре, комбинаторике, нумеричке математике, теорије бројева, и инфинитезимални рачун. Прва верзија SageMath је пуштен на слободу 24. фебруара 2005. године као слободан и софтвер отвореног кода под условима ГНУ-ове опште јавне лиценце, са почетним циљевима стварања "отвореног кода са алтернативом за Magma, Maple, Mathematica, and MATLAB".[2] Зачетник и вођа пројекта SageMath, William Stein, је математичар на Универзитету у Вашингтону. SageMath "користи Python-као синтаксу,"[3] подржава процедуралне, функционалне и објектно оријентисане конструкте. Karakteristike![]() ![]() Карактеристике SageMath укључују:[4]
Развој![]() Вилијам Стајн реализован приликом дизајнирања Sage када је било много отворених кодова математиких софтверски пакета већ написаних на различитим језицима, односно C, C++, Common Lisp, Фортран и Пајтон. Уместо топлу воду, Sage (што је углавном написан у Python и Cython) интегрише многе специјализоване математике софтверске пакете у заједничком интерфејсу, за који корисник треба да зна само пајтон. Међутим, Sage садржи стотине хиљада јединствених линија кода додајући нове функције и стварајући интерфејс између његових компоненти.[9] SageMath користи и студенте и професионалце за развој. Развој SageMath је подржан од стране оба волонтерска рада и донација.[10] Историја обрадеСамо главна издања су наведена у наставку. SageMath практикује "ослобађање рано, ослобађање често" концепт, са издањима на сваких неколико недеља или месеци. Све у свему, било је више од 300 издања, иако је њихова учесталост је смањена.[11]
Достигнућа
ПерформансеОба бинарна и изворна кода су доступна за SageMath са странице за скидање. Ако је SageMath изграђен од изворног кода, многи од укључених библиотека, као што су ATLAS, FLINT, и NTL ће бити подешен и оптимизован за тај рачунар, узимајући у обзир број процесора, величине својих скровишта, да ли постоји хардверска подршка за ССЕ инструкције, итд Cython може повећати брзину SageMath програма, као претварање Python кода у C.[19] Лиценцирање и доступностSageMath је слободан софтвер, дистрибуира под условима ГНУ-ове опште јавне лиценце. SageMath је доступан на много начина:
Иако је Microsoft спонзор верзије Sage за Windows оперативни систем,[21] од 2012. није било никаквих планова за матерњи порт, а корисници Windows-а тренутно морају да користе технологију виртуелизације као што ВиртуалБок за покретање Sage.[22] Као Sage 5.9, углавном успешно гради на Cygwin.[23] Linux дистрибуције и којима SageMath је доступан у пакету су Mandriva, Fedora, и Arch Linux. Такође је доступан као наменски Ubuntu PPA.[24] [25] Међутим, SageMath може да се инсталира на било коју Linux дистрибуцију. Gentoo prefix такође пружа Sage на другим оперативним системима. Софтверски пакети садржани у SageMath-уФилозофија SageMath је коришћење постојећих библиотека отворених кодова где год они постоје. Стога, користи многе библиотеке из других пројеката.
Примери коришћењаАлгебра и рачунањеx, a, b, c = var('x, a, b, c')
# Имајте на уму да IPython такође подржава бржи начин да се то уради, позивом
# ово је еквивалентно изразима који почињу са зарезом:
# ,var x a b c
log(sqrt(a)).simplify_log() # враћа 1/2*log(a)
log(a / b).expand_log() # враћа log(a) - log(b)
sin(a + b).simplify_trig() # враћа sin(a)*cos(b) + sin(b)*cos(a)
cos(a + b).simplify_trig() # враћа -sin(a)*sin(b) + cos(a)*cos(b)
(a + b)^5 # враћа (a + b)^5
expand((a + b) ^ 5) # a^5 + 5*a^4*b + 10*a^3*b^2 + 10*a^2*b^3 + 5*a*b^4 + b^5
limit((x ^ 2 + 1) / (2 + x + 3 * x ^ 2), x=Infinity) # враћа 1/3
limit(sin(x) / x, x=0) # враћа 1
diff(acos(x), x) # враћа -1/sqrt(-x^2 + 1)
f = exp(x) * log(x)
f.diff(x, 3) # враћа e^x*log(x) + 3*e^x/x - 3*e^x/x^2 + 2*e^x/x^3
solve(a * x ^ 2 + b * x + c, x) # враћа [x == -1/2*(b + sqrt(-4*a*c + b^2))/a,
# x == -1/2*(b - sqrt(-4*a*c + b^2))/a]
f = x ^ 2 + 432 / x
solve(f.diff(x) == 0, x) # враћа [x == 3*I*sqrt(3) - 3,
# x == -3*I*sqrt(3) - 3, x == 6]
Диференцијалне једначинеt = var('t') # дефинише променљиву t
x = function('x', t) # дефинише x да буде функција променљиве
de = (diff(x, t) + x == 1)
desolve(de, [x, t]) # враћа (c + e^t)*e^(-t)
Линеарна алгебраA = matrix([[1, 2, 3], [3, 2, 1], [1, 1, 1]])
y = vector([0, -4, -1])
A.solve_right(y) # враћа (-2, 1, 0)
A.eigenvalues() # враћа [5, 0, -1]
B = matrix([[1, 2, 3], [3, 2, 1], [1, 2, 1]])
B.inverse() # враћа
[ 0 1/2 -1/2]
[-1/4 -1/4 1]
[ 1/2 0 -1/2]
# исте матрице, али током дуплог круга (не рационалним бројевима, као горе)
sage: B = matrix(RDF, 1, 2, 3], [3, 2, 1], [1, 2, 1)
sage: B.inverse()
[-5.55111512313e-17 0.5 -0.5]
[ -0.25 -0.25 1.0]
[ 0.5 0.0 -0.5]
# Позив NumPy за Moore-Penrose псеудо-инверзије,
# јер SageMath не подржава то.
import numpy
C = matrix([[1 , 1], [2 , 2]])
matrix(numpy.linalg.pinv(C)) # враћа
[0.1 0.2]
[0.1 0.2]
Теорија бројеваprime_pi(1000000) # враћа 78498, број простих бројева мање од једног милиона
E = EllipticCurve('389a') # изградити елиптичне криве од Cremona етикете
P, Q = E.gens()
7 * P + Q # враћа (24187731458439253/244328192262001 :
# 3778434777075334029261244/3819094217575529893001 : 1)
sage: E2 = EllipticCurve(CC, [0,0,-2,1,1])
sage: E2
Elliptic Curve defined by y^2 + (-2.00000000000000)*y =
x^3 + 1.00000000000000*x + 1.00000000000000 over
Complex Field with 53 bits of precision
sage: E2.j_invariant()
61.7142857142857
Повезани пројекти
Види још
Референце
Спољашње везе
|