New and Enhanced Packages in Maple 6

The LinearAlgebra Package (LinearAlgebra)



One of the biggest features of Maple 6 is its new LinearAlgebra package which sets new standards in efficiency, robustness, available features, and accuracy for computational linear algebra. This was achieved by tightly and seamlessly integrating stateoftheart NAG computational linear algebra routines into Maple 6 via its external calling mechanism. Furthermore, Waterloo Maple Inc. developed some breakthrough technology to not only allow hardware floatingpoint versions of these routines to be incorporated, but also arbitraryprecision floatingpoint versions too. Now, for the very first time, you can use the powerful NAG algorithms to do linear algebra computations with unrivaled accuracy. See updates,Maple6,LinearAlgebra for highlights.



The Slode Package (Slode)



The Slode package contains functions to find formal power series solutions of linear ordinary differential equations (linear ODEs), to determine points for some special series solutions (hypergeometric, rational, polynomial, and sparse series).


Create an LODEstruct structure from a linear ODE


The procedure DEdetermine checks for a linear ODE and creates the LODEstruct data structure. Relevant information is stored as attributes.

>

Slode[DEdetermine](diff(y(x),x)*(x1)y(x) = 0, y(x));

 (1) 

Create formal power/Taylor series solutions

>

ode := (3*x^26*x+3)*diff(diff(y(x),x),x) + (12*x12)*diff(y(x),x)+6*y(x);

 (2) 
>

Slode[FPseries](ode,y(x),v(n));

 (3) 
>

Slode[FTseries](ode,y(x),v(n),0,_A,2);

 (4) 

Determine candidate points for some special series solutions


Determine the candidate points for hypergeometric, rational, and polynomial power series solutions of homogeneous linear ODEs with polynomial coefficients (candidate_points), and the mpoints for msparse power series (candidate_mpoints). This second procedure can be sped up if the equation is known to be irreducible.

>

ode := (3*x^26*x+3)*diff(diff(y(x),x),x) + (12*x12)*diff(y(x),x)+6*y(x);

 (5) 
>

Slode[candidate_points](ode, y(x), 'polynomial');

 (6) 
>

Slode[candidate_points](ode, y(x), 'rational');

 (7) 
>

Slode[candidate_points](ode, y(x), 'hypergeom');

 (8) 
>

ode := (2+x^2)*diff(y(x),x,x,x)2*diff(y(x),x,x)*x+(2+x^2)*diff(y(x),x)2*x*y(x);

 (9) 
>

Slode[candidate_mpoints](ode, y(x));

 (10) 
>

ode := diff(y(x),x,x)+(x1)*y(x);

 (11) 
>

Slode[candidate_mpoints](ode, y(x), 'irreducible');

 (12) 

Find formal power series solutions

>

ode := (3*x^26*x+3)*diff(diff(y(x),x),x) + (12*x12)*diff(y(x),x)+6*y(x);

 (13) 
>

Slode[polynomial_series_sol](ode,y(x));

 (14) 
>

ode := (3x)*diff(diff(y(x),x),x)diff(y(x),x);

 (15) 
>

Slode[rational_series_sol](ode,y(x));

 (16) 
>

ode := 2*x*(x1)*diff(diff(y(x),x),x)+(7*x3)*diff(y(x),x)+2*y(x) = 0;

 (17) 
>

Slode[hypergeom_series_sol](ode,y(x));

 (18) 
>

ode := 2/9*(x^32/3*x^2+1/9*x)*diff(y(x),x$3)+2/9*(9*x^24*x+1/3)*diff(y(x),x$2)+
2/9*(18*x4)*diff(y(x),x)+4/3*y(x);

 (19) 
>

Slode[msparse_series_sol](ode,y(x),v(n));

 (20) 
>

ode := diff(y(x),x,x)+(x1)*y(x);

 (21) 
>

Slode[mhypergeom_series_sol](ode,y(x));

 (22) 
>

ode := x*y(x)+(2*x+1)*x*diff(y(x),x)+(1/2*x+1)*x^2*diff(y(x),x,x);

 (23) 
>

Slode[hypergeom_formal_sol](ode,y(x),t);

 (24) 


Tools for Polynomials (polytools)



A number of polynomial routines used to be located at the top level, and these would be hidden if ever a package was included which had a procedure with a similar name. To begin, the procedures minpoly, recipoly, split, splits, and translate have been moved to this package and should now be called by using the package name, for example, polytools[minpoly].



Verify Relationships (verify)



The previous version of verify was a function which attempted to check whether or not two objects were equal.


The procedure verify has now been replaced by one which allows the user to define a relation through defining a 'verification' in a fashion similar to that done by the current type system.


For example, two floats can be compared by using verify.

>

verify( 332.2532032, 332.2532037, float(10) );

 (25) 

Some of the more complicated verifications are equal, greater_than, less_than, greater_equal, and less_equal, all of which use signum to determine the truth of the relation:

>

