You can subscribe to this list here.
2001 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}

_{Jul}

_{Aug}

_{Sep}

_{Oct}

_{Nov}
(20) 
_{Dec}
(17) 

2002 
_{Jan}
(39) 
_{Feb}
(21) 
_{Mar}
(33) 
_{Apr}
(135) 
_{May}
(53) 
_{Jun}
(88) 
_{Jul}
(47) 
_{Aug}
(59) 
_{Sep}
(207) 
_{Oct}
(40) 
_{Nov}
(7) 
_{Dec}
(26) 
2003 
_{Jan}
(49) 
_{Feb}
(39) 
_{Mar}
(117) 
_{Apr}
(50) 
_{May}
(62) 
_{Jun}
(6) 
_{Jul}
(19) 
_{Aug}
(24) 
_{Sep}
(11) 
_{Oct}
(11) 
_{Nov}
(49) 
_{Dec}
(9) 
2004 
_{Jan}
(29) 
_{Feb}
(123) 
_{Mar}
(32) 
_{Apr}
(53) 
_{May}
(52) 
_{Jun}
(19) 
_{Jul}
(33) 
_{Aug}
(10) 
_{Sep}
(76) 
_{Oct}
(86) 
_{Nov}
(171) 
_{Dec}
(163) 
2005 
_{Jan}
(147) 
_{Feb}
(121) 
_{Mar}
(120) 
_{Apr}
(126) 
_{May}
(120) 
_{Jun}
(213) 
_{Jul}
(76) 
_{Aug}
(79) 
_{Sep}
(140) 
_{Oct}
(83) 
_{Nov}
(156) 
_{Dec}
(202) 
2006 
_{Jan}
(181) 
_{Feb}
(171) 
_{Mar}
(157) 
_{Apr}
(98) 
_{May}
(96) 
_{Jun}
(97) 
_{Jul}
(193) 
_{Aug}
(76) 
_{Sep}
(130) 
_{Oct}
(63) 
_{Nov}
(196) 
_{Dec}
(253) 
2007 
_{Jan}
(256) 
_{Feb}
(293) 
_{Mar}
(276) 
_{Apr}
(258) 
_{May}
(181) 
_{Jun}
(91) 
_{Jul}
(108) 
_{Aug}
(69) 
_{Sep}
(107) 
_{Oct}
(179) 
_{Nov}
(137) 
_{Dec}
(121) 
2008 
_{Jan}
(124) 
_{Feb}
(129) 
_{Mar}
(192) 
_{Apr}
(201) 
_{May}
(90) 
_{Jun}
(86) 
_{Jul}
(115) 
_{Aug}
(142) 
_{Sep}
(49) 
_{Oct}
(91) 
_{Nov}
(95) 
_{Dec}
(218) 
2009 
_{Jan}
(230) 
_{Feb}
(149) 
_{Mar}
(118) 
_{Apr}
(72) 
_{May}
(77) 
_{Jun}
(68) 
_{Jul}
(102) 
_{Aug}
(72) 
_{Sep}
(89) 
_{Oct}
(76) 
_{Nov}
(125) 
_{Dec}
(86) 
2010 
_{Jan}
(75) 
_{Feb}
(90) 
_{Mar}
(89) 
_{Apr}
(121) 
_{May}
(111) 
_{Jun}
(66) 
_{Jul}
(75) 
_{Aug}
(66) 
_{Sep}
(66) 
_{Oct}
(166) 
_{Nov}
(121) 
_{Dec}
(73) 
2011 
_{Jan}
(74) 
_{Feb}

_{Mar}

_{Apr}
(14) 
_{May}
(22) 
_{Jun}
(31) 
_{Jul}
(53) 
_{Aug}
(37) 
_{Sep}
(23) 
_{Oct}
(25) 
_{Nov}
(31) 
_{Dec}
(28) 
2012 
_{Jan}
(18) 
_{Feb}
(11) 
_{Mar}
(32) 
_{Apr}
(17) 
_{May}
(48) 
_{Jun}
(37) 
_{Jul}
(23) 
_{Aug}
(54) 
_{Sep}
(15) 
_{Oct}
(11) 
_{Nov}
(19) 
_{Dec}
(22) 
2013 
_{Jan}
(11) 
_{Feb}
(32) 
_{Mar}
(24) 
_{Apr}
(37) 
_{May}
(31) 
_{Jun}
(14) 
_{Jul}
(26) 
_{Aug}
(33) 
_{Sep}
(40) 
_{Oct}
(21) 
_{Nov}
(36) 
_{Dec}
(84) 
2014 
_{Jan}
(23) 
_{Feb}
(20) 
_{Mar}
(27) 
_{Apr}
(24) 
_{May}
(31) 
_{Jun}
(27) 
_{Jul}
(34) 
_{Aug}
(26) 
_{Sep}
(21) 
_{Oct}
(45) 
_{Nov}
(23) 
_{Dec}
(73) 
2015 
_{Jan}
(33) 
_{Feb}
(8) 
_{Mar}
(24) 
_{Apr}
(45) 
_{May}
(27) 
_{Jun}
(19) 
_{Jul}
(21) 
_{Aug}
(51) 
_{Sep}
(43) 
_{Oct}
(29) 
_{Nov}
(61) 
_{Dec}
(86) 
2016 
_{Jan}
(99) 
_{Feb}
(52) 
_{Mar}
(80) 
_{Apr}
(61) 
_{May}
(24) 
_{Jun}
(23) 
_{Jul}
(30) 
_{Aug}

_{Sep}

_{Oct}

_{Nov}

_{Dec}

S  M  T  W  T  F  S 



1
(1) 
2
(3) 
3
(2) 
4
(6) 
5
(2) 
6
(8) 
7
(4) 
8
(7) 
9
(8) 
10
(1) 
11
(7) 
12
(2) 
13
(23) 
14
(1) 
15
(3) 
16
(1) 
17

18
(2) 
19
(1) 
20
(1) 
21
(2) 
22
(3) 
23
(5) 
24
(1) 
25
(1) 
26
(2) 
27
(17) 
28
(7) 





From: Raymond Toy <rtoy@us...>  20050209 22:06:31

Update of /cvsroot/maxima/maxima/src In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv7010/src Modified Files: mload.lisp Log Message: Need another newline to display result correctly when printing each test from the testsuite. Index: mload.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/mload.lisp,v retrieving revision 1.21 retrieving revision 1.22 diff u d r1.21 r1.22  mload.lisp 4 Feb 2005 19:17:53 0000 1.21 +++ mload.lisp 9 Feb 2005 22:06:20 0000 1.22 @@ 811,7 +811,7 @@ ((and (not correct) expectederror) (if (or showall showexpected) (progn  (format t "~%This is a known error in Maxima. The correct result is:") + (format t "~%This is a known error in Maxima. The correct result is:~%") (displa nextresult)))) (t (format t "~%This differed from the expected result:~%") (push i alldifferences) 
From: Raymond Toy <rtoy@us...>  20050209 22:01:46

Update of /cvsroot/maxima/maxima/tests In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv5035 Modified Files: rtest14.mac Log Message: Fix up test 62 with the correct reesult: specint( t^(3/2)*%h[1/2,1](t)*%e^(p*t),t) Index: rtest14.mac =================================================================== RCS file: /cvsroot/maxima/maxima/tests/rtest14.mac,v retrieving revision 1.17 retrieving revision 1.18 diff u d r1.17 r1.18  rtest14.mac 4 Feb 2005 19:10:15 0000 1.17 +++ rtest14.mac 9 Feb 2005 22:01:37 0000 1.18 @@ 280,11 +280,29 @@ * = r^(5/2)*assoc_legendre_p(3/2,1/2,p/r)) * * assoc_legendre_p(3/2,+/1/2,z) can be expressed in terms of  * hypergeometric functions (A&S 8.1.2). I don't think the result here is correct. + * hypergeometric functions (A&S 8.1.2). + * + * assoc_legendre_p(3/2,1/2,z) + * = 1/gamma(3/2)*((z+1)/(z1))^(1/4)*F(3/2,5/2;3/2;(1z)/2) + * = sqrt(2)*(z1)^(1/4)*z*(z+1)^(1/4)/sqrt(%pi) + * + * assoc_legendre_p(3/2,1/2,z) + * = 1/gamma(1/2)*((z+1)/(z1))^(1/4)*F(3/2,5/2;1/2;(1z)/2) + * = sqrt(2)*z*(2*z^23)/(sqrt(%pi)*(z1)^(1/4)*(z+1)^(5/4)) + * + * + * So the result should be + * + * t^(3/2)*bessel_j(1/2,t) + * > 4*p/(sqrt(2)*sqrt(%pi)*(p^2+1)^2) + * + * t^(3/2)*bessel_y(1/2,t) + * > sqrt(2)*(p1)*(p+1)/(sqrt(%pi)*(p^2+1)^2) */ specint( t^(3/2)*%h[1/2,1](t)*%e^(p*t),t); 4/(sqrt(2)*sqrt(%pi)*(1/p^2+1)^2*p^3)sqrt(2)*%i*(1/(1/p^2+1)1/((1/p^2+1)^2  *p^2))/(sqrt(%pi)*p^2) $ +4/(sqrt(2)*sqrt(%pi)*(1/p^2+1)^2*p^3) + sqrt(2)*%i*(1/(1/p^2+1)2/((1/p^2+1)^2*p^2))/(sqrt(%pi)*p^2) $ + /* * t^(3/2)*bessel_j(1,a*t) > gamma(3/2+1+1)*r^(3/21)*assoc_legendre_p(3/2,1,p/r) 
From: Robert Dodier <robert_dodier@us...>  20050209 08:03:35

