New features that have been added to Maple for version 4.1
|
----------------------------------------------------------
|
A "plot" facility.
|
The basic syntax is
|
plot( f, x=l..r )
|
for plotting the expression f, a function of x on the real range l..r The
|
argument f may also be a Maple procedure which is to be evaluated. Mul-
|
tiple plots, infinity plots and parametric plots are available. See
|
help(plot) and help(plot,<topic>) for further information. Drivers are
|
available for
|
dumb terminal -- a character plot
|
tektronix 4010 and 4014
|
regis
|
The plot facility uses Maple's arbitrary precision model of floating
|
point arithmetic, which is implemented in software. The advantage of
|
using Maple floats is that any Maple expression, mathematical function or
|
Maple procedure can be plotted to arbitrary precision. A plot is a Maple
|
structure which can be manipulated, stored in files, slightly changed and
|
redisplayed, assigned to variables, passed as an argument, etc.
|
Translation to Fortran.
|
A first attempt at a fortran translation facility. Currently,
|
written in Maple, translates single Maple algebraic expressions
|
into fortran 77 using either single or double precision.
|
There is a optional code optimization facility available.
|
See help(fortran) for further information.
|
Wrap program obsolete.
|
The wrap program for breaking up long lines output by Maple
|
is now obsolete as long lines (lines exceeding screenwidth in
|
length), including comments, are now automatically broken up
|
on output by Maple. Note: tokens are not broken if possible.
|
The "-l" option has been eliminated.
|
This option is no longer necessary.
|
WARNING: the internal maple format of version 4.0 is
|
incompatible with version 4.1 . All Maple source files
|
should be reloaded into Maple format using the new Maple
|
load procedure i.e. "maple < filename"
|
Remember function replaced by assignment to a function call.
|
The remember function call remember( f(x) = y ) has been replaced by
|
the functional assignment f(x) := y . The evaln function (evaluate to a
|
name) now accepts a function call as an argument. The evaluation rules
|
for this case are the same as for a subscripted argument such as f[x] .
|
That is, the function name f is evaluated, then the arguments x are
|
evaluated from left to right. The function call is not executed. Thus,
|
the semantics of the functional assignment f(x) := y are: evaluate to
|
a name f(x), evaluate the right hand side y, storing the result in f's
|
remember table.
|
If f does not evaluate to a procedure, it is assigned the procedure
|
proc() options remember; 'procname(args)' end
|
A consequence of this change is that all side effects in Maple can be
|
traced to the use of the assignment operator, either explicit, or impli-
|
cit (e.g., assigning the quotient to q in divide(a,b,'q')). Note:
|
Assignments to builtin functions are disallowed. Note: The only func-
|
tions with special evaluation rules are
|
eval, evaln and assigned .
|
Automatic Simplifications for Standard Mathematical Functions
|
In previous versions of Maple, only the simplifications
|
sin(0) ==> 0, cos(0) ==> 1, exp(0) ==> 1,
|
ln(1) ==> 0, exp(ln(x)) ==> x, ln(exp(x)) ==> x
|
were performed automatically by the internal simplifier. Simplifications
|
like sin(Pi) ==> 0 were typically not done. In this version, a Maple
|
library procedure for each function performs these and other simplifica-
|
tions as evaluations of a function call. Such procedures exist for the
|
following Mathematical functions: abs, signum, exp, ln, erf, Psi, Zeta,
|
GAMMA, binomial, bernoulli euler, sqrt, sin, cos, tan and the other
|
trig/arctrig functions. Also, procedures exist for stir1, stir2, Ei, Si,
|
Ci, dilog fibonacci, hypergeom but these must be explicitly loaded using
|
readlib.
|
The simplifications performed (automatically) include
|
special values: sin(Pi/6) ==> 1/2, Zeta(0) ==> -1/2
|
symmetry: sin(-3) ==> -sin(3), cos(-x) ==> cos(x)
|
floating point: foo(float) ==> float
|
complex argument: sin(I) ==> I*sinh(1), abs(3+4*I) ==> 5
|
inverse function: exp(ln(x)) ==> x, sin(arccsc(x)) ==> 1/x
|
idempotency: abs(abs(x)) ==> abs(x)
|
general rules: abs(x*y)==>abs(x)*abs(y),binomial(n,1)==>n
|
singularities: cot(0) ==> Error, singularity encountered
|
There is also a "cutoff" for GAMMA(n), Psi(n) and Zeta(n) where n is
|
an integer. That is for example, GAMMA(49) ==> the integer 48! but,
|
GAMMA(50) is left as "GAMMA(50)". The reason for this is as follows.
|
GAMMA(1000000) is not effectively computable, but it can still be
|
manipulated as the symbol GAMMA(1000000). The "cutoffs" can easily
|
be changed by the user. For example, if the user wants GAMMA(n)
|
always expressed as (n-1)! then define GAMMA := proc(n) (n-1)! end
|
The codes reside in the Maple library if you wish to determine exactly
|
what simplifications are being done. Note the code for trigonometric
|
functions resides in the files trig, arctrig, trigh and arctrigh. To
|
include additional simplifications and delete/change existing simplifica-
|
tions, the user has the option of changing the code.
|
Global variable constants for defining Mathematical constants.
|
The global variable constants, initially assigned the sequence
|
gamma, infinity, Catalan, E, I, Pi
|
defines the Mathematical constants known to Maple. They are
|
known to Maple in several ways for example,
|
ln(E) ==> 1, sin(Pi/6) ==> 1/2
|
type(E+Pi,constant) ==> true
|
abs(sin(Pi/12)) ==> sin(Pi/12)
|
signum(cos(1/gamma)) ==> -1
|
evalf(Pi) ==> 3.141592654
|
and note
|
type(x*Pi,polynom,integer) ==> false
|
type(x*Pi,polynom,constant) ==> true
|
The user can define his/her own constants
|
For example the constant Z by doing constants := constants, Z
|
If Z is a Real number, and evalf/constant/Z is defined, Maple
|
will be able to determine abs(Z) and signum(Z) .
|
Major improvements to the limit function.
|
Previous versions of limit understood only complex limits. The new ver-
|
sion understands real limits (directional limits) including a distinction
|
between infinity and -infinity. A complex limit is specified by a third
|
argument which is the keyword "complex". A directional limit is speci-
|
fied by a third argument which is either "left", "right" or "real" where
|
the latter means bidirectional. Limit may also return a real range.
|
This means that the limit is bounded, it lies within the range, but may
|
be a subrange of the range or possibly a constant. Limit may also return
|
the keyword "undefined". This means the limit does not exist. The
|
defaults for the two argument case are real bidirectional limits except
|
if the limiting point is infinity or -infinity in which case limit under-
|
stands a directional limit, thus limit(f(x),x=-infinity,right) ==
|
limit(f(x),x=-infinity) and limit(sin(x)/x,x=0,real) ==
|
limit(sin(x)/x,x=0)
|
For example
|
limit(tan(x),x=Pi/2,left) ==> infinity
|
limit(tan(x),x=Pi/2,right) ==> -infinity
|
limit(tan(x),x=Pi/2,real) ==> undefined
|
limit(tan(x),x=Pi/2,complex) ==> infinity
|
limit(sin(x),x=infinity,real) ==> -1..1
|
limit(exp(x),x=infinity,real) ==> infinity
|
limit(exp(1/x),x=0,right) ==> infinity
|
limit(exp(1/x),x=0,left) ==> 0
|
limit(exp(x),x=infinity) ==> infinity
|
limit(exp(x),x=-infinity) ==> 0
|
New package for commutators.
|
The commutat package performs commutator operations.
|
New package for first year students.
|
The student package contains routines to help first year students follow
|
step by step solutions to problems typical of first year calculus
|
courses. It enables a student to examine an integral or a summation in
|
an unevaluated form. Tools are provided for changing variables, car-
|
rying out integration by parts, completing the square and replacing
|
common factors by an indeterminate. Other routines are available for
|
dealing with some aspects of fact finding associated with plotting.
|
New notation Psi(n,x) and Zeta(n,x).
|
The n'th derivative of the polygamma function Psi(x) is now denoted by
|
Psi(n,x) and not (Psi.n)(x). Likewise, the n'th derivative of the
|
Riemann Zeta function is denoted by Zeta(n,x) and not (zeta.n)(x). The
|
old notations are unworkable in general. Psi(0,x) == Psi(x) and
|
Zeta(0,s) == Zeta(s). Note: there is no floating point code for Psi(n,x)
|
and Zeta(n,x) for n > 0 at present.
|
New function -- iscont(expr,x=a..b) -- test for continuity on an interval.
|
This function replaces the old int/iscont function. The iscont
|
function returns a boolean result (true if the expr. is continuous
|
on a..b, false otherwise). This function must first be read into a
|
Maple session through a "readlib(iscont):" statement. The endpoints
|
of the interval must be either real constants, "infinity" or
|
"-infinity".
|
Obsolete Functions.
|
arctan2(y,x); use arctan(y,x);
|
remember(f(x)=y); use f(x) := y;
|
C(n,k); use binomial(n,k);
|
zeta(x); use Zeta(x);
|
easyfact(n); use ifactor(n, easy);
|
diffeq(deqn,x,y); use dsolve(deqn(s),var(s),option);
|
simplify(...,Zeta); use expand(...);
|
New Mathematical Functions known to Maple
|
bessel: Now known to evalf and diff
|
dilog: Spence's Integral: dilog(x) = int(ln(t)/(1-t),t=1..x)
|
hypergeom: Generalized Hypergeometric Functions
|
stir1: Stirling number of the first kind: stir1(n,m)
|
stir2: Stirling number of the second kind: stir2(n,m)
|
New functions:
|
coeffs: coeffs(p,v,'t') returns the sequence of coefficients
|
and terms t of the polynomial p in the indeterminates v
|
ConvexHull: ConvexHull(p) computes the Convex Hull of the points p
|
discrim: computes discriminant of a polynomial
|
evalm: evaluates matrix operations
|
iroots: finds integer roots of rational polynomial
|
iscont: tests for poles of a function over a range
|
mroots: find roots of a polynomial modulo a prime
|
tcoeff: "trailing coefficient" complementing lcoeff function
|
type/algebraic: test for rational function extended by radicals
|
type/quartic: test for quartic polynomial
|
type/scalar: test for scalar
|
convert/ln: express arctrigonometric functions in terms of logs
|
convert/exp: express trigonometric functions in terms of
|
exponentials
|
convert/sincos: express trigonometric functions in terms of sin and cos
|
express hyperbolic functions in terms of sinh and cosh
|
convert/GAMMA: express factorials binomials in terms of GAMMAs
|
convert/expsincos: expresses trigs in terms of exp, sin, cos
|
convert/degrees: converts radians to degrees
|
convert/radians: converts degrees to radians
|
convert/factorial: converts GAMMAS and binomials to factorials
|
convert/lessthan: converts relation to less than
|
convert/equality: converts relation to equality
|
convert/lessthanequal: converts relation to less than equal
|
convert/polar: converts complex expression to polar form
|
numtheory/cyclotomic: calculate cyclotomic polynomial
|
numtheory/isqrfree: test if integer is square free
|
numtheory/mroot: calculate modular root
|
numtheory/pprimroot: calculate pseudo primitive root
|
numtheory/rootsunity: calculate modular roots of unity
|
powseries/powratpoly: calculate power series from rational expression
|
Modified functions:
|
abs: absolute value function is now a library procedure
|
extended for general constants and complex arguments
|
arctan: arctan(x,y) replaces arctan2(x,y)
|
binomial: Extended functionality to make binomial analytic via
|
binomial(n,k) = GAMMA(n+1)/GAMMA(k+1)/GAMMA(n-k+1).
|
bernoulli: Extended functionality bernoulli(n,x) returns
|
the nth bernoulli polynomial evaluated at x
|
content: Extended functionality of content(a,v,'p') to allow
|
the coefficients of a (polynomial in v) to be rational
|
functions in other indeterminates.
|
diff: Now handles binomial, dilog, sum.
|
evalc: When computing evalc(f(x+y*I)), if x or y are floats
|
guard digits are now added with care taken to ensure
|
that the result lies in the principle range.
|
expand: Now maps onto the coefficients of a taylor series.
|
euler: Extended functionality euler(n,x) returns
|
the nth euler polynomial evaluated at x
|
int: 1: Integration by parts for arctrig, arctrigh,
|
erf, Ei, Si, Ci and dilog functions
|
2: Integration of ln(x)*Q(x) where Q(x) is a rational
|
function of x. This introduces the dilog
|
function: dilog(x) = int(ln(t)/(1-t),t=1..x)
|
3: Integration of hyperbolics
|
lcoeff: lcoeff(p,v,'t') returns the leading coefficient and
|
the term t of the polynomial p in the indeterminates v
|
product: If the lower range is greater than the upper range,
|
product now returns the reciprocal of the non-reversed
|
product, as opposed to 1.
|
resultant: `resultant/bivariate` computes the resultant of
|
two polynomials using the subresultant algorithm.
|
RootOf: The form RootOf(polynom,x) is no longer permitted.
|
RootOf(polynom=0,x) is the form to use.
|
sign: There are new parameters to sign: sign(expr,[x,y,..],name)
|
expr - any expression, [...] - indets, name - contains
|
leading term after function call.
|
signum: signum(-x) now remains as signum(-x) since -signum(x)
|
is incorrect when x=0. Also, signum uses 10 digit
|
floating point evaluation if type(x,constant) is true
|
simplify: The simplify command now recognizes that
|
sin(x)^2+cos(x)^2 = 1 (also sinh(x)^2+1 = cosh(x)^2),
|
as well as simplifying powers of sin,cos to canonical
|
form. It also has new simplification rules for at
|
compositions and hypergeometric expressions.
|
sum: Hypergeometric summation algorithms are used, allowing
|
more summations involving binomial coefficients to be
|
solved. Also, the indefinite summation routines for
|
rational functions and Gosper's algorithm have been
|
extended, allowing them to handle larger expressions.
|
type/constant: Option for real or complex added.
|
with: Improved functionality for user libraries.
|
Share Library:
|
We now distribute a "share library" which contains procedures
|
that have been contributed by maple users.
|
Efficiency Improvements:
|
C runtime Stack:
|
Most operating systems impose a settable limit on the size
|
of the C runtime stack. Furthermore, the space occupied by
|
the C runtime stack typically is separate from the heap.
|
This means that stack space cannot be used by Maple
|
for Maple data structures. Secondly, highly recursive
|
Maple procedures will exceed the C runtime stack limit,
|
resulting in a crash. On small systems, the number of
|
levels of recursion available is quite small, sometimes
|
50 or even less. We have replaced some C locals which use
|
C stack space with Maple data structures approximately
|
tripling the number of recursion levels achieved for
|
the same stack space.
|
Integration of series:
|
`int/series`( f, x )
|
This fundamental operation has been encoded internally.
|
(Note that differentiation of a SERIES data structure
|
was encoded internally for maple version 4.0)
|
This has resulted in much improved times for computing
|
series for the functions ln, erf, dilog, Ei, Si, Ci, arctrig
|
Composition of series:
|
The algorithms for computing Power series expansions
|
for ln(f(x)), exp(f(x)), tan(f(x)), cot(f(x))
|
Also sqrt(f(x)) ==> arcsin(f(x)), sin(f(x)) and cos(f(x))
|
proceed by solving the differential equation which for
|
dense f(x) leads to O(n^2) coefficient operations.
|
Large polynomial divisions:
|
For large calls to divide(a,b,q), the external routine
|
expand/bigdiv is called. Let x = indets(a) minus indets(b)
|
For the case where x is not empty, the coeffs function is
|
used to obtain the coefficients in x. Divide is then
|
applied to each coefficient.
|
Taylor of logarithms
|
This has been made much faster.
|
`normal/numden`
|
This procedure is now internal. As a result, normal,
|
numer and denom are much more efficient.
|
gcd/gcdheu
|
The heuristic gcd algorithm has been improved and it is
|
able to handle problems at least twice as big. Consequently
|
some gcd times have improved dramatically.
|