select( verify, [1,2,3,4,5], Pi, less_than );

 (26) 

The verification polynom checks if two polynomials compare according to a given verification in their coefficients. This verification does not actually expand the polynomial, but rather works with it as is:

>

verify( (x  3.0)^2*(x  4.0), (1.001*x3.002)*(x2.998)*(0.9999*x4.002), polynom(float(2, digits=4), x) );

 (27) 


Programmatic Spreadsheet Tools



A new package Spread provides programmatic access to Maple spreadsheets. It includes routines for manipulating cell data individually or in blocks by using matrices. For further information, please see the help topic Spread and the example worksheet examples/spread.



Enhanced Packages



The Rif subpackage of DEtools is a powerful collection of commands for the simplification and analyses of systems of polynomially nonlinear ODE/PDE.


The default configuration of the Maple contextsensitive menu is a daunting object of approximately 60 kilobytes in its smallest, uncommented form.


A number of howto pages have been included.


The procedure 'display' has been added to the context package and displays a contextsensitive menu data structure in a readable format.


This procedure computes a basis of the holomorphic differentials of an irreducible algebraic curve f.

>

algcurves[differentials](y^4+x^3*y^3+x^4, x, y);

 (28) 

This algorithm computes cycles that form a basis for the homology of a Riemann surface given as a polynomial f in two variables x and y. The Riemann surface is the covering surface for y as an Nvalued function of x, where N = degree(f, y) is the degree of covering.

>

algcurves[homology](y^3x^21, x, y);

 (29) 

An irreducible algebraic curve f(x, y) is called hyperelliptic if the genus is more than 1 and f(x, y) is birational to a curve F(X, Y) which is of degree 2 in y.

>

algcurves[is_hyperelliptic](y^2+x^5+1, x, y);

 (30) 
>

algcurves[is_hyperelliptic](y^9+2*x^2*y^6+2*x^4*y^3+x^6+y^2, x, y);

 (31) 
>

algcurves[is_hyperelliptic](y^9+3*x^2*y^6+3*x^4*y^3+x^6+y^2, x, y);

 (32) 

This procedure computes the monodromy of a Riemann surface represented as a plane algebraic curve; that is, as a polynomial f in two variables x and y.

>

algcurves[monodromy](y^3x, x, y);

 (33) 

This procedure computes the periodmatrix of a Riemann surface represented as a plane algebraic curve; that is, as a polynomial f in two variables x and y.

>

algcurves[periodmatrix](y^3+x^4+x^2, x, y);

 (34) 
>

algcurves[periodmatrix](y^3+x^4+x^2, x, y, 'Riemann');

 (35) 

The procedure Weierstrassform has been updated to accept hyperelliptic curves as well as elliptic curves. An algebraic function field C(x)[y]/(f) for a hyperelliptic curve with genus g is isomorphic to the field C(x0)[y0]/(f0) where f0 is of the form y0^2 + a squarefree polynomial in x0 of degree 2*g+1 or 2*g+2.

>

f := y^8+(x^2x)^4+(x^2x)^2*y^3;

 (36) 
>

algcurves[genus](f, x, y);

 (37) 
>

algcurves[is_hyperelliptic](f, x, y);

 (38) 
>

Wf := algcurves[Weierstrassform](f, x, y, X, Y);

 (39) 
 (40) 

The curve given by h is birational to the curve F. The other entries of Wf give the images of x, y, X, Y under the isomorphism and inverse isomorphism from C(x)[y]/(h) to C(X)[Y]/(F).


More interesting examples are given in the example worksheet.


Twodimensional adaptive graphics have been improved so that areas where a function is undefined are approached more closely. A plot of sqrt(x) from 1 to 1 shows this well.

>

plot(sqrt(x), x=3..3);

>

plot(1/ln(x), x=1..1, 3..0);


A legend can be added to a 2D plot by using the option legend set equal to a string. If a list of plots are being plotted, "Name" can be replaced by a list of strings.

>

plot( sin(x), x=0..10, legend="The Sine Function" );

>

plot( [sin(x), tan(x), sec(x)], x=0..10, legend=["Sine", "Tangent", "Secant"] );


The direction in which the axes labels in a 2 or 3D plot are printed can be modified by using the option labeldirections set equal to a list of two entries, either horizontal or vertical, representing the directions of the text on abscissa (xaxis) and ordinate (yaxis) respectively.

>

plot( sin(x), x=0..10, 'labels=["abscissa", "ordinate"]', 'labeldirections=[horizontal, vertical]' );

>

plot3d( sin(x*y), x=2..2, y=2..2, 'labels=["xaxis", "yaxis", "zaxis"]', 'axes=BOXED', 'labeldirections=[horizontal, horizontal, vertical]' );


The size of symbols displayed in plots can now be modified using the option symbolsize. This must be an integer greater than or equal to 1, representing the point size. The symbol 'point' cannot have its size changed.

>

plot( [sin(x), cos(x)], x=0..10, style=point, symbolsize=[12, 5] );