Update of /cvsroot/maxima/maxima/doc/info In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv1793 Modified Files: Equations.texi Log Message: Uppercase changed to lowercase, enclose names in @code or @var as appropriate, split long blocks of text into paragraphs, adjust white space around examples, strike out a few mentions of obsolete system MC. No edits to content. Still need to review descriptions. Index: Equations.texi =================================================================== RCS file: /cvsroot/maxima/maxima/doc/info/Equations.texi,v retrieving revision 1.11 retrieving revision 1.12 diff u d r1.11 r1.12  Equations.texi 9 Feb 2005 06:25:49 0000 1.11 +++ Equations.texi 9 Feb 2005 08:03:24 0000 1.12 @@ 6,456 +6,487 @@ @node Definitions for Equations, , Equations, Equations @section Definitions for Equations @... %RNUM_LIST  default: []  When %R variables are introduced in solutions by the ALGSYS command, they are added to %RNUM_LIST in the order they +@defvar %rnum_list +Default value: []  When @code{%r} variables are introduced in solutions +by the @code{algsys} command, they are added to @code{%rnum_list} in the order they are created. This is convenient for doing substitutions into the solution later on. It's recommended to use this list rather than doing CONCAT('%R,J). +doing @code{concat ('%r, j)}. @end defvar @... ALGEXACT  default: [FALSE] affects the behavior of ALGSYS as follows: If ALGEXACT is TRUE, ALGSYS always calls SOLVE and then uses REALROOTS on SOLVE's failures. If ALGEXACT is FALSE, SOLVE is called only if +@defvar algexact +Default value: @code{false} affects the behavior of @code{algsys} as follows: +If @code{algexact} is @code{true}, @code{algsys} always calls @code{solve} and then uses @code{realroots} +on @code{solve}'s failures. If @code{algexact} is @code{false}, @code{solve} is called only if the eliminant was not univariate, or if it was a quadratic or biquadratic. Thus ALGEXACT:TRUE doesn't guarantee only exact solutions, just that ALGSYS will first try as hard as it can to give +biquadratic. Thus @code{algexact: true} doesn't guarantee only exact +solutions, just that @code{algsys} will first try as hard as it can to give exact solutions, and only yield approximations when all else fails. @end defvar @... ALGSYS ([exp1, exp2, ...], [var1, var2, ...]) +@defun algsys ([@var{expr_1}, @var{expr_2}, ...], [@var{var_1}, @var{var_2}, ...]) solves the list of simultaneous polynomials or polynomial equations (which can be nonlinear) for the list of variables. The symbols %R1, %R2, etc. +nonlinear) for the list of variables. The symbols @code{%r1}, @code{%r2}, etc. will be used to represent arbitrary parameters when needed for the solution (the variable %RNUM_LIST holds these). In the process described below, ALGSYS is entered recursively if necessary.  The method is as follows: (1) First the equations are FACTORed and split into subsystems. +solution (the variable @code{%rnum_list} holds these). In the process +described below, @code{algsys} is entered recursively if necessary. + +The method is as follows: + +(1) First the equations are factored and split into subsystems. + (2) For each subsystem Si, an equation E and a variable var are selected (the var is chosen to have lowest nonzero degree). Then the resultant of E and Ej with respect to var is computed for each of the remaining equations Ej in the subsystem Si. This yields a new subsystem S'i in one fewer variables (var has been eliminated). The process now returns to (1). + (3) Eventually, a subsystem consisting of a single equation is obtained. If the equation is multivariate and no approximations in the form of floating point numbers have been introduced, then SOLVE is called to find an exact solution. (The user should realize that SOLVE +the form of floating point numbers have been introduced, then @code{solve} is +called to find an exact solution. (The user should realize that @code{solve} may not be able to produce a solution or if it does the solution may be a very large expression.)  If the equation is univariate and is either linear, quadratic, or biquadratic, then again SOLVE is called if no approximations have + +If the equation is univariate and is either linear, quadratic, or +biquadratic, then again @code{solve} is called if no approximations have been introduced. If approximations have been introduced or the equation is not univariate and neither linear, quadratic, or biquadratic, then if the switch REALONLY[FALSE] is TRUE, the function REALROOTS is called to find the realvalued solutions. If REALONLY:FALSE then ALLROOTS is called which looks for real and complexvalued solutions. If ALGSYS produces a solution which has +biquadratic, then if the switch @code{realonly} is @code{true}, the function +@code{realroots} is called to find the realvalued solutions. If +@code{realonly: false} then @code{allroots} is called which looks for real and +complexvalued solutions. If @code{algsys} produces a solution which has fewer significant digits than required, the user can change the value of ALGEPSILON[10^8] to a higher value. If ALGEXACT[FALSE] is set to TRUE, SOLVE will always be called. +of @code{algepsilon} to a higher value. If @code{algexact} is set to +@code{true}, @code{solve} will always be called. +@c algepsilon IS IN Floating.texi  MAY WANT TO BRING IT INTO THIS FILE + (4) Finally, the solutions obtained in step (3) are reinserted into previous levels and the solution process returns to (1). The user should be aware of several caveats:  When ALGSYS encounters a multivariate equation which contains + +When @code{algsys} encounters a multivariate equation which contains floating point approximations (usually due to its failing to find exact solutions at an earlier stage), then it does not attempt to apply exact methods to such equations and instead prints the message:  "ALGSYS cannot solve  system too complicated."  Interactions with RADCAN can produce large or complicated expressions. In that case, the user may use PICKAPART or REVEAL to analyze the solution. Occasionally, RADCAN may introduce an apparent %I into a solution which is actually realvalued. Do EXAMPLE(ALGSYS); for examples. +"@code{algsys} cannot solve  system too complicated." + +Interactions with @code{radcan} can produce large or complicated +expressions. In that case, the user may use @code{pickapart} or @code{reveal} to +analyze the solution. Occasionally, @code{radcan} may introduce an apparent +@code{%i} into a solution which is actually realvalued. + +Do @code{example (algsys)} for examples. @end defun @... ALLROOTS (poly) +@defun allroots (@var{poly}) finds all the real and complex roots of the real polynomial poly which must be univariate and may be an equation, e.g. poly=0. For complex polynomials an algorithm by Jenkins and Traub is used (Algorithm 419, Comm. ACM, vol. 15, (1972), p. 97). For real polynomials the algorithm used is due to Jenkins (Algorithm 493, TOMS, vol. 1, (1975), p.178). The flag POLYFACTOR[FALSE] when true causes ALLROOTS to factor the polynomial over the real numbers if the +vol. 1, (1975), p.178). + +@c polyfactor IS NOT OTHERWISE DOCUMENTED +The flag @code{polyfactor} when true causes +@code{allroots} to factor the polynomial over the real numbers if the polynomial is real, or over the complex numbers, if the polynomial is complex. ALLROOTS may give inaccurate results in case of multiple +complex. @code{allroots} may give inaccurate results in case of multiple roots. (If poly is real and you get inaccurate answers, you may want to try ALLROOTS(%I*poly);) Do EXAMPLE(ALLROOTS); for an example. ALLROOTS rejects nonpolynomials. It requires that the numerator after RATting should be a polynomial, and it requires that the denominator be at most a complex number. As a result of this ALLROOTS +to try @code{allroots (%i*@var{poly})}) Do @code{example (allroots)} for an example. + +@code{allroots} rejects nonpolynomials. It requires that the numerator +after @code{rat}'ing should be a polynomial, and it requires that the +denominator be at most a complex number. As a result of this @code{allroots} will always return an equivalent (but factored) expression, if POLYFACTOR is TRUE. +@code{polyfactor} is @code{true}. @end defun @... BACKSUBST  default: [TRUE] if set to FALSE will prevent back +@defvar backsubst +Default value: @code{true} if set to @code{false} will prevent back substitution after the equations have been triangularized. This may be necessary in very big problems where back substitution would cause the generation of extremely large expressions. (On MC this could cause storage capacity to be exceeded.) +the generation of extremely large expressions. @end defvar @... BREAKUP  default: [TRUE] if FALSE will cause SOLVE to express the +@defvar breakup +Default value: @code{true} if @code{false} will cause @code{solve} to express the solutions of cubic or quartic equations as single expressions rather than as made up of several common subexpressions which is the default. BREAKUP:TRUE only works when PROGRAMMODE is FALSE. +@code{breakup: true} only works when @code{programmode} is @code{false}. @end defvar @... DIMENSION (equation or list of equations) +@defun dimension (equation or list of equations) The file "share1/dimen.mc" contains functions for automatic dimensional analysis. LOAD(DIMEN); +contains functions for automatic dimensional analysis. @code{load (dimen)} will load it up for you. There is a demonstration available in share1/dimen.dem. Do DEMO("dimen"); to run it. +share1/dimen.dem. Do @code{demo ("dimen")} to run it. @end defun @... DISPFLAG  default: [TRUE] if set to FALSE within a BLOCK will inhibit +@defvar dispflag +Default value: @code{true} if set to @code{false} within a @code{block} will inhibit the display of output generated by the solve functions called from within the BLOCK. Termination of the BLOCK with a dollar sign, $, sets DISPFLAG to FALSE. +within the @code{block}. Termination of the @code{block} with a dollar sign, $, sets +@code{dispflag} to @code{false}. @end defvar @... FUNCSOLVE (eqn,g(t)) +@defun funcsolve (@var{eqn}, @var{g}(@var{t})) gives [g(t) = ...] or [], depending on whether or not there exists a rational fcn g(t) satisfying eqn, which must be a first order, linear polynomial in (for this case) g(t) and g(t+1). @... (%i1) FUNCSOLVE((N+1)*FOO(N)(N+3)*FOO(N+1)/(N+1) =  (N1)/(N+2),FOO(N));  N (%o1) FOO(N) =   (N + 1) (N + 2) +@example +(%i1) funcsolve((n+1)*foo(n)(n+3)*foo(n+1)/(n+1) = + (n1)/(n+2),foo(n)); + n +(%o1) foo(n) =  + (n + 1) (n + 2) @end example + Warning: this is a very rudimentary implementationmany safety checks and obvious generalizations are missing. @end defun @... GLOBALSOLVE  default: [FALSE] if set to TRUE then variables which are SOLVEd for will be set to the solution of the set of simultaneous +@defvar globalsolve +Default value: @code{false} if set to @code{true} then variables which are +solved for will be set to the solution of the set of simultaneous equations. @end defvar @... IEQN (ie,unk,tech,n,guess) +@defun ieqn (@var{ie}, @var{unk}, @var{tech}, @var{n}, @var{guess}) Integral Equation solving routine. Do LOAD(INTEQN); to access it. +@code{load (inteqn)} to access it. ie is the integral equation; unk is the unknown function; tech is the technique to be tried from those given above (tech = FIRST means: try the first technique which finds a solution; tech = ALL means: try all +technique to be tried from those given above (tech = @code{first} means: try +the first technique which finds a solution; tech = @code{all} means: try all applicable techniques); n is the maximum number of terms to take for TAYLOR, NEUMANN, FIRSTKINDSERIES, or FREDSERIES (it is also the +@code{taylor}, @code{neumann}, @code{firstkindseries}, or @code{fredseries} (it is also the maximum depth of recursion for the differentiation method); guess is the initial guess for NEUMANN or FIRSTKINDSERIES. +the initial guess for @code{neumann} or @code{firstkindseries}. + Default values for the 2nd thru 5th parameters are: + unk: P(X), where P is the first function encountered in an integrand which is unknown to Maxima and X is the variable which occurs as an argument to the first occurrence of P found outside of an integral in the case of SECONDKIND equations, or is the only other variable besides the variable of integration in FIRSTKIND equations. If the +the case of @code{secondkind} equations, or is the only other variable +besides the variable of integration in @code{firstkind} equations. If the attempt to search for X fails, the user will be asked to supply the independent variable; tech: FIRST; n: 1; guess: NONE, which will cause NEUMANN and FIRSTKINDSERIES to use F(X) + +tech: @code{first} + +n: 1 + +guess: @code{none} which will cause @code{neumann} and @code{firstkindseries} to use F(X) as an initial guess. @end defun @... IEQNPRINT  default: [TRUE]  governs the behavior of the result returned by the IEQN command (which see). If IEQNPRINT is set to FALSE, the lists returned by the IEQN function are of the form  [SOLUTION, TECHNIQUE USED, NTERMS, FLAG] where FLAG is absent if the solution is exact. Otherwise, it is the word APPROXIMATE or INCOMPLETE corresponding to an inexact or +@defvar ieqnprint +Default value: @code{true}  governs the behavior of the result +returned by the @code{ieqn} command (which see). If @code{ieqnprint} is set to +@code{false}, the lists returned by the @code{ieqn} function are of the form + + [@var{solution}, @var{technique used}, @var{nterms}, @var{flag}] + +where @var{flag} is absent if the solution is exact. Otherwise, it is the +word @code{approximate} or @code{incomplete} corresponding to an inexact or nonclosed form solution, respectively. If a series method was used, NTERMS gives the number of terms taken (which could be less than the n given to IEQN if an error prevented generation of further terms). +@var{nterms} gives the number of terms taken (which could be less than the n +given to @code{ieqn} if an error prevented generation of further terms). @end defvar @... LHS (eqn) +@defun lhs (@var{eqn}) the left side of the equation eqn. @end defun @... LINSOLVE ([exp1, exp2, ...], [var1, var2, ...]) +@defun linsolve ([@var{expr_1}, @var{expr_2}, ...], [@var{var_1}, @var{var_2}, ...]) solves the list of simultaneous linear equations for the list of variables. The expi must each be polynomials in the variables and may be equations. If GLOBALSOLVE[FALSE] is set to TRUE then variables which are SOLVEd +If @code{globalsolve} is set to @code{true} then variables which are solved for will be set to the solution of the set of simultaneous equations. BACKSUBST[TRUE] if set to FALSE will prevent back substitution after + +@code{backsubst} if set to @code{false} will prevent back substitution after the equations have been triangularized. This may be necessary in very big problems where back substitution would cause the generation of extremely large expressions. (On MC this could cause the storage capacity to be exceeded.) LINSOLVE_PARAMS[TRUE] If TRUE, LINSOLVE also generates the %Ri symbols +extremely large expressions. + +@code{linsolve_params} If @code{true}, @code{linsolve} also generates the @code{%ri} symbols used to represent arbitrary parameters described in the manual under ALGSYS. If FALSE, LINSOLVE behaves as before, i.e. when it meets up +@code{algsys}. If @code{false}, @code{linsolve} behaves as before, i.e. when it meets up with an underdetermined system of equations, it solves for some of the variables in terms of others. + @example (%i1) X+Z=Y$ (%i2) 2*A*XY=2*A**2$ (%i3) Y2*Z=2$ (%i4) LINSOLVE([%o1,%o2,%o3],[X,Y,Z]),GLOBALSOLVE:TRUE; SOLUTION (%t4) X : A + 1 (%t5) Y : 2 A (%t6) Z : A  1 +(%i1) x+z=y$ +(%i2) 2*a*xy=2*a**2$ +(%i3) y2*z=2$ +(%i4) linsolve([%o1,%o2,%o3],[x,y,z]),globalsolve:true; +solution +(%t4) x : a + 1 +(%t5) y : 2 a +(%t6) z : a  1 (%o6) [%t4, %t5, %t6]   @end example + @end defun @... LINSOLVEWARN  default: [TRUE]  if FALSE will cause the message +@defvar linsolvewarn +Default value: @code{true}  if @code{false} will cause the message "Dependent equations eliminated" to be suppressed. @end defvar @... LINSOLVE_PARAMS  default: [TRUE]  If TRUE, LINSOLVE also generates the %Ri symbols used to represent arbitrary parameters described in the manual under ALGSYS. If FALSE, LINSOLVE behaves as before, i.e. +@defvar linsolve_params +Default value: @code{true}  If @code{true}, @code{linsolve} also generates +the @code{%ri} symbols used to represent arbitrary parameters described in +the manual under @code{algsys}. If @code{false}, @code{linsolve} behaves as before, i.e. when it meets up with an underdetermined system of equations, it solves for some of the variables in terms of others. @end defvar @... MULTIPLICITIES  default: [NOT_SET_YET]  will be set to a list of the multiplicities of the individual solutions returned by SOLVE or REALROOTS. +@defvar multiplicities +Default value: @code{not_set_yet}  will be set to a list of the +multiplicities of the individual solutions returned by @code{solve} or +@code{realroots}. @end defvar @... NROOTS (poly, low, high) +@defun nroots (@var{poly}, @var{low}, @var{high}) finds the number of real roots of the real univariate polynomial poly in the halfopen interval (low,high]. The endpoints of the interval may also be MINF,INF respectively for minus +endpoints of the interval may also be @code{minf} or @code{inf} respectively for minus infinity and plus infinity. The method of Sturm sequences is used. + @example (%i1) POLY1:X**102*X**4+1/2$ (%i2) NROOTS(POLY1,6,9.1); RAT REPLACED 0.5 BY 1/2 = 0.5 +(%i1) poly1:x**102*x**4+1/2$ +(%i2) nroots(poly1,6,9.1); +rat replaced 0.5 by 1/2 = 0.5 (%o2) 4   @end example + @end defun @... NTHROOT (p,n) +@defun nthroot (@var{p}, @var{n}) where p is a polynomial with integer coefficients and n is a positive integer returns q, a polynomial over the integers, such that q^n=p or prints an error message indicating that p is not a perfect nth power. This routine is much faster than FACTOR or even SQFR. +nth power. This routine is much faster than @code{factor} or even @code{sqfr}. @end defun @... PROGRAMMODE  default: [TRUE]  when FALSE will cause SOLVE, REALROOTS, ALLROOTS, and LINSOLVE to print Elabels (intermediate line labels) to label answers. When TRUE, SOLVE, etc. return answers as elements in a list. (Except when BACKSUBST is set to FALSE, in which case PROGRAMMODE:FALSE is also used.) +@defvar programmode +Default value: @code{true}  when @code{false} will cause @code{solve}, @code{realroots}, +@code{allroots}, and @code{linsolve} to print Elabels (intermediate line labels) to +label answers. When @code{true}, @code{solve}, etc. return answers as elements in a +list. (Except when @code{backsubst} is set to @code{false}, in which case +@code{programmode: false} is also used.) @end defvar @... REALONLY  default: [FALSE]  if TRUE causes ALGSYS to return only those solutions which are free of %I. +@defvar realonly +Default value: @code{false}  if @code{true} causes @code{algsys} to return only +those solutions which are free of @code{%i}. @end defvar @... REALROOTS (poly, bound) +@defun realroots (@var{poly}, @var{bound}) finds all of the real roots of the real univariate polynomial poly within a tolerance of bound which, if less than 1, causes all integral roots to be found exactly. The parameter bound may be arbitrarily small in order to achieve any desired accuracy. The first argument may also be an equation. REALROOTS sets MULTIPLICITIES, useful in case of multiple roots. REALROOTS(poly) is equivalent to REALROOTS(poly,ROOTSEPSILON). ROOTSEPSILON[1.0E7] is a +accuracy. The first argument may also be an equation. @code{realroots} sets +@code{multiplicities}, useful in case of multiple roots. @code{realroots (@var{p})} is +equivalent to @code{realroots (@var{p}, rootsepsilon)}. @code{rootsepsilon} is a real number used to establish the confidence interval for the roots. Do EXAMPLE(REALROOTS); for an example. +Do @code{example (realroots)} for an example. @end defun @... RHS (eqn) +@defun rhs (@var{eqn}) the right side of the equation eqn. @end defun @... ROOTSCONMODE  default: [TRUE]  Determines the behavior of the ROOTSCONTRACT command. Do DESCRIBE(ROOTSCONTRACT); for details. +@defvar rootsconmode +Default value: @code{true}  Determines the behavior of the +@code{rootscontract} command. See @code{rootscontract} for details. @end defvar @... ROOTSCONTRACT (exp) +@defun rootscontract (@var{expr}) converts products of roots into roots of products. For example, + @example ROOTSCONTRACT(SQRT(X)*Y^(3/2)) ==> SQRT(X*Y^3) +rootscontract(sqrt(x)*y^(3/2)) ==> sqrt(x*y^3) @end example + When RADEXPAND is TRUE and DOMAIN is REAL (their defaults), ROOTSCONTRACT converts ABS into SQRT, e.g. +@code{radexpand} is @code{true} and @code{domain} is @code{real} (their defaults), +@code{rootscontract} +converts @code{abs} into @code{sqrt}, e.g. @example ROOTSCONTRACT(ABS(X)*SQRT(Y)) ==> SQRT(X^2*Y) +rootscontract(abs(x)*sqrt(y)) ==> sqrt(x^2*y) @end example There is an option ROOTSCONMODE (default value TRUE), affecting ROOTSCONTRACT as follows:   +There is an option @code{rootsconmode} +affecting @code{rootscontract} as follows: @example   Problem Value of Result of applying  ROOTSCONMODE ROOTSCONTRACT + rootsconmode rootscontract X^(1/2)*Y^(3/2) FALSE (X*Y^3)^(1/2) X^(1/2)*Y^(1/4) FALSE X^(1/2)*Y^(1/4) X^(1/2)*Y^(1/4) TRUE (X*Y^(1/2))^(1/2) X^(1/2)*Y^(1/3) TRUE X^(1/2)*Y^(1/3) X^(1/2)*Y^(1/4) ALL (X^2*Y)^(1/4) X^(1/2)*Y^(1/3) ALL (X^3*Y^2)^(1/6) +x^(1/2)*y^(3/2) false (x*y^3)^(1/2) +x^(1/2)*y^(1/4) false x^(1/2)*y^(1/4) +x^(1/2)*y^(1/4) true (x*y^(1/2))^(1/2) +x^(1/2)*y^(1/3) true x^(1/2)*y^(1/3) +x^(1/2)*y^(1/4) all (x^2*y)^(1/4) +x^(1/2)*y^(1/3) all (x^3*y^2)^(1/6) @end example The above examples and more may be tried out by typing @example EXAMPLE(ROOTSCONTRACT); +example(rootscontract); @end example When ROOTSCONMODE is FALSE, ROOTSCONTRACT contracts only wrt rational +When @code{rootsconmode} is @code{false}, @code{rootscontract} contracts only wrt rational number exponents whose denominators are the same. The key to the ROOTSCONMODE:TRUE$ examples is simply that 2 divides into 4 but not into 3. ROOTSCONMODE:ALL$ involves taking the lcm (least common multiple) +@code{rootsconmode: true} examples is simply that 2 divides into 4 but not +into 3. @code{rootsconmode: all} involves taking the lcm (least common multiple) of the denominators of the exponents. ROOTSCONTRACT uses RATSIMP in a manner similar to LOGCONTRACT (see the + +@code{rootscontract} uses @code{ratsimp} in a manner similar to @code{logcontract} (see the manual). @end defun @... ROOTSEPSILON  default: [1.0E7]  a real number used to establish the confidence interval for the roots found by the REALROOTS function. +@defvar rootsepsilon +Default value: 1.0e7  a real number used to establish the +confidence interval for the roots found by the @code{realroots} function. @end defvar @... SOLVE (exp, var) +@defun solve (@var{expr}, @var{var}) solves the algebraic equation exp for the variable var and returns a list of solution equations in var. If exp is not an equation, it is assumed to be an expression to be set equal to zero. Var may be a function (e.g. F(X)), or other nonatomic expression except a sum or product. It may be omitted if exp contains only one variable. Exp may be a rational expression, and may contain trigonometric functions, exponentials, etc. The following method is used: +trigonometric functions, exponentials, etc. + +The following method is used: + Let E be the expression and X be the variable. If E is linear in X then it is trivially solved for X. Otherwise if E is of the form A*X**N+B then the result is (B/A)**(1/N) times the Nth roots of unity. + If E is not linear in X then the gcd of the exponents of X in E (say N) is divided into the exponents and the multiplicity of the roots is multiplied by N. Then SOLVE is called again on the result. If E factors then SOLVE is called on each of the factors. Finally SOLVE will use the quadratic, cubic, or quartic formulas where +multiplied by N. Then @code{solve} is called again on the result. +If E factors then @code{solve} is called on each of the factors. Finally +@code{solve} will use the quadratic, cubic, or quartic formulas where necessary. + In the case where E is a polynomial in some function of the variable to be solved for, say F(X), then it is first solved for F(X) (call the result C), then the equation F(X)=C can be solved for X provided the inverse of the function F is known. BREAKUP[TRUE] if FALSE will cause SOLVE to express the solutions of + +@code{breakup} if @code{false} will cause @code{solve} to express the solutions of cubic or quartic equations as single expressions rather than as made up of several common subexpressions which is the default. MULTIPLICITIES[NOT_SET_YET]  will be set to a list of the multiplicities of the individual solutions returned by SOLVE, REALROOTS, or ALLROOTS. Try APROPOS(SOLVE) for the switches which affect SOLVE. DESCRIBE may + +@code{multiplicities}  will be set to a list of the multiplicities of +the individual solutions returned by @code{solve}, @code{realroots}, or @code{allroots}. +Try @code{apropos (solve)} for the switches which affect @code{solve}. @code{describe} may then by used on the individual switch names if their purpose is not clear. SOLVE([eq1, ..., eqn], [v1, ..., vn]) solves a system of simultaneous (linear or nonlinear) polynomial equations by calling LINSOLVE or ALGSYS and returns a list of the solution lists in the variables. In the case of LINSOLVE this list would contain a single list of + +@code{solve ([@var{eqn_1}, ..., @var{eqn_n}], [@var{v_1}, ..., @var{v_n}])} +solves a system of simultaneous +(linear or nonlinear) polynomial equations by calling @code{linsolve} or +@code{algsys} and returns a list of the solution lists in the variables. In +the case of @code{linsolve} this list would contain a single list of solutions. It takes two lists as arguments. The first list (eqi, i=1,...,n) represents the equations to be solved; the second list is a list of the unknowns to be determined. If the total number of variables in the equations is equal to the number of equations, the second argumentlist may be omitted. For linear systems if the given equations are not compatible, the message INCONSISTENT will be displayed (see the SOLVE_INCONSISTENT_ERROR switch); if no unique solution exists, then SINGULAR will be displayed. For examples, do EXAMPLE(SOLVE); +equations are not compatible, the message @code{inconsistent} will be +displayed (see the @code{solve_inconsistent_error} switch); if no unique +solution exists, then @code{singular} will be displayed. + +For examples, do @code{example (solve)}. @end defun @... SOLVEDECOMPOSES  default: [TRUE]  if TRUE, will induce SOLVE to use POLYDECOMP (see POLYDECOMP) in attempting to solve polynomials. +@defvar solvedecomposes +Default value: @code{true}  if @code{true}, will induce @code{solve} to use +@code{polydecomp} (see @code{polydecomp}) in attempting to solve polynomials. @end defvar @... SOLVEEXPLICIT  default: [FALSE]  if TRUE, inhibits SOLVE from +@defvar solveexplicit +Default value: @code{false}  if @code{true}, inhibits @code{solve} from returning implicit solutions i.e. of the form F(x)=0. @end defvar @... SOLVEFACTORS  default: [TRUE]  if FALSE then SOLVE will not try to factor the expression. The FALSE setting may be desired in some cases +@defvar solvefactors +Default value: @code{true}  if @code{false} then @code{solve} will not try to +factor the expression. The @code{false} setting may be desired in some cases where factoring is not necessary. @end defvar @... SOLVENULLWARN  default: [TRUE]  if TRUE the user will be warned if he calls SOLVE with either a null equation list or a null variable list. For example, SOLVE([],[]); would print two warning messages and return +@defvar solvenullwarn +Default value: @code{true}  if @code{true} the user will be warned if he +calls @code{solve} with either a null equation list or a null variable list. +For example, @code{solve ([], [])} would print two warning messages and return []. @end defvar @... SOLVERADCAN  default: [FALSE]  if TRUE then SOLVE will use RADCAN which will make SOLVE slower but will allow certain problems +@defvar solveradcan +Default value: @code{false}  if @code{true} then @code{solve} will use @code{radcan} +which will make @code{solve} slower but will allow certain problems containing exponentials and logs to be solved. @end defvar @... SOLVETRIGWARN  default: [TRUE]  if set to FALSE will inhibit printing by SOLVE of the warning message saying that it is using inverse +@defvar solvetrigwarn +Default value: @code{true}  if set to @code{false} will inhibit printing +by @code{solve} of the warning message saying that it is using inverse trigonometric functions to solve the equation, and thereby losing solutions. @end defvar @... SOLVE_INCONSISTENT_ERROR  default: [TRUE]  If TRUE, SOLVE and LINSOLVE give an error if they meet up with a set of inconsistent linear equations, e.g. SOLVE([A+B=1,A+B=2]). If FALSE, they return [] +@defvar solve_inconsistent_error +Default value: @code{true}  If @code{true}, @code{solve} and +@code{linsolve} give an error if they meet up with a set of inconsistent +linear equations, e.g. @code{solve ([a + b = 1, a + b = 2])}. If @code{false}, they return [] in this case. (This is the new mode, previously gotten only by calling ALGSYS.) +calling @code{algsys}.) @end defvar 
From: Robert Dodier <robert_dodier@us...>  20050209 06:25:58

Update of /cvsroot/maxima/maxima/doc/info In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv30289 Modified Files: Equations.texi Log Message: Strike out obsolete, commentedout @node and @unnumberedsec tags in preparation for further editing. Index: Equations.texi =================================================================== RCS file: /cvsroot/maxima/maxima/doc/info/Equations.texi,v retrieving revision 1.10 retrieving revision 1.11 diff u d r1.10 r1.11  Equations.texi 22 Nov 2004 00:13:02 0000 1.10 +++ Equations.texi 9 Feb 2005 06:25:49 0000 1.11 @@ 6,8 +6,6 @@ @node Definitions for Equations, , Equations, Equations @section Definitions for Equations @... @node %RNUM_LIST @... @unnumberedsec phony @defvar %RNUM_LIST default: []  When %R variables are introduced in solutions by the ALGSYS command, they are added to %RNUM_LIST in the order they @@ 16,8 +14,6 @@ doing CONCAT('%R,J). @end defvar @... @node ALGEXACT @... @unnumberedsec phony @defvar ALGEXACT default: [FALSE] affects the behavior of ALGSYS as follows: If ALGEXACT is TRUE, ALGSYS always calls SOLVE and then uses REALROOTS @@ 28,8 +24,6 @@ exact solutions, and only yield approximations when all else fails. @end defvar @... @node ALGSYS @... @unnumberedsec phony @defun ALGSYS ([exp1, exp2, ...], [var1, var2, ...]) solves the list of simultaneous polynomials or polynomial equations (which can be @@ 77,8 +71,7 @@ for examples. @end defun @... @node ALLROOTS @... @unnumberedsec phony + @defun ALLROOTS (poly) finds all the real and complex roots of the real polynomial poly which must be univariate and may be an equation, e.g. @@ 98,8 +91,7 @@ POLYFACTOR is TRUE. @end defun @... @node BACKSUBST @... @unnumberedsec phony + @defvar BACKSUBST default: [TRUE] if set to FALSE will prevent back substitution after the equations have been triangularized. This may @@ 108,8 +100,7 @@ storage capacity to be exceeded.) @end defvar @... @node BREAKUP @... @unnumberedsec phony + @defvar BREAKUP default: [TRUE] if FALSE will cause SOLVE to express the solutions of cubic or quartic equations as single expressions rather @@ 117,8 +108,7 @@ BREAKUP:TRUE only works when PROGRAMMODE is FALSE. @end defvar @... @node DIMENSION @... @unnumberedsec phony + @defun DIMENSION (equation or list of equations) The file "share1/dimen.mc" contains functions for automatic dimensional analysis. LOAD(DIMEN); @@ 126,8 +116,7 @@ share1/dimen.dem. Do DEMO("dimen"); to run it. @end defun @... @node DISPFLAG @... @unnumberedsec phony + @defvar DISPFLAG default: [TRUE] if set to FALSE within a BLOCK will inhibit the display of output generated by the solve functions called from @@ 135,8 +124,7 @@ DISPFLAG to FALSE. @end defvar @... @node FUNCSOLVE @... @unnumberedsec phony + @defun FUNCSOLVE (eqn,g(t)) gives [g(t) = ...] or [], depending on whether or not there exists a rational fcn g(t) satisfying eqn, which must be @@ 153,16 +141,14 @@ and obvious generalizations are missing. @end defun @... @node GLOBALSOLVE @... @unnumberedsec phony + @defvar GLOBALSOLVE default: [FALSE] if set to TRUE then variables which are SOLVEd for will be set to the solution of the set of simultaneous equations. @end defvar @... @node IEQN @... @unnumberedsec phony + @defun IEQN (ie,unk,tech,n,guess) Integral Equation solving routine. Do LOAD(INTEQN); to access it. @@ 187,8 +173,7 @@ as an initial guess. @end defun @... @node IEQNPRINT @... @unnumberedsec phony + @defvar IEQNPRINT default: [TRUE]  governs the behavior of the result returned by the IEQN command (which see). If IEQNPRINT is set to @@ 201,14 +186,12 @@ given to IEQN if an error prevented generation of further terms). @end defvar @... @node LHS @... @unnumberedsec phony + @defun LHS (eqn) the left side of the equation eqn. @end defun @... @node LINSOLVE @... @unnumberedsec phony + @defun LINSOLVE ([exp1, exp2, ...], [var1, var2, ...]) solves the list of simultaneous linear equations for the list of variables. The expi @@ 239,15 +222,13 @@ @end example @end defun @... @node LINSOLVEWARN @... @unnumberedsec phony + @defvar LINSOLVEWARN default: [TRUE]  if FALSE will cause the message "Dependent equations eliminated" to be suppressed. @end defvar @... @node LINSOLVE_PARAMS @... @unnumberedsec phony + @defvar LINSOLVE_PARAMS default: [TRUE]  If TRUE, LINSOLVE also generates the %Ri symbols used to represent arbitrary parameters described in @@ 256,16 +237,14 @@ solves for some of the variables in terms of others. @end defvar @... @node MULTIPLICITIES @... @unnumberedsec phony + @defvar MULTIPLICITIES default: [NOT_SET_YET]  will be set to a list of the multiplicities of the individual solutions returned by SOLVE or REALROOTS. @end defvar @... @node NROOTS @... @unnumberedsec phony + @defun NROOTS (poly, low, high) finds the number of real roots of the real univariate polynomial poly in the halfopen interval (low,high]. The @@ 280,8 +259,7 @@ @end example @end defun @... @node NTHROOT @... @unnumberedsec phony + @defun NTHROOT (p,n) where p is a polynomial with integer coefficients and n is a positive integer returns q, a polynomial over the integers, such @@ 289,8 +267,7 @@ nth power. This routine is much faster than FACTOR or even SQFR. @end defun @... @node PROGRAMMODE @... @unnumberedsec phony + @defvar PROGRAMMODE default: [TRUE]  when FALSE will cause SOLVE, REALROOTS, ALLROOTS, and LINSOLVE to print Elabels (intermediate line labels) to @@ 299,15 +276,13 @@ PROGRAMMODE:FALSE is also used.) @end defvar @... @node REALONLY @... @unnumberedsec phony + @defvar REALONLY default: [FALSE]  if TRUE causes ALGSYS to return only those solutions which are free of %I. @end defvar @... @node REALROOTS @... @unnumberedsec phony + @defun REALROOTS (poly, bound) finds all of the real roots of the real univariate polynomial poly within a tolerance of bound which, if less @@ 320,21 +295,18 @@ Do EXAMPLE(REALROOTS); for an example. @end defun @... @node RHS @... @unnumberedsec phony + @defun RHS (eqn) the right side of the equation eqn. @end defun @... @node ROOTSCONMODE @... @unnumberedsec phony + @defvar ROOTSCONMODE default: [TRUE]  Determines the behavior of the ROOTSCONTRACT command. Do DESCRIBE(ROOTSCONTRACT); for details. @end defvar @... @node ROOTSCONTRACT @... @unnumberedsec phony + @defun ROOTSCONTRACT (exp) converts products of roots into roots of products. For example, @@ 383,15 +355,13 @@ manual). @end defun @... @node ROOTSEPSILON @... @unnumberedsec phony + @defvar ROOTSEPSILON default: [1.0E7]  a real number used to establish the confidence interval for the roots found by the REALROOTS function. @end defvar @... @node SOLVE @... @unnumberedsec phony + @defun SOLVE (exp, var) solves the algebraic equation exp for the variable var and returns a list of solution equations in var. If exp is not an @@ 438,30 +408,26 @@ EXAMPLE(SOLVE); @end defun @... @node SOLVEDECOMPOSES @... @unnumberedsec phony + @defvar SOLVEDECOMPOSES default: [TRUE]  if TRUE, will induce SOLVE to use POLYDECOMP (see POLYDECOMP) in attempting to solve polynomials. @end defvar @... @node SOLVEEXPLICIT @... @unnumberedsec phony + @defvar SOLVEEXPLICIT default: [FALSE]  if TRUE, inhibits SOLVE from returning implicit solutions i.e. of the form F(x)=0. @end defvar @... @node SOLVEFACTORS @... @unnumberedsec phony + @defvar SOLVEFACTORS default: [TRUE]  if FALSE then SOLVE will not try to factor the expression. The FALSE setting may be desired in some cases where factoring is not necessary. @end defvar @... @node SOLVENULLWARN @... @unnumberedsec phony + @defvar SOLVENULLWARN default: [TRUE]  if TRUE the user will be warned if he calls SOLVE with either a null equation list or a null variable list. @@ 469,16 +435,14 @@ []. @end defvar @... @node SOLVERADCAN @... @unnumberedsec phony + @defvar SOLVERADCAN default: [FALSE]  if TRUE then SOLVE will use RADCAN which will make SOLVE slower but will allow certain problems containing exponentials and logs to be solved. @end defvar @... @node SOLVETRIGWARN @... @unnumberedsec phony + @defvar SOLVETRIGWARN default: [TRUE]  if set to FALSE will inhibit printing by SOLVE of the warning message saying that it is using inverse @@ 486,8 +450,7 @@ solutions. @end defvar @... @node SOLVE_INCONSISTENT_ERROR @... @unnumberedsec phony + @defvar SOLVE_INCONSISTENT_ERROR default: [TRUE]  If TRUE, SOLVE and LINSOLVE give an error if they meet up with a set of inconsistent 
From: Robert Dodier <robert_dodier@us...>  20050209 05:47:44

Update of /cvsroot/maxima/maxima/doc/info In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv16105 Modified Files: Function.texi Log Message: Cut out descriptions of obsolete items: compile_lisp_file transbind tr_gen_tags tr_output_file_default tr_predicate_brain_damage tr_true_name_of_file_being_translated tr_version undeclaredwarn declare_translate. These were commented out before. Comments on each one tell what I found out about each one from inspecting the source code. Index: Function.texi =================================================================== RCS file: /cvsroot/maxima/maxima/doc/info/Function.texi,v retrieving revision 1.23 retrieving revision 1.24 diff u d r1.23 r1.24  Function.texi 8 Feb 2005 07:45:33 0000 1.23 +++ Function.texi 9 Feb 2005 05:47:35 0000 1.24 @@ 453,26 +453,6 @@ @end defun @... OBSOLETE, NONEXISTENT FUNCTION. CUT IT ON NEXT PASS THROUGH. @... @defun compile_lisp_file ("input filename") @... which takes an optional second @... argument of "output filename," can be used in conjunction with @... @... @example @... TRANSLATE_FILE("filename"). @... @end example @... For convenience you might define @... @... @example @... Compile_and_load(FILENAME):= @... LOAD(COMPILE_LISP_FILE(TRANSLATE_FILE(FILENAME)[2]))[2]); @... @end example @... @... These fileoriented commands are to be preferred over the use of @... @code{compile}, @code{compfile}, and the @code{translate} @code{save} combination. @... @... @end defun  @defun define (f(x1, ...), body) is equivalent to f(x1,...):='@w{}'(body) but when used inside functions it happens at execution time rather than at the @@ 954,17 +934,6 @@ @end defun @... OBSOLETE AND MARKED AS SUCH IN src/transl.lisp @... @defvar transbind @... Default value: @code{false} @... @... When @code{transbind} is @code{true} removes global declarations in @... the local context. This applies to variables which are formal @... parameters to functions which one is @code{translate}ing from Maxima code @... to Lisp. @... @... @end defvar  @c IS THERE ANY REASON TO SET transcompile: false ?? @c MAYBE THIS VARIABLE COULD BE PERMANENTLY SET TO true AND STRUCK FROM THE DOCUMENTATION. @defvar transcompile @@ 1190,15 +1159,6 @@ @end defvar @... OBSOLETE: DECLARED IN src/transs.lisp BUT NEVER USED @... @defvar tr_gen_tags @... Default value: @code{false} @... @... When @code{tr_gen_tags} is @code{true}, @code{translate_file} generates a @... @code{tags} file for use by the text editor. @... @... @end defvar  @defvar tr_numer Default value: @code{false} @@ 1217,26 +1177,6 @@ @end defvar @... OBSOLETE: USED ONLY IN A MACRO trlispoutputnamed1 IN src/transs.lisp @... WHICH IS NEVER USED @... @defvar tr_output_file_default @... Default value: @code{trlisp} @... @... @code{tr_output_file_default} is the second file @... name to be used for translated Lisp output. @... @... @end defvar  @... OBSOLETE: DECLARED IN src/transl.lisp BUT NEVER USED @... @defvar tr_predicate_brain_damage @... Default value: @code{false} @... @... When @code{tr_predicate_brain_damage} is @code{true}, output possible @... multiple evaluations in an attempt to interface to the @code{compare} @... package. @... @... @end defvar  @defvar tr_semicompile Default value: @code{false} @@ 1265,24 +1205,6 @@ @end defvar @... OBSOLETE: DECLARED IN src/transl.lisp BUT NEVER USED @... @defvar tr_true_name_of_file_being_translated @... Default value: @code{false} @... @... @code{tr_true_name_of_file_being_translated} is bound to @... the quoted string form of the true name of the file most recently @... translated by @code{translate_file}. @... @... @end defvar  @... OBSOLETE: $tr_version APPEARS IN src/transs.lisp BUT @... IT IS NEVER ASSIGNED A VALUE. @... @defvar tr_version @... @... @code{tr_version} is the version number of the translator. @... @... @end defvar  @c tr_warnings_get EXISTS AND FUNCTIONS AS ADVERTISED (SORT OF)  RETURNS *trruntimewarned* @c WHICH HAS ONLY A FEW KINDS OF WARNINGS PUSHED ONTO IT; IT'S CERTAINLY NOT COMPREHENSIVE @c DO WE REALLY NEED THIS SLIGHTLY WORKING FUNCTION ?? @@ 1355,31 +1277,6 @@ @end defvar @... OBSOLETE, DOES NOT OCCUR ANYWHERE IN THE SOURCE CODE @... @defvar undeclaredwarn @... Default value: @code{compfile} @... @...  A switch in the translator. @... There are four relevant settings: @... @... @itemize @bullet @... @item @... @code{false}  never print warning messages. @... @item @... @code{compfile}  warn when in @code{compfile}. @... @item @... @code{translate}  warn when in @code{translate} and when @code{translate: true}. @... @item @... @code{all}  warn in @code{compfile} and @code{translate}. @... @end itemize @... @... Do @code{mode_declare (<variable>, any)} to declare a variable to be a general @... Maxima variable (i.e. not limited to being @code{float} or @code{fixnum}). The extra @... work in declaring all your variables in code to be compiled should pay @... off. @... @... @end defvar  @defun compile_file (filename) @defunx compile_file (filename, compiled_filename) @defunx compile_file (filename, compiled_filename, lisp_filename) @@ 1418,18 +1315,3 @@ @end defun @... OBSOLETE: declare_translate EXISTS BUT THE VARIABLE IT MANAGES, *declaredtranslatedfunctions*, @... HAS NO EFFECT ASIDE FROM CAUSING A USELESS ADVISORY ABOUT declare_translated @... (*declaredtranslatedfunctions* HAS NO EFFECT ON TRANSLATED CODE) @... CUT EVERYTHING RELATED TO *declaredtranslatedfunctions* IN transs.lisp, transl.lisp @... @defun declare_translated (f_1, f_2, ...) @... When translating a file of Maxima code @... to Lisp, it is important for the translator to know which functions it @... sees in the file are to be called as translated or compiled functions, @... and which ones are just Maxima functions or undefined. Putting this @... declaration at the top of the file, lets it know that although a symbol @... does which does not yet have a Lisp function value, will have one at @... call time. (MFUNCTIONCALL fn arg1 arg2.. ) is generated when @... the translator does not know fn is going to be a Lisp function. @... @... @end defun 
From: Raymond Toy <rtoy@us...>  20050209 04:22:02

Update of /cvsroot/maxima/maxima/src In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv15272/src Modified Files: hypgeo.lisp Log Message: Add comments for many of the functions that convert one special function to another or to a hypergeometric function. Index: hypgeo.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/hypgeo.lisp,v retrieving revision 1.9 retrieving revision 1.10 diff u d r1.9 r1.10  hypgeo.lisp 7 Feb 2005 22:05:38 0000 1.9 +++ hypgeo.lisp 9 Feb 2005 04:21:51 0000 1.10 @@ 42,7 +42,11 @@ (defun cos%(arg)(list '(%cos) arg)) (defun neginp (a) (cond ((maximaintegerp a)(or (zerp a)(minusp a))))) +;; Return T if a is a nonpositive integer. +;; (Do we really want maximaintegerp or hypintegerp here?) +(defun neginp (a) + (cond ((maximaintegerp a) + (or (zerp a) (minusp a))))) (defun notnump(x)(not (nump x))) @@ 876,8 +880,15 @@ (pow) (mul* (gm (add pow 1))(power par (sub (mul 1 pow) 1)))) (defun f24p146  (c v a) +;; Table of Integral Transforms +;; +;; p. 146, formula 24: +;; +;; t^(v1)*exp(t^2/8/a) +;; > gamma(v)*2^v*a^(v/2)*exp(a*p^2)*D[v](2*p*sqrt(a)) +;; +;; Re(a) > 0, Re(v) > 0 +(defun f24p146 (c v a) (mul* c (gm v) (power 2 v) @@ 885,24 +896,46 @@ (power '$%e (mul* a par par)) (dtford (mul* 2 par (power a (1//2)))(mul 1 v)))) (defun f35p147  (c v a) +;; Table of Integral Transforms +;; +;; p. 147, formula 35: +;; +;; (2*t)^(v1)*exp(2*sqrt(a)*sqrt(t)) +;; > gamma(2*v)*p^(v)*exp(a/p/2)*D[2*v](sqrt(2*a/p)) +;; +;; Re(v) > 0, Re(p) > 0 +(defun f35p147 (c v a) (mul* c (gm (add v v))  (power 2 (sub 1 v)) + (power 2 (sub 1 v)) ; Is this supposed to be here? (power par (mul 1 v))  (power '$%e (mul* a (1//2)(inv par)))  (dtford (power (mul* 2 a (inv par))(1//2))(mul 2 v)))) + (power '$%e (mul* a (1//2) (inv par))) + (dtford (power (mul* 2 a (inv par)) + (1//2)) + (mul 2 v)))) +;; Table of Integral Transforms +;; +;; p. 146, formula 29: +;; +;; t^(v1)*exp(a/t/4) +;; > 2*(a/p/4)^(v/2)*bessel_k(v, sqrt(a)*sqrt(p)) +;; +;; Re(a) > 0 (defun f29p146 (v a) (mul* 2  (power (mul* a (inv 4)(inv par))(div v 2)) + (power (mul* a (inv 4) (inv par)) + (div v 2)) (ktfork a v))) (defun ktfork  (a v) +;; bessel_k(v, sqrt(a)*sqrt(p)) in terms of bessel_k or in terms of +;; hypergeometric functions. +;; +;; Choose bessel_k if the order v is an integer. +(defun ktfork (a v) ((lambda(z)  (cond ((maximaintegerp v)(kmodbes z v)) + (cond ((maximaintegerp v) + (kmodbes z v)) (t (simpktf z v)))) (power (mul* a par)(1//2)))) @@ 1705,11 +1738,28 @@ (neginp (sub (sub (1//2) i2) i1)) (neginp (sub (add (1//2) i2) i1)))) (defun init(r)(mul* r (power '$%e (mul* 1 var par)))) +;; Compute r*exp(var*par). +;; +;; (Probably r*exp(p*t), where t is the variable of integration and p +;; is the parameter of the Laplace transform.) +(defun init (r) + (mul* r (power '$%e (mul* 1 var par)))) (defun ltw  (x n a)  ((lambda(diva2) +;; (1)^n*n!*laguerre(n,a,x) = U(n,a+1,x) +;; +;; W[k,u](z) = exp(z/2)*z^(u+1/2)*U(1/2+uk,1+2*u,z) +;; +;; So +;; +;; laguerre(n,a,x) = (1)^n*U(n,a+1,x)/n! +;; +;; U(n,a+1,x) = exp(z/2)*z^(a/21/2)*W[1/2+a/2+n,a/2](z) +;; +;; Finally, +;; +;; laguerre(n,a,x) = (1)^n/n!*exp(z/2)*z^(a/21/2)*W[1/2+a/2+n,a/2](z) +(defun ltw (x n a) + ((lambda (diva2) (mul* (power 1 n) (inv (factorial n)) (power x (sub (inv 2) diva2)) @@ 1746,12 +1796,39 @@ (pjac x n inv2 inv2))) (1//2))) (defun hetd(x n)(mul* (power '$%e (mul* x x (inv 4)))(parcyl x n))) +;; Hermite He function as a parabolic cylinder function +;; +;; Tables of Integral Transforms +;; +;; p. 386 +;; +;; D[n](z) = (1)^n*exp(z^2/4)*diff(exp(z^2/2),z,n); +;; +;; p. 369 +;; +;; He[n](x) = (1)^n*exp(x^2/2)*diff(exp(x^2/2),x,n) +;; +(defun hetd (x n) + (mul* (power '$%e (mul* x x (inv 4))) + (parcyl x n))) +;; erfc in terms of D, parabolic cylinder function +;; +;; Tables of Integral Transforms +;; +;; p 387: +;; erfc(x) = (%pi*x)^(1/2)*exp(x^2/2)*W[1/4,1/4](x^2) +;; +;; p 386: +;; D[v](z) = 2^(v/2+1/2)*z^(1/2)*W[v/2+1/4,1/4](z^2/2) +;; +;; So +;; +;; erfc(x) = %pi^(1/2)*2^(1/4)*exp(x^2/2)*D[1](x*sqrt(2)) (defun erfctd (x) ((lambda(inv2)  (mul* (power 2 inv2) + (mul* (power 2 inv2) ; Should this be 2^(1/4)? (power '$%pi (mul* 1 inv2)) (power '$%e (mul* 1 inv2 x x)) (parcyl (mul* (power 2 inv2) x) 1))) @@ 1770,8 +1847,13 @@ (mul* (cos% arg)(bess n z 'y)))))) (mul* (1//2) '$%pi (sub m n)))) (defun wtm  (a i1 i2) +;; Whittaker W function in terms of Whittaker M function +;; +;; A&S 13.1.34 +;; +;; W[k,u](z) = gamma(2*u)/gamma(1/2uk)*M[k,u](z) +;; + gamma(2*u)/gamma(1/2+uk)*M[k,u](z) +(defun wtm (a i1 i2) (add (mul* (gm (mul 2 i2)) (mwhit a i1 i2) (inv (gm (sub (sub (1//2) i2) i1)))) @@ 1779,8 +1861,12 @@ (mwhit a i1 (mul 1 i2)) (inv (gm (sub (add (1//2) i2) i1)))))) (defun gammaincompletetw  (a x) +;; Tail of the incomplete gamma function as a Whittaker W function +;; +;; Tables of Integral Transforms, p. 387 +;; +;; gammaincomplete(a,x) = x^((a1)/2)*exp(x/2)*W[(a1)/2,a/2](x) +(defun gammaincompletetw (a x) (mul* (power x (div (sub a 1) 2)) (power '$%e (div x 2)) (wwhit x (div (sub a 1) 2)(div a 2)))) @@ 1813,6 +1899,12 @@ (mul* (bess (mul 1 i) a 'j) (inv (sin% (mul i '$%pi)))))) +;; Express parabolic cylinder function as a Whittaker W function. +;; +;; See Table of Integral Transforms, p.386: +;; +;; D[v](z) = 2^(v/2+1/2)*z^(1/2)*W[v/2+1/4,1/4](z^2/2) +;; (defun dtw (i a) (mul* (power 2 (add (div i 2)(inv 4))) (power a (inv 2)) @@ 1820,18 +1912,30 @@ (add (div i 2)(inv 4)) (inv 4)))) +;; Bateman's function as a Whittaker W function +;; +;; See Table of Integral Transforms, p.386: +;; +;; k[2*v](z) = 1/gamma(v+1)*W[v,1/2](2*z) +;; +;; (But this function seems to have v = 1/2.) (defun kbatemantw (a) ((lambda(ind) (div (wwhit (add a a) ind (1//2)) (gm (add ind 1)))) (div 1 2))) (defun kti  (i a) +;; Bessel K in terms of Bessel I. +;; +;; A&S 9.6.2 +;; +;; bessel_k(v,z) = %pi/2*(bessel_i(v,z)bessel_i(v,z))/sin(v*%pi) +(defun kti (i a) (mul* '$%pi (1//2) (inv (sin% (mul i '$%pi)))  (sub (bess (mul 1 i) a 'i)(bess i a 'i)))) + (sub (bess (mul 1 i) a 'i) + (bess i a 'i)))) (defun 1fact (flg v) @@ 2287,6 +2391,11 @@ (mul k k)))) (1//2))) +;; Complete elliptic E +;; +;; A&S 17.3.10 +;; +;; E(k) = %pi/2*F(1/2,1/2;1;k^2) (defun etf (k) ((lambda(inv2) 
From: Robert Dodier <robert_dodier@us...>  20050209 03:55:37

Update of /cvsroot/maxima/maxima/share/contrib/nset In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv5820 Modified Files: testnset.mac Log Message: Replace TRUE and FALSE with true and false throughout, otherwise some tests fail in casesensitive Maxima. Index: testnset.mac =================================================================== RCS file: /cvsroot/maxima/maxima/share/contrib/nset/testnset.mac,v retrieving revision 1.2 retrieving revision 1.3 diff u d r1.2 r1.3  testnset.mac 6 Feb 2005 18:24:56 0000 1.2 +++ testnset.mac 9 Feb 2005 03:55:28 0000 1.3 @@ 1,26 +1,26 @@ emptyp(set()); TRUE$ +true$ emptyp([]); TRUE$ +true$ emptyp(set(false)); FALSE$ +false$ emptyp([false]); FALSE$ +false$ emptyp(set(true)); FALSE$ +false$ emptyp(set(set())); FALSE$ +false$ emptyp(set([])); FALSE$ +false$ emptyp(set(u,n,k)); FALSE$ +false$ adjoin(set(),set()); set(set())$ @@ 213,25 +213,25 @@ subsetp(set(),set()); TRUE$ +true$ subsetp(set(),set(a)); TRUE$ +true$ subsetp(set(a),set())$ FALSE$ +false$ subsetp(set(),set(set())); TRUE$ +true$ subsetp(set(set()),set(set())); TRUE$ +true$ subsetp(set(a,b),set(a,b,c)); TRUE$ +true$ subsetp(set(a,b,c),set(a,b)); FALSE$ +false$ errcatch(subsetp(a,b)); []$ @@ 243,10 +243,10 @@ []$ disjointp(set(),set()); TRUE$ +true$ disjointp(set(set()),set()); TRUE$ +true$ errcatch(disjointp(a,a+b)); []$ @@ 258,10 +258,10 @@ []$ disjointp(set(a),set(b)); TRUE$ +true$ disjointp(set(b,a),set(a)); FALSE$ +false$ subset(set(),evenp); set()$ @@ 1055,16 +1055,16 @@ 0$ is(cardinality(set_partitions(set())) = belln(0)); TRUE$ +true$ is(cardinality(set_partitions(set(1))) = belln(1)); TRUE$ +true$ is(cardinality(set_partitions(set(1,2))) = belln(2)); TRUE$ +true$ is(cardinality(set_partitions(set(1,2,3))) = belln(3)); TRUE$ +true$ belln([5,6]); [belln(5),belln(6)]$ @@ 1079,7 +1079,7 @@ set([1,1],[2])$ is(cardinality(integer_partitions(25)) = 1958)$ TRUE; +true; map(lambda([x], apply("+",x)), integer_partitions(25)); set(25)$ 
From: Robert Dodier <robert_dodier@us...>  20050209 00:55:48

Update of /cvsroot/maxima/maxima/share/algebra/charsets In directory sc8prcvs1.sourceforge.net:/tmp/cvsserv27690 Modified Files: README Added Files: set.lisp Log Message: Copy set.lisp here from maxima/src in preparation for its set.lisp READ removal from src; add a note to README to the effect that src/set.lisp is superseded by nset.  NEW FILE: set.lisp  ;; Support for Maxima sets. ;; Author: Barton Willis ;; Send bug reports to willisb@... ;; This code is in the public domain. It has no warranty. Use this ;; code at your own risk. (inpackage "MAXIMA") ;; Use the predicate canonlt to order the elements of a set. The ;; default is $unorderedp. The predicate $unorderedp always ;; returns true; when canonlt is its default value, sets are ;; never sorted. Other choices for $canonlt include $ordergreatp ;; and $orderlessp. (defun $unorderedp (a b) t) (defmvar $canonlt '$unorderedp) ;; The set package doesn't distinguish between sets and lists. We're ;; in trouble if we need to work simultaneously with a set of ;; lists and a set of sets. The commerical Macsyma seems to treat ;; all set elements as lists; thus setify([[1,2],[2,1]) returns ;; [[1,2],[2,1]] because [1,2] and [2,1] are treated as lists ;; (and consequently they are not equal). In this package, the ;; user may decide if set elements that are lists are treated as ;; lists or as sets. When $set_elements_can_be_sets is true ;; (the default), set elements that are lists are treated ;; as sets; otherwise, when $set_elements_can_be_sets is ;; false, set elements that are lists are treated as lists. (defmvar $set_elements_can_be_sets t) ;; For nonlists x and y, equalp(x,y) returns is(ratsimp(xy)=0). ;; Signal an error if either x or y is a list. Since equalp uses ;; ratsimp, equalp(x/x,1) is true and equalp(x^(a*b),(x^a)^b) ;; is false. (defun $equalp (x y) (cond ((or ($listp x) ($listp y)) (merror "Both arguments to `equalp' must be nonlists.")) (t ($xequalp x y)))) ;; If you are certain that x and y are not lists, you might call ;; (at Maxima level) ?xequalp instead of equalp. (defun $xequalp (x y) (like 0 ($ratsimp (add* x (*mminus y))))) ;; If x and y are not lists, $elem_equalp(x,y) returns ;; equalp(x,y). If x and y are both lists, return ;; setequality(x,y) if set_elements_can_be_sets; otherwise ;; return equalp(x[1],y[1]) and equalp(x[2],y[2]) and .... ;; Finally, if exactly one of x or y is a list, return false. (defun $elem_equalp (x y) (cond ((and ($listp x) ($listp y)) (cond ($set_elements_can_be_sets ($setequality x y)) ((and ($emptyp x) ($emptyp y)) t) (t (and (= ($length x) ($length y)) ($elem_equalp ($first x) ($first y)) ($elem_equalp ($rest x) ($rest y)))))) ((or ($listp x) ($listp y)) nil) (t ($xequalp x y)))) ;; Adjoin x to the Maxima list a; use equalp for the equality test. ;; When a isn't a list, signal an error. (defun $adjoin (x a) (cond (($listp a) (cons '(mlist) (adjoin x (margs a) :test #'$elem_equalp))) (t (merror "The second argument to `adjoin' must be a list")))) ;; Setify removes duplicates from a Maxima list and sorts the ;; list using the partial ordering function canonlt. To remove the ;; duplicates from the list, we use element_equalp to test for equality. ;; When the argument isn't a list, signal an error. (defun $setify (a) (cond (($listp a) (mysort (cons '(mlist) (removeduplicates (margs a) :test #'$elem_equalp)))) (t (merror "The argument to `setify' must be a list.")))) ;; When $canonlt is $unorderedp, don't sort; when $canonlt isn't ;; $unorderedp, sort the list using the predicate $canonlt. (defun mysort (a) (cond ((eq $canonlt '$unorderedp) a) (t ($sort a $canonlt)))) ;; The maxima function call union(a1,a2,...an) forms the union of the ;; sets a1,a2,...an. (defmfun $union ( &rest a) (setq a (margs a)) (cond ((member nil (mapcar #'$listp a)) (merror "Each argument to `union' must be a list.")) (t (cons '(mlist) (removeduplicates (apply 'append (map 'list 'rest a)) :test #'$elem_equalp))))) ;; Remove elements of b from a. Signal an error if a or b aren't lists. ;; Use element_equalp for the equality test. (defun $setdifference (a b) (cond ((and ($listp a) ($listp b)) (cons '(mlist) (setdifference (margs a) (margs b) :test #'$elem_equalp))) (t (merror "Both arguments to `setdifference' must be lists.")))) ;; Return the intersection of lists a and b. Use element_equalp for the ;; equality test. Signal an error if a or b aren't lists. (defmfun $intersection ( &rest a) (setq a (margs a)) (cond ((member nil (mapcar #'$listp a)) (merror "Each argument to `intersection' must be a list.")) (t (setq a (mapcar #'margs a)) (cons '(mlist) (reduce #'(lambda (x y) (intersection x y :test #'$elem_equalp)) a :fromend nil))))) ;; Return true iff a is a subset of b. Signal an error if ;; a or b aren't Maxima lists. (defun $subsetp (a b) (cond ((and ($listp a) ($listp b)) (xsubsetp (margs a) b)) (t (merror "Both arguments to `subsetp' must be lists.")))) ;; xsubsetp returns true if and only if each element of the Lisp ;; list a is a member of the Maxima list b. This function isn't ;; inteneded to be a user function; it doesn't check whether b is a ;; Maxima list. Notice that the empty set is a subset of every ;; set. (defun xsubsetp (a b) (cond ((null a) t) (t (and ($elementp (car a) b) (xsubsetp (cdr a) b))))) ;; Return true iff a is a subset of b and b is a subset of a; return ;; false if a or b are not lists. (defun $setequality (a b) (cond ((and ($listp a) ($listp b)) (if (and ($subsetp a b) ($subsetp b a)) t nil)) (t nil))) ;; Return true iff x as an element of the list a; use $elem_equalp ;; to test for equality if x isn't a list and use $setequality to ;; test for equality if x is a list. Return false if a isn't a list. (defun $elementp (x a) (cond (($listp a) (cond (($listp x) (cond ($set_elements_can_be_sets (if (member x (margs a) :test #'$setequality) t nil)) (t (if (member x (margs a) :test #'$elem_equalp) t nil)))) (t (if (member x (margs a) :test #'$elem_equalp) t nil)))) (t nil))) ;; Return true if e is an empty Maxima list; otherwise, signal an ;; error. (defun $emptyp(e) (cond (($listp e) (like e '((mlist)))) (t (merror "Argument to `emptyp' must be a list.")))) ;; Return an n element Maxima list [e,e,e,...e]. When n < 0 or ;; n isn't an integer, signal an error. (defun $dupe (e n) (cond ((and (integerp n) (> n 1)) (cons '(mlist) (makelist n :initialelement e))) (t (merror "Second argument to `dupe' must be a nonnegative integer.")))) ;; Return true if and only if the lists a and b are disjoint; ;; signal an error if a or b aren't lists. (defun $disjointp (a b) (cond ((and ($listp a) ($listp b)) (not (intersection (margs a) (margs b) :test #'$elem_equalp))) (t (merror "Both arguments to `disjointp' must be lists.")))) ;; Return those elements of a for which the predicate f evaluates ;; to true; signal an error if a isn't a list. (defun $subset (a f) (cond (($listp a) (setq a (margs a)) (let ((acc nil)) (dolist (x a (cons '(mlist) acc)) (if (mfuncall f x) (setq acc (cons x acc)))))) (t (merror "First argument to `subset' must be a list.")))) ;; Return the union of a  b and b  a; signal an error if a or b ;; aren't lists. (defun $symmdifference (a b) (cond ((and ($listp a) ($listp b)) (mfuncall '$union ($setdifference a b) ($setdifference b a))) (t (merror "Both arguments to `symmdifference' must be lists.")))) ;; Return a list of the elements in b that are not in a. (defun $complement (a b) (cond ((and ($listp a) ($listp b)) ($setdifference b a)) (t (merror "Both arguments to `complement' must be lists.")))) ;; Return true if and only if the argument is a Maxima list and the ;; list does not have duplicate elements. setp doesn't check that ;; the list is ordered according to canonlt. (defun $setp (a) (and ($listp a) (setp (margs a)))) (defun setp (a) (cond ((null a) t) (t (and (setp (cdr a)) (not (member (car a) (cdr a) :test #'$elem_equalp)))))) ;; Return the set of all subsets of a. If a has n elements, powerset(a) has ;; 2^n elements. Signal an error if the argument isn't a Maxima list. (defun $powerset (a) (cond (($listp a) (setq a ($setify a)) (cons '(mlist) (mapcar #'(lambda (x) (cons '(mlist) x)) (powerset (margs a))))) (t (merror "Argument to `powerset' must be a list.")))) (defun powerset (a) (cond ((null a) (list nil)) (t (let ((x (car a)) (b (powerset (cdr a)))) (append b (mapcar #'(lambda (u) (cons x u)) b)))))) ;; Return the set of all subsets of a that have exactly n elements. ;; Signal an error if the first argument isn't a Maxima list or if ;; the second argument isn't a nonnegative integer. (defun $subpowerset (a n) (cond (($listp a) (setq a ($setify a)) (cond ((and (integerp n) (> n 1)) (cons '(mlist) (mapcar #'(lambda (x) (cons '(mlist) x)) (subpowerset (margs a) n)))) (t (merror "Second argument to SUBPOWERSET must be a nonnegative integer.")))) (t (merror "First argument to `subpowerset' must be a list.")))) (defun subpowerset (a n) (cond ((or (< n 1) (null a)) nil) ((= n 1) (mapcar #'list a)) (t (let ((x (car a)) (b (subpowerset (cdr a) ( n 1)))) (append (subpowerset (cdr a) n) (mapcar #'(lambda (u) (cons x u)) b)))))) Index: README =================================================================== RCS file: /cvsroot/maxima/maxima/share/algebra/charsets/README,v retrieving revision 1.2 retrieving revision 1.3 diff u d r1.2 r1.3  README 24 Dec 2002 04:31:41 0000 1.2 +++ README 9 Feb 2005 00:55:37 0000 1.3 @@ 8,3 +8,12 @@ Finally, I wish to dedicate this work to the late Dr. Paul Karmel. Dan Stanger 11/28/02 + +The CharSets package depends on the set functions in set.lisp, which was +previously in maxima/src/ and is now in maxima/share/algebra/charsets/. +To use CharSets, set.lisp must be loaded first, as it is no longer part +of the compiled Maxima code. For general use, nset.lisp in +maxima/share/contrib/nset/ supersedes set.lisp. + +Robert Dodier +2005/02/07 