********** ÐнÑеÑÑейÑÑ ********** ÐÑаеÑголÑнÑм камнем Sage ÑвлÑеÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжка вÑÑиÑлений Ñ Ð¸ÑполÑзованием обÑекÑов из ÑазнÑÑ ÑиÑÑем комÑпÑÑеÑной алгебÑÑ, коÑоÑÑе Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ "под одной кÑÑÑей" и иÑполÑзÑÑÑ Ð¾Ð±Ñий инÑеÑÑÐµÐ¹Ñ Ð¸ ÑиÑÑÑй ÑзÑк пÑогÑаммиÑованиÑ. ÐеÑÐ¾Ð´Ñ console и interact инÑеÑÑейÑа делаÑÑ ÑазнÑе веÑи. ÐапÑимеÑ, иÑполÑзÑÑ GAP как пÑимеÑ: #. ``gap.console()``: ÐÑкÑÑÐ²Ð°ÐµÑ ÐºÐ¾Ð½ÑÐ¾Ð»Ñ GAP и пеÑÐµÐ´Ð°ÐµÑ ÑпÑавление GAP'Ñ. ÐдеÑÑ Sage вÑÑÑÑÐ¿Ð°ÐµÑ Ð² Ñоли Ñдобной командной ÑÑÑоки, наподобие оболоÑки Bash в GNU/Linux. #. ``gap.interact()``: ÐÑо ÑдобнÑй ÑпоÑоб взаимодейÑÑÐ²Ð¸Ñ Ñ Ð·Ð°Ð¿ÑÑеннÑм инÑеÑÑейÑом GAP, "заполненнÑм" обÑекÑами Sage. ÐÑ Ð¼Ð¾Ð¶ÐµÑе импоÑÑиÑоваÑÑ Ð¾Ð±ÑекÑÑ Sage в ÑеÑÑÐ¸Ñ GAP (даже из инÑеÑакÑивного инÑеÑÑейÑа), и пÑ. .. index: PARI; GP GP/PARI ======= PARI ÑÑо компакÑнаÑ, оÑÐµÐ½Ñ Ð¿ÑодÑÐ¼Ð°Ð½Ð½Ð°Ñ Ð¸ Ñ Ð¾ÑоÑо опÑимизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿ÑогÑамма на C, ÑоÑÑедоÑоÑÐµÐ½Ð½Ð°Ñ Ð½Ð° ÑеоÑии ÑиÑел. СÑÑеÑÑвÑÐµÑ Ð´Ð²Ð° ÑазделÑнÑÑ Ð¸Ð½ÑеÑÑейÑа, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð² Sage: - ``gp`` - gp - инÑеÑпÑеÑаÑÐ¾Ñ "**G** o **P** ARI" , и - ``pari`` - pari - С-библиоÑека PARI. ÐапÑимеÑ, ÑледÑÑÑие две ÑÑÑоÑки вÑполнÑÑÑ Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ опеÑаÑиÑ. Ðни вÑглÑдÑÑ Ð¸Ð´ÐµÐ½ÑиÑно, но вÑвод на Ñамом деле оÑлиÑаеÑÑÑ, а за кÑлиÑами пÑоиÑÑ Ð¾Ð´ÑÑ ÑовÑем ÑазнÑе веÑи. :: sage: gp('znprimroot(10007)') Mod(5, 10007) sage: pari('znprimroot(10007)') Mod(5, 10007) РпеÑвом ÑлÑÑае оÑделÑÐ½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð¸Ð½ÑеÑпÑеÑаÑоÑа GP запÑÑкаеÑÑÑ ÐºÐ°Ðº ÑеÑвеÑ, и ÑÑÑока ``'znprimroot(10007)'`` оÑпÑавлÑеÑÑÑ Ð² него, вÑÑиÑлÑеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ GP, и ÑезÑлÑÑÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑваеÑÑÑ Ð² пеÑеменнÑÑ Ð² GP (коÑоÑÐ°Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿ÑоÑÑÑанÑÑво в памÑÑи пÑоÑеÑÑа GP и не бÑÐ´ÐµÑ Ð¾Ñвобождена). ÐоÑле ÑÑого знаÑение пеÑеменной вÑводиÑÑÑ Ð½Ð° ÑкÑан. Ðо вÑоÑом ÑлÑÑае оÑделÑÐ½Ð°Ñ Ð¿ÑогÑамма не запÑÑкаеÑÑÑ, и ÑÑÑока ``'znprimroot(10007)'`` вÑÑиÑлÑеÑÑÑ ÐºÐ¾Ð½ÐºÑеÑной ÑÑнкÑией С-библиоÑеки PARI. РезÑлÑÑÐ°Ñ ÑÐ¾Ñ ÑанÑеÑÑÑ Ð² heap-памÑÑи Python'а, коÑоÑÐ°Ñ Ð¾ÑвобождаеÑÑÑ Ð¿Ð¾Ñле Ñого, как пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑеÑÑÐ°ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ. У обÑекÑов ÑазнÑй Ñип: :: sage: type(gp('znprimroot(10007)')) <class 'sage.interfaces.gp.GpElement'> sage: type(pari('znprimroot(10007)')) <type 'sage.libs.pari.gen.gen'> Так какой же ÑпоÑоб иÑполÑзоваÑÑ? ÐÑо завиÑÐ¸Ñ Ð¾Ñ Ñого, ÑÑо Ð²Ñ Ð´ÐµÐ»Ð°ÐµÑе. ÐнÑеÑÑÐµÐ¹Ñ GP Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ð²Ñе, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ð¿ÑогÑамма GP/PARI, запÑÑÐºÐ°ÐµÐ¼Ð°Ñ Ð¸Ð· командной ÑÑÑоки, поÑÐ¾Ð¼Ñ ÐºÐ°Ðº он запÑÑÐºÐ°ÐµÑ ÑÑÑ Ð¿ÑогÑаммÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе загÑÑзиÑÑ ÑложнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ PARI и запÑÑÑиÑÑ ÐµÐµ. С дÑÑгой ÑÑоÑонÑ, инÑеÑÑÐµÐ¹Ñ PARI (ÑеÑез C-библиоÑекÑ) Ð¸Ð¼ÐµÐµÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ болÑÑе огÑаниÑений. Ðо-пеÑвÑÑ , не вÑе ÑÑнкÑии в ней ÑеализованÑ. Ðо-вÑоÑÑÑ , много кода, напÑимеÑ, ÑиÑленное инÑегÑиÑование, не бÑÐ´ÐµÑ ÑабоÑаÑÑ ÑеÑез инÑеÑÑÐµÐ¹Ñ PARI. ÐнÑеÑÐ¹ÐµÑ PARI Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ бÑÑÑÑее и понÑÑнее, Ñем ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ GP. (ÐÑли Ñ Ð¸Ð½ÑеÑÑейÑа GP законÑиÑÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð¿Ñи вÑÑиÑлении данной ÑÑÑоки, он авÑомаÑиÑеÑки и без пÑедÑпÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÑÐ´Ð¾Ð²Ð¸Ñ ÑÐ°Ð·Ð¼ÐµÑ ÑÑека и попÑобÑÐµÑ Ð²ÑÑиÑление еÑе Ñаз. ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ñи вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð²Ñегда бÑдÑÑ Ð¿ÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ñ ÐºÐ¾ÑÑекÑно, еÑли Ð²Ñ Ð¿ÑавилÑно ÑаÑÑиÑаеÑе ÑÐ°Ð·Ð¼ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ памÑÑи. ÐÑÐ¾Ñ ÑдобнÑй ÑÑÑк не Ð²Ñ Ð¾Ð´Ð¸Ñ Ð² аÑÑенал пÑоÑÑого инÑеÑпÑеÑаÑоÑа GP. ÐÑноÑиÑелÑно инÑеÑÑейÑа C-библиоÑеки PARI: он ÑÑÐ°Ð·Ñ ÐºÐ¾Ð¿Ð¸ÑÑÐµÑ ÐºÐ°Ð¶Ð´Ñй ÑозданнÑй обÑÐµÐºÑ Ð¸Ð· ÑÑека PARI, поÑÑÐ¾Ð¼Ñ ÑÑек никогда не ÑаÑÑеÑ. Ðднако, каждÑй обÑÐµÐºÑ Ð½Ðµ должен пÑевÑÑаÑÑ ÑазмеÑа в 100 мегабайÑ, или ÑÑек бÑÐ´ÐµÑ Ð¿ÐµÑеполнен пÑи Ñоздании обÑекÑа. ÐополниÑелÑное копиÑование немного влиÑÐµÑ Ð½Ð° обÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ.) Sage иÑполÑзÑÐµÑ Ð¡-библиоÑÐµÐºÑ PARI, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑÑнкÑионалÑноÑÑÑ, ÑÑ Ð¾Ð¶ÑÑ Ñ Ð¸Ð½ÑеÑпÑеÑаÑоÑом GP/PARI, но вклÑÑÐ°Ñ ÑазлиÑнÑе ÑложнÑе опеÑаÑии по ÑабоÑе Ñ Ð¿Ð°Ð¼ÑÑÑÑ Ð¸ ÑзÑк пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Python. СнаÑала, Ñоздадим ÑпиÑок PARI из ÑпиÑка Python. :: sage: v = pari([1,2,3,4,5]) sage: v [1, 2, 3, 4, 5] sage: type(v) <type 'sage.libs.pari.gen.gen'> ÐаждÑй обÑÐµÐºÑ PARI ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом Ñипа ``py_pari.gen``. Тип PARI Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÑÑен Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии-Ñлена ``type``. .. link :: sage: v.type() 't_VEC' Ð PARI, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ ÑллипÑиÑеÑкÑÑ ÐºÑивÑÑ, нÑжно ввеÑÑи ``ellinit([1,2,3,4,5])``. Ð Sage ÑпоÑоб ÑÑ Ð¾Ð¶, ÑолÑко ``ellinit`` â ÑÑо меÑод, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзван Ð´Ð»Ñ Ð»Ñбого обÑекÑа PARI, напÑÐ¸Ð¼ÐµÑ Ð½Ð°Ñа ``t\_VEC v``. .. link :: sage: e = v.ellinit() sage: e.type() 't_VEC' sage: pari(e)[:13] [1, 2, 3, 4, 5, 9, 11, 29, 35, -183, -3429, -10351, 6128487/10351] ТепеÑÑ, когда Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð¾Ð±ÑÐµÐºÑ ÑллипÑиÑеÑÐºÐ°Ñ ÐºÑиваÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑÑиÑлиÑÑ ÑÑо-нибÑдÑ. .. link :: sage: e.elltors() [1, [], []] sage: e.ellglobalred() [10351, [1, -1, 0, -1], 1] sage: f = e.ellchangecurve([1,-1,0,-1]) sage: f[:5] [1, -1, 0, 4, 3] .. index: GAP .. _section-gap: GAP === Sage поÑÑавлÑеÑÑÑ Ñ GAP 4.4.10 Ð´Ð»Ñ Ð²ÑÑиÑлений в облаÑÑи диÑкÑеÑной маÑемаÑики, в оÑобенноÑÑи, в ÑеоÑии гÑÑпп. ÐÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ ÑÑнкÑии ``IdGroup`` из GAP, коÑоÑÐ°Ñ Ð¸ÑполÑзÑÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ¸Ñ Ð³ÑÑпп, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ ÑÑÑановлена оÑделÑно, как показано ниже. :: sage: G = gap('Group((1,2,3)(4,5), (3,4))') sage: G Group( [ (1,2,3)(4,5), (3,4) ] ) sage: G.Center() Group( () ) sage: G.IdGroup() # optional - database_gap [ 120, 34 ] sage: G.Order() 120 ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ пÑовеÑÑи Ñе же вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð² Sage без пÑÑмого вÑзова инÑеÑÑейÑа GAP ÑледÑÑÑим обÑазом: :: sage: G = PermutationGroup([[(1,2,3),(4,5)],[(3,4)]]) sage: G.center() Subgroup of (Permutation Group with generators [(3,4), (1,2,3)(4,5)]) generated by [()] sage: G.group_id() # optional - database_gap [120, 34] sage: n = G.order(); n 120 (ÐÐ»Ñ ÑÑнкÑионала GAP ÑледÑÐµÑ ÑÑÑановиÑÑ Ð´Ð²Ð° дополниÑелÑнÑÑ Ð¿Ð°ÐºÐµÑа Sage. ÐведиÑе ``sage -optional`` Ð´Ð»Ñ ÑпиÑка и вÑбеÑиÑе Ð¿Ð°ÐºÐµÑ Ð²Ð¸Ð´Ð° ``gap\_packages-x.y.z``, поÑом введиÑе ``sage -i gap\_packages-x.y.z``. СделайÑе Ñо же Ð´Ð»Ñ ``database\_gap-x.y.z``. ÐекоÑоÑÑе не-GPL пакеÑÑ GAP могÑÑ Ð±ÑÑÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ ÑкаÑиванием Ð¸Ñ Ñ ÑайÑа GAP [GAPkg]_, и ÑаÑпаковкой Ð¸Ñ Ð² диÑекÑоÑÐ¸Ñ ``$SAGE_ROOT/local/lib/gap-4.4.10/pkg``.) Singular ======== Singular пÑедоÑÑавлÑÐµÑ Ð¼Ð°ÑÑивнÑÑ Ð¸ пÑодÑманнÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð´Ð»Ñ Ð±Ð°Ð·Ð¸Ñа ÐÑÑбнеÑа, Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑего обÑего делиÑÐµÐ»Ñ Ð¿Ð¾Ð»Ð¸Ð½Ð¾Ð¼Ð¾Ð², базиÑа пÑоÑÑÑанÑÑв плоÑÐºÐ¸Ñ ÐºÑивÑÑ Ð Ð¸Ð¼Ð°Ð½Ð°-Ð Ð¾Ñ Ð° и ÑакÑоÑизаÑии, наÑÑÐ´Ñ Ñ Ð´ÑÑгими веÑами. ÐÑ Ð¿Ð¾ÐºÐ°Ð¶ÐµÐ¼ пÑÐ¸Ð¼ÐµÑ ÑакÑоÑизаÑии полиномов Ñ Ð½ÐµÑколÑкими пеÑеменнÑми, иÑполÑзÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Singular в Sage (не вводиÑе ``...``): :: sage: R1 = singular.ring(0, '(x,y)', 'dp') sage: R1 // characteristic : 0 // number of vars : 2 // block 1 : ordering dp // : names x y // block 2 : ordering C sage: f = singular('9*y^8 - 9*x^2*y^7 - 18*x^3*y^6 - 18*x^5*y^6 + \ ... 9*x^6*y^4 + 18*x^7*y^5 + 36*x^8*y^4 + 9*x^10*y^4 - 18*x^11*y^2 - \ ... 9*x^12*y^3 - 18*x^13*y^2 + 9*x^16') ТепеÑÑ ÐºÐ¾Ð³Ð´Ð° Ð¼Ñ Ð¾Ð¿Ñеделили :math:`f`, Ð¼Ñ Ð²Ñводим на ÑкÑан и ÑакÑоÑизÑем. .. link :: sage: f 9*x^16-18*x^13*y^2-9*x^12*y^3+9*x^10*y^4-18*x^11*y^2+36*x^8*y^4+18*x^7*y^5-18*x^5*y^6+9*x^6*y^4-18*x^3*y^6-9*x^2*y^7+9*y^8 sage: f.parent() Singular sage: F = f.factorize(); F [1]: _[1]=9 _[2]=x^6-2*x^3*y^2-x^2*y^3+y^4 _[3]=-x^5+y^2 [2]: 1,1,2 sage: F[1][2] x^6-2*x^3*y^2-x^2*y^3+y^4 Ðак и на пÑимеÑе GAP в :ref:`section-gap`, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑовеÑÑиÑÑ Ð´Ð°Ð½Ð½ÑÑ ÑакÑоÑизаÑÐ¸Ñ Ð±ÐµÐ· пÑÑмого ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð½ÑеÑÑейÑа Sage (однако за кÑлиÑами Sage вÑе Ñавно иÑполÑзÑеÑÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Singular). Ðе вводиÑе ``...``: :: sage: x, y = QQ['x, y'].gens() sage: f = 9*y^8 - 9*x^2*y^7 - 18*x^3*y^6 - 18*x^5*y^6 + 9*x^6*y^4\ ... + 18*x^7*y^5 + 36*x^8*y^4 + 9*x^10*y^4 - 18*x^11*y^2 - 9*x^12*y^3\ ... - 18*x^13*y^2 + 9*x^16 sage: factor(f) (9) * (-x^5 + y^2)^2 * (x^6 - 2*x^3*y^2 - x^2*y^3 + y^4) .. _section-maxima: Maxima ====== Maxima вклÑÑена в Sage, Ñак же как ÑеализаÑÐ¸Ñ ÐиÑпа. ÐÐ°ÐºÐµÑ gnuplot (коÑоÑÑй Maxima иÑполÑзÑÐµÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð³ÑаÑиков) ÑаÑпÑоÑÑÑанÑеÑÑÑ ÐºÐ°Ðº дополниÑелÑнÑй Ð¿Ð°ÐºÐµÑ Sage. ÐÑоме оÑÑалÑнÑÑ Ð²ÐµÑей, Maxima позволÑÐµÑ Ð¿ÑоизводиÑÑ ÑимволиÑеÑкие манипÑлÑÑии. Maxima Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð½ÑегÑиÑоваÑÑ Ð¸ диÑÑеÑенÑиÑоваÑÑ ÑÑнкÑии ÑимволиÑеÑки, ÑеÑаÑÑ Ð¾Ð±ÑкновеннÑе диÑÑеÑенÑиалÑнÑе ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ 1го поÑÑдка, болÑÑÑÑ ÑаÑÑÑ Ð»Ð¸Ð½ÐµÐ¹Ð½ÑÑ Ð¾Ð±ÑкновеннÑÑ Ð´Ð¸ÑÑеÑенÑиалÑнÑÑ ÑÑавнений 2го поÑÑдка, иÑполÑзоваÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐаплаÑа как меÑод Ð´Ð»Ñ ÑеÑÐµÐ½Ð¸Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½ÑÑ Ð¾Ð±ÑкновеннÑÑ Ð´Ð¸ÑÑеÑенÑиалÑнÑÑ ÑÑавнений лÑбого поÑÑдка. Maxima Ñакже "знаеÑ" о болÑÑом набоÑе ÑпеÑиалÑнÑÑ ÑÑнкÑий, Ð¸Ð¼ÐµÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑÑÑоиÑÑ Ð³ÑаÑики пÑи помоÑи gnuplot, Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ ÑеÑÐµÐ½Ð¸Ñ Ð¸ манипÑлÑÑии маÑÑиÑами (к пÑимеÑÑ, меÑод ÐаÑÑÑа, Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ ÑобÑÑвеннÑÑ Ð·Ð½Ð°Ñений и векÑоÑов), а Ñакже ÑÐ¼ÐµÐµÑ ÑеÑаÑÑ Ð¿Ð¾Ð»Ð¸Ð½Ð¾Ð¼Ñ. ÐÑ Ð¿ÑоиллÑÑÑÑиÑÑем ÑабоÑÑ Sage/Maxima Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð°ÑÑиÑÑ, знаÑÐµÐ½Ð¸Ñ :math:`i,j` коÑоÑой ÑвлÑÑÑÑÑ :math:`i/j`, Ð´Ð»Ñ :math:`i,j=1,\ldots,4`. :: sage: f = maxima.eval('ij_entry[i,j] := i/j') sage: A = maxima('genmatrix(ij_entry,4,4)'); A matrix([1,1/2,1/3,1/4],[2,1,2/3,1/2],[3,3/2,1,3/4],[4,2,4/3,1]) sage: A.determinant() 0 sage: A.echelon() matrix([1,1/2,1/3,1/4],[0,0,0,0],[0,0,0,0],[0,0,0,0]) sage: A.eigenvalues() [[0,4],[3,1]] sage: A.eigenvectors() [[[0,4],[3,1]],[[[1,0,0,-4],[0,1,0,-2],[0,0,1,-4/3]],[[1,2,3,4]]]] ÐÐ¾Ñ Ð´ÑÑгой пÑимеÑ: :: sage: A = maxima("matrix ([1, 0, 0], [1, -1, 0], [1, 3, -2])") sage: eigA = A.eigenvectors() sage: V = VectorSpace(QQ,3) sage: eigA [[[-2,-1,1],[1,1,1]],[[[0,0,1]],[[0,1,3]],[[1,1/2,5/6]]]] sage: v1 = V(sage_eval(repr(eigA[1][0][0]))); lambda1 = eigA[0][0][0] sage: v2 = V(sage_eval(repr(eigA[1][1][0]))); lambda2 = eigA[0][0][1] sage: v3 = V(sage_eval(repr(eigA[1][2][0]))); lambda3 = eigA[0][0][2] sage: M = MatrixSpace(QQ,3,3) sage: AA = M([[1,0,0],[1, - 1,0],[1,3, - 2]]) sage: b1 = v1.base_ring() sage: AA*v1 == b1(lambda1)*v1 True sage: b2 = v2.base_ring() sage: AA*v2 == b2(lambda2)*v2 True sage: b3 = v3.base_ring() sage: AA*v3 == b3(lambda3)*v3 True ÐаконеÑ, Ð¼Ñ Ð¿Ð¾ÐºÐ°Ð¶ÐµÐ¼, как ÑÑÑоиÑÑ Ð³ÑаÑики ÑÑедÑÑвами ``openmath``. Ðногие пÑимеÑÑ ÑвлÑÑÑÑÑ Ð¼Ð¾Ð´Ð¸ÑиÑиÑованнÑми пÑимеÑами из ÑÑководÑÑва к Maxima. 2-меÑнÑе гÑаÑики неÑколÑÐºÐ¸Ñ ÑÑнкÑий (не вводиÑе ``...``): :: sage: maxima.plot2d('[cos(7*x),cos(23*x)^4,sin(13*x)^3]','[x,0,1]', # not tested ... '[plot_format,openmath]') "Ðивой" ÑÑÐµÑ Ð¼ÐµÑнÑй гÑаÑик, коÑоÑÑй Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑаÑаÑÑ Ð¼ÑÑкой (не вводиÑе ``...``): :: sage: maxima.plot3d ("2^(-u^2 + v^2)", "[u, -3, 3]", "[v, -2, 2]", # not tested ... '[plot_format, openmath]') sage: maxima.plot3d("atan(-x^2 + y^3/4)", "[x, -4, 4]", "[y, -4, 4]", # not tested ... "[grid, 50, 50]",'[plot_format, openmath]') СледÑÑÑий гÑаÑик â ÑÑо знамениÑÐ°Ñ ÐенÑа ÐÑбиÑÑа (не вводиÑе ``...``): :: sage: maxima.plot3d("[cos(x)*(3 + y*cos(x/2)), sin(x)*(3 + y*cos(x/2)), y*sin(x/2)]", # not tested ....: "[x, -4, 4]", "[y, -4, 4]", ....: '[plot_format, openmath]') СледÑÑÑий гÑаÑик â ÑÑо знамениÑÐ°Ñ ÐÑÑÑлка Ðлейна (не вводиÑе ``...``): :: sage: maxima("expr_1: 5*cos(x)*(cos(x/2)*cos(y) + sin(x/2)*sin(2*y)+ 3.0)\ ... - 10.0") 5*cos(x)*(sin(x/2)*sin(2*y)+cos(x/2)*cos(y)+3.0)-10.0 sage: maxima("expr_2: -5*sin(x)*(cos(x/2)*cos(y) + sin(x/2)*sin(2*y)+ 3.0)") -5*sin(x)*(sin(x/2)*sin(2*y)+cos(x/2)*cos(y)+3.0) sage: maxima("expr_3: 5*(-sin(x/2)*cos(y) + cos(x/2)*sin(2*y))") 5*(cos(x/2)*sin(2*y)-sin(x/2)*cos(y)) sage: maxima.plot3d ("[expr_1, expr_2, expr_3]", "[x, -%pi, %pi]", # not tested ... "[y, -%pi, %pi]", "['grid, 40, 40]", ... '[plot_format, openmath]')