Abstract interface to Maxima¶
Maxima is a free GPL’d general purpose computer algebra system whose development started in 1968 at MIT. It contains symbolic manipulation algorithms, as well as implementations of special functions, including elliptic functions and generalized hypergeometric functions. Moreover, Maxima has implementations of many functions relating to the invariant theory of the symmetric group \(S_n\). (However, the commands for group invariants, and the corresponding Maxima documentation, are in French.) For many links to Maxima documentation see http://maxima.sourceforge.net/docs.shtml/.
AUTHORS:
- William Stein (2005-12): Initial version 
- David Joyner: Improved documentation 
- William Stein (2006-01-08): Fixed bug in parsing 
- William Stein (2006-02-22): comparisons (following suggestion of David Joyner) 
- William Stein (2006-02-24): greatly improved robustness by adding sequence numbers to IO bracketing in _eval_line 
- Robert Bradshaw, Nils Bruin, Jean-Pierre Flori (2010,2011): Binary library interface 
This is an abstract class implementing the functions shared between the Pexpect and library interfaces to Maxima.
- class sage.interfaces.maxima_abstract.MaximaAbstract(name='maxima_abstract')[source]¶
- Bases: - ExtraTabCompletion,- Interface- Abstract interface to Maxima. - INPUT: - name– string
 - OUTPUT: the interface - EXAMPLES: - This class should not be instantiated directly, but through its subclasses Maxima (Pexpect interface) or MaximaLib (library interface): - sage: m = Maxima() sage: from sage.interfaces.maxima_abstract import MaximaAbstract sage: isinstance(m,MaximaAbstract) True - >>> from sage.all import * >>> m = Maxima() >>> from sage.interfaces.maxima_abstract import MaximaAbstract >>> isinstance(m,MaximaAbstract) True - chdir(dir)[source]¶
- Change Maxima’s current working directory. - INPUT: - dir– string
 - OUTPUT: none - EXAMPLES: - sage: maxima.chdir('/') - >>> from sage.all import * >>> maxima.chdir('/') 
 - completions(s, verbose=True)[source]¶
- Return all commands that complete the command starting with the string - s. This is like typing s[tab] in the Maxima interpreter.- INPUT: - s– string
- verbose– boolean (default:- True)
 - OUTPUT: array of strings - EXAMPLES: - sage: sorted(maxima.completions('gc', verbose=False)) ['gcd', 'gcdex', 'gcfactor', 'gctime'] - >>> from sage.all import * >>> sorted(maxima.completions('gc', verbose=False)) ['gcd', 'gcdex', 'gcfactor', 'gctime'] 
 - console()[source]¶
- Start the interactive Maxima console. This is a completely separate maxima session from this interface. To interact with this session, you should instead use - maxima.interact().- OUTPUT: none - EXAMPLES: - sage: maxima.console() # not tested (since we can't) Maxima 5.46.0 https://maxima.sourceforge.io using Lisp ECL 21.2.1 Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. This is a development version of Maxima. The function bug_report() provides bug reporting information. (%i1) - >>> from sage.all import * >>> maxima.console() # not tested (since we can't) Maxima 5.46.0 https://maxima.sourceforge.io using Lisp ECL 21.2.1 Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. This is a development version of Maxima. The function bug_report() provides bug reporting information. (%i1) - sage: maxima.interact() # not tested --> Switching to Maxima <-- maxima: 2+2 4 maxima: --> Exiting back to Sage <-- - >>> from sage.all import * >>> maxima.interact() # not tested --> Switching to Maxima <-- maxima: 2+2 4 maxima: --> Exiting back to Sage <-- 
 - cputime(t=None)[source]¶
- Return the amount of CPU time that this Maxima session has used. - INPUT: - t– float (default:- None); if var{t} is not None, then it returns the difference between the current CPU time and var{t}
 - OUTPUT: float - EXAMPLES: - sage: t = maxima.cputime() sage: _ = maxima.de_solve('diff(y,x,2) + 3*x = y', ['x','y'], [1,1,1]) sage: maxima.cputime(t) # output random 0.568913 - >>> from sage.all import * >>> t = maxima.cputime() >>> _ = maxima.de_solve('diff(y,x,2) + 3*x = y', ['x','y'], [Integer(1),Integer(1),Integer(1)]) >>> maxima.cputime(t) # output random 0.568913 
 - de_solve(de, vars, ics=None)[source]¶
- Solve a 1st or 2nd order ordinary differential equation (ODE) in two variables, possibly with initial conditions. - INPUT: - de– string representing the ODE
- vars– list of strings representing the two variables
- ics– a triple of numbers [a,b1,b2] representing y(a)=b1, y’(a)=b2
 - EXAMPLES: - sage: maxima.de_solve('diff(y,x,2) + 3*x = y', ['x','y'], [1,1,1]) y = 3*x-2*%e^(x-1) sage: maxima.de_solve('diff(y,x,2) + 3*x = y', ['x','y']) y = %k1*%e^x+%k2*%e^-x+3*x sage: maxima.de_solve('diff(y,x) + 3*x = y', ['x','y']) y = (%c-3*(...-x...-1)*%e^-x)*%e^x sage: maxima.de_solve('diff(y,x) + 3*x = y', ['x','y'],[1,1]) y = -...%e^-1*(5*%e^x-3*%e*x-3*%e)... - >>> from sage.all import * >>> maxima.de_solve('diff(y,x,2) + 3*x = y', ['x','y'], [Integer(1),Integer(1),Integer(1)]) y = 3*x-2*%e^(x-1) >>> maxima.de_solve('diff(y,x,2) + 3*x = y', ['x','y']) y = %k1*%e^x+%k2*%e^-x+3*x >>> maxima.de_solve('diff(y,x) + 3*x = y', ['x','y']) y = (%c-3*(...-x...-1)*%e^-x)*%e^x >>> maxima.de_solve('diff(y,x) + 3*x = y', ['x','y'],[Integer(1),Integer(1)]) y = -...%e^-1*(5*%e^x-3*%e*x-3*%e)... 
 - de_solve_laplace(de, vars, ics=None)[source]¶
