Misszió: legyen egy életképes ingyenes, nyílt forráskódú alternatívája a Magma, Maple, Mathematica és Matlab programoknak.
A sage ismeri a racionális számokat, amikkel pontosan tud számolni. Lebegőpontos változatra vált az n() metódus.
{{{id=40| 13/5 /// }}} {{{id=41| n(13/5) # A N() vagy n() függvény lebegőpontossá alakít /// }}} {{{id=42| sin(1), sqrt(2) /// }}} {{{id=43| sqrt(2).n(), sqrt(2).n(200) # az n() nem csak függvényként, metódusként is használható /// }}} {{{id=227| sin(1.0) /// }}} {{{id=44| sin(pi/3) /// }}} {{{id=226| show(sin(pi/3)) /// }}} {{{id=49| _.n(1000) # _ az előző eredmény /// }}} {{{id=48| 111^111 /// }}} {{{id=47| 13//5, 13%5 /// }}} {{{id=231| 64^(1/6) # gyökvonás /// }}} {{{id=232| factor(24) # TAB-bal kiegészítés, pl. csak annyit írtunk be, hogy fact /// }}} {{{id=234| exp(2), e^2 /// }}} {{{id=235| e^2.n() /// }}} {{{id=236| log(e), log(100), log(100.), log(100,10), log(1024,2) /// }}} {{{id=237| arcsin(1/2) /// }}} {{{id=244| a = 10^10 # a kifejezések megnevezhetők (változók) a%3 /// }}}TAB gomb megnyomása folytatja az addig beírtakat (ha tudja), a felkínált listából választhatunk. Egy függvény neve után tett ? után részletes segítséget kapunk.
{{{id=239| x.abs? /// }}}Az indexelés 0-tól indul.
lista[c:d] a lista c indexű elemétől, de a d indexű már nem!
lista[c:d:e] mint az előző, de e-esével lépkedve
{{{id=94| l[1], l[-1], l[:2], l[4:], l[3:1], l[0:-1], l[0:-1:2] /// }}}[kifejezés for változó in valami]
Hasonló ahhoz, ahogy a matematikában a halmazokat definiáljuk. Például: $\{ f(x) \mid x\in H\}$.
(A lista a sage-ben különbözik a halmaztól, mert a listában az elemek sorredje meg van kötve, a halmazban nem.)
{{{id=106| L = [factor(n) for n in range(10000, 10025)] /// }}} {{{id=163| print L /// }}}[kifejezés for változó in valami if feltétel]
A Python nyelvre épül.
Változók típuskezelése dinamikus (nem statikus: nem kell deklarálni a típusukat, szabadon változtathatóak).
{{{id=54| a = 3 a = a+1 a = a^2 a /// }}} {{{id=53| a = "ez egy szöveg" /// }}} {{{id=52| a /// }}} {{{id=58| print a # az ö betű UTF8 kódja c3 b6 /// }}}
Ellentétben a klasszikus programnyelvekkel (C, Python, Fortran,...), de hasonlóan a többi CAS-hez (computer algebra system) a sage-ben is lehet egy változó szimbólikus. Sage-ben induláskor az x változó szimbólikus, és a var függvénnyel bármely változó azzá tehető.
{{{id=59| diff(x^2*exp(x), x) /// }}} {{{id=68| diff(x^2*exp(x), x, 10) /// }}} {{{id=67| integral(9*x^2*exp(3*x^3), x) /// }}} {{{id=61| diff(y^2*exp(y), y) /// }}} {{{id=57| var('y') /// }}} {{{id=164| diff(y^2*exp(y), y) /// }}} {{{id=56| solve([x+y==3, x-y-4], x, y) /// }}} {{{id=55| var('x y z p q') eq1 = p+q==5 eq2 = p*x+q*y==-5 eq3 = p*x^2+q*y^2==10 solve([eq1,eq2,eq3], q, x, y) /// }}} {{{id=248| solve( [2*x + 3*y + 2*z == -1, x + y + z == 0], x, y ) /// }}} {{{id=249| solve( [2*x + 3*y + 2*z == -1, x + y + z == 0], x, y, z ) /// }}} {{{id=62| solve(cos(x)==sin(x), x) /// }}} {{{id=63| find_root(cos(x)==sin(x), 0, 1) /// }}} {{{id=145| limit(arctan(-x) + exp(-x)*x^1000, x=oo) /// }}}
= PolynomialRing(QQ) polinomR.= PolynomialRing(RR) polinomC. = PolynomialRing(CC) /// }}} {{{id=2| factor(q^4 + 2*q^2 + 2) /// }}} {{{id=7| factor(x^4 + 2*x^2 + 2) /// }}} {{{id=17| factor(z^4 + 2*z^2 + 2) /// }}} {{{id=18| factor(x^2 - 2) /// }}} {{{id=23| gcd(q^4 - 3*q^3 + 2*q^2 - q + 1, q^2 - 1) /// }}} {{{id=26| (q^4 - 3*q^3 + 2*q^2 - q + 1) // (q^2 - 1) /// }}} {{{id=28| (q^4 - 3*q^3 + 2*q^2 - q + 1) % (q^2 - 1) /// }}} {{{id=80| (q^2 - 1)*(q^2 - 3*q + 3) - 4*q + 4 /// }}} {{{id=161| p = q^4 - 3*q^3 + 2*q^2 - q + 1 /// }}} {{{id=162| p.is_irreducible() /// }}} {{{id=78| p.xgcd(q^2-1) /// }}} {{{id=79| -1/4*p + (1/4*q^2 - 3/4*q + 3/4) * (q^2 - 1) /// }}}
Vektorterek, mátrixok
{{{id=117| A = Matrix([[1,2,3],[3,2,1],[1,1,1]]); A /// }}} {{{id=253| A.LU() /// }}} {{{id=118| P, L, U = A.LU() /// }}} {{{id=252| P*L*U /// }}} {{{id=119| A.rank() /// }}} {{{id=120| A.nullity() /// }}} {{{id=121| A.left_kernel() # bal nulltér: xA=0 /// }}} {{{id=122| A.right_kernel() # jobb nulltér: Ax=0 /// }}} {{{id=123| A.row_space() /// }}} {{{id=127| A.echelon_form() /// }}} {{{id=128| A.column_space() /// }}} {{{id=126| B = A.transpose() B.echelon_form() /// }}} {{{id=165| B.rref() /// }}} {{{id=129| v = vector([1,1,-4]) v /// }}} {{{id=130| A, v*A, A*v /// }}} {{{id=132| w = vector([3,5,2]) /// }}} {{{id=133| A.solve_right(w) /// }}} {{{id=255| A \ w /// }}} {{{id=131| A.solve_left(w) /// }}} {{{id=136| B = A.change_ring(GF(2)) /// }}} {{{id=137| B.echelon_form() /// }}} {{{id=143| B.base_ring() /// }}}
Grafika
2d grafika
{{{id=150| plot(cos, (-5,5)) /// }}} {{{id=151| plot([cos,sin], (-5,5), aspect_ratio=1) /// }}} {{{id=152| parametric_plot((cos(x),sin(x)^3),(x,0,2*pi),color='red') /// }}} {{{id=153| var('x') p = plot(2*x^4-2*x^3+3*x^2-3*x+4, (x,-1,1), color = 'cyan', thickness=3) p += plot(2*x^4, (x,-1,1), color = 'magenta', thickness=3) p.show() /// }}} {{{id=154| %hide @interact(layout=[['x0'], ['eps']]) def _(x0=slider(0, 5, default=1.9, label="x0"), eps=slider(0.01, 0.6, default=0.5, label="ε")): f=sin(x) + x/2 pont = point2d((x0,f(x=x0)), rgbcolor=(0.5,0,0), size=60) p = plot(f, (0,5)) maxx = 5 d = diff(f)(x=x0) saveps = polygon2d([[x0,f(x=x0)], [maxx,f(x=x0)+(d+eps)*(maxx-x0)], [maxx,f(x=x0)+(d-eps)*(maxx-x0)]], rgbcolor=(0,1,0), alpha=0.2)+polygon2d([[x0,f(x=x0)], [0,f(x=x0)-(d+eps)*(x0)], [0,f(x=x0)-(d-eps)*(x0)]], rgbcolor=(0,1,0), alpha=0.2) delta = min(5-x0, x0) var('z') while True: try: delta = find_root(f(x=x0)+(z-x0)*(d-eps)==f(x=z), x0+0.001, x0+delta-0.001) - x0 except: break while True: try: delta = find_root(f(x=x0)+(z-x0)*(d+eps)==f(x=z), x0+0.001, x0+delta-0.001) - x0 except: break while True: try: delta = x0 - find_root(f(x=x0)+(z-x0)*(d-eps)==f(x=z), x0-delta+0.001, x0-0.001) except: break while True: try: delta = x0 - find_root(f(x=x0)+(z-x0)*(d+eps)==f(x=z), x0-delta+0.001, x0-0.001) except: break savdel = polygon2d([[x0-delta,-0.2],[x0-delta,3],[x0+delta,3],[x0+delta,-0.2]], rgbcolor=(1,0,0), alpha=0.2) # t = text('x0+delta',(x0+delta,-0.1),rgbcolor=(0,0,0)) # t2 = text('x0-delta',(x0-delta,-0.2),rgbcolor=(0,0,0)) l = line([[x0,-0.2],[x0,3]], rgbcolor=(1,0,0), alpha=0.2, thickness=2) l2 = line([[0,f(x=x0)-x0*d], [maxx,f(x=x0)+(maxx-x0)*d]], rgbcolor=(0,1,0), alpha=0.2, thickness=2) show(pont+p+saveps+savdel+l+l2, aspect_ratio=1, xmin=-0.2, ymin=-0.2, ymax=3) /// }}} {{{id=158| var('x,y') plot3d(x^2-y^2, (x,-4,4), (y,-4,4)) /// }}} {{{id=155| u, v = var('u,v') fx = cos(v) * (3 + cos(u)) fy = sin(v) * (3 + cos(u)) fz = sin(u) parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi), frame=False, aspect_ratio=1, color="red") /// }}} {{{id=156| /// }}}