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
– stringverbose
– 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()
.INPUT: none
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]#
Returns 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]#
Solves a 1st or 2nd order ordinary differential equation (ODE) in two variables, possibly with initial conditions.
INPUT:
de
– a string representing the ODEvars
– a list of strings representing the twovariables.
ics
– a triple of numbers [a,b1,b2] representingy(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]#
Solves an ordinary differential equation (ODE) using Laplace transforms.
INPUT:
de
– a string representing the ODE (e.g., de =“diff(f(x),x,2)=diff(f(x),x)+sin(x)”)
vars
– a list of strings representing thevariables (e.g., vars = [“x”,”f”])
ics
– a list of numbers representing initialconditions, 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
– a string with variable names separated bycommas
defn
– a string (or Maxima expression) thatdefines a function of the arguments in Maxima.
rep
– an optional string; if given, this is howthe 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
– a string representing a function (such asf=”sin(x)”) [var, xmin, xmax]
options
– an optional string representing plot2doptions 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
– a string representing a function (such asr=”[x(t),y(t)]”)
var
– a string representing the variable (suchas var = “t”)
trange
– [tmin, tmax] are numbers with tmintmaxnticks
– int (default: 50)options
– an optional string representing plot2doptions 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
– a string representing a function (such asf=”sin(x)”) [var, min, max]
args
should 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
– a string representing a function (suchas
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 withumin umax, vmin vmax
options
– optional string representing plot2doptions 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 arereal,
ptsy
– [y1,…,yn]options
– a string representing maxima plot2doptions.
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] wherex
is an integer andy
is a realvar
– 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
– a list of m strings; each representing a linear question in m = n variablesvars
– a 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
– an 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 self with 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 self with 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]#
Implements 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.
INPUT: none
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 self with respect to the variable x.
INPUT:
var
– variablemin
– default: Nonemax
– 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 self with respect to the variable x.
INPUT:
var
– variablemin
– default: Nonemax
– 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 self from a to b.
INPUT:
var
– variable to integrate with respect toa
– lower endpoint of integrationb
– upper endpoint of integrationdesired_relative_error
– (default: ‘1e-8’) thedesired 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 encountered1
– too many subintervals were done2
– excessive roundoff error3
– extremely bad integrand behavior4
– failed to converge5
– integral is probably divergent or slowly convergent6
– 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.5284822353142307136179049194 # 32-bit 0.52848223531423071361790491935415653022 # 64-bit 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.5284822353142307136179049194 # 32-bit 0.52848223531423071361790491935415653022 # 64-bit >>> _ = gp.set_precision(Integer(80)) >>> gp('intnum(x=0,1,exp(-sqrt(x)))') 0.52848223531423071361790491935415653021675547587292866196865279321015401702040079
- numer()[source]#
Return numerical approximation to self as a Maxima object.
INPUT: none
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 self with 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.
INPUT: none
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.
INPUT: none
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
, namename
, definitiondefn
, argumentsargs
and latex representationlatex
.INPUT:
parent
– an instance of a concrete Maxima interfacename
– stringdefn
– stringargs
– string; comma separated names of argumentslatex
– 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]#
Returns the arguments of this Maxima function.
INPUT:
split
– boolean; if True return a tuple of strings, otherwise return a string of comma-separated arguments
OUTPUT:
a string if
split
is Falsea list of strings if
split
is 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]#
Returns the definition of this Maxima function as a string.
INPUT: none
OUTPUT: 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]#
Returns the integral of self with 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]#
Returns the integral of self with 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