- Solve an ordinary differential equation (ODE) using Laplace transforms. - INPUT: - de– string representing the ODE (e.g., de = “diff(f(x),x,2)=diff(f(x),x)+sin(x)”)
- vars– list of strings representing the variables (e.g.,- vars = ["x","f"])
- ics– list of numbers representing initial conditions, with symbols allowed which are represented by strings (eg, f(0)=1, f’(0)=2 is ics = [0,1,2])
 - EXAMPLES: - sage: maxima.clear('x'); maxima.clear('f') sage: maxima.de_solve_laplace("diff(f(x),x,2) = 2*diff(f(x),x)-f(x)", ["x","f"], [0,1,2]) f(x) = x*%e^x+%e^x - >>> from sage.all import * >>> maxima.clear('x'); maxima.clear('f') >>> maxima.de_solve_laplace("diff(f(x),x,2) = 2*diff(f(x),x)-f(x)", ["x","f"], [Integer(0),Integer(1),Integer(2)]) f(x) = x*%e^x+%e^x - sage: maxima.clear('x'); maxima.clear('f') sage: f = maxima.de_solve_laplace("diff(f(x),x,2) = 2*diff(f(x),x)-f(x)", ["x","f"]) sage: f f(x) = x*%e^x*('at('diff(f(x),x,1),x = 0))-f(0)*x*%e^x+f(0)*%e^x sage: print(f) ! x d ! x x f(x) = x %e (-- (f(x))! ) - f(0) x %e + f(0) %e dx ! !x = 0 - >>> from sage.all import * >>> maxima.clear('x'); maxima.clear('f') >>> f = maxima.de_solve_laplace("diff(f(x),x,2) = 2*diff(f(x),x)-f(x)", ["x","f"]) >>> f f(x) = x*%e^x*('at('diff(f(x),x,1),x = 0))-f(0)*x*%e^x+f(0)*%e^x >>> print(f) ! x d ! x x f(x) = x %e (-- (f(x))! ) - f(0) x %e + f(0) %e dx ! !x = 0 - Note - The second equation sets the values of \(f(0)\) and \(f'(0)\) in Maxima, so subsequent ODEs involving these variables will have these initial conditions automatically imposed. 
 - demo(s)[source]¶
- Run Maxima’s demo for - s.- INPUT: - s– string
 - OUTPUT: none - EXAMPLES: - sage: maxima.demo('cf') # not tested read and interpret file: .../share/maxima/5.34.1/demo/cf.dem At the '_' prompt, type ';' and <enter> to get next demonstration. frac1:cf([1,2,3,4]) ... - >>> from sage.all import * >>> maxima.demo('cf') # not tested read and interpret file: .../share/maxima/5.34.1/demo/cf.dem At the '_' prompt, type ';' and <enter> to get next demonstration. frac1:cf([1,2,3,4]) ... 
 - describe(s)[source]¶
- Return Maxima’s help for - s.- INPUT: - s– string
 - OUTPUT: Maxima’s help for - s- EXAMPLES: - sage: maxima.help('gcd') -- Function: gcd (<p_1>, <p_2>, <x_1>, ...) ... - >>> from sage.all import * >>> maxima.help('gcd') -- Function: gcd (<p_1>, <p_2>, <x_1>, ...) ... 
 - example(s)[source]¶
- Return Maxima’s examples for - s.- INPUT: - s– string
 - OUTPUT: Maxima’s examples for - s- EXAMPLES: - sage: maxima.example('arrays') a[n]:=n*a[n-1] a := n a n n - 1 a[0]:1 a[5] 120 a[n]:=n a[6] 6 a[4] 24 done - >>> from sage.all import * >>> maxima.example('arrays') a[n]:=n*a[n-1] a := n a n n - 1 a[0]:1 a[5] 120 a[n]:=n a[6] 6 a[4] 24 done 
 - function(args, defn, rep=None, latex=None)[source]¶
- Return the Maxima function with given arguments and definition. - INPUT: - args– string with variable names separated by commas
- defn– string (or Maxima expression) that defines a function of the arguments in Maxima
- rep– an optional string; if given, this is how the function will print
 - OUTPUT: Maxima function - EXAMPLES: - sage: f = maxima.function('x', 'sin(x)') sage: f(3.2) # abs tol 2e-16 -0.058374143427579909 sage: f = maxima.function('x,y', 'sin(x)+cos(y)') sage: f(2, 3.5) # abs tol 2e-16 sin(2)-0.9364566872907963 sage: f sin(x)+cos(y) - >>> from sage.all import * >>> f = maxima.function('x', 'sin(x)') >>> f(RealNumber('3.2')) # abs tol 2e-16 -0.058374143427579909 >>> f = maxima.function('x,y', 'sin(x)+cos(y)') >>> f(Integer(2), RealNumber('3.5')) # abs tol 2e-16 sin(2)-0.9364566872907963 >>> f sin(x)+cos(y) - sage: g = f.integrate('z') sage: g (cos(y)+sin(x))*z sage: g(1,2,3) 3*(cos(2)+sin(1)) - >>> from sage.all import * >>> g = f.integrate('z') >>> g (cos(y)+sin(x))*z >>> g(Integer(1),Integer(2),Integer(3)) 3*(cos(2)+sin(1)) - The function definition can be a Maxima object: - sage: an_expr = maxima('sin(x)*gamma(x)') sage: t = maxima.function('x', an_expr) sage: t gamma(x)*sin(x) sage: t(2) sin(2) sage: float(t(2)) 0.9092974268256817 sage: loads(t.dumps()) gamma(x)*sin(x) - >>> from sage.all import * >>> an_expr = maxima('sin(x)*gamma(x)') >>> t = maxima.function('x', an_expr) >>> t gamma(x)*sin(x) >>> t(Integer(2)) sin(2) >>> float(t(Integer(2))) 0.9092974268256817 >>> loads(t.dumps()) gamma(x)*sin(x) 
 - help(s)[source]¶
- Return Maxima’s help for - s.- INPUT: - s– string
 - OUTPUT: Maxima’s help for - s- EXAMPLES: - sage: maxima.help('gcd') -- Function: gcd (<p_1>, <p_2>, <x_1>, ...) ... - >>> from sage.all import * >>> maxima.help('gcd') -- Function: gcd (<p_1>, <p_2>, <x_1>, ...) ... 
 - plot2d(*args)[source]¶
- Plot a 2d graph using Maxima / gnuplot. - maxima.plot2d(f, ‘[var, min, max]’, options) - INPUT: - f– string representing a function (such as f=”sin(x)”) [var, xmin, xmax]
- options– an optional string representing plot2d options in gnuplot format
 - EXAMPLES: - sage: maxima.plot2d('sin(x)','[x,-5,5]') # not tested sage: opts = '[gnuplot_term, ps], [gnuplot_out_file, "sin-plot.eps"]' sage: maxima.plot2d('sin(x)','[x,-5,5]',opts) # not tested - >>> from sage.all import * >>> maxima.plot2d('sin(x)','[x,-5,5]') # not tested >>> opts = '[gnuplot_term, ps], [gnuplot_out_file, "sin-plot.eps"]' >>> maxima.plot2d('sin(x)','[x,-5,5]',opts) # not tested - The eps file is saved in the current directory. 
 - plot2d_parametric(r, var, trange, nticks=50, options=None)[source]¶
- Plot r = [x(t), y(t)] for t = tmin…tmax using gnuplot with options. - INPUT: - r– string representing a function (such as r=”[x(t),y(t)]”)
- var– string representing the variable (such as var = “t”)
- trange– [tmin, tmax] are numbers with tmintmax
- nticks– integer (default: 50)
- options– an optional string representing plot2d options in gnuplot format
 - EXAMPLES: - sage: maxima.plot2d_parametric(["sin(t)","cos(t)"], "t",[-3.1,3.1]) # not tested - >>> from sage.all import * >>> maxima.plot2d_parametric(["sin(t)","cos(t)"], "t",[-RealNumber('3.1'),RealNumber('3.1')]) # not tested - sage: opts = '[gnuplot_preamble, "set nokey"], [gnuplot_term, ps], [gnuplot_out_file, "circle-plot.eps"]' sage: maxima.plot2d_parametric(["sin(t)","cos(t)"], "t", [-3.1,3.1], options=opts) # not tested - >>> from sage.all import * >>> opts = '[gnuplot_preamble, "set nokey"], [gnuplot_term, ps], [gnuplot_out_file, "circle-plot.eps"]' >>> maxima.plot2d_parametric(["sin(t)","cos(t)"], "t", [-RealNumber('3.1'),RealNumber('3.1')], options=opts) # not tested - The eps file is saved to the current working directory. - Here is another fun plot: - sage: maxima.plot2d_parametric(["sin(5*t)","cos(11*t)"], "t", [0,2*pi()], nticks=400) # not tested - >>> from sage.all import * >>> maxima.plot2d_parametric(["sin(5*t)","cos(11*t)"], "t", [Integer(0),Integer(2)*pi()], nticks=Integer(400)) # not tested 
 - plot3d(*args)[source]¶
- Plot a 3d graph using Maxima / gnuplot. - maxima.plot3d(f, ‘[x, xmin, xmax]’, ‘[y, ymin, ymax]’, ‘[grid, nx, ny]’, options) - INPUT: - f– string representing a function (such as f=”sin(x)”) [var, min, max]
- argsshould be of the form ‘[x, xmin, xmax]’, ‘[y, ymin, ymax]’, ‘[grid, nx, ny]’, options
 - EXAMPLES: - sage: maxima.plot3d('1 + x^3 - y^2', '[x,-2,2]', '[y,-2,2]', '[grid,12,12]') # not tested sage: maxima.plot3d('sin(x)*cos(y)', '[x,-2,2]', '[y,-2,2]', '[grid,30,30]') # not tested sage: opts = '[gnuplot_term, ps], [gnuplot_out_file, "sin-plot.eps"]' sage: maxima.plot3d('sin(x+y)', '[x,-5,5]', '[y,-1,1]', opts) # not tested - >>> from sage.all import * >>> maxima.plot3d('1 + x^3 - y^2', '[x,-2,2]', '[y,-2,2]', '[grid,12,12]') # not tested >>> maxima.plot3d('sin(x)*cos(y)', '[x,-2,2]', '[y,-2,2]', '[grid,30,30]') # not tested >>> opts = '[gnuplot_term, ps], [gnuplot_out_file, "sin-plot.eps"]' >>> maxima.plot3d('sin(x+y)', '[x,-5,5]', '[y,-1,1]', opts) # not tested - The eps file is saved in the current working directory. 
 - plot3d_parametric(r, vars, urange, vrange, options=None)[source]¶
- Plot a 3d parametric graph with r=(x,y,z), x = x(u,v), y = y(u,v), z = z(u,v), for u = umin…umax, v = vmin…vmax using gnuplot with options. - INPUT: - x,- y,- z– string representing a function (such as- x="u2+v2", …) vars is a list or two strings representing variables (such as vars = [“u”,”v”])
- urange– [umin, umax]
- vrange– [vmin, vmax] are lists of numbers with umin umax, vmin vmax
- options– (optional) string representing plot2d options in gnuplot format
 - OUTPUT: displays a plot on screen or saves to a file - EXAMPLES: - sage: maxima.plot3d_parametric(["v*sin(u)","v*cos(u)","v"], ["u","v"],[-3.2,3.2],[0,3]) # not tested sage: opts = '[gnuplot_term, ps], [gnuplot_out_file, "sin-cos-plot.eps"]' sage: maxima.plot3d_parametric(["v*sin(u)","v*cos(u)","v"], ["u","v"],[-3.2,3.2],[0,3],opts) # not tested - >>> from sage.all import * >>> maxima.plot3d_parametric(["v*sin(u)","v*cos(u)","v"], ["u","v"],[-RealNumber('3.2'),RealNumber('3.2')],[Integer(0),Integer(3)]) # not tested >>> opts = '[gnuplot_term, ps], [gnuplot_out_file, "sin-cos-plot.eps"]' >>> maxima.plot3d_parametric(["v*sin(u)","v*cos(u)","v"], ["u","v"],[-RealNumber('3.2'),RealNumber('3.2')],[Integer(0),Integer(3)],opts) # not tested - The eps file is saved in the current working directory. - Here is a torus: - sage: _ = maxima.eval("expr_1: cos(y)*(10.0+6*cos(x)); expr_2: sin(y)*(10.0+6*cos(x)); expr_3: -6*sin(x);") sage: maxima.plot3d_parametric(["expr_1","expr_2","expr_3"], ["x","y"],[0,6],[0,6]) # not tested - >>> from sage.all import * >>> _ = maxima.eval("expr_1: cos(y)*(10.0+6*cos(x)); expr_2: sin(y)*(10.0+6*cos(x)); expr_3: -6*sin(x);") >>> maxima.plot3d_parametric(["expr_1","expr_2","expr_3"], ["x","y"],[Integer(0),Integer(6)],[Integer(0),Integer(6)]) # not tested - Here is a Möbius strip: - sage: x = "cos(u)*(3 + v*cos(u/2))" sage: y = "sin(u)*(3 + v*cos(u/2))" sage: z = "v*sin(u/2)" sage: maxima.plot3d_parametric([x,y,z],["u","v"],[-3.1,3.2],[-1/10,1/10]) # not tested - >>> from sage.all import * >>> x = "cos(u)*(3 + v*cos(u/2))" >>> y = "sin(u)*(3 + v*cos(u/2))" >>> z = "v*sin(u/2)" >>> maxima.plot3d_parametric([x,y,z],["u","v"],[-RealNumber('3.1'),RealNumber('3.2')],[-Integer(1)/Integer(10),Integer(1)/Integer(10)]) # not tested 
 - plot_list(ptsx, ptsy, options=None)[source]¶
- Plots a curve determined by a sequence of points. - INPUT: - ptsx– [x1,…,xn], where the xi and yi are real,
- ptsy– [y1,…,yn]
- options– string representing maxima plot2d options
 - The points are (x1,y1), (x2,y2), etc. - This function requires maxima 5.9.2 or newer. - Note - More that 150 points can sometimes lead to the program hanging. Why? - EXAMPLES: - sage: zeta_ptsx = [(pari(1/2 + i*I/10).zeta().real()).precision(1) # needs sage.libs.pari ....: for i in range(70,150)] sage: zeta_ptsy = [(pari(1/2 + i*I/10).zeta().imag()).precision(1) # needs sage.libs.pari ....: for i in range(70,150)] sage: maxima.plot_list(zeta_ptsx, zeta_ptsy) # not tested # needs sage.libs.pari sage: opts='[gnuplot_preamble, "set nokey"], [gnuplot_term, ps], [gnuplot_out_file, "zeta.eps"]' sage: maxima.plot_list(zeta_ptsx, zeta_ptsy, opts) # not tested # needs sage.libs.pari - >>> from sage.all import * >>> zeta_ptsx = [(pari(Integer(1)/Integer(2) + i*I/Integer(10)).zeta().real()).precision(Integer(1)) # needs sage.libs.pari ... for i in range(Integer(70),Integer(150))] >>> zeta_ptsy = [(pari(Integer(1)/Integer(2) + i*I/Integer(10)).zeta().imag()).precision(Integer(1)) # needs sage.libs.pari ... for i in range(Integer(70),Integer(150))] >>> maxima.plot_list(zeta_ptsx, zeta_ptsy) # not tested # needs sage.libs.pari >>> opts='[gnuplot_preamble, "set nokey"], [gnuplot_term, ps], [gnuplot_out_file, "zeta.eps"]' >>> maxima.plot_list(zeta_ptsx, zeta_ptsy, opts) # not tested # needs sage.libs.pari 
 - plot_multilist(pts_list, options=None)[source]¶
- Plots a list of list of points pts_list=[pts1,pts2,…,ptsn], where each ptsi is of the form [[x1,y1],…,[xn,yn]] x’s must be integers and y’s reals options is a string representing maxima plot2d options. - INPUT: - pts_lst– list of points; each point must be of the form [x,y] where- xis an integer and- yis a real
- var– string; representing Maxima’s plot2d options
 - Requires maxima 5.9.2 at least. - Note - More that 150 points can sometimes lead to the program hanging. - EXAMPLES: - sage: xx = [i/10.0 for i in range(-10,10)] sage: yy = [i/10.0 for i in range(-10,10)] sage: x0 = [0 for i in range(-10,10)] sage: y0 = [0 for i in range(-10,10)] sage: zeta_ptsx1 = [(pari(1/2+i*I/10).zeta().real()).precision(1) # needs sage.libs.pari ....: for i in range(10)] sage: zeta_ptsy1 = [(pari(1/2+i*I/10).zeta().imag()).precision(1) # needs sage.libs.pari ....: for i in range(10)] sage: maxima.plot_multilist([[zeta_ptsx1,zeta_ptsy1], [xx,y0], [x0,yy]]) # not tested sage: zeta_ptsx1 = [(pari(1/2+i*I/10).zeta().real()).precision(1) # needs sage.libs.pari ....: for i in range(10,150)] sage: zeta_ptsy1 = [(pari(1/2+i*I/10).zeta().imag()).precision(1) # needs sage.libs.pari ....: for i in range(10,150)] sage: maxima.plot_multilist([[zeta_ptsx1,zeta_ptsy1], [xx,y0], [x0,yy]]) # not tested sage: opts='[gnuplot_preamble, "set nokey"]' sage: maxima.plot_multilist([[zeta_ptsx1,zeta_ptsy1], [xx,y0], [x0,yy]], # not tested ....: opts) - >>> from sage.all import * >>> xx = [i/RealNumber('10.0') for i in range(-Integer(10),Integer(10))] >>> yy = [i/RealNumber('10.0') for i in range(-Integer(10),Integer(10))] >>> x0 = [Integer(0) for i in range(-Integer(10),Integer(10))] >>> y0 = [Integer(0) for i in range(-Integer(10),Integer(10))] >>> zeta_ptsx1 = [(pari(Integer(1)/Integer(2)+i*I/Integer(10)).zeta().real()).precision(Integer(1)) # needs sage.libs.pari ... for i in range(Integer(10))] >>> zeta_ptsy1 = [(pari(Integer(1)/Integer(2)+i*I/Integer(10)).zeta().imag()).precision(Integer(1)) # needs sage.libs.pari ... for i in range(Integer(10))] >>> maxima.plot_multilist([[zeta_ptsx1,zeta_ptsy1], [xx,y0], [x0,yy]]) # not tested >>> zeta_ptsx1 = [(pari(Integer(1)/Integer(2)+i*I/Integer(10)).zeta().real()).precision(Integer(1)) # needs sage.libs.pari ... for i in range(Integer(10),Integer(150))] >>> zeta_ptsy1 = [(pari(Integer(1)/Integer(2)+i*I/Integer(10)).zeta().imag()).precision(Integer(1)) # needs sage.libs.pari ... for i in range(Integer(10),Integer(150))] >>> maxima.plot_multilist([[zeta_ptsx1,zeta_ptsy1], [xx,y0], [x0,yy]]) # not tested >>> opts='[gnuplot_preamble, "set nokey"]' >>> maxima.plot_multilist([[zeta_ptsx1,zeta_ptsy1], [xx,y0], [x0,yy]], # not tested ... opts) 
 - solve_linear(eqns, vars)[source]¶
- Wraps maxima’s linsolve. - INPUT: - eqns– list of m strings; each representing a linear question in m = n variables
- vars– list of n strings; each representing a variable
 - EXAMPLES: - sage: eqns = ["x + z = y","2*a*x - y = 2*a^2","y - 2*z = 2"] sage: vars = ["x","y","z"] sage: maxima.solve_linear(eqns, vars) [x = a+1,y = 2*a,z = a-1] - >>> from sage.all import * >>> eqns = ["x + z = y","2*a*x - y = 2*a^2","y - 2*z = 2"] >>> vars = ["x","y","z"] >>> maxima.solve_linear(eqns, vars) [x = a+1,y = 2*a,z = a-1] 
 - unit_quadratic_integer(n)[source]¶
- Finds a unit of the ring of integers of the quadratic number field \(\QQ(\sqrt{n})\), \(n>1\), using the qunit maxima command. - INPUT: - n– integer
 - EXAMPLES: - sage: u = maxima.unit_quadratic_integer(101); u a + 10 sage: u.parent() Number Field in a with defining polynomial x^2 - 101 with a = 10.04987562112089? sage: u = maxima.unit_quadratic_integer(13) sage: u 5*a + 18 sage: u.parent() Number Field in a with defining polynomial x^2 - 13 with a = 3.605551275463990? - >>> from sage.all import * >>> u = maxima.unit_quadratic_integer(Integer(101)); u a + 10 >>> u.parent() Number Field in a with defining polynomial x^2 - 101 with a = 10.04987562112089? >>> u = maxima.unit_quadratic_integer(Integer(13)) >>> u 5*a + 18 >>> u.parent() Number Field in a with defining polynomial x^2 - 13 with a = 3.605551275463990? 
 
- class sage.interfaces.maxima_abstract.MaximaAbstractElement(parent, value, is_name=False, name=None)[source]¶
- Bases: - ExtraTabCompletion,- InterfaceElement- Element of Maxima through an abstract interface. - EXAMPLES: - Elements of this class should not be created directly. The targeted parent of a concrete inherited class should be used instead: - sage: from sage.interfaces.maxima_lib import maxima_lib sage: xp = maxima(x) sage: type(xp) <class 'sage.interfaces.maxima.MaximaElement'> sage: xl = maxima_lib(x) sage: type(xl) <class 'sage.interfaces.maxima_lib.MaximaLibElement'> - >>> from sage.all import * >>> from sage.interfaces.maxima_lib import maxima_lib >>> xp = maxima(x) >>> type(xp) <class 'sage.interfaces.maxima.MaximaElement'> >>> xl = maxima_lib(x) >>> type(xl) <class 'sage.interfaces.maxima_lib.MaximaLibElement'> - comma(args)[source]¶
- Form the expression that would be written ‘self, args’ in Maxima. - INPUT: - args– string
 - OUTPUT: Maxima object - EXAMPLES: - sage: maxima('sqrt(2) + I').comma('numer') I+1.41421356237309... sage: maxima('sqrt(2) + I*a').comma('a=5') 5*I+sqrt(2) - >>> from sage.all import * >>> maxima('sqrt(2) + I').comma('numer') I+1.41421356237309... >>> maxima('sqrt(2) + I*a').comma('a=5') 5*I+sqrt(2) 
 - derivative(var='x', n=1)[source]¶
- Return the \(n\)-th derivative of - self.- INPUT: - var– variable (default:- 'x')
- n– integer (default: 1)
 - OUTPUT: \(n\)-th derivative of - selfwith respect to the variable var- EXAMPLES: - sage: f = maxima('x^2') sage: f.diff() 2*x sage: f.diff('x') 2*x sage: f.diff('x', 2) 2 sage: maxima('sin(x^2)').diff('x',4) 16*x^4*sin(x^2)-12*sin(x^2)-48*x^2*cos(x^2) - >>> from sage.all import * >>> f = maxima('x^2') >>> f.diff() 2*x >>> f.diff('x') 2*x >>> f.diff('x', Integer(2)) 2 >>> maxima('sin(x^2)').diff('x',Integer(4)) 16*x^4*sin(x^2)-12*sin(x^2)-48*x^2*cos(x^2) - sage: f = maxima('x^2 + 17*y^2') sage: f.diff('x') 34*y*'diff(y,x,1)+2*x sage: f.diff('y') 34*y - >>> from sage.all import * >>> f = maxima('x^2 + 17*y^2') >>> f.diff('x') 34*y*'diff(y,x,1)+2*x >>> f.diff('y') 34*y 
 - diff(var='x', n=1)[source]¶
- Return the \(n\)-th derivative of - self.- INPUT: - var– variable (default:- 'x')
- n– integer (default: 1)
 - OUTPUT: \(n\)-th derivative of - selfwith respect to the variable var- EXAMPLES: - sage: f = maxima('x^2') sage: f.diff() 2*x sage: f.diff('x') 2*x sage: f.diff('x', 2) 2 sage: maxima('sin(x^2)').diff('x',4) 16*x^4*sin(x^2)-12*sin(x^2)-48*x^2*cos(x^2) - >>> from sage.all import * >>> f = maxima('x^2') >>> f.diff() 2*x >>> f.diff('x') 2*x >>> f.diff('x', Integer(2)) 2 >>> maxima('sin(x^2)').diff('x',Integer(4)) 16*x^4*sin(x^2)-12*sin(x^2)-48*x^2*cos(x^2) - sage: f = maxima('x^2 + 17*y^2') sage: f.diff('x') 34*y*'diff(y,x,1)+2*x sage: f.diff('y') 34*y - >>> from sage.all import * >>> f = maxima('x^2 + 17*y^2') >>> f.diff('x') 34*y*'diff(y,x,1)+2*x >>> f.diff('y') 34*y 
 - dot(other)[source]¶
- Implement the notation - self . other.- INPUT: - other– matrix; argument to dot
 - OUTPUT: Maxima matrix - EXAMPLES: - sage: A = maxima('matrix ([a1],[a2])') sage: B = maxima('matrix ([b1, b2])') sage: A.dot(B) matrix([a1*b1,a1*b2],[a2*b1,a2*b2]) - >>> from sage.all import * >>> A = maxima('matrix ([a1],[a2])') >>> B = maxima('matrix ([b1, b2])') >>> A.dot(B) matrix([a1*b1,a1*b2],[a2*b1,a2*b2]) 
 - imag()[source]¶
- Return the imaginary part of this Maxima element. - OUTPUT: Maxima real - EXAMPLES: - sage: maxima('2 + (2/3)*%i').imag() 2/3 - >>> from sage.all import * >>> maxima('2 + (2/3)*%i').imag() 2/3 
 - integral(var='x', min=None, max=None)[source]¶
- Return the integral of - selfwith respect to the variable \(x\).- INPUT: - var– variable
- min– (default:- None)
- max– (default:- None)
 - OUTPUT: the definite integral if xmin is not - None- an indefinite integral otherwise 
 - EXAMPLES: - sage: maxima('x^2+1').integral() x^3/3+x sage: maxima('x^2+ 1 + y^2').integral('y') y^3/3+x^2*y+y sage: maxima('x / (x^2+1)').integral() log(x^2+1)/2 sage: maxima('1/(x^2+1)').integral() atan(x) sage: maxima('1/(x^2+1)').integral('x', 0, infinity) %pi/2 sage: maxima('x/(x^2+1)').integral('x', -1, 1) 0 - >>> from sage.all import * >>> maxima('x^2+1').integral() x^3/3+x >>> maxima('x^2+ 1 + y^2').integral('y') y^3/3+x^2*y+y >>> maxima('x / (x^2+1)').integral() log(x^2+1)/2 >>> maxima('1/(x^2+1)').integral() atan(x) >>> maxima('1/(x^2+1)').integral('x', Integer(0), infinity) %pi/2 >>> maxima('x/(x^2+1)').integral('x', -Integer(1), Integer(1)) 0 - sage: f = maxima('exp(x^2)').integral('x',0,1) sage: f.sage() -1/2*I*sqrt(pi)*erf(I) sage: f.numer() 1.46265174590718... - >>> from sage.all import * >>> f = maxima('exp(x^2)').integral('x',Integer(0),Integer(1)) >>> f.sage() -1/2*I*sqrt(pi)*erf(I) >>> f.numer() 1.46265174590718... 
 - integrate(var='x', min=None, max=None)[source]¶
- Return the integral of - selfwith respect to the variable \(x\).- INPUT: - var– variable
- min– (default:- None)
- max– (default:- None)
 - OUTPUT: the definite integral if xmin is not - None- an indefinite integral otherwise 
 - EXAMPLES: - sage: maxima('x^2+1').integral() x^3/3+x sage: maxima('x^2+ 1 + y^2').integral('y') y^3/3+x^2*y+y sage: maxima('x / (x^2+1)').integral() log(x^2+1)/2 sage: maxima('1/(x^2+1)').integral() atan(x) sage: maxima('1/(x^2+1)').integral('x', 0, infinity) %pi/2 sage: maxima('x/(x^2+1)').integral('x', -1, 1) 0 - >>> from sage.all import * >>> maxima('x^2+1').integral() x^3/3+x >>> maxima('x^2+ 1 + y^2').integral('y') y^3/3+x^2*y+y >>> maxima('x / (x^2+1)').integral() log(x^2+1)/2 >>> maxima('1/(x^2+1)').integral() atan(x) >>> maxima('1/(x^2+1)').integral('x', Integer(0), infinity) %pi/2 >>> maxima('x/(x^2+1)').integral('x', -Integer(1), Integer(1)) 0 - sage: f = maxima('exp(x^2)').integral('x',0,1) sage: f.sage() -1/2*I*sqrt(pi)*erf(I) sage: f.numer() 1.46265174590718... - >>> from sage.all import * >>> f = maxima('exp(x^2)').integral('x',Integer(0),Integer(1)) >>> f.sage() -1/2*I*sqrt(pi)*erf(I) >>> f.numer() 1.46265174590718... 
 - nintegral(var='x', a=0, b=1, desired_relative_error='1e-8', maximum_num_subintervals=200)[source]¶
- Return a numerical approximation to the integral of - selffrom \(a\) to \(b\).- INPUT: - var– variable to integrate with respect to
- a– lower endpoint of integration
- b– upper endpoint of integration
- desired_relative_error– (default:- '1e-8') the desired relative error
- maximum_num_subintervals– (default: 200) maxima number of subintervals
 - OUTPUT: approximation to the integral - estimated absolute error of the approximation 
- the number of integrand evaluations 
- an error code: - 0– no problems were encountered
- 1– too many subintervals were done
- 2– excessive roundoff error
- 3– extremely bad integrand behavior
- 4– failed to converge
- 5– integral is probably divergent or slowly convergent
- 6– the input is invalid
 
 - EXAMPLES: - sage: maxima('exp(-sqrt(x))').nintegral('x',0,1) (0.5284822353142306, 4.163...e-11, 231, 0) - >>> from sage.all import * >>> maxima('exp(-sqrt(x))').nintegral('x',Integer(0),Integer(1)) (0.5284822353142306, 4.163...e-11, 231, 0) - Note that GP also does numerical integration, and can do so to very high precision very quickly: - sage: gp('intnum(x=0,1,exp(-sqrt(x)))') 0.52848223531423071361790491935415653022 sage: _ = gp.set_precision(80) sage: gp('intnum(x=0,1,exp(-sqrt(x)))') 0.52848223531423071361790491935415653021675547587292866196865279321015401702040079 - >>> from sage.all import * >>> gp('intnum(x=0,1,exp(-sqrt(x)))') 0.52848223531423071361790491935415653022 >>> _ = gp.set_precision(Integer(80)) >>> gp('intnum(x=0,1,exp(-sqrt(x)))') 0.52848223531423071361790491935415653021675547587292866196865279321015401702040079 
 - numer()[source]¶
- Return numerical approximation to - selfas a Maxima object.- OUTPUT: Maxima object - EXAMPLES: - sage: a = maxima('sqrt(2)').numer(); a 1.41421356237309... sage: type(a) <class 'sage.interfaces.maxima.MaximaElement'> - >>> from sage.all import * >>> a = maxima('sqrt(2)').numer(); a 1.41421356237309... >>> type(a) <class 'sage.interfaces.maxima.MaximaElement'> 
 - partial_fraction_decomposition(var='x')[source]¶
- Return the partial fraction decomposition of - selfwith respect to the variable var.- INPUT: - var– string
 - OUTPUT: Maxima object - EXAMPLES: - sage: f = maxima('1/((1+x)*(x-1))') sage: f.partial_fraction_decomposition('x') 1/(2*(x-1))-1/(2*(x+1)) sage: print(f.partial_fraction_decomposition('x')) 1 1 --------- - --------- 2 (x - 1) 2 (x + 1) - >>> from sage.all import * >>> f = maxima('1/((1+x)*(x-1))') >>> f.partial_fraction_decomposition('x') 1/(2*(x-1))-1/(2*(x+1)) >>> print(f.partial_fraction_decomposition('x')) 1 1 --------- - --------- 2 (x - 1) 2 (x + 1) 
 - real()[source]¶
- Return the real part of this Maxima element. - OUTPUT: Maxima real - EXAMPLES: - sage: maxima('2 + (2/3)*%i').real() 2 - >>> from sage.all import * >>> maxima('2 + (2/3)*%i').real() 2 
 - str()[source]¶
- Return string representation of this Maxima object. - OUTPUT: string - EXAMPLES: - sage: maxima('sqrt(2) + 1/3').str() 'sqrt(2)+1/3' - >>> from sage.all import * >>> maxima('sqrt(2) + 1/3').str() 'sqrt(2)+1/3' 
 - subst(val)[source]¶
- Substitute a value or several values into this Maxima object. - INPUT: - val– string representing substitution(s) to perform
 - OUTPUT: Maxima object - EXAMPLES: - sage: maxima('a^2 + 3*a + b').subst('b=2') a^2+3*a+2 sage: maxima('a^2 + 3*a + b').subst('a=17') b+340 sage: maxima('a^2 + 3*a + b').subst('a=17, b=2') 342 - >>> from sage.all import * >>> maxima('a^2 + 3*a + b').subst('b=2') a^2+3*a+2 >>> maxima('a^2 + 3*a + b').subst('a=17') b+340 >>> maxima('a^2 + 3*a + b').subst('a=17, b=2') 342 
 
- class sage.interfaces.maxima_abstract.MaximaAbstractElementFunction(parent, name, defn, args, latex)[source]¶
- Bases: - MaximaAbstractElement- Create a Maxima function with the parent - parent, name- name, definition- defn, arguments- argsand latex representation- latex.- INPUT: - parent– an instance of a concrete Maxima interface
- name– string
- defn– string
- args– string; comma separated names of arguments
- latex– string
 - OUTPUT: Maxima function - EXAMPLES: - sage: maxima.function('x,y','e^cos(x)') e^cos(x) - >>> from sage.all import * >>> maxima.function('x,y','e^cos(x)') e^cos(x) - arguments(split=True)[source]¶
- Return the arguments of this Maxima function. - INPUT: - split– boolean; if- Truereturn a tuple of strings, otherwise return a string of comma-separated arguments
 - OUTPUT: string if - splitis False- a list of strings if - splitis True
 - EXAMPLES: - sage: f = maxima.function('x,y','sin(x+y)') sage: f.arguments() ['x', 'y'] sage: f.arguments(split=False) 'x,y' sage: f = maxima.function('', 'sin(x)') sage: f.arguments() [] - >>> from sage.all import * >>> f = maxima.function('x,y','sin(x+y)') >>> f.arguments() ['x', 'y'] >>> f.arguments(split=False) 'x,y' >>> f = maxima.function('', 'sin(x)') >>> f.arguments() [] 
 - definition()[source]¶
- Return the definition of this Maxima function as a string. - EXAMPLES: - sage: f = maxima.function('x,y','sin(x+y)') sage: f.definition() 'sin(x+y)' - >>> from sage.all import * >>> f = maxima.function('x,y','sin(x+y)') >>> f.definition() 'sin(x+y)' 
 - integral(var)[source]¶
- Return the integral of - selfwith respect to the variable var.- INPUT: - var– a variable
 - OUTPUT: Maxima function - Note that integrate is an alias of integral. - EXAMPLES: - sage: x,y = var('x,y') sage: f = maxima.function('x','sin(x)') sage: f.integral(x) -cos(x) sage: f.integral(y) sin(x)*y - >>> from sage.all import * >>> x,y = var('x,y') >>> f = maxima.function('x','sin(x)') >>> f.integral(x) -cos(x) >>> f.integral(y) sin(x)*y 
 - integrate(var)[source]¶
- Return the integral of - selfwith respect to the variable var.- INPUT: - var– a variable
 - OUTPUT: Maxima function - Note that integrate is an alias of integral. - EXAMPLES: - sage: x,y = var('x,y') sage: f = maxima.function('x','sin(x)') sage: f.integral(x) -cos(x) sage: f.integral(y) sin(x)*y - >>> from sage.all import * >>> x,y = var('x,y') >>> f = maxima.function('x','sin(x)') >>> f.integral(x) -cos(x) >>> f.integral(y) sin(x)*y 
 
- sage.interfaces.maxima_abstract.maxima_console()[source]¶
- Spawn a new Maxima command-line session. - EXAMPLES: - sage: from sage.interfaces.maxima_abstract import maxima_console sage: maxima_console() # not tested Maxima 5.46.0 https://maxima.sourceforge.io ... - >>> from sage.all import * >>> from sage.interfaces.maxima_abstract import maxima_console >>> maxima_console() # not tested Maxima 5.46.0 https://maxima.sourceforge.io ... 
- sage.interfaces.maxima_abstract.maxima_version()[source]¶
- Return Maxima version. - Currently this calls a new copy of Maxima. - EXAMPLES: - sage: from sage.interfaces.maxima_abstract import maxima_version sage: maxima_version() # random '5.41.0' - >>> from sage.all import * >>> from sage.interfaces.maxima_abstract import maxima_version >>> maxima_version() # random '5.41.0' 
- sage.interfaces.maxima_abstract.reduce_load_MaximaAbstract_function(parent, defn, args, latex)[source]¶
- Unpickle a Maxima function. - EXAMPLES: - sage: from sage.interfaces.maxima_abstract import reduce_load_MaximaAbstract_function sage: f = maxima.function('x,y','sin(x+y)') sage: _,args = f.__reduce__() sage: g = reduce_load_MaximaAbstract_function(*args) sage: g == f True - >>> from sage.all import * >>> from sage.interfaces.maxima_abstract import reduce_load_MaximaAbstract_function >>> f = maxima.function('x,y','sin(x+y)') >>> _,args = f.__reduce__() >>> g = reduce_load_MaximaAbstract_function(*args) >>> g == f True