Follow along: http://sagenb.org/home/pub/2909

Sage:  A Community Owned

Foundation for Computational Mathematics

 

FoCM 2011 Plenary

William Stein (University of Washington, Seattle)

















Testing, testing, ...

 

{{{id=130| 1 + 2 + 3 /// 6 }}} {{{id=194| /// }}} {{{id=193| /// }}} {{{id=192| /// }}} {{{id=191| /// }}} {{{id=175| /// }}} {{{id=174| /// }}} {{{id=177| /// }}}



 

Prelude

A Dream Come True: Community-Owned Knowledge


{{{id=176| /// }}} {{{id=173| /// }}} {{{id=172| /// }}} {{{id=171| /// }}} {{{id=170| /// }}} {{{id=101| /// }}}

 

Sage Project Mission Statement

"Create A Viable Free Open Source Alternative to Magma, Maple, Mathematica, and Matlab"

 

Sage is not a drop-in replacement; it does not run programs written in the custom languages of the Ma's. It's nothing like Octave (versus Matlab).  It's culture, architecture, and feel are all very different than the Ma's. 

{{{id=158| /// }}} {{{id=133| /// }}} {{{id=132| /// }}} {{{id=94| /// }}}

Why not Magma, Maple, Matlab, Mathematica?

  1. Commercial: Expensive for my collaborators and students.  Not community owned.

  2. Closed: Implementation of algorithms often secret

  3. Frustrating: Tight control of development

  4. Copy protection: Hard to run on supercomputer or my new laptop

  5. Programming language: All use a special math-only language

  6. Bugs: Bug tracking is secret

  7. Compiler: Lack of compilers for their math-only languages
{{{id=153| /// }}} {{{id=105| /// }}} {{{id=93| /// }}} {{{id=106| /// }}}

  1. Python: a mainstream general purpose programming language (with a compiler: Cython)

  2. Distribution: about 100 open source packages (written by you and your colleagues!)

  3. Interfaces: smoothly tie together all these libraries and packages

  4. New library: implements novel algorithms; well over a half million lines; written by a worldwide community of several hundred people.

{{{id=180| R. = PolynomialRing(QQ,2) /// }}} {{{id=179| R /// Multivariate Polynomial Ring in x, y over Rational Field }}} {{{id=178| /// }}} {{{id=154| /// }}} {{{id=92| /// }}}

Distribution

{{{id=134| /// }}} {{{id=91| /// }}}

Hundreds of Sage Developers


{{{id=8| /// }}} {{{id=135| /// }}} {{{id=83| /// }}}


History

See this article for more details about the (pre-)history of Sage.

{{{id=98| /// }}} {{{id=157| /// }}} {{{id=156| /// }}} {{{id=181| /// }}} {{{id=185| /// }}} {{{id=184| /// }}}

Question Break 1 (of 2)

????

{{{id=190| reduce('2+3') /// }}} {{{id=189| f = mathematica('Integrate[Sin[x],x]'); f /// -Cos[x] }}} {{{id=188| f.Integrate(x) /// -Sin[x] }}} {{{id=187| f + mathematica(sin(x)*cos(x^2)) /// -Cos[x] + Cos[x^2]*Sin[x] }}} {{{id=202| a = float(2^64); a /// 1.8446744073709552e+19 }}} {{{id=183| math.sin(a) /// 0.023598509904439558 }}} {{{id=182| mathematica('N[Sin[2^64], 100]') /// 0.023598509904439558634365922876134775188797125047081359505208257512787036719571480535326817566662323544 }}} {{{id=87| a = sin(2^64); a /// sin(18446744073709551616) }}} {{{id=203| N(a, digits=100) /// 0.02359850990443955863436592287613477518879712504708135950520825751278703671957148053532681756666232354 }}} {{{id=86| a = [bernoulli(2*n) for n in [1..25]]; a /// [1/6, -1/30, 1/42, -1/30, 5/66, -691/2730, 7/6, -3617/510, 43867/798, -174611/330, 854513/138, -236364091/2730, 8553103/6, -23749461029/870, 8615841276005/14322, -7709321041217/510, 2577687858367/6, -26315271553053477373/1919190, 2929993913841559/6, -261082718496449122051/13530, 1520097643918070802691/1806, -27833269579301024235023/690, 596451111593912163277961/282, -5609403368997817686249127547/46410, 495057205241079648212477525/66] }}} {{{id=206| B = matrix(5,5,a); show(B) ///
\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrrrr} \frac{1}{6} & -\frac{1}{30} & \frac{1}{42} & -\frac{1}{30} & \frac{5}{66} \\ -\frac{691}{2730} & \frac{7}{6} & -\frac{3617}{510} & \frac{43867}{798} & -\frac{174611}{330} \\ \frac{854513}{138} & -\frac{236364091}{2730} & \frac{8553103}{6} & -\frac{23749461029}{870} & \frac{8615841276005}{14322} \\ -\frac{7709321041217}{510} & \frac{2577687858367}{6} & -\frac{26315271553053477373}{1919190} & \frac{2929993913841559}{6} & -\frac{261082718496449122051}{13530} \\ \frac{1520097643918070802691}{1806} & -\frac{27833269579301024235023}{690} & \frac{596451111593912163277961}{282} & -\frac{5609403368997817686249127547}{46410} & \frac{495057205241079648212477525}{66} \end{array}\right)
}}} {{{id=215| maxima(B) /// matrix([1/6,-1/30,1/42,-1/30,5/66],[-691/2730,7/6,-3617/510,43867/798,-174611/330],[854513/138,-236364091/2730,8553103/6,-23749461029/870,8615841276005/14322],[-7709321041217/510,2577687858367/6,-26315271553053477373/1919190,2929993913841559/6,-261082718496449122051/13530],[1520097643918070802691/1806,-27833269579301024235023/690,596451111593912163277961/282,-5609403368997817686249127547/46410,495057205241079648212477525/66]) }}} {{{id=210| type(B) /// }}} {{{id=209| f = B.charpoly(); f /// x^5 - 495057205273309581358818895/66*x^4 + 61983227840206665836404733579108736902585440527440571508/46582559287006925*x^3 - 3329536450676795979922301816677295701621727182818226937358357764336/5750644893516577095405*x^2 + 6493333576199389777336154216471826424372955666712765638117933711360/16375645934871014776439*x - 3431762080971147893771985302569072595725008815917760783195308032000/73857505134826413583531 }}} {{{id=212| plot(f, 0,1e25) /// }}} {{{id=217| plot(f, 0,1e25) /// }}} {{{id=213| f.roots(RDF) /// [(0.150059334256, 1), (0.534801951741, 1), (435126.664288, 1), (1.77394190156e+14, 1), (7.50086674639e+24, 1)] }}} {{{id=218| RDF /// Real Double Field }}} {{{id=220| a = sqrt(2) + 5/3; a /// sqrt(2) + 5/3 }}} {{{id=221| a /// sqrt(2) + 5/3 }}} {{{id=222| parent(5/3) /// Rational Field }}} {{{id=223| parent(sqrt(2)) /// Symbolic Ring }}} {{{id=225| N(a, 100) /// 3.0808802290397617154683553909 }}} {{{id=224| v = RealIntervalField(300)(a); v /// 3.08088022903976171546835539087636474523633854204361473984334640465739914512877370551705421? }}} {{{id=226| v.lower() /// 3.08088022903976171546835539087636474523633854204361473984334640465739914512877370551705420 }}} {{{id=227| v.upper() /// 3.08088022903976171546835539087636474523633854204361473984334640465739914512877370551705421 }}} {{{id=219| RealField(300) /// Real Field with 300 bits of precision }}} {{{id=214| f.roots(RealField(300)) /// [(0.150059333481093391773686375578264240701638829767703759632823388736689908987599290621254000, 1), (0.534801953521090603789758819043126592253340136980208644293456816768698841917499312647873830, 1), (435126.664297256454269261184284331297953186551891568161740994260752652307965164882644080304, 1), (1.77394190155680591105539556683033543721657724243993243309540258438532706303343039717196551e14, 1), (7.50086674638790249666402380216015941110613395097305878065441149224416725615049334908804157e24, 1)] }}} {{{id=207| v = B.eigenvalues(); v /// [0.1500593334810934?, 0.5348019535210906?, 435126.6642972565?, 1.773941901556806?e14, 7.500866746387902?e24] }}} {{{id=205| alpha = v[0]; alpha /// 0.1500593334810934? }}} {{{id=208| alpha.minpoly() /// x^5 - 495057205273309581358818895/66*x^4 + 61983227840206665836404733579108736902585440527440571508/46582559287006925*x^3 - 3329536450676795979922301816677295701621727182818226937358357764336/5750644893516577095405*x^2 + 6493333576199389777336154216471826424372955666712765638117933711360/16375645934871014776439*x - 3431762080971147893771985302569072595725008815917760783195308032000/73857505134826413583531 }}} {{{id=204| /// }}}

Interactive Image Compression

(using numpy

{{{id=29| import pylab, numpy X = pylab.imread(DATA + 'focm.png') A_image = numpy.mean(X, 2) u,s,v = numpy.linalg.svd(A_image) S = numpy.zeros(A_image.shape) S[:len(s),:len(s)] = numpy.diag(s) n = A_image.shape[0] @interact def svd_image(i = ("Eigenvalues (quality)", (20,(1..A_image.shape[0]//2)))): A_approx = numpy.dot(numpy.dot(u[:,:i], S[:i,:i]), v[:i,:]) g = graphics_array([matrix_plot(A_approx), matrix_plot(A_image)]) show(g, axes=False, figsize=(8,4)) html("Compressed to %.1f%% of size using %s eigenvalues."%( 100*(2.0*i*n+i)/(n*n), i)) ///
Eigenvalues (quality) 
}}} {{{id=82| /// }}}

Number Theory

{{{id=115| factor(2009201020112012) # uses PARI /// 2^2 * 43 * 2269 * 5148259709 }}} {{{id=11| # Jon Bober - Rademacher's formula time number_of_partitions(10^7) /// 92027175502604546685596278166825605430729405281023979395328576351741298526232350197882291654710333933219876431112892669442996519201446933718057425885425510196566971369272243936886123704944390011846626724222935883880949646021554674211449712293631879438242092222979701858787035045131791561718499094276679781015502944193307504577212918898104161448934354538420643899518683659226259312517022343012768006249066347774384224200200491423135789948628712467862610060006610227873354093344771970346402912468019502617741296485750068965727678736574879683519236357061319134860914524427627076446580477740857594944050855144756641881148963046419111504530928013165254773178279374714115048498031936743061146399094602347281946619566715867818368113040887581799683872172944577575391666322871295451048112070492385908727524159239222366587691028630013147462129464573569940173628469758175515190001641345140899367093190859080267185611792170429465197857968117435299141079155705662249617336911859509285578584413441733816964914269258918743530174261522145886491433067881470395832647408578195566042566460494284912372612048505127243987254597660690323804252237148083121685300106473794690689801747504661946299472005981442948094926764563853171727831538610914056742150737497538427502124024964209080033657278768694168219946346309906686670220404292685540282106667661584147201155740243521818020629234011924167214100674819982674459329845176126920689181532303574746823885977198276651255478126323692431978852519785180336170541394768609366389114772406136683349412746708709224596935940110215929918473383014389065632764805267657590865513593978244244311680854217735536592823219001199569770431572718888108452817614295777255622715362408122265800848932276196267545354426556723347685735897551768373108977390874033016418618266068861412680046926417299574367992118065543824471964711585682146618651730116890773279227432137954488457335074000412015820488115033194548391813526724286716271750346470118187739995800431441608729698516332428256345862484406623639956273335472545741134762782834725659303362718667415197368798040219223371637134331256426629887430519590196027703231191899072357523708159719377437782971846471928181434133277347743728346062720786947891744911516248998265758156411629802345973249527007535170095624359891373084013345497111826508558570667664488643633183476426421938705419176750248730025527079093923132020478303851642054200888831310378483811088425548758508373324093873479730273437693679342081086702018520971877967092726990888474755041255077282275352308667980953624552474645295774554823817830271752015905175487656200680986962732503598211618667111264793583287147032328796244469851598884862190118775508811358918545701650113647140734902415801399931326365622784208807398682277421689531141855076998289838068746126554377321750652288128533274971246389513818051037817849704769088911818484659276794986806465634286299339344423718490667472287384981129496643999747556606122301402027411096367172771385437211572122448922846957076711812454645572143320128971630906382167345381586565940316748316082706877584540948496188398233399350019423833682423300814059493159013417591894979385650634324308841947277121816559279335938926911510683549043290690287102733571315222761846482615431786061813454633634415974179413942024706129986725734471552346167738613509470760758338637870579921007168514417341548481513953296373455058614174692678013759737246724696931125240457406888289154055030387593548942880549262383621259594080699698643245355453826567378500963781681659096276126857969078217677288980 Time: CPU 0.32 s, Wall: 0.50 s }}} {{{id=102| @interact def _(n=(25..10000)): plot(prime_pi, 0, n, gridlines='minor').show() ///
}}} {{{id=116| E = EllipticCurve('37a'); E /// Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field }}} {{{id=103| v = E.integral_points(both_signs=True); v # mwrank, new code /// [(-1 : -1 : 1), (-1 : 0 : 1), (0 : -1 : 1), (0 : 0 : 1), (1 : -1 : 1), (1 : 0 : 1), (2 : -3 : 1), (2 : 2 : 1), (6 : -15 : 1), (6 : 14 : 1)] }}} {{{id=119| plot(E, xmax=7, gridlines=True) + points([z[:2] for z in v], color='red', pointsize=50) /// }}} {{{id=117| E.change_ring(GF(next_prime(10^50))).cardinality() # pari SEA /// 100000000000000000000000001917684156174529696959920 }}} {{{id=6| /// }}}

Graph Theory

{{{id=216| graphs.BuckyBall().plot().show(figsize=15) /// }}} {{{id=76| set_random_seed(1) G = graphs.RandomLobster(8, .6, .3) show(G, figsize=7) /// }}} {{{id=77| G.automorphism_group() /// Permutation Group with generators [(12,26)] }}} {{{id=159| G.chromatic_number() /// 2 }}} {{{id=196| G.shortest_path(13,20) /// [13, 0, 1, 2, 3, 4, 5, 19, 20] }}} {{{id=78| graph_editor(G) ///
}}} {{{id=74| graphs. /// }}} {{{id=113| /// }}}

Cython

  • Smooth transition between Python and compiled C code.
  • Make code that involves lots of manipulation of C-level data structures optimally fast (orthogonal to algorithm choice).
  • Heavily used in scientific computing using Python.
{{{id=111| def python_sum2(n): s = int(0) for i in xrange(1, n+1): s += i*i return s /// }}} {{{id=123| python_sum2(3) /// 14 }}} {{{id=142| python_sum2(2*10^6) /// 2666668666667000000 }}} {{{id=110| timeit('python_sum2(2*10^6)') /// 5 loops, best of 3: 170 ms per loop }}} {{{id=120| %cython def cython_sum2(long n): cdef long i, s = 0 for i in range(1, n+1): s += i*i return s /// }}} {{{id=124| cython_sum2(3) /// 14 }}} {{{id=141| cython_sum2(2*10^6) /// 2666668666667000000 }}} {{{id=109| timeit('cython_sum2(2*10^6)') /// 125 loops, best of 3: 1.94 ms per loop }}} {{{id=122| 153/1.88 /// 81.3829787234043 }}} {{{id=140| /// }}} Of course, it is better to choose a different algorithm: {{{id=126| var('k, n') show(factor(sum(k^2, k, 1, n))) ///
\newcommand{\Bold}[1]{\mathbf{#1}}\frac{1}{6} \, {\left(n + 1\right)} {\left(2 \, n + 1\right)} n
}}} {{{id=121| def sum2(n): return n*(2*n+1)*(n+1)/6 /// }}} {{{id=146| sum2(2*10^6) /// 2666668666667000000 }}} {{{id=136| timeit('sum2(2*10^6)') /// 625 loops, best of 3: 2.81 µs per loop }}}

Even then, Cython provides a speedup:

{{{id=143| %cython def c_sum2(long n): return n*(2*n+1)*(n+1)/6 /// }}} {{{id=197| c_sum2(3) /// 14 }}} {{{id=144| timeit('c_sum2(2*10^6)') /// 625 loops, best of 3: 653 ns per loop }}}

But at a cost!

{{{id=145| c_sum2(2*10^6) # WARNING: overflow -- it's just like C... /// -407788678951258603 }}} {{{id=147| n=2*10^6; n*(2*n+1)*(n+1) > 2^63 /// True }}} {{{id=137| /// }}}

Solving Equations

Solve a cubic equation:

{{{id=15| x = var('x'); show(solve(x^3 + x - 1==0, x)[0]) ///
\newcommand{\Bold}[1]{\mathbf{#1}}x = -\frac{1}{2} \, {\left(i \, \sqrt{3} + 1\right)} {\left(\frac{1}{18} \, \sqrt{3} \sqrt{31} + \frac{1}{2}\right)}^{\left(\frac{1}{3}\right)} + \frac{-i \, \sqrt{3} + 1}{6 \, {\left(\frac{1}{18} \, \sqrt{3} \sqrt{31} + \frac{1}{2}\right)}^{\left(\frac{1}{3}\right)}}
}}}

Solve a system of two linear equations with one unknown coefficient $\alpha$:

{{{id=17| var('alpha, y') show(solve([3*x + 7*y == 2, alpha*x + 3*y == 8], x,y)[0]) ///
\newcommand{\Bold}[1]{\mathbf{#1}}\left[x = \frac{50}{7 \, \alpha - 9}, y = \frac{2 \, {\left(\alpha - 12\right)}}{7 \, \alpha - 9}\right]
}}}

Solve a system of 500 linear equations exactly over the rational numbers:

{{{id=127| n = 500 A = random_matrix(QQ,n,n,num_bound=10, den_bound=10) v = random_matrix(QQ,n,1,num_bound=10, den_bound=10) A.visualize_structure() /// }}} {{{id=148| # IML is used -- http://www.cs.uwaterloo.ca/~astorjoh/iml.html time w = A \ v /// Time: CPU 2.08 s, Wall: 2.00 s }}} {{{id=150| print w.str() /// WARNING: Output truncated! full_output.txt [ -351702876068802906437552420686055850326076457904676962275100830127540142095526131918250547265540344687113337535121385535022681546419262541678542779937822420479756487655377896847799471633977576723782073207520130799030819775724029423428556318476349173343755677252009492874198149433287102465125415887341239164981948271409429616954743899492932166187839273830840430242204133808650932888101185375789831810538994617493023740843690694407922374278683391461155140955728290202668993916913435555785505719850338025423229864154969579884279586929569973510779920100244120646553550505898020495083583179450653843216750029252593017958064901402944177967526951565395241248059756160265233192669848180922694279211718585778306380885162305086669108043433115714019399764705656405532372637424988128302930037221573841204291852109644817711181710035826684632372327454388036464817293856186537192905695504317631243147991171291738007709790188771615389151716498998554084032167552344805530360179417770975752951610003948983037774750319911117156732832021727785395392441490730958689252972967675220988730145127436244943789814598859295627758381613978837709335755249693377694808122420315644792522737484105107310982124866738518101800129697107516438736576977941408274379270293509382653911374966642274279158286587422764882484756865601579730895158614205063551061638491473504793910056083034636703628104249909909358743617446014742435439813694562291652176283751189754664295513611806198927659241385326021014632504226786504648620586888456514119837893571119109533967756125159975652399322500232691192061359137595156810713117303327205420957785613280646524680178422545699670542002396011852068784464293242075746389479364313879352013279031866881866550932388974988195825386061018513865229849909312500792251087107364215523707160192682022566179204513802804002649348052390662029135279718239620685711180813331043126149689112528101979192601149093524782042868789861639973589622434060005735985453157614692625120008989748107127816393893047295612770389853217738467738241538454558869964299842463856929563906378781078448435825750440527227707556191692290825726453524350972864386529150895363907965272416969469402617552438862114293776690558921934623925909303675286193416452595298612780914411142216266018732516721256192081722809558262961748724637965800722153538320807583614908367937680580453094035409535396244827250872802838491507467232684489867657561080066542916543081427459267666550278740733523244436200829487939168383811194688142700374028190883369685908216732077/406778287548421232666331161732867083284451766898265331336067813926311992369988856628099086734855735667115529095643017475187509536025110579820674273512710409816506781413949219095421900994613025586328298832520783087510115995249000462483853695254032218916775883778046276732513287003348820832286627339151659920216118602434782892082868740908234817764021744897598451761291562171363826753518869638462172176786920750397046439419756522146331329906325922062334126886845307227747533166221063380004741504866680087220033007960420359539342564917059907398615028523186317797636660999604624165361705540811548027344347944843318379754195828447139714059075956823953574961456072422821379853471265957417978467907648030343371041680488666213418782854500371449004464628137151693278248611405436919105441634514379785943438321498699491374429974941411916188300692918447066207671860293291735706044903379459163329722215462487004764606673950227898048328401073006835733854423499982247502117755480969561242112088131965551967459900917790184504128348366688399796247714348331657116276519708370377748220107893500318506080007877295044619391333807678344042981270732923845847840661087831919093000529797399599904218182992292585508525349195563753868289669013772157736583348697099384043469144344547635488272911439832922066075313432817036914368704456808129124539273223910518127512694139126508695831281678860513712181333729105725904365496018849941845190976573970615503284681408750206307284620020356423014190813611899820786073110923736507592224098870834184189350561093842374187901309709249334375710994985735557672788610080629408146012015171554449734793702597134820310225203084105776449433119524680976123866181969647041370142480229859354877697883210865623491026410955602205911593318386075749335920440095933187160459299339643209960996075895440125644540573643065630406530215220384502737018981682502335606698154233159446864117915813842827734973170373721996301841763236329935471494386783276795049901144295223363777310171682399431489512674283791187221666388715006803961777072989016656984486829254799709389454885066301520728637334573706302170617918018593936439994981310508468063757045909826757786706357829130980704081337842853100001277249846738997785268785823852018104843245188926381179282263086482208903119981671229274976649707235429823900190171387464844391690441164936391687051774383726627139496012306231401783236358878349778653017133170776393229190077739628990310160502280814134853096788081965867629862390376323081486388081447209515623489102340] [ 71261096665143257668658162813232178540279364200282412331110182949961695729619420326309715440293827746251713390662903114352846151161281250441097120169029621264201559926948837404463199725065392914261993758563637265716525976069107384179272777091468494307719490301188556768341390340816156617252353756419127818281645357724613582355543184860894266036241632315995877050056198788230497329665256989181826524968540664880713798787000910728967770589145496803196912017402877174429216398616845433296440873683660849250971849629916655993271828496826232795038918938573116045910787352245863991905838467324633559360554430624817595395913219293755479897335880812139782138804278160670554569961122212400908136488735192680666483344725664521511053801158073421310373130308034512364445006119180576475961863594091165497083388721381453096455530902278590384672749433429129256239417672349696156895982401889862608677052119437357644637225104291460491570315388547606285349023077861754642731395396147714122001657791717438876674684606713884558865151857664117599294425421186338236473525954284813297244776256788990307429793582533758315822389852482364969642131790501926822557594967463572790593437926087684404625778663873834394082223883152404741743301223911129088397625388249055844857299383656476135201070898941726734045537635452236215442384068459897850965386500626001863657763804553423678482599695192944057837796311113705969598918970167771490316260084254566579197725371370404615513394464764040419856844903744306776376464893117420666912682936776973023468566410451441069204781397957003909033198810510400547339572230363816338924666227886503338037720379727395038207464336208666886671133731349867050234600937153017892466402643845629073741624926120645957930774500537957102688612854797095880705125399265851735616177049028737268865920757894719932155963464160432598594917437126156682898070744235398285260476274677283583042221644724748805983275443480729773682890620163526090549881807584412022687257714984446642603687106695040670465420788840440266441899434832132557088303837838676997019945434756578898536498122338059558253662633497162947887448452563564352374794784923454915640125028651130682137951059870731965711620352929234572091755395562745097297150142145693347197839779225002496499973787358575825662518076299762975907067917750786637406902075858335457029962918804981790639912622621725327441804043881077932887578760644677172353210896802045553120040221747735815047265560792085411289595812221132708939135952750960631854645917841141921884756787/813556575096842465332662323465734166568903533796530662672135627852623984739977713256198173469711471334231058191286034950375019072050221159641348547025420819633013562827898438190843801989226051172656597665041566175020231990498000924967707390508064437833551767556092553465026574006697641664573254678303319840432237204869565784165737481816469635528043489795196903522583124342727653507037739276924344353573841500794092878839513044292662659812651844124668253773690614455495066332442126760009483009733360174440066015920840719078685129834119814797230057046372635595273321999209248330723411081623096054688695889686636759508391656894279428118151913647907149922912144845642759706942531914835956935815296060686742083360977332426837565709000742898008929256274303386556497222810873838210883269028759571886876642997398982748859949882823832376601385836894132415343720586583471412089806758918326659444430924974009529213347900455796096656802146013671467708846999964495004235510961939122484224176263931103934919801835580369008256696733376799592495428696663314232553039416740755496440215787000637012160015754590089238782667615356688085962541465847691695681322175663838186001059594799199808436365984585171017050698391127507736579338027544315473166697394198768086938288689095270976545822879665844132150626865634073828737408913616258249078546447821036255025388278253017391662563357721027424362667458211451808730992037699883690381953147941231006569362817500412614569240040712846028381627223799641572146221847473015184448197741668368378701122187684748375802619418498668751421989971471115345577220161258816292024030343108899469587405194269640620450406168211552898866239049361952247732363939294082740284960459718709755395766421731246982052821911204411823186636772151498671840880191866374320918598679286419921992151790880251289081147286131260813060430440769005474037963365004671213396308466318893728235831627685655469946340747443992603683526472659870942988773566553590099802288590446727554620343364798862979025348567582374443332777430013607923554145978033313968973658509599418778909770132603041457274669147412604341235836037187872879989962621016936127514091819653515573412715658261961408162675685706200002554499693477995570537571647704036209686490377852762358564526172964417806239963342458549953299414470859647800380342774929688783380882329872783374103548767453254278992024612462803566472717756699557306034266341552786458380155479257980620321004561628269706193576163931735259724780752646162972776162894419031246978204680] [ -160368478412945774060217542266565614741480339664473882003496792380575289784943072053141554829053293930921857607102015402295709462520818428590597947081758626095111584217558171924149959990476644701661857370387120939161533080399107778728384741444771537907653922319759894925698920371891777353298344299989533341107106083455795918934303490134789381788149001754798357219163777955690624243090780940038394378744275143397662074039674778320791060793269012306741816670290835859282706666942663850625245146784469575887380489922101453134982957742075499004591789195750769348073242033773798477949923643941006395796361486072093633870383782866702158458546676461882498748278944745533497547122031834700319769783250390513841810237819370359022464431560993945921165694696851110031181085277800724768081489399381001096579409475861721879194912363344711398871523122632382536199508988784889511121664982989461247748275493782505705516437124556673236330124644843440717359475895909244905162150877680661132588489739431934491509649514421694064324595796508075639597977267911753289413618179937603437414778980866101466420855502252646305132994695772053544350880301467972535190342552264548626637596538640456639698125168044830077007218921035179691445124822750802413590763916770854032550397882750430506899363811690620437674458177079518594760964045472453277260432501059471358000277224128740628155546846871267522572627083716424935148969530675300287456263163761382833280197051341817671547784446172478777405397645740727692316304905027489628603324136327734105780063644438612194345797356644259989147002965033613516078420616201919717306671583888623882301355687955109440791726834339176839207112932036985722404197924010064653628113454857728315766849988900523564728935734775708582736645678832610674020627036575175920506126245180893499938008508940409206301120662957230203490764480306807870623765188813668626650165413652927518384485750979325936171383262262191357859343934793785783747699127458180847994892687283610594823235273995871136224100720764934278774155992776467311846037633630453882493603407311085883629008582793117780678702334008758518549450449090031726050253937052251803278864703625809836432226005491499478743364915537677681217714272645327756195396244217254600617619844580763415685473113379704415199206135752245256559320142639667436992446660525914733367980482973098699798343578080927082562140380781846246271891778595282906513132447188590580991471165079819069880082887415773781212036573804731437644926508362935501173611761755873866318209749/813556575096842465332662323465734166568903533796530662672135627852623984739977713256198173469711471334231058191286034950375019072050221159641348547025420819633013562827898438190843801989226051172656597665041566175020231990498000924967707390508064437833551767556092553465026574006697641664573254678303319840432237204869565784165737481816469635528043489795196903522583124342727653507037739276924344353573841500794092878839513044292662659812651844124668253773690614455495066332442126760009483009733360174440066015920840719078685129834119814797230057046372635595273321999209248330723411081623096054688695889686636759508391656894279428118151913647907149922912144845642759706942531914835956935815296060686742083360977332426837565709000742898008929256274303386556497222810873838210883269028759571886876642997398982748859949882823832376601385836894132415343720586583471412089806758918326659444430924974009529213347900455796096656802146013671467708846999964495004235510961939122484224176263931103934919801835580369008256696733376799592495428696663314232553039416740755496440215787000637012160015754590089238782667615356688085962541465847691695681322175663838186001059594799199808436365984585171017050698391127507736579338027544315473166697394198768086938288689095270976545822879665844132150626865634073828737408913616258249078546447821036255025388278253017391662563357721027424362667458211451808730992037699883690381953147941231006569362817500412614569240040712846028381627223799641572146221847473015184448197741668368378701122187684748375802619418498668751421989971471115345577220161258816292024030343108899469587405194269640620450406168211552898866239049361952247732363939294082740284960459718709755395766421731246982052821911204411823186636772151498671840880191866374320918598679286419921992151790880251289081147286131260813060430440769005474037963365004671213396308466318893728235831627685655469946340747443992603683526472659870942988773566553590099802288590446727554620343364798862979025348567582374443332777430013607923554145978033313968973658509599418778909770132603041457274669147412604341235836037187872879989962621016936127514091819653515573412715658261961408162675685706200002554499693477995570537571647704036209686490377852762358564526172964417806239963342458549953299414470859647800380342774929688783380882329872783374103548767453254278992024612462803566472717756699557306034266341552786458380155479257980620321004561628269706193576163931735259724780752646162972776162894419031246978204680] [ 670780905754609967862650398220177131177982831134934789266535389879224675773307564662073865692648181233994331697383846839497175338963679798323513187899868079464157734043255602408681967520161201925055301342464903570471904668198180264901434541450940837169885399568778669797277584818744804151520865781157194206457963383958940453038570178726464435502120297975155121858149317360619754079230429560868422017095051303456340847868979957454837223853465437437654331101665463453971428493185955270172827607409888305744587027806884471151602466921702271564609879556828705860943892266695837122690078564177545904879325344663082066414135658896061425931644562780728315670905927070614377744904990994289022401542062368203773561307846567219499395996438129464206420489864647382646396571610758270980794351970912021233545865456886524596773516466835470878718792567580333908554121695311325318702591696054956415626235577721689430069542015257128482768041386152484643086684909751991007395420172135538285912319239017008565968032526765724608123929851299 ... 928314429244369494603036889639548333673675740224437536949675160523883699733750284397994294223069115444032251763258404806068621779893917481038853928124090081233642310579773247809872390449546472787858816548056992091943741951079153284346249396410564382240882364637327354430299734368176038373274864183719735857283984398430358176050257816229457226252162612086088153801094807592673000934242679261693263778745647166325537131093989268149488798520736705294531974188597754713310718019960457718089345510924068672959772595805069713516474888666555486002721584710829195606662793794731701919883755781954026520608291454933829482520868247167207437574575997992524203387225502818363930703114682543131652392281632535137141240000510899938695599114107514329540807241937298075570552471712905234592883561247992668491709990659882894171929560076068554985937756676176465974556674820709753490650855798404922492560713294543551339911461206853268310557291676031095851596124064200912325653941238715232786347051944956150529232594555232578883806249395640936] [ 945260438484163563044816553270592918001394751912601774911825365496702101869516492466616395590211147173762603314811628294546497345263839563666415583095090067032994069691334912003870897476485026314210361234918632939627113750449192588841359026968866079516989072845040071940793991295151325555378155861981887132570589489287106795044073018125006894041466829840435185554095249086105918270373351244069950304821688160848574794292595412083193782255633569430951497593694134968328311112412111626673937106082001550878189006390542393132340296934604234894704844140553852953769601316024676680918627892453987630419620020497064502598327996829810101649304391646190740797656277617083226079919395211544210888444042385829536994393210450651199728670394153493355137383333993363189657749125373009649962059304497351975563946123204314316576218152264789694619954476090375233361538701533649288116764115532254010558548901149494658657504048591644907239559563758928695118666640796415414777980825494750146503022200282376165485639543051257724778421157118490532187380404634254768989064965878170952631359925451301370623771401054377000604587293230405831288638233961825316508199469981546355528511040796390360589193272004060090801171319387281223700624649553757262338223923345889066439761405289990288428639070654876921929568265462002905768632303202778273065462907624324570343872094765158455209524374765324336530325375866974450465948376270177533291727397356838285622914531657541338612055138174753528355821001604691566163573615831527923914531595903687486584099485877470410018067517554997896868834157780642327548164523905313595745654569524691995670963596443444258027097524653552645917906701767500506143166159568497263134244759938183252565345294474154600776120953534094860058553868504396439566981898063636746218198732319710801586401659041709051749207853320770698143933357673936552557367359279288126574362896160724072947728043556896394907309356716909208924749626242048197726284571299226330550247095469436831654022026719371425964531044734433290481019910059532907619013194384163144094845729069342567803937185325801377563775644505083555319782084434941824586972864807839554277117559681492762524089402439947751920848126754469881251759962560522859110189200270636661740491889398071797735958772710053573297443175261338656116565852050642004020743136552986786830586614578587320048479176856369922262578475480783237925833497937251244233283694508981977343884896964120786817533130298359915273484212275453501089851844417605157177929842231947390251620333/406778287548421232666331161732867083284451766898265331336067813926311992369988856628099086734855735667115529095643017475187509536025110579820674273512710409816506781413949219095421900994613025586328298832520783087510115995249000462483853695254032218916775883778046276732513287003348820832286627339151659920216118602434782892082868740908234817764021744897598451761291562171363826753518869638462172176786920750397046439419756522146331329906325922062334126886845307227747533166221063380004741504866680087220033007960420359539342564917059907398615028523186317797636660999604624165361705540811548027344347944843318379754195828447139714059075956823953574961456072422821379853471265957417978467907648030343371041680488666213418782854500371449004464628137151693278248611405436919105441634514379785943438321498699491374429974941411916188300692918447066207671860293291735706044903379459163329722215462487004764606673950227898048328401073006835733854423499982247502117755480969561242112088131965551967459900917790184504128348366688399796247714348331657116276519708370377748220107893500318506080007877295044619391333807678344042981270732923845847840661087831919093000529797399599904218182992292585508525349195563753868289669013772157736583348697099384043469144344547635488272911439832922066075313432817036914368704456808129124539273223910518127512694139126508695831281678860513712181333729105725904365496018849941845190976573970615503284681408750206307284620020356423014190813611899820786073110923736507592224098870834184189350561093842374187901309709249334375710994985735557672788610080629408146012015171554449734793702597134820310225203084105776449433119524680976123866181969647041370142480229859354877697883210865623491026410955602205911593318386075749335920440095933187160459299339643209960996075895440125644540573643065630406530215220384502737018981682502335606698154233159446864117915813842827734973170373721996301841763236329935471494386783276795049901144295223363777310171682399431489512674283791187221666388715006803961777072989016656984486829254799709389454885066301520728637334573706302170617918018593936439994981310508468063757045909826757786706357829130980704081337842853100001277249846738997785268785823852018104843245188926381179282263086482208903119981671229274976649707235429823900190171387464844391690441164936391687051774383726627139496012306231401783236358878349778653017133170776393229190077739628990310160502280814134853096788081965867629862390376323081486388081447209515623489102340] [ -358669728503033965955046155185932503931883887379872277455118210909083910254386318143853434768979832723549374539655035486287332528493716123204745893692383498832669526276786683673904466835238639111088489501764730667623702309564454401524664751962733297767756605046843810323282157342929200103920561874440525477251448694426475910906183363714801162688648567335403604919306230696926882577929210556910121365156244335925007234747417158732119181576748955003656031315033939093045533552754366877253024275739836582994296438228735310225687885278263039248688556077564643767517982473448420357984617974602745319923721806502352817676428835210626041095041734222183170303483420251965030769896190208542328632059559453213241348772132134549531895343197550427800366651064387349790717313637250573233398872198367767305295605199794826409807429614725189991883347980227928648581553485969294746060266480342002929419022471021492334789007101452134820262221327986827987140951621494784318179324074936945809504651484175647749810818574041046595389734807049926345085452602202495438270813565238225424537383086557558600224205290612814923663677037807470148872131015934686634473433295002914172318504192997580817878689368136443866464498705094242183375719200623212808829793591695768014573181159527956973914106685103790783006656091515892720470980684760153787067511421381557188030604358243681050112120262571883700854830653937068812916727205063269066865426830426904725752660087749124636974478378476186271582986987960882649998017980091353322415899683597318914629576909708090027040130438756995162342242460534844728261881102222892659751843527102638515452202500931719814414012919016714886649180935485401425937962683182259880954308659482380558744432162687339111706757814070105172386748842634326219715775441906177809841217172274961913302352783648798965584644483165038286859822860523058893268264305557294565373133526881255668457900027337630727918199156288155894459066363732549980163605448331717010590559332428229989478346966992548153505364195296707498890926568747883424771896925615428218039677903568278431217963254424260294339880029899143539042133908188545883190015389767352097922328789815889634728782118044120593851265268406258913236600002879915013168902752334850484291447438752544708294311652150661754967997446326566290375718815961511556596354983345627682097287229943600353589533260214906973525693290967337231477300997837442444005683040302147427806569828438714089672217900345012788326328335017573022213821202871617596056917140884160335108012469/813556575096842465332662323465734166568903533796530662672135627852623984739977713256198173469711471334231058191286034950375019072050221159641348547025420819633013562827898438190843801989226051172656597665041566175020231990498000924967707390508064437833551767556092553465026574006697641664573254678303319840432237204869565784165737481816469635528043489795196903522583124342727653507037739276924344353573841500794092878839513044292662659812651844124668253773690614455495066332442126760009483009733360174440066015920840719078685129834119814797230057046372635595273321999209248330723411081623096054688695889686636759508391656894279428118151913647907149922912144845642759706942531914835956935815296060686742083360977332426837565709000742898008929256274303386556497222810873838210883269028759571886876642997398982748859949882823832376601385836894132415343720586583471412089806758918326659444430924974009529213347900455796096656802146013671467708846999964495004235510961939122484224176263931103934919801835580369008256696733376799592495428696663314232553039416740755496440215787000637012160015754590089238782667615356688085962541465847691695681322175663838186001059594799199808436365984585171017050698391127507736579338027544315473166697394198768086938288689095270976545822879665844132150626865634073828737408913616258249078546447821036255025388278253017391662563357721027424362667458211451808730992037699883690381953147941231006569362817500412614569240040712846028381627223799641572146221847473015184448197741668368378701122187684748375802619418498668751421989971471115345577220161258816292024030343108899469587405194269640620450406168211552898866239049361952247732363939294082740284960459718709755395766421731246982052821911204411823186636772151498671840880191866374320918598679286419921992151790880251289081147286131260813060430440769005474037963365004671213396308466318893728235831627685655469946340747443992603683526472659870942988773566553590099802288590446727554620343364798862979025348567582374443332777430013607923554145978033313968973658509599418778909770132603041457274669147412604341235836037187872879989962621016936127514091819653515573412715658261961408162675685706200002554499693477995570537571647704036209686490377852762358564526172964417806239963342458549953299414470859647800380342774929688783380882329872783374103548767453254278992024612462803566472717756699557306034266341552786458380155479257980620321004561628269706193576163931735259724780752646162972776162894419031246978204680] [ 94845608333097133173401888178176458058832090978630604413922484212836628856606299168225592655383516946510320600786952561285584383672535782370444557928845542502800318016033743491602294306312049277866092796960805826013736829825775518426269648187883363421136852966085215421910247612201575741848139194292482051768721430018527906012269426488046758265747513494798641566802199827783229808348585230164912908128805544164279980141002798873299232313266181661270328019533635992923810686456150235396730932129375230466804467871481290704951816259796110040716930836486219583991994588336766319125808902170852173227591600459058775457997712880519539397066463308016247590116941852125967316575867074982416259646479821673341594414125367529471312245190727413975078825223112367837976434085495114687857050066610252083336737515050272209950369811875931985129459706060254484842370489024373355567653887976290504101064692469124926023290781715520535875387470931683441759534773491053101786808259343647755603278279938041928352841299637769724250061850371711697787714995062371020928486039555331072415692774208121422221288799894254156260975960627977637937664775325312194035175587094218978067022902303201317200546213304055596547273229543258328466136934551237036580051114195023626655937621557653896328644550310236669514712423764690397004384388419162642901597507898983470661842720515800673527477104236906480601610644925093160066953220006986065422049226212008252162020833988571878693620796925623704138261382316135011911942945909150227142087963748646415195807484336944765521070550962312638973564387487948839566176454971246168530810949502352518642572093583028226823818381773174139115143867987052212309115403011542565072220391630425274684713659728556538800193064808839182079147256993832713170403686970379758369998500557657108150892066393499804483707480335791460002301158524085107299551026142062002471185782037096417724527835627158594419473980665155330636050397092879438893520526866531369671015628647982314388141504753903911512625844651416959849823644449810616899404264026786969883941962862316318139956294868954158941737486232839221595049477801107679372168915288975095394927862912695483022350031666986962394011941027440468622670018481678907544041525829125922749496595577288463732270361803614110187194613630325563894603895653028659842554757675429788048709764909166842506531697578529691272393821106179926353716178985129634627039662019030317498068636227419987061196612738040762439867035389965115976196278333457010123362614934679690155154701/406778287548421232666331161732867083284451766898265331336067813926311992369988856628099086734855735667115529095643017475187509536025110579820674273512710409816506781413949219095421900994613025586328298832520783087510115995249000462483853695254032218916775883778046276732513287003348820832286627339151659920216118602434782892082868740908234817764021744897598451761291562171363826753518869638462172176786920750397046439419756522146331329906325922062334126886845307227747533166221063380004741504866680087220033007960420359539342564917059907398615028523186317797636660999604624165361705540811548027344347944843318379754195828447139714059075956823953574961456072422821379853471265957417978467907648030343371041680488666213418782854500371449004464628137151693278248611405436919105441634514379785943438321498699491374429974941411916188300692918447066207671860293291735706044903379459163329722215462487004764606673950227898048328401073006835733854423499982247502117755480969561242112088131965551967459900917790184504128348366688399796247714348331657116276519708370377748220107893500318506080007877295044619391333807678344042981270732923845847840661087831919093000529797399599904218182992292585508525349195563753868289669013772157736583348697099384043469144344547635488272911439832922066075313432817036914368704456808129124539273223910518127512694139126508695831281678860513712181333729105725904365496018849941845190976573970615503284681408750206307284620020356423014190813611899820786073110923736507592224098870834184189350561093842374187901309709249334375710994985735557672788610080629408146012015171554449734793702597134820310225203084105776449433119524680976123866181969647041370142480229859354877697883210865623491026410955602205911593318386075749335920440095933187160459299339643209960996075895440125644540573643065630406530215220384502737018981682502335606698154233159446864117915813842827734973170373721996301841763236329935471494386783276795049901144295223363777310171682399431489512674283791187221666388715006803961777072989016656984486829254799709389454885066301520728637334573706302170617918018593936439994981310508468063757045909826757786706357829130980704081337842853100001277249846738997785268785823852018104843245188926381179282263086482208903119981671229274976649707235429823900190171387464844391690441164936391687051774383726627139496012306231401783236358878349778653017133170776393229190077739628990310160502280814134853096788081965867629862390376323081486388081447209515623489102340] }}} {{{id=149| /// }}} {{{id=151| /// }}}

Symbolic Calculus

Symbolic Calculus makes use of Maxima and Ginac under the hood.

{{{id=26| var('x') f = sqrt(1 - x^2) plot(f, thickness=3, color='red', aspect_ratio=1, fill=True) /// }}} {{{id=163| var('t') assume(t+1 > 0) g = integrate(f, (x, -1, t)); show(g) ///
\newcommand{\Bold}[1]{\mathbf{#1}}\frac{1}{4} \, \pi + \frac{1}{2} \, \sqrt{-t^{2} + 1} t + \frac{1}{2} \, \arcsin\left(t\right)
}}} {{{id=162| show(g(t=1) - g(t=-1)) ///
\newcommand{\Bold}[1]{\mathbf{#1}}\frac{1}{2} \, \pi
}}} {{{id=160| /// }}} {{{id=161| /// }}}

Plotting in 2D

{{{id=71| plot(sin(1/x^2), (x,.1,.5)) /// }}} {{{id=166| G = sum(circle((random(), random()), random()/3, color=hue(random())) for i in range(25)) G.show(aspect_ratio=1, frame=True) /// }}} {{{id=165| /// }}} {{{id=32| /// }}}

Plotting in 3D

{{{id=30| f(x,y) = sin(x - y) * y * cos(x) plot3d(f, (x,-3,3), (y,-3,3), opacity=.9, color='red') /// }}} {{{id=168| G = sum(sphere((random(), random(), random()), random()/4, color=hue(random()), opacity=.6) for i in range(20)) G.show(aspect_ratio=1, frame=True) /// }}} {{{id=167| /// }}} {{{id=65| /// }}} {{{id=64| /// }}}

Plotting a 3D Model

See http://www.davidson.edu/math/chartier/Starwars/

{{{id=49| # Yoda! (53,756 vertices) from scipy import io yoda = io.loadmat(DATA + 'yodapose.mat') from sage.plot.plot3d.index_face_set import IndexFaceSet V = yoda['V']; F3=yoda['F3']-1; F4=yoda['F4']-1 Y = IndexFaceSet(F3,V,color=Color('#444444')) + IndexFaceSet(F4,V,color=Color('#007700')) Y = Y.rotateX(-1) Y.show(aspect_ratio=1, frame=False, zoom=1.2) /// }}} {{{id=96| /// }}}

Question Break 2 (of 2)

????

{{{id=131| /// }}}