Home

Maple Advanced Programming Guide

image

Contents

1. 129 A Generic Group Implementation 138 2 7 Extended Example A Search Engine 159 Introduction to Searching ccs 159 Inverted Term Occurrence Indexing 161 The Vector Space Model 164 Term Weighting 2l 167 Building a Search Engine Package 168 Latent Semantic Analysis rn 172 The Search Engine Package 173 Using the Package a 180 2 8 QonclusiO m rros d S4 ye RU P os a Ro RD SE 184 Input and Output 185 In This Chapter ucc dad ge evo Rep ee 185 3 1 A Tutorial Example 186 3 2 File Types and Modes llle 190 Buffered Files versus Unbuffered Files 190 Text Files versus Binary Files l l 190 Read Mode versus Write Mode 191 The default and terminal Files 191 3 3 File Descriptors versus File Names 192 3 4 File Manipulation Commands ss 193 Opening and Closing Files 4 193 Position Determination and Adjustment 194 Detecting the End ofa File 195 Determining File Status 195 Removing Files llle 196 3 5 Input Commands 2 2 197 Reading Text Lines from a File 197 Reading Arbitrary Bytes from a File 197 Formatted Input vcs apg eec vL dx hee REGE 198 Reading Maple S
2. irue Secondly a type called moduledefinition identifies expressions that are module definitions In the previous example the module definition gt module end was evaluated before being passed to type so the expression that was tested was not the definition but the module to which it evaluates You must use unevaluation quotes to delay the evaluation of a module definition gt type module end moduledefinition irue Other important type tests satisfied by modules are the types atomic and last name eval gt type module end atomic irue The procedure map has no effect on modules they pass through un changed gt map print module export a b c end module export a b c end module Modules also follow last name evaluation rules For more information on last name evaluation rules refer to 1ast name eval 2 1 Syntax and Semantics e 61 module end gt m gt m gt type m last name eval irue Although type module is a surface type it acts also as a structured type Parameters passed as arguments to the unevaluated name module are taken to be the names of exports For example the module gt m module export a b end has the structured module type module a b gt type m module a b irue It also has type type module a gt type m module a irue because any m
3. 426 Portability mpri wnt fon ek Rk RR REUS 427 Preface This manual describes advanced Maple programming concepts includ ing e Variable scope procedures modules and packages e Advanced input and output e Numerical programming e Programming with Maple plots e Connectivity translating Maple code to other programming lan guages calling external libraries from Maple and calling Maple code from external libraries e Internal representation and manipulation Audience This manual provides information for experienced Maple programmers You should be familiar with the following e Maple Online Help Introduction e Example worksheets e How to use Maple interactively e The Introductory Programming Guide 2 e Preface Worksheet Graphical Interface You can access the power of the Maple computation engine through a vari ety of user interfaces the standard worksheet the command line version the classic worksheet not available on Macintosh and custom built Maplet applications The full Maple system is available through all of these interfaces In this manual any references to the graphical Maple interface refer to the standard worksheet interface For more information on the various interface options refer to the versions help page Manual Set There are three other manuals available for Maple users the Maple Get ting Started Guide the Maple User Manual and the Maple Introduc tory Programmin
4. Conclusion 6 unu pues so tee UR NB X08 E SH Rus 2 Programming with Modules 2 1 2 2 2 3 2 4 Modules o2 M esas Ross dodo m GR o bun Examples 4 2254 rs ORO X Ue ES Module Versus Procedure e Accessing Module Exports a Mm This Chapter 25212 See ne seme ca oe re Se tee Syntax and Semantics ln The Module Definition 04 The Module Body llle Module Parameters 22e Named Modules llle Declarations tnie e a qe xy edt ed d Exported Local Variables Module Options 22e Implicit Scoping Rules o Lexical Scoping Rules sn Modules and Types 0 00 2004 Example A Symbolic Differentiator Records sesi fad mn x ko Ses SIM RA Sta ek Beda Packages 2 a e Mg ee des What Isa Package lees Writing Maple Packages by Using Modules The LinkedList Package Code Coverage Profiling Package The Shapes Package llle The use Statement 2 aaa ee Operator Rebinding Contents e v 2 5 Modeling Objects 2e 108 Priority Queuesi dueRisEzgskeg xo exer i Eee e 111 An Object oriented Shapes Package 115 2 6 Interfaces and Implementations 117 Interfaces audite e e RE uw debe etg bs 118 Generic Graph Algorithms 124 Quotient Fields
5. For more information on the readline function refer to chapter 7 of the Introduc tory Programming Guide or readline For more information on the writeto and appendto functions see Redirecting the default Output Stream on page 217 6 3 OpenMaple Using Maple in Compiled Code e 383 If the name parameter is NULL in which case the parameters are not compatible with fopen Maple is signalling that redirection is terminated Subsequent output is sent to the main output stream Again this is user dependent If no redirectCallBack function is provided any attempt to exe cute the Maple writeto function or appendto function produces an error reported using the errorCallBack function or textCallBack function Call Back Call back Function The callBackCallBack function is called when Maple code calls the Maple callback function char M DECL callBackCallBack void data char output e The output parameter contains the text version of the parameters passed to the Maple callback function On return the callBackCallBack function returns either a NULL pointer or a string containing a valid Maple expression e If the Maple callback function returns nothing the callbackCallBack function returns NULL e If a Maple expression is returned it is parsed and the Maple callback function returns the unevaluated expression or the callbackCallBack function returns a parsed Maple expression This function can be u
6. PARAM 1 This represents the Maple symbol args the entire sequence of arguments passed when the procedure was called PARAM 2 412 e Appendix A Internal Representation and Manipulation This represents the Maple symbol procname referring to the currently active procedure At procedure execution time the integer if positive is used as an index into the internal data structure Actvparams which is part of the Maple procedure activation stack and holds pointers to the values which are also Maple structures of course of the actual parameters passed to the procedure Power POWER expr1 expr2 Maple syntax expr1expr2 Length 3 This structure is used to represent a power when the exponent is not an integer rational or floating point value When the exponent is numeric the POWER structure is converted to a length 3 PROD structure Procedure Definition PROC param local option rem stat desc seq seq seq table seq seq Aglobal lexical eop return seq seq type Maple syntax proc paramSeq or proc paramSeq return Type description descSeq local localSeq export exportSeq global globalSeq option optionSeq statSeq end proc Length 10 or 11 the return type is optional The param seq points to an expression sequence describing the formal
7. gt savelib LinkedList Evaluating the savelib call saves the module to the first repository found in the global variable libname or the repository named with the global variable savelibname if it is defined At least one of these must be defined Important Always ensure that the standard Maple library is write protected to avoid saving expressions in it If you accidentally save some thing to the standard Maple library you may need to restore the original from the media on which you obtained the Maple software The package exports are listed as the exports of the module A few local variables are used to implement the package The local procedures map1 and reversel are part of the package implementation that is not available to users of the package They are visible only within the module definition This allows the package author to make improvements to the package without disturbing any code that uses it If the local procedures reversel and mapi were exported thus available to users it would be difficult for the author to replace these routines without breaking existing code that relies upon them The package includes two special local procedures setup and cleanup These are executed respectively when the module is first read from a repository and when the package is either garbage collected or when Maple is about to exit Using the Package The package exports can always be accessed by using the long form of thei
8. void RTableGetDefaults MKernelVector kv RTableSettings s void RTableGetSettings MKernelVector kv RTableSettings s ALGEB rt M INT RTableIndFn MKernelVector kv ALGEB rt M INT num ALGEB RTableIndFnArgs MKernelVector kv ALGEB rt M INT num void RTableSetAttribute MKernelVector kv RTableSettings s char name void RTableSetIndFn MKernelVector kv RTableSettings s ALGEB ind n void RTableSetType MKernelVector kv RTableSettings s M INT id char name RTableData RTableSelect MKernelVector kv ALGEB rt M INT index RTableData RTableAssign MKernelVector kv ALGEB rt M INT index RTableData val void RTableSparseCompact MKernelVector kv ALGEB rt NAG INT RTableSparseIndexRow MKernelVector kv ALGEB rt M INT dim ALGEB RTableSparseIndexSort MKernelVector kv ALGEB rt M INT by dim void RTableSparseSetNumElems MKernelVector kv ALGEB rt M INT num M INT RTableSparseSize MKernelVector kv ALGEB rt ALGEB RTableCopy MKernelVector kv RTableSettings s ALGEB rt ALGEB RTableCopyImPart MKernelVector kv RTableSettings s ALGEB rt ALGEB RTableCopyRealPart MKernelVector kv RTableSettings s ALGEB rt ALGEB RTableZipReIm MKernelVector kv RTableSettings s ALGEB rt re ALGEB rt im Most Rtable access functions use the RtableSettings structure de fined in mpltable h This struct corresponds directly to the options avail able to the rtable cons
9. 0 0 0 0 0 975367972083633571 0 430301217000074065 When zy gt 0 then In xy is complex so the grid contains the value undefined gt convert x y gt log x y gridpoints gt 1 2 2 1 grid 2 3 1 2 2 1 0 693147180559945286 0 693147180559945286 undefined 1 38629436111989056 0 undefined Example 7 This version of the vectorfieldplot procedure accepts a number of options In particular it allows a grid m n option To accomplish this pass the options to convert gridpoints The utility procedure makevectors handles the interface to convert gridpoints gt makevectors proc F ri r2 VVVVVVVVVVVVVV local vi v2 Generate the numerical grid of components of the vectors vi convert F 1 gridpoints r1 r2 args 4 nargs v2 convert F 2 gridpoints r1 r2 args 4 nargs The domain information is contained in first two operands of vi The function values in the 3rd components of vi and v2 vi 1 vi 2 vil3 v2 3 end proc The new version of vectorfieldplot is 5 6 Vector Field Plots e 293 vectorfieldplot proc F r1 r2 local R1 R2 m n a b vi v2 dx dy v v makevectors F r1 r2 args 4 nargs R1 v 1 R2 v 2 vi v 3 v2 v 4 n nops vi m nops v1 1 a b dx dy domaininfo R1 R2 m n gt gt gt gt gt
10. 0 7 0 75 0 8 The limit of this sum is ln 2 gt Sum 1 k k k 1 infinity value 4 yk SE o k 1 The PLOT3D Data Structure The 3 D plotting data structure has a form similar to the PLOT data structure The following Maple expression generates a 3 D plot of three lines and axes of type frame Axes are generated using AXESSTYLE gt PLOT3D CURVES 3 3 0 0 3 1 gt 3 0 1 3 3 01 gt AXESSTYLE FRAME oooo The following procedure creates the yellow sides of a box gt yellowsides proc x y Zz u gt x y 0 coordinates of a corner gt 4 z height of box gt u side length of box 5 3 Maple Plot Data Structures e 263 gt POLYGONS gt x y 0 xtu y 0 x u y zl x y z gt x y 0 x ytu 0 x ytu z x y z1 gt x u y 0 x u y u 0 xtu y u zl x u y zll gt x u y u 0 x yt u 0 x y u zl xtu ytu z gt COLOR RGB 1 1 0 gt end proc The redtop procedure generates a red lid for the box gt redtop proc x y z u gt x y z coordinates of a corner u side length of square POLYGONS x y z l xtu y z x u y u zl x y u zll COLOR RGB 1 0 00 end proc To display the sides and the top place them in a PLOT3D structure gt PLOT3D yellowsides 1 2 3 0
11. 5 3 Maple Plot Data Structures e 259 gt p Lage Ob gos si zs sin GI es 0 Define the procedure h to give the color of each trapezoid gt h i gt abs cos i 10 gt PLOT seq POLYGONS evalf p i COLOR HUE evalf h i gt i 1 63 1 A Sum Plot You can create procedures that directly build PLOT data structures For example given an unevaluated sum you can compute the partial sums and place the values in a CURVES structure gt s Sun 1 k 2 k 1 10 10 1 D k 1 Use the typematch command to separate the unevaluated sum into its components gt typematch s Sum term algebraic gt n name a integer b integer true The typematch command assigns the parts of the sum to the given names gt term n a b 260 e Chapter 5 Programming with Maple Graphics 1 za k 1 10 Now calculate the partial sums gt sum term n a a 2 49 36 The following defines a procedure psum that calculates a floating point value of the mth partial sum gt psum evalf unapply Sum term n a a m m 1 m psum evalf y 5 k 1 Now create the necessary list of points gt points seq i psum i it 1 psum i i 1 b a 1 points 1 1 250000000 2 1 250000000 2 1 361111111 3 1 361111111 1 423611111 4 1 423611111 1 463611111 5 1 463611111 1 191388889 6 1 491388889 1 511797052 7 1 511797
12. VVVVVVVVVVVV 150 e Chapter 2 Programming with Modules gt Dimino P S gens gt end if else gt procname args gt end if gt end proc gt G Symmetric 4 G module export id 5 mul inv eq member gens order elements option record end module gt SubGroupElements Centralizer G 1 3 2 4 2 5 1 2 3 4 4 3 2 1 1 3 2 4 4 2 3 1 With SubGroupElements implemented it is a good idea to extend GroupElements to accept subgroups also thus providing a common in terface gt GroupElements proc G description enumerate the elements of a group or subgroup if type G SubGroup then SubGroupElements G elif type G Group then if type G elements set then G elements elif type G elements procedure then G elements else G elements Dimino G end if else gt procname args end if end proc VVVVVVVVVVVVVV VV Computing the Order of a Group As you can enumerate all of a group s elements it is always possible to determine its order Note that this is rarely the best way to do this however In many cases it is possible to provide much better ways to compute the order of a group For instance the symmetric group of degree n has order equal to n so its order export could be redefined to compute this number instead 2 6 Interfaces and Implementations e 151 A generic interface to computing
13. 3 14 a end if is first analyzed by the statement evaluator which calls the Boolean evaluator to resolve the if condition Once completed for example A 1 Internal Organization e 397 with a true result the statement evaluator is invoked again to do the assignment for which the name forming evaluator is invoked with the left side of the assignment and the expression evaluator with the right side Since the right side involves floating point values the expression evaluator calls the arbitrary precision floating point evaluator Normally the user does not specifically invoke any of the evaluators but in some circumstances when a non default type of evaluation is needed the user can directly call evalb the Boolean evaluator evaln the name forming evaluator evalf the arbitrary precision floating point evaluator or evalhf the hardware floating point eval uator 2 Algebraic Functions These are commonly called basic functions Some examples are taking derivatives diff dividing polynomi als divide finding coefficients of polynomials coeff comput ing series series mapping a function map expanding expressions expand and finding indeterminates indets 3 Algebraic Service Functions These functions are algebraic in nature but serve as subordinates of the functions in the previous group In most cases these functions cannot be explicitly called by the user Examples of such functions are the internal ari
14. applying the associative law 42 e Chapter 1 Procedures Variables and Extending Maple w amp x amp y amp z Information For details on how to extend these commands refer to expand series and evalf For information on extending the evalf command see also 4 4 Extending the evalf Command 1 6 Conclusion Procedures which return procedures and local variables are fundamental to advanced programming Interactive input and extending Maple are also important topics in advanced programming 2 Programming with Modules Procedures allow you to associate a sequence of commands with a single command Similarly modules allow you to associate related procedures and data Modules This chapter describes Maple modules Modules are a type of Maple ex pression like numbers equations and procedures that enable you to write generic algorithms create packages or use Pascal style records in programs The use of modules satifies four important software engineering concepts e Encapsulation e Packages e Object Modeling e Generic Programming Encapsulation guarantees that an abstraction is used only according to its specified interface You can write significant software systems that are transportable and reusable and that offer clean well defined user inter faces This makes code easier to maintain and understand important properties for large software systems Packages are a vehicle for bundling Maple procedures rel
15. description a package for manipulating interfaces global type interface export define define an interface extend extend an interface extends test for an extension equivalent test equivalence savelib save an interface VVVVVVV 120 VVVVVVVVVVVVVVVVVVVVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Chapter 2 Programming with Modules satisfies test whether a module satisfies an interface local gassign assign to a global variable totype convert from interface name to type toset convert from interface name to a set setup install type interface globally option package load setup Define a global type for interfaces This assignment takes care of installing the type in the Maple session in which this module definition is evaluated Calling setup ensures that this also happens when the instantiated module is read from a repository type interface specfunc symbol module Ensure that type interface is defined This thunk is called when the instantiated Interface module is read from a Maple repository setup proc global type interface type interface specfunc symbol module NULL quiet return end proc Assign to the global instance of a name gassign proc nom symbol val option inline eval subs _X nom proc global X X val end Q end
16. gt 10 cos 3 t gt picts seq plots tubeplot curve gt t 0 2 xPi i n radius 3 gt i 1 n gt plots display picts insequence true style patch gt end proc You can tie the knot in for example six stages gt TieKnot 6 The static version is gt display TieKnot 6 Demonstrating Physical Objects in Motion You can combine the graphical objects from the plottools package with the display in sequence option to animate physical objects in motion Example 4 The springPlot procedure creates a spring from a 3 D plot of a helix The springPlot procedure also creates a box and a copy of this box It moves one of the boxes to various locations depending on a value of u For every u locate these boxes above and below the spring The springPlot procedure then makes a sphere and translates it to locations above the top box with the height varying with a parameter It produces the entire animation by organizing a sequence of positions and showing them in sequence by using display springPlot proc n local u curve springs box tops bottoms helix ball balls curve u v gt spacecurve VVVV 5 8 Animation e 307 cos t sin t 8 sin u vx Pi t 200 t 0 20 Pi color black numpoints 200 thickness 3 springs display seq curve u n u 1 n insequence true box cuboid 1 1 0 1 1 1 color red ball sphere 0 0 2 grid 15 15 color blue top
17. gt TempGenerator gentemp T1 46 e Chapter 2 Programming with Modules using the member selection operator module definition returns a data structure a module that contains all of its exported local variables Accessing Module Exports The use statement allows you to access module exports gt use TempGenerator in gt gentempO gt gentempO gt gentempO gt end use T2 T3 T4 Within the body of a use statement the exported local variables of the module that appears after the use keyword can be accessed directly without using the member selection operator In This Chapter This chapter provides many example modules Some examples are very simple designed to illustrate a specific point Others are more substantial Many of the nontrivial examples are available as Maple source code in the samples directory of the Maple installation You can load them into the private Maple library and experiment with them You can modify extend and improve these code samples and use them in custom programs The following topics are covered in this chapter e Syntax and Semantics e Using Modules as Records or Structures e Using Modules To Write Maple Packages e The use Statement e Modeling Objects e Interfaces and Implementations 2 1 Syntax and Semantics e 47 2 1 Syntax and Semantics The syntax of module definitions is very similar to that of procedures given in chapter 6 of the ntroductory Progr
18. shift h 18 e Chapter 1 Procedures Variables and Extending Maple hh x h a 1 gt hh x y Error in h h uses a 2nd argument y which is missing Multivariate Functions To modify shift to work with multivariate functions rewrite it to accept the additional parameters In a procedure args is the sequence of actual parameters and args 2 1 is the sequence of actual parameters except the first one For more information on the selection operation 1 refer to chapter 4 of the Introductory Programming Guide It follows that the procedure x gt f x 1 args 2 1 passes all its arguments except the first directly to f gt shift f procedure gt x gt f x 1 args 2 1 gt hh shift h hh x gt h x 1 args 1 gt hh x y 1 1 y The function hh depends on h if you change h you implicitly change hh gt h x y z gt y z 2 x gt hh x y z 1 1 3 Local Variables and Invoking Procedures e 19 1 3 Local Variables and Invoking Procedures Local variables are local to a procedure and to an invocation of that procedure Calling a procedure creates and uses new local variables each time If you invoke the same procedure twice the local variables it uses the second time are distinct from those it used the first time Local variables do not necessarily disappear when the procedure exits You can write procedures which return a local variable either explicitly or imp
19. stat2 418 e Appendix A Internal Representation and Manipulation Maple syntax stati stat2 Length 3 or more This structure represents a sequence of two or more statements and can be used wherever a single statement for example ASSIGN IF FOR can appear statement sequence containing only a single statement is replaced by that statement A statement sequence containing no state ments is replaced by the empty expression sequence NULL Nested STATSEQ structures are flattened All of the above transformations are made by the simplifier Stop Maple STOP Maple syntax quit done or stop Length 1 String STRING reserved attrib expr characters characters Maple syntax This is a string Length 4 or more A Maple string is structurally similar to a NAME except that it has no assigned value field The attrib expr field points to an expression sequence of attributes of the string If there are no attributes this field points to the empty expression sequence NULL The remaining fields contain the characters making up the string stored 4 or 8 per machine word for 32 bit and 64 bit architectures respectively The last character is followed by a zero byte Any unused bytes in the last machine word are also zero The maximum length of a string is 268 435 447 characters on 32 bit architectures and 34 359 738 351 characters on 64 bit architectures
20. 0 8 1 Adding Color Information to Plots You can add color information to an existing plot data structure Example 3 The procedure addCurvecolor colors each curve in a CURVES function via the scaled y coordinates gt addCurvecolor proc curve VVVVVVVVVVVVVVVV VV local i j N n M m curves curveopts p q Get existing point information curves select type op curve list list numeric Get all options but color options curveopts remove type op curve list list numeric specfunc anything COLOR specfunc anything COLOUR Determine the scaling M and m are the max and min of the y coords nops curves map nops curves seq max seq curves j i 2 i 1 N j 5 j 1 n seqC min seq curves j i 2 B B li VVVVVVV VV 5 9 Programming with Color e 313 1 8 j 2 j 1 n 1 Build new curves adding HUE color seq CURVES seq curves jl il curves j i 1 i 1 N j1 1 COLOUR HUE seq curves j i 2 dan MEM m jl i 1 ak E 1 op curveopts j n end proc For example gt c gt CURVESC 0 0 1 1 2 2 3 3 2 0 2 1 3 11 1 gt c CURVES O 0 1 1 2 2 3 3 2 0 2 1 3 1 gt addCurvecolor c CURVES 0 0 1 1 1 1 2 2 2 2 3 3 COLOUR HUE 0 gt 2 CURVES 2 0 2 1 2 1 3 1 COLOUR HUE 0
21. An optional symbol may appear after the module keyword in a mod ule definition Modules created with this variant on the syntax are called 2 1 Syntax and Semantics e 49 named modules Semantically named modules are nearly identical to normal modules but the exported members of named modules are printed differently allowing the module from which it was exported to be identi fied visually gt NormalModule module export e end NormalModule module export e end module gt NormalModule e Here the symbol the name of the module after the module keyword is NamedModule gt module NamedModule export e end module module VamedModule export e end module gt NamedModule e NamedModule e When the definition of a named module is evaluated the name which appears immediately after the module keyword is assigned the module as its value and the name is protected Therefore a named module can ordinarily be created only once For example an attempt to execute the same named module definition yields an error gt module NamedModule export e end module Error in NamedModule attempting to assign to NamedModule which is protected Executing the normal module definition again creates a new in stance of the module but does not result in an error It simply reassigns the variable NormalModule to the new module instance gt NormalModule module export e end NormalModule mo
22. Example 3 The ribbonplot procedure uses the plots display pro cedure to display the plots The ribbonplot procedure explicitly calls the plots display procedure using its full name so that ribbonplot works when the short forms of the procedure names in the plots package are not loaded The examples in this section use the hasoption procedure to process options The hasoption command determines whether a certain option is present In the ribbonplot procedure hasoption returns false if numpoints is not among the options listed in opts If opts contains a numpoints option then hasoption assigns the value of the numpoints option to n and returns the remaining options in the fourth argument in this case modifying the value of the list opts gt ribbonplot proc Flist ri name range local i m p y n opts opts largs 3 nargs if not hasoption opts numpoints n opts then n 25 default numpoints end if m nops Flist op opts is any additional options p seq plot3d Flist i r1 y i 1 i grid n 2 op opts i 1 m plots display p gt end proc The ribbonplot procedure uses the number of grid points specified VVVVVVVVVV VV gt ribbonplot cos x cos 2 x sin x sin 2 x gt x Pi Pi numpoints 16 The input to ribbonplot must be a list of expressions You can extend ribbonplot so that it also accepts a list of procedures One difficulty with this ext
23. It is also sometimes used as temporary storage space during various kernel operations Break Statement BREAK Maple syntax break Length 1 400 e Appendix A Internal Representation and Manipulation Name Concatenation CATENATE name expr Maple syntax name expr Length 3 e If the name entry is one of NAME CATENATE LOCAL or PARAM and if the expr entry evaluates to an integer NAME or STRING then the result is a NAME If the name entry is a STRING or CATENATE that resolves to a STRING and if the ezpr entry evaluates to an integer NAME or STRING then the result is a STRING e If expr is a RANGE then the result is to generate an EXPSEQ of NAMEs or STRINGs Complex Value COMPLEX re im COMPLEX im Maple syntax Complex re im or re im I Length 2 or 3 The re and im fields must point to INTPOS INTNEG RATIONAL or FLOAT structures one of the NAMEs infinity or undefined or a SUM structure representing infinity In the length 3 case if either re or im is a FLOAT the other must be a FLOAT as well Communications Control Structure CONTROL integer Maple syntax none Length 2 This is an internal structure used in kernel to user interface com munication Such a structure never reaches the user level or even the mathematical parts of the kernel A 2 Internal Representations of Data Types e 401 T
24. This defines a Maple procedure h that performs the indicated mapping and returns unevaluated for any other arguments gt eval h proc option remember procname args end proc Use A B and h to construct the homomorphism object gt hom Homomorphism A B h hom module export domain codomain genmap option record end module gt type hom Homomorphism irue Use the machinery developed earlier in this example to compute the order of the image of this homomorphism gt GroupOrder HomImage hom 2 Thus the homomorphism is surjective as expected You can com pute the elements explicitly gt GroupElements B 01 10 eo o1 gt GroupElements HomImage hom 2 Extended Example A Search Engine e 159 10 01 dos nop Exercises 1 An automorphism a of a group G is called inner if there is an element a in G for which a g a ga for all g in G Write a constructor for inner automorphisms of groups Summary With generic programming you need only implement compu tation in quotient fields or groups once in the constructors and generic procedures The functor QuotientField and the various generic group constructors and procedures are parameterized by the computational do mains upon which their computed values depend Rings fields groups and subgroups are collections of computational capabilities which you use to construct new instances with derived com
25. VVVVVVVVVVVVVVVVVVVVvVvVVvVVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvw 2 7 Extended Example A Search Engine e 169 option package export Filters subpackage of filters Document document constructor DocumentID accessor procedure FilterDocument accessor procedure FetchDocument accessor procedure Corpus corpus constructor NumberOfDocuments returns number of documents in corpus BuildIndex index a corpus GetDocumentIdByIndex retrieve a document ID Search perform a search local documentTermVector construct document term vector queryTermVector construct query term vector Exports Document constructor Document proc id fetch filter Record id id fetch fetch filter filter end proc Accessor routines for documents DocumentID doc gt doc id FetchDocument doc gt doc fetch doc id FilterDocument doc gt doc filter FetchDocument doc Corpus constructor Called with either a sequence of documents or a list of document IDs a fetcher a document filter routine and an optional query filter routine Corpus proc listOfIds list fetch filter _qfilter local docs qfilter Process arguments if nargs O then error expecting corpus description elif nargs gt 3 then Allow the query filter to be different from the document filter qfilter eval _qfilter 2 else If query filter is not specified use the docume
26. bI c J d K 761 AUS ind ad 1 c Ja b Kc d I Fl d Ka b J c Icd i 1 Yi a b 47 447 gt simplify gt hinv amp h a a bI c J d K 1 E a b I b b K bd 061 ya ota Ke leo dl 1 ad K b d J cd I d T 9 FI a 7c d gt simplify Write a procedure amp that computes the inverse of a Hamiltonian It is recommended that you implement the following rules amp amp x x amp x amp y amp y amp x x amp amp x 1 amp x amp x 1 5 Extending Maple e 39 Extending Commands If you introduce custom data structures there are no manipulation rules for them In most cases you write special purpose procedures that manip ulate new data structures However sometimes extending the capabilities of one or more of the Maple built in commands is easier than develop ing new data structures and special purpose procedures You can extend several Maple commands among them expand simplify diff series and evalf Extending the Diff Command You can represent a polynomial anu Q5 1u 1 au ao by using the data structure POLYNOM u a 0 a_i an You can then extend the diff command so that you can differentiate polynomials represented in that way If you write a procedure with a name of the form diff F then diff invokes it on any unevaluated calls to F Specifically if
27. mathematically even if the exact term mathematics does not occur in the document To solve this problem map each term onto its stem or root term To implement these changes in the DocumentTerms procedure use the StringTools package gt DocumentTerms proc text string gt global STOP WORDS gt local words gt use StringTools in gt words map LowerCase Words text gt words remove type words STOP WORDS gt map Stem words gt end use gt end proc By using the LowerCase function case distinctions are removed making the process more efficient Apply the same preprocessing to search terms convert to lowercase remove stop list words and map words onto their stems gt Search proc query list string gt global Index local results term terms gt use StringTools in gt terms map LowerCase query gt terms remove type terms STOP_WORDS gt terms map Stem terms gt end use gt results gt for term in terms do gt if assigned Index term then gt results results union Index term gt end if gt end do gt results gt end proc Because BuildIndex uses DocumentTerms rebuild the index gt Index BuildIndex doc 1 9 gt nops findices Index 83 This has substantially reduced the size of the index gt Search the 164 e Chapter 2 Programming wi
28. ALGEB s void MapleToPointer MKernelVector kv ALGEB s char MapleToString MKernelVector kv ALGEB s The following are the equivalent Fortran routines Note that complex and string conversion are done by reference That is the third argument passed to the function is set to the converted value rather than the func tion returning the value Equivalent functions for MapleToComplexFloatDAG and MapleToPointer are not available SUBROUTINE maple to complex float32 kv s c SUBROUTINE maple to complex float64 kv s c REAL maple to float32 kv s DOUBLEPRECISION maple to float64 kv s 358 e Chapter 6 Advanced Connectivity INTEGER maple to integer8 kv s INTEGER maple to integeri6 kv s INTEGER maple to integer32 kv s INTEGER 8 maple to integer64 kv s INTEGER maple to m bool kv s INTEGER maple to m int kv s INTEGER maple to string kv s string Floating Point numbers may lose precision during the conversion to hardware size data Conversion from a STRING dag to an integer returns the ASCII value of the first character in that string Conversion from a Maple Boolean to an integer returns 1 for true or 0 for false Conversions from a STRING dag to a string should not be modified in place A copy should be made if any modifications are necessary The MapleToPointer conversion returns the pointer value stored in a Maple BINARY dag Conversions To Maple Objects The following f
29. GRID 264 MESH 265 non numeric values 257 287 291 297 numerical approximations 224 options 248 249 POINTS 258 POLYGONS 258 262 269 SCALING 269 STYLE 263 TEXT 258 275 undefined values 287 291 297 with plottools 273 polygon meshes 272 281 cutting faces of 281 stellating 283 POLYGONS COLOR 308 converting from grids or meshes 273 convex 269 287 portablility 427 positive integer 406 POWER internal data structure 412 powers 412 414 precision 238 floating point numbers 235 preface 1 print 207 232 384 printf 211 380 384 printing 206 207 bytes 211 columns 215 formatted 186 187 211 strange expressions 19 strings 210 to files 186 printlevel 380 priority queue 111 proc 44 PROC internal data structure 412 procedures as returned objects 22 call formats 339 defining 412 dispatching 99 execution details 41 nested 5 9 17 parameters within 411 passing information 22 passing input to 27 that return procedures 14 processing options 252 procname 48 PROD internal data structure 414 products 414 programming generic 44 117 124 125 129 numerical 223 with color 308 with graphics 245 with plot structures 266 Quaternions 34 35 40 associativity of 40 inverse of 37 quaternions 75 quick sort algorithm 8 quit 380 395 418 quotient field 129 quotients 414 rand 11 14 random floating point num bers 11 random distributi
30. The loopplot procedure has two shortcomings e It should verify that the input L is a list of points where each point is a list of two constants That is it should verify that L is of type list constant constant 5 2 Programming with Plotting Library Procedures e 251 e It should accept appropriate plotting options and pass them to the plot procedure Example 2 Inside a procedure args is the sequence of arguments passed to the procedure and nargs is the number of arguments Thus args 2 nargs is the sequence of options passed to loopplot The loopplot procedure should pass all but its first argument L directly to plot gt loopplot proc L list constant constant gt plot op L L 1 args 2 nargs gt end proc This version of loopplot gives an informative error message if you try to specify improper arguments It also accepts plotting options gt loopplot 1 2 a b Error invalid input loopplot expects its ist argument L to be of type list constant constant but received 1 2 a bl gt loopplot L1 thickness 10 36 34 32 30 28 26 24 Exercise 1 Improve the loopplot procedure so that it accepts the empty list as input A Ribbon Plot Procedure This section illustrates the creation of a ribbonplot procedure to gener ate a 3 D plot from a list of expressions in two variables or from a list of procedures 252 e Chapter 5 Programming with Maple Graphics
31. UNIONS only tables are permitted and the table must contain exactly one entry when passed corresponding to one of the members of the union If an argument of an incompatible type is passed an error occurs and the external function is not called Likewise if a value is passed that is out of range for the specified type for example integer too large an error occurs When passing floating point values precision in excess of that supported by the external type is discarded provided the magnitude of the value is within the range of the external type Arguments that were declared as REFerences that is passed by reference can be passed either a name a zero or the declared kind of Maple expression e If a name is passed it is evaluated and the value is passed by refer ence to the external function After the external function returns the revised value is converted back to the type specified for the argument and assigned back to the name e If the name passed has no value then either NULL is passed or a pointer to newly allocated space for the structure is passed This be havior is determined by the presence or absence of ALLOC in the REF declaration e If a zero is passed NULL is passed to the external function If any other Maple expression is passed its value is passed by refer ence and the revised value is discarded 6 2 External Calling Using Compiled Code in Maple e 343 Compiler Options To compile the wrappe
32. WRITE 191 FLOAT internal data structure 402 floating point numbers 223 402 n digit machine 224 accuracy of 225 and new constants 238 and new functions 240 bases of 225 digits of 224 225 hardware 227 236 297 hardware or software 229 limitations 235 models of 235 precision 235 representation of zero 236 roundoff errors 236 software 224 235 297 zero 236 flow of control 397 fopen 193 fopen C function 382 383 for loop 403 FOR internal data structure 403 foreign data 403 FOREIGN internal data struc ture 403 format strings 187 189 199 211 fprintf 186 211 free 388 fremove 196 fscanf 189 198 function call 404 FUNCTION internal data struc ture 404 function table 65 functions algebraic 397 defining numeric 240 numeric and symbolic 242 garbage collection 399 403 404 424 425 GARBAGE internal data struc ture 404 generic programming 117 124 125 129 generic programs 44 Getting Started Guide 2 global 51 global options 258 272 global variables 21 interactive session 20 referencing 51 graphical interface versions 2 graphics programming with 245 GRID 255 converting to polygons 273 gridpoints 291 296 group 78 Hamiltonians 34 35 40 associativity of 40 inverse of 37 hardware float 404 hardware floating point numbers 227 235 236 297 and arrays 232 and structured objects 232 base of 228 digits of 228 232 has 397 HA
33. beginning with translate to calls to the help command If you call readline with a filename and that file is not open Maple opens it in READ mode as a TEXT file If readline returns 0 indicating the end of the file when called with a filename it automatically closes the file Example The following example defines a Maple procedure which reads a text file and displays it on the default output stream gt ShowFile proc fileName string gt local line gt do gt line readline fileName gt if line O then break end if gt printf AsNn line gt end do gt end proc Reading Arbitrary Bytes from a File The readbytes command reads one or more individual characters or bytes from a file returning a string or a list of integers If there are no characters remaining in the file when you call readbytes the command returns 0 indicating that you have reached the end of the file 198 e Chapter 3 Input and Output Use the following syntax to call the readbytes command readbytes fileIdentifier length TEXT The fileIdentifier is the name or descriptor of the file to read The length which you may omit specifies how many bytes Maple needs to read If you omit length Maple reads one byte The optional parameter TEXT indicates that the result is to be returned as a string rather than a list of integers You can specify the length as infinity in which case Maple reads the remainder of
34. c nil nil op 1 c 5 tail c Pair Vv af c nil nil op 2 c nullp pair gt evalb pair nil list proc local a L L nil for a in args do L pair a L end do end proc length proc lst if nullp lst then VVVVVVVVVVVVVVVVVVVVVVVVVVVV VV VV VV VV VV VV VV VV VV VV VV VV VV 2 3 Packages e 83 0 else 1 length tail lst end if end proc member proc item lst if nullp lst then false elif item head lst then true else procname item tail lst end if end proc map proc p 1st if nullp lst then nil else pair p head 1st procname p tail 1st end if end proc append proc lst1 lst2 if nullp 1st then lst2 else pair head 1st procname tail lst 1st2 end if end proc reversel proc sofar todo if nullp todo then sofar else procname pair head todo sofar tail todo end if end proc reverse lst gt reverse1 nil lst setupO VVVVVVVVVVVVVVVVVVvVVVvVvvVvvvvvvvvvvvvvvvvvvvvvvvvvw gt end module Normally a package definition like this would be entered into a Maple source file using a text editor or in a worksheet using the Maple graphical user interface In either case the definition would then be followed by a call to the savelib procedure using the name of the module as its sole 84 e Chapter 2 Programming with Modules argument
35. can write a generic module that could be specialized by providing one or more parameters For example here is a module for arithmetic modulo 6 V z6 module gt export add mul gt add a b gt a b mod 6 gt mul a b gt a b mod 6 gt end module gt z6 add 5 4 gt z6 mul 2 3 You can write a generic module for arithmetic modulo any positive integer n and then specialize it for any integer that you need This is possible as a result of the standard lexical scoping rules You must write a constructor procedure for the module that accepts the value of n as an argument Here is a generic version of the z6 example gt MakeZn proc n posint gt module gt export add mul gt add a b gt a b mod n gt mul a b gt a b mod n gt end module gt end proc To generate a module that does arithmetic modulo 7 call the constructor MakeZn with the number 7 as its argument gt z7 MakeZn 7 z7 module export add mul end module gt z7 add 3 4 60 e Chapter 2 Programming with Modules Modules and Types Two Maple types are associated with modules First the name module is a type name Naturally an expression is of type module only if it is a module When used as a type name the name module must be enclosed in name quotes gt type module end module irue gt type LinearAlgebra module
36. contourplot3d and display commands from the plots package and the transform com mand from the plottools package gt dropshadowplot proc F algebraic ri name range VVVVVVVVVVVVVVVVVVV VV r2 name range r3 name range local minz p2 p3 coption opts f g x y set the number of contours default 8 opts args 5 nargs if not hasoption opts contours coption opts then coption 8 end if determine the base of the plot axes from the third argument minz lhs if r3 range r3 rhs r3 minz evalf minz create 2 D and 3 D contour plots for F p3 plots contourplot3d F r1 r2 gt contours coption op opts p2 plots contourplot F r1 r2 gt contours coption op opts 5 5 Programming with the plottools Package e 277 embed contour plot into R 3 via plottools transform g unapply x y minz x y f plottools transform g plots display f p2 p31 end proc VVVVV The filled true option to contourplot and contourplot3d causes these two commands to fill the regions between the level curves with a color that indicates the level gt expr 5xx x 2 y 241 x 5 ES r y 1 gt dropshadowplot expr x 3 3 y 3 3 z 4 3 gt filled true contours 3 axes frame Summary e The first section of the dropshadow procedure determines if there is a contours option in the optional arguments those after
37. count 1 nops L gt end proc gt r rand 100 gt L seg r i 1 20 gt HeapSort L 1 3 8 9 11 12 14 17 18 24 40 42 43 51 54 63 71 72 84 89 Note The fully commented source code for the PriorityQueue con structor is available in the samples advPG PriorityQueue directory of the Maple installation An Object oriented Shapes Package This section demonstrates an object oriented approach to the Shapes package described in section 2 3 The earlier revision of the package used unevaluated function calls as the concrete representation of shapes This section demonstrates how to build a package that offers the same function ality but which represents shapes as objects Each shape uses a module as its concrete representation The package itself does not export the area and circumference features of the traditional style package be cause these features are available as part of each shape object Instead the package is merely a collection of constructors for the various kinds of shapes You could use the object representation at a lower level and present exactly the same interface as the first Shapes package but this section shows how to make the object oriented nature of shape expressions more apparent to the user The point Constructor Points are simple shapes so the corresponding constructor is similarly simple gt point proc x y gt module gt export area circumfer
38. elif type expr then map procname args elif type expr then a b op expr if a var and not has b var then b a b 1 else gt procname args end if elif type expr then a b op 1 expr subsop 1 1 expr procname a var b a procname b var else gt procname args end if gt end proc VVVVVVVVVVVVVVVVVVV VV Trivial cases are handled first The derivative of a constant expression is equal to 0 and the derivative of the variable with respect to which we are differentiating is equal to 1 The additivity of the derivative operator is expressed by mapping the procedure over sums using the command gt map procname args This is commonly used to map a procedure over its first argument passing along all the remaining arguments Only the simple case of powers of the differentiation variable is handled so far provided also that the power is independent of the differentiation variable The product rule for derivatives is expressed by splitting expressions of type product into two pieces e the first factor in the product and e the product of all the remaining factors 2 1 Syntax and Semantics e 63 This is achieved by the double assignment of gt a b op 1 expr subsop 1 1 expr so the input expression expr is expressed as expr a b The stan dard technique of returning unevaluated is used so that computation can pr
39. evaluators 396 event numeric 236 expand 397 398 export 44 52 exported local variables 45 52 exported variables Index e 431 vs local variables 118 exports 52 expressions converting from strings 30 reading from terminal 28 EXPSEQ internal data structure 402 extending commands 39 convert 289 diff 39 evalf 238 simplify 40 type 31 extensibility 66 extension mechanism 70 external calling 329 373 argument passing conventions 337 array data formats 336 custom wrapper 330 349 direct calling 330 331 Maple generated wrapper 330 337 other data formats 336 scalar data formats 335 string data formats 336 structured data formats 335 types 334 fclose 194 feof 195 fflush 217 file descriptors 192 194 filepos 194 files 190 appending to 193 binary 190 buffered 190 217 closing 187 194 creating 187 193 432 e Index current position in 194 default 191 197 deleting 196 descriptors of 192 194 detecting end of 195 flushing 217 length of 195 opening 187 192 193 printing bytes to 211 printing columns to 187 215 printing formatted 186 211 printing strings to 210 RAW 190 READ 191 reading bytes from 197 reading columns from 189 204 reading formatted 189 reading lines from 197 reading remainder of 198 redirecting default 217 removing 196 scanning 189 198 status of 195 STREAM 190 terminal 191 text 190 truncating 193 unbuffered 190
40. expresses the derivative of the function being added 2 1 Syntax and Semantics e 67 With this strategy in mind you can create a module Difflmpl with principal export differentiate At the same time you can also make the basic differentiation rules extensible Here is the complete source code for the differentiator with these im provements gt Difflmpl module VVVVVVWVWVWVWVVVVVVWVWVVVVVVVVVVVVVVVVVVVVVVVVVVVVV0V description a symbolic differentiator local functab ruletab diffPower export differentiate addFunc addRule rule addFunc proc fname symbol impl functab fname impl end proc addRule proc T impl if type T set list then map procname args elif type T And name type then ruletab T impl else error expecting a type name but got 41 T end if end proc rule proc T if type T And name type then if assigned ruletab T then eval ruletab T 1 else error no rule for expressions of type 1 T end if else error expecting a type symbol but got 1 T end if end proc differentiate proc expr var locala b e if not has expr var then 0 elif expr var then elif type expr function and nops expr 1 then e op 0 expr a 7 op expr if assigned functab e then functab e a procname a var else gt procname args end if else b whattype expr 68 e Ch
41. groups Ex tending the constructor to handle any finite number of groups is straight forward but complicates the exposition unnecessarily Direct products are very important in the study of finite groups because all finitely gen erated abelian groups possess an unique factorization as a direct product of cyclic groups In the abelian theory direct products are often referred to as direct sums 156 e Chapter 2 Programming with Modules The direct product of two groups A and B is the group G whose elements are all pairs a b with a A and b B The group product in G is defined by a1 b1 a2 b2 a1 a2 51 02 The inverse of an element a b is the pair a b71 All the operations are defined component wise Represent the elements a b of the direct product by two element lists Here is the constructor DirectProduct gt DirectProduct proc A Group B Group gt description direct product constructor gt local G a b gt if type A Group and type B Group then gt G GroupO gt G id A id B id gt Gin u v gt A C ult v1 gt gt B Cu 2 v 21 1 gt G mul gt foldl G G id args gt G inv v gt A inv v 1 gt B inv vl 2 gt G gens seq seq L a b 1 gt a A gens b B gens gt G eq Cu v gt A eql ul 1 v 1 gt and B eq ul 2 v 21 gt G ord
42. gt member 4 1 2 3 false This procedure can be used for membership tests in modules as well gt member say Hello irue gt member cry Hello false The first argument is a global name whose membership is to be tested and the second argument is a module It returns the value true if the module has an export whose name is the same as the first argument The procedure member also has a three argument form that can be used with lists to determine the first position at which an item occurs gt member b a b c pos irue The name pos is now assigned the value 2 because b occurs at the second position of the list a b c gt pos When used with modules the third argument is assigned the local instance of the name whose membership is being tested provided that the return value is true gt member say Hello which 2 1 Syntax and Semantics e 57 irue gt which say gt eval which proc print loc end proc If the return value from member is false then the name remains unassigned or maintains its previously assigned value gt unassign which gt member cry Hello which false gt eval which which Module Options As with procedures a module definition may contain options The op tions available for modules are different from those for procedures Only the options trace and Copyright are common to procedures
43. integer expected for integer 4 parameter gt myAdd 2780 2770 Error in myAdd integer too large in context The equivalent Fortran wrapper would look like the following Program to add two numbers from Maple INTEGER FUNCTION myAdd kv args INCLUDE maplefortran hf INTEGER kv INTEGER args INTEGER arg INTEGER al a2 r CHARACTER ERRMSG 20 INTEGER ERRMSGLEN ERRMSGLEN 20 IF maple num args kv args NE 2 THEN ERRMSG Incorrect number of arguments CALL maple raise error kv ERRMSG ERRMSGLEN myAdd to maple null kv RETURN ENDIF 6 2 External Calling Using Compiled Code in Maple e 355 arg maple extract arg kv args 1 al maple to integer32 kv arg arg maple extract arg kv args 2 a2 maple to integer32 kv arg r al a2 myAdd to maple integer kv r END Once compiled into a DLL the same syntax can be used in Maple to access the function The only difference is the additional keyword FORTRAN in the define external call gt myAdd define external myAdd MAPLE FORTRAN LIB gt myAdd d11 gt myAdd 2 3 External API An external API is provided for users who want to augment existing wrappers or write their own custom wrappers This section describes the functions available when linking with the Maple API library see Table 6 5 on page 394 and including either maplec h or maplefortran hf Argument Checking The following C functio
44. latter is a pointer variable set to the address zero Since there is no concept of real pointers in the Maple Language the idea of Pointer NULL in this context means the Maple integer zero or an unassigned Maple name The IsMaple Numeric routines use the Maple type numeric definition All other checks use the dag type definition For example type t 1 name returns true in Maple but IsMapleName checks for a NAME dag and re turns FALSE because t 1 is internally represented as a TABLEREF dag Integer query routines with the bit size specified in the name check to ensure the given Maple object s is a Maple integer and also that it could fit into the specified number of bits if converted to a hardware integer Conversions From Maple Objects The following functions return the specified type when given a dag s that can be converted to that type COMPLEXF32 MapleToComplexFloat32 MKernelVector kv ALGEB s COMPLEXF64 MapleToComplexFloat64 MKernelVector kv ALGEB s CXDAG MapleToComplexFloatDAG MKernelVector kv ALGEB s FLOAT32 MapleToFloat32 MKernelVector kv ALGEB s FLOAT64 MapleToFloat64 MKernelVector kv ALGEB s INTEGERS MapleToInteger8 MKernelVector kv ALGEB s INTEGER16 MapleToIntegeri6 MKernelVector kv ALGEB s INTEGER32 MapleToInteger32 MKernelVector kv ALGEB s INTEGER64 MapleToInteger64 MKernelVector kv ALGEB s M_BOOL MapleToM BOOL MKernelVector kv ALGEB s M INT MapleToM INT MKernelVector kv
45. or square root to two floating point numbers the result is the correctly rounded representation of the infinitely precise result unless overflow or underflow occurs Of course Maple may need to compute an extra digit or two behind the scenes to ensure that the answer is correct Even so sometimes a surprising amount of error can accumulate particularly when subtracting two numbers which are of similar mag nitude In the following calculation the accurate sum of x y and z is y 3 141592654 gt x evalf 987654321 x 0 987654321 10 gt y evalf Pi y 3 141592654 z 0 987654321 10 2Xtytz 3 1 238 e Chapter 4 Numerical Programming in Maple This is known as catastrophic cancellation During the subtraction the eight leading digits cancel out leaving only two significant digits in the result One advantage of Maple software floats in contrast to fixed precision floating point numbers systems is that the user can increase the precision to reduce roundoff errors For example increasing Digits to 20 dramat ically improves the result gt Digits 20 Digits 20 2Xxt tyt z 3 141592654 Employ standard numerical analysis techniques to avoid large errors accumulating in calculations Often reordering the operations leads to a more accurate final result For example when computing a sum add the numbers with the smallest magnitudes first 4 4 Extending the eva1f Command The e
46. pC 1 gt showstat p 2 3 Packages e 89 p proc x Calls Seconds Words l PROC 2 0 000 24 1 2 0 000 24 if x lt 0 then 2 1 0 000 ol 2 x else 3 1 0 000 ol 1 2 x end if end proc The display shows that each statement in the body of p has been reached To display the profiling information use the debugopts command with the traceproctable procedure_name equation argument gt debugopts traceproctable p E 2 2 RHN bw O S SO oo A The package illustrated in this section helps extend this functionality to modules option and acts as an interface to the debugopts with the traceproc The coverage package has two exports profile and covered Two private procedures rprofile and traced are used as subroutines They are stored in local variables of the underlying module of the package The Package Source Here is the source code for the package gt coverage module gt description a package of utilities for gt code coverage profiling gt option package gt export profile covered gt local rprofile traced userprocs gt gt Instrument a procedure or module gt for coverage profiling Return the gt number of procedures instrumented gt profile proc gt local arg gt add rprofile arg arg args gt end proc 90 e Chapter 2 Programming with Modules rprofile proc s name local e if type s procedure
47. plane The examples illustrate the tools available for plot objects on grids in 2 D and 3 D space The goal is to create a procedure that plots a vector field and has the following syntax vectorfieldplot F r1 r2 options e The first argument F is a list of size two containing the expressions that specify the horizontal and vertical components of the vector field e The arguments r1 and r2 describe the domain grid of the vectors e The three arguments F r1 and r2 are similar in form to the arguments required for the plot3d command e The optional information includes any relevant plotting option that plot and plot3d recognize Thus options such as grid m n style patch and color colorfunction are valid Drawing a Vector The first step is to draw a vector Let x y represent the starting point of the arrow and a b represent the components of the vector Specify the shape of an arrow with three independent parameters t1 t2 and 13 where 1 denotes the thickness of the arrow t2 the thickness of the arrow head and 3 the ratio of the length of the arrow head to the length of the arrow Example 1 The following myarrow procedure constructs seven vertices of an arrow It then builds the arrow by constructing two polygons a triangle spanned by vs ve and v7 for the head of the arrow and a rectangle spanned by vi vo v3 and v4 for the tail It then removes boundary lines by setting the style option ins
48. r2 m n gt lhs r1 lhs r2 gt evalf rhs r1 1hs r1 m 1 gt evalf rhs r2 lhs r2 n 1 gt end proc The following example uses multiple assignments to assign the four values returned to separate variables gt a b dx dy domaininfo 0 12 20 100 7 9 a b dz dy 0 20 2 10 Now a b dx and dy have the following values 2 8 b dx dy 5 6 Vector Field Plots e 289 0 20 2 10 Example 3 To convert to a grid of numerical points use the extensibility of the Maple convert command The procedure convert grid takes a procedure f as input and applies it to the points in the grid which r1 r2 m and n specify gt convert grid proc f ri r2 m n gt local a b i j dx dy gt obtain information about domain gt a b dx dy domaininfo r1 r2 m n gt output grid of function values gt seq seqlevalf f a i dx b j dy gt i 0 m 1 j 0 n 1 gt end proc Now apply the undefined name f to a grid as follows gt convert f grid 1 2 4 6 3 2 1 4 1 500000000 4 2 000000000 4 1 6 1 500000000 6 2 000000000 6 Example 4 The final utility procedure determines the scaling that en sures that the arrows do not overlap Then generateplot calls the myarrow procedure to draw the vectors Note generateplot centers each arrow over its grid point gt generateplot proc v
49. s len to maple null kv to maple string kv s s len ToMapleBoolean is three valued When b is zero it returns the Maple false dag If n is 1 the Maple FAIL dag is returned If n is non zero and not 1 the Maple true dag is returned ToMapleChar returns a single character Maple string dag ToMapleComplex converts the pair of doubles re and im to the Maple expression re I im and returns this dag ToMapleComplexFloat converts a pair of FLOAT dags to the Maple expression re I im and returns this dag ToMapleExpressionSequence create and returns a Maple expression sequence and fills it with the N algebraics arg1 arg2 argN ToMapleName returns a Maple NAME dag with the name n If is global is set to TRUE the name is global in the Maple name space Otherwise if is global is FALSE the name is a unique exported local ToMapleNULL returns the Maple NULL dag an empty EXPSEQ ToMapleNULLPointer returns the Maple zero dag This is the wrapper representation of a NULL pointer passed to a procedure Do not confuse this with the value returned by ToMapleNULL ToMapleString copies the character string s to a Maple STRING dag and returns it When using the Fortran API the length of the given string must also be passed Rectangular Table Vector Matrix Array Manipulation Rtables are the container class of Vector Matrix and Array data structures in Maple The basic access functions are as follows 3For info
50. sin then cos a procname a var elif b cos then sin a procname a var elif b exp then exp a procname a var elif b 1n then 1 2 procname a var VVVVVVVVVVVVVVVVVVVVV VV else gt procname args end if else gt procname args end if end proc This uses the chain rule to compute the derivatives of calls to known functions gt differentiate sin x cos exp x 2 2 x 5 cos x sin e e gt differentiate sin x 2 cos x2 x 2cos z x 2sin a x gt differentiate sin x 2 cos x 3 x 2sin x cos x 3 cos x sin x At the same time this has also improved the handling of expressions independent of the variable of differentiation gt differentiate axx 2 b x c x 2ax b 2 1 Syntax and Semantics e 65 This is effected by using the expression has expr var instead of the weaker test type expr constant The power rule now handles more than just powers of var gt differentiate sin x 2 x 2sin x cos x However adding new functions to the differentiator is tedious and error prone and the job of handling the chain rule must be repeated for each function recognized by it Introducing a Function Table Many functions that you need to add and the rules used for their differentiation can be stored in a table as follows gt differentiate proc expr var local a b fun
51. the external routine is accessed like any other except an error is raised if the given procedure is not able to use evalhf gt f proc n x y y 1 n sin x end gt y Vector 1 2 datatype float 8 gt p define_external test MAPLE LIB libtest so gt p y f General Evaluation The following procedures evaluate Maple proce dures or statements These routines are not available in the Fortran API ALGEB MapleEval MKernelVector kv ALGEB s ALGEB EvalMapleProc MKernelVector kv ALGEB fn int nargs ALGEB argi ALGEB arg2 ALGEB EvalMapleStatement MKernelVector kv char statement EvalMapleProc is a callback to Maple The first argument fn is a Maple PROC or FUNCTION dag which is evaluated with the arguments argi argN For example consider the following Maple function gt f proc x x 2 end If this function is passed to the external function as args 1 the following code executes the given function at x 3 14 6 2 External Calling Using Compiled Code in Maple e 371 ALGEB ai MapleResult double CResult al ToMapleFloat kv 3 14 MapleResult EvalMapleProc kv args 1 1 a1 CResult MapleToFloat64 kv MapleResult EvalMapleStatement enables you to enter a single parsable Maple statement and evaluate it For example the following call evaluates the integral of z in the range x 0 1 ALGEB MapleResult double CResult MapleResult EvalMapleStatement
52. the values must be numeric and writedata writes them as integers Maple truncates rational and floating point values to integers e If you specify float the values must be numeric and writedata writes them as floating point values Maple converts integer and ra tional values to floating point If you specify string the values must be strings e When writing matrices or lists of lists you can specify the dataType as a list of data types one corresponding to each column in the output The optional defaultProc argument specifies a procedure that writedata calls if a data value does not conform to the dataType you specified for example if writedata encounters a non numeric value when the dataType is float Maple passes the file descriptor corresponding to the fileldentifier along with the non conforming value as an argument to the defaultProc The default defaultProc simply generates the error Bad data found A more useful defaultProc might be the following gt UsefulDefaultProc proc f x fprintf f a x end proc This procedure is generic It can write any value to the file Example The following example computes a 5 by 5 Hilbert matrix and writes its floating point representation to a file For information about how to read and write rtable based Matrices and Vectors refer to ImportMatrix and ImportVector 3 6 Output Commands e 217 gt writedata hilbertFile txt linalg hilbert 5 Examining the fi
53. which are also referred to as members of the module These are simply names that can but need not be assigned values You can establish initial values for the exports by assigning to them in the body of the module definition The word export is short for exported local variable In most respects a module export is a local variable such as those declared via the local declaration The crucial difference is that you can access the exported local variables of a module after it has been created To access an export of a module use the member selection opera tor Its general syntax is 2 1 Syntax and Semantics e 53 modexpr membername Here modexpr must be an expression that evaluates to a module and membername must be the name of an export of the module to which modexpr evaluates Anything else signals an exception You cannot ac cess local variables of an instantiated module by using this syntax Local variables of a procedure are created when the procedure is called or invoked Normally the locals persist only during the execution of the statements that form the body of the procedure Sometimes however local variables persist beyond the procedure activation that instantiated them For example gt gen proc gt local s p gt s 2 gt p Xx gt S X a p gt end proc gt g genO GP g 3 6 The local variable s of gen persists after gen has returned It is cap tured in th
54. 0 1 VVV x y gt sin x y x y gt if x lt y then 1 else x y end if gt plot3d p 3 3 3 3 color q Although usually less convenient you can also specify the color at tributes at the lower level of graphics primitives At the lowest level you can color a graphical object by including a COLOUR function as one of the options inside the object gt PLOT POLYGONS 0 0 1 0 1 1 gt 1 0 1 1 2 1 2 0 gt COLOUR RGB 1 2 1 3 1 4 You can use different colors for each polygon by using PLOT POLYGONS P1 Pn COLOUR RGB pi pn Or 5 9 Programming with Color e 309 PLOT POLYGONS P1 COLOUR RGB p1 iS POLYGONS Pn COLOUR RGB pn For example the following two PLOT structures represent the same picture of a red and a green triangle gt PLOT POLYGONS 0 0 1 1 2 0 gt COLOUR RGB 1 0 0 gt POLYGONS 0 0 1 1 0 1 gt COLOUR RGB 0 1 02 2 gt PLOT POLYGONS 0 0 1 1 2 0 1 gt 0 0 1 1 0 1 gt COLOUR RGB 1 0 0 0 1 02 2 The three RGB values must be numbers between 0 and 1 Generating Color Tables The following procedure generates an m x n color table of RGB values Example 1 The colormap procedure returns a sequence of two elements a POLYGONS structure and a TITLE gt colormap proc m n B 2 local i j points c
55. 1 To apply the new coloring to a plot map the addCurvecolor proce dure over all the CURVES objects of an existing plot structure gt addcolor proc aplot VVVVVV local recolor recolor x gt if op 0 x CURVES then addCurvecolor x else x end if map recolor aplot end proc Try addcolor on a plot of sin x cos x gt p gt plot sin x cos x x 0 2 Pi linestyle 2 thickness 3 gt addcolor p 314 e Chapter 5 Programming with Maple Graphics 1f N 0 5 N 7 0 1 2 3 4 5 6 x 0 5 A If you specify color for two curves in the same display the two colorings are independent gt q plot cos 2 x sin x x 0 2 Pi gt addcolor plots displayl p q A s 0 5 1 a la 5 6 0 0 5 1 1 5 PR 2 RO The addcolor procedure also works on 3 D space curves gt spc plots spacecurve cos t sin t t t 0 8 Pi numpoints 100 thickness 2 color black gt addcolor spc pos S On 5 9 Programming with Color e 315 You can alter the coloring of an existing plot by using coloring func tions Coloring functions must be of the form Cue R 0 1 for Hue coloring or of the form Cra R 0 1 x 0 1 x 0 1 for RGB color ing Example 3 uses the color function Cyue x y y max y Creating A Chess Board Plot Example 4 shows how to make a chess board type grid with red and white squares in a 3 D plot Note
56. 15x y 20x y 2 4 5 6 tibx y 6xy y gt interface prettyprint 0 1 gt print expand x y 6 X 6 6 x b ytib x 4 y 24 20 x S y 3 15 x 2 y 4 6 x y bry 6 Writing Maple Strings to a File The writeline command writes one or more Maple strings to a file Each string appears on a separate line Call the writeline command as follows writeline fileIdentifier stringSequence The fileldentifier is the name or description of the file to which Maple is to write and stringSequence is the sequence of strings that writeline should write If you omit the stringSequence then writeline writes a blank line to the file 3 6 Output Commands e 211 Writing Bytes to a File The writebytes command writes one or more individual characters or bytes to a file You can specify the bytes either as a string or a list of integers The following syntax calls the writebytes command writebytes fileIdentifier bytes The fileIdentifier is the name or descriptor of the file to which writebytes is writing The bytes argument specifies the bytes to write This can be either a string or a list of integers If you call writebytes with a filename and that file is not open Maple opens it in WRITE mode If you specify the bytes as a string Maple opens the file as a TEXT file if you specify the bytes as a list of integers Maple opens the file as a BINARY file Example The following example defines a Maple procedure which
57. 2 D and 3 D plots respectively e The plots package for generating specialized plots such as vector field plots or contour plots e The plottools package for generating graphical objects for inclusion in plots In addition to those listed above many other Maple packages such as DEtools Student and stats include specialized procedures for plotting in specific contexts These procedures require as arguments information that allows the nu merical plot data values to be computed They also accept options that set attributes such as colour shading and axes style Creating Plotting Procedures The purpose of this chapter is to present some of the Maple plotting pro cedures describe the structure of their output and describe ways in which you can use them to create custom procedures This chapter includes ba sic information about argument conventions default settings and option processing In This Chapter e Basic Plotting Procedures 245 246 e Chapter 5 Programming with Maple Graphics e Programming with Plotting Library Procedures Maple Plot Data Structures e Programming with Plot Data Structures Programming with the plottools Package Vector Field Plots Generating Grids of Points e Animation e Programming with Color 5 1 Basic Plotting Procedures This section illustrates e Typical calling sequences of plotting procedures e Properties that are common to plotting procedures e Using operators or proc
58. 3 in here b is still bound to 3 but a is bound to 3 atb end use binding of a to 2 is restored atb end use VVVVVVVV The use statement is unique in the Maple language because it is fully resolved during automatic simplification It is not possible to evaluate a use statement Recall that Maple uses a modified read eval print loop which actually involves the four stages parsing reading automatic sim plification evaluation and printing To see how this works consider an example in which the use statement appears inside a procedure gt f proc a b gt use x at b y a bin gt x y gt end use gt end proc f proc a b a b a b end proc Note that the body of the procedure f contains no use statement During automatic simplification the use statement that formed the body 2 4 The use Statement e 105 of f was expanded yielding the expression that involves only the param eters a and b Modules and use Statements As a special case a module m can appear in the binding sequence of a use statement The module is regarded as an abbreviation for the sequence of equations a m a b m b where a b are the exports of the module m For example gt m module export a b a 2 b 3 end gt use m in a b end This is useful for programming with packages gt m Matrix 4 4 26 0 0 30 gt 0 41 90 0 gt 0 7 56 0 gt 0 0
59. 4 lt lt P gt O map differentiate args map differentiate args gt differentiate y x sin x 2 cos x3 x differentiate y x x 2 cos z x 3sin z a The Extension Mechanism is Module Aware Do not confuse the ex tension mechanism previously proposed for the differentiator with the extension mechanism used by the built in Maple command diff The diff command uses a traditional string concatenation mechanism for adding knowledge of the derivatives of functions and all its rules are built in so they cannot be extended For instance to add a new func tion F to the Maple built in diff command you can define a procedure diff F that computes the derivative of F By contrast the extension mechanism used in the differentiate example is module aware To add knowledge of the derivative of some top level function F you can issue a command such as gt Difflmpl addFunc F x gt sin x cos x 2 5 x sin x cos x The derivative of F x is sin x cos x Define a module with some special functions one of which is also called F 2 1 Syntax and Semantics e 71 gt SpecFuncs module gt export F etc gt definition of F and others gt end module You can now add this new F to the known functions gt DiffImpl addFunc SpecFuncs F x gt exp 2 x a el gt differentiate F x x sin x c
60. 42 2 If you want evalhf to modify an array that you pass as a parameter to a procedure you must enclose the name of the array in a var construct The var construct is special to evalhf and is necessary only if you want evalhf to modify an array of numbers that is accessible at the session level gt evalhf det var a 0 333333333333333314 Now a is an array of floating point numbers gt eval a 0 666666666666666629 0 750000000000000000 0 444444444444444420 0 The evalhf command always returns a single floating point number but the var construct allows you to calculate a whole array of numbers with one call to evalhf 5 7 Generating Grids of Points illustrates the use of var to calculate a grid of function values for plotting You can also create arrays of hardware floating point values directly with the Array command Proper use of this command can save significant amounts of time especially in plotting routines which rely heavily on 4 3 Floating Point Models in Maple e 235 arrays of floating point values For details and examples refer to Array Matrix and Vector 4 3 Floating Point Models in Maple Maple can represent symbolic constants such as v and y exact integers and rational numbers such as 37 and 3 4 and approximations to nu meric values using its floating point system Numbers in this system are represented by pairs of integers m e The first integer is called the significand or m
61. A 0 0 1 0 8427007929 2 0 995322265 3 0 9999779095 4 0 9999999846 5 1 000000000 gt fclose myfile2 This example starts by initializing A to be the empty list Upon entering the loop Maple reads pairs of numbers from the file The fscanf command reads characters from a specified file and parses them according to the specified format in this case Ad e indicating a decimal integer and a real number It either returns a list of the resulting values or the integer 0 to indicate that it has reached the end of the file The first time you call fscanf with a given file name Maple prepares opens the file for reading If it does not exist Maple generates an error The second line of the loop checks if fscanf returned 0 to indicate the end of the file and breaks the loop if it has Otherwise Maple appends the pair of numbers to the list of pairs in A The syntax A op A xy tells Maple to assign to A a list consisting of the existing elements of A and the new element xy One Command for Opening Reading and Closing a File As when you write to a file you can read from a file more easily by using the readdata command gt A readdata myfile2 integer float A 0 0 1 0 8427007929 2 0 995322265 3 0 9999779095 4 0 9999999846 5 1 000000000 The readdata command performs all the operations of opening the file reading the data parsing the specified forma
62. A rtable options A readonly false elif type A table then 3 3 0 000 20 if type A name then 4 1 0 000 287 map proc args end proc eval A else 5 2 0 000 554 map proc args end proc A end if elif type A procedure then 6 0 0 000 ol subs X X eval A elif type A moduledefinition module then 7 O 0 000 0 error cannot copy a module or module definition else 8 1 0 000 0 A end if end proc 2 3 Packages e 95 The final output shows that every statement has been reached by the test cases This functionality is very useful for interactively developing unit tests for Maple programs Note The source presented here for the coverage package has been simplified for presentation in printed form The full source code is available in the samples AdvPG directory of the Maple installation The Shapes Package Modules permit the construction of packages with hierarchical structure This cannot be done with table based implementations of packages This section presents e How to organize the source code for a potentially large package that has a nontrivial substructure e A description of the Shapes package including details of its design and implementation e Hints related to source code organization The mathematical functionality of this package is trivial It provides the means to compute areas and circumferences of various planar figures which are called shapes No
63. Do not simply assign a coloring function as an argument to plot3d A coloring function in such a case provides colors for the vertices of the grid instead of the color patches Example 4 You must first convert the grid or mesh to polygonal form The remainder of the procedure assigns either a red or white color to a polygon depending on which grid area it represents gt chessplot3d proc f ri r2 local m n i j plotgrid p opts coloring size obtain grid size and generate the plotting data structure if hasoption args 4 nargs grid size then m size 1 n size 2 else defaults m 25 n 25 end if p plot3d f r1 r2 args 4 nargs convert grid data first operand of p into polygon data plotgrid op convert op 1 p POLYGONS make coloring function alternating red and white coloring i j gt if modp i j 2 0 then convert red colorRGB else convert white colorRGB end if 4 op 2 1 p is all the operands of p but the first PLOT3D seq seq POLYGONS plotgrid j i 1 n 1 coloring i j i 1 m 1 j 1 n 1 op 2 1 p 5 VVVVVVVVVVVVVVVVVVVVVVVVVVVVov end proc 316 e Chapter 5 Programming with Maple Graphics The following is a chess board plot of sin x sin y gt chessplot3d sin x sin y x Pi Pi y Pi Pi gt style patch axes frame Note The chessplot3d procedure works when the plot structure from plot3d i
64. Expressions and Statements The parse command converts a string of valid Maple input to the corre sponding Maple expression The expression is simplified but not evalu ated Use the parse command as follows parse string options The string argument is the string to be parsed It must describe a Maple expression or statement see the following definition by using the Maple language syntax You can supply one or more options to the parse command statement This indicates that parse is to accept statements in addition to expressions However since Maple automatically evaluates state ments parse evaluates the string if you specify statement nosemicolon Normally parse supplies a terminating semicolon if the string does not end in a semicolon or a colon If you specify nosemicolon this does not happen and Maple generates an unexpected end of input error if the string is incomplete The readstat command which uses readline and parse makes use of this facility to allow multi line inputs If the string passed to parse contains a syntax error parse generates an error which you can trap with traperror of the following form 220 e Chapter 3 Input and Output incorrect syntax in parse errorDescription errorLocation The errorDescription describes the nature of the error for example unexpected orunexpected end of input The errorLocation gives the approximate character p
65. FILE o FILE c Example The following example shows two calls to define external separated by the restart command The first call does not use the WRAPLIB option and thus generates quad c and compiles the wrapper library quad d11 The second call uses the WRAPLIB option to reuse the existing quad d11 No compilation or wrapper generation is done in the second call 6 2 External Calling Using Compiled Code in Maple e 347 quadruple it define external quadruple it WRAPPER FILE quad x float 4 RETURN float 4 LIB test dl1 quadruple_it 2 2 8 80000019073486328 restart quadruple it define external quadruple it WRAPPER FILE quad x float 4 RETURN float 4 WRAPLIB quad dll LIB test dl1 quadruple_it 2 2 VVVVVVVV 8 80000019073486328 When DLLs are created and compiled at runtime it is important not to duplicate the name of a previously generated DLL without restarting Maple either by exiting Maple or issuing the restart command Maple maintains an open connection with the first DLL opened with any given name Attempting to create a new DLL of the same name without restart ing can lead to unexpected results The Maple command dlclose can be used to avoid restarting but subsequently calling any external function in that closed DLL without reissuing the define external command will likely crash Maple Evaluation Rules External functions follow normal Maple evaluation rules in that the a
66. File For a simple case like the one presented here writing the data to a file by using the writedata command is easier gt writedata myfile2 A integer float The writedata command performs all the operations of opening the file writing the data in the specified format an integer and a floating point number and then closing the file However writedata does not provide the precise formatting control that you may need in some cases For this use fprintf Reading Data From a File In some applications you need to read data from a file For example some data acquisition software supplies data that you need to analyze Reading data from a file is almost as easy as writing to it 188 e Chapter 3 Input and Output A xy fscanf myfile2 d he A op A xyl end do gt gt gt if xy O then break end if gt gt xy 0 0 A 0 0 Ty 1 0 8427007929 A 0 0 1 0 8427007929 Ly 2 0 995322265 A 0 0 1 0 8427007929 2 0 995322265 Ly A 0 0 1 0 8427007929 3 0 9999779095 zy A 0 0 1 0 8427007929 3 0 9999779095 2 0 995322265 4 0 9999999846 2 0 995322265 3 0 9999779095 4 0 9999999846 Ly 5 1 000000000 A 0 0 1 0 8427007929 2 0 995322265 3 0 9999779095 4 0 9999999846 5 1 000000000 3 1 A Tutorial Example e 189
67. Floats Maple software floating point computations are performed in base 10 The precision of a computation is determined by the setting of Digits The maximum exponent minimum exponent and maximum value for 236 e Chapter 4 Numerical Programming in Maple Digits are machine wordsize dependent You can obtain the values for these limits from the Maple floats command This software floating point system is designed as a natural extension of the industry standard for hardware floating point computation known as IEEE 754 Thus there are representations for infinity and undefined what IEEE 754 calls a NaN meaning Not a Number Complex num bers are represented by using the standard x Ix y format One important feature of this system is that the floating point rep resentation of zero 0 retains its arithmetic sign in computations That is Maple distinguishes between 0 and 0 when necessary In most situations this difference is irrelevant but when dealing with functions such as 1n x which have a discontinuity across the negative real axis preserving the sign of the imaginary part of a number on the negative real axis is important For more intricate applications Maple implements extensions of the IEEE 754 notion of a numeric event and provides facilities for moni toring events and their associated status flags To learn more about this system refer to numerics Roundoff Error When you perform floating point arithmeti
68. HHHH N a n Pa 1000000000000 HV Ojjiib 39999999995555 oa E 010b 399552222222 ji9 9339395552222222001 19 99925222222100155 1 1 395222222010905555 Od tt959922220008555566 j s52220100183 5550027 Mitts952e2o200085586e22010 9s5e22019808555e2200 8 522o720095e5627 0 155 52e20 1855e22700 522 19522018 585e220 5e2f s252f 9562400 25272195 o a MH SH m oa The vectorfieldplot code shows how to write a procedure that gen erates vector field plots based on alternative descriptions of the input Example 6 You can create the listvectorfieldplot procedure which accepts input consisting of a list of m lists each of which consists of n lists with two elements The pairs of elements specify the components of a vector The domain grid is 1 m in the horizontal direction and 1 n in the vertical direction as with the plots listplot3d command gt listvectorfieldplot proc F local m n vecti vect2 n nops F m nops F 1 Generate the ist and 2nd components of F vecti map u gt map v gt evalf v 1 u F vect2 map u gt map v gt evalf v 2 u F VVVVVVV 5 6 Vector Field Plots e 291 gt Generate the final plot structure gt generateplot vect1 vect2 m n 1 1 m 1 n 1 gt end proc The following is an example of a call to listvectorfieldplot gt 1 1 1 2 2 3 31 gt listvectorfieldplot 1 2 2
69. IMPLIES 405 INEQUAT 405 INTNEG 406 INTPOS 406 length 398 LESSEQ 406 LESSTHAN 407 LEXICAL 407 LIST 407 LOCAL 408 MEMBER 408 MODDEF 408 MODULE 410 NAME 410 NEXT 411 NOT 411 OR 411 PARAM 411 POWER 412 PROC 412 PROD 414 RANGE 414 RATIONAL 414 READ 415 RETURN 415 RTABLE 415 426 SAVE 417 SERIES 417 SET 417 STATSEQ 418 STOP 418 STRING 418 SUM 418 TABLE 419 426 TABLEREF 419 TRY 419 UNEVAL 420 USE 420 XOR 421 ZPPOLY 421 internal functions 396 internal organization 395 internal representations of data types 398 INTNEG internal data structure 406 INTPOS internal data structure 406 Introductory Programming Guide 2 iostatus 195 kernel 396 supported platforms 427 Klein bottle 285 last name eval 60 length 397 LESSEQ internal data structure 406 LESSTHAN internal data struc ture 407 LEXICAL internal data struc ture 407 lexical scoping 6 rules 7 58 lexically scoped variable 407 libmaple dylib file 389 libmaplec a file 389 libmaplec dylib file 389 libmaplec s1 file 389 libmaplec so file 389 libname 385 library 396 Limit 227 limit 227 limits numerical 227 LinearAlgebra 78 LinkedList 80 LIST internal data structure 407 lists 407 appending elements to 250 load 57 local 52 LOCAL internal data structure 408 local options 258 271 286 local variables 26 408 escaped 19 exported 45 52 invoking procedures 19 outside th
70. MapleNumArgs to determine the number of arguments passed Note that the Fortran API uses a slightly different naming convention The equiva lent Fortran call is naple num args The C API names are used for the remainder of this chapter To find equivalent Fortran names refer to the API listing Inspecting Automatically Generated Wrappers The easiest way to start writing custom wrappers is to inspect auto matically generated wrappers Consider the add function that was intro duced at the beginning of this chapter Use the WRAPPER option to tell define external to generate a wrapper Also use the NO COMPILE op tion with define external so as not to compile the generated wrapper The name of the generated file is returned gt myAdd define external add gt WRAPPER NO COMPILE numi integer 4 num integer 4 RETURN integer 4 VVVVVVV myAdd mwrap_add c The file murap_add c resembles the following MWRAP_add Wrapper Generated automatically by Maple Do not edit this file include lt stdio h gt include lt stdlib h gt include lt string h gt include lt mplshlib h gt include lt maplec h gt MKernelVector mapleKernelVec typedef void MaplePointer 352 e Chapter 6 Advanced Connectivity ALGEB args main MWRAP add ALGEB MWRAP add MKernelVector kv INTEGER32 fn INTEGER32 a1 INTEGER32 a2 ALGEB fn_args INTEGER32 a1 INTEG
71. Pi n sin i Pi n i 0 n gt PLOT CURVES evalf points generate the plot of a sequence of n 1 points in the plane The points found inside the PLOT data structure must be numeric If you omit the evalf statement then non numeric objects within the PLOT structure such as sin 7 200 cause an error gt PLOT CURVES points Plotting error non numeric vertex definition gt type sin Pi n numeric false Hence no plot is generated Arguments Inside a PLOT Structure A PLOT structure has the following form Objects Options where Objects is a sequence of one or more plot objects of the form ObjectName ObjectData Options and Options is a sequence of zero or more plot options of the form OptionName Option Value 258 e Chapter 5 Programming with Maple Graphics Note Plot options can appear as arguments of the PLOT structures or as arguments of plot object structures If a local option appears inside a plot object structure it applies to only that object and overrides any value of a global option of the same name Plot Object Structures As shown previously plot objects have the form ObjectName ObjectData Options ObjectName can be CURVES POLYGONS POINTS or TEXT while ObjectData contains the basic nu merical data that defines the geometry of the object In the following description point refers to a list of two numeric values y represent ing z and y coordinates of a
72. Procedures The gridpoints procedure can use hardware floating point arithmetic to calculate two of the numbers but it must use software calculations in four cases where the function is undefined gt gridpoints x y gt 1 sin x y 0 3 0 3 2 3 undefined undefined undefined undefined 1 00251130424672485 7 08616739573718667 300 e Chapter 5 Programming with Maple Graphics In the following example gridpoints can use hardware floating point for all the calculations Therefore this calculation is faster although the difference is not apparent unless you try a much larger example gt gridpoints x y gt sin x y 0 3 0 3 2 3 0 0 0 0 0 997494986604054445 0 141120008059867213 If you ask for more digits than hardware floating point arithmetic can provide then gridpoints uses software floating point operations gt Digits 22 gt gridpoints x y gt sin x y 0 3 0 3 2 3 0 0 0 0 0 9974949866040544309417 0 1411200080598672221007 gt Digits 10 When hardware floating point calculations are possible the data is re turned in an Array with datatype float 8 in which case you can dis play it by enclosing it in a GRID structure in a PLOT3D structure gt PLOT3D GRID 0 3 0 3 gridpoints x y gt sin x y 0 3 gt 0 3 10 10 AXES BOXED Otherwise the data is returned in an Array with the default datatype anything which must be con
73. VVVVVVVVVVVVVVVVVVVVVvVvVVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 2 5 Modeling Objects e 113 init proc heap table nitems 0 end proc Test whether the priority queue is empty empty O gt evalb nitems lt 1 Return the number of items on the priority queue size gt nitems Query the highest priority item top proc if emptyO then error priority queue is empty else heap 1 end if end proc Delete the highest priority item from the priority queue delete proc local val val heap 1 val top move bottom to the top heap 1 heap nitems allow expression to be collected heap nitems evaln heap nitems decrement the bottom of heap counter nitems nitems 1 heapify the array bubbledown 1 return the value val end proc Insert an item into the priority queue insert proc v if nargs gt 1 then op map procname args else nitems 1 nitems heap nitems v bubbleup nitems end if end proc Insert any intially specified items if lnargs gt 1 then insert op largs end if end module end proc 114 e Chapter 2 Programming with Modules The constructor takes a Maple procedure priority as its argument For each expression placed on the queue this procedure returns a numeric measure of its priority Items on the queue are maintained in a prioritized order so that the highest pri
74. Variables In general when writing a procedure you should explicitly declare which variables are global and which are local Declaring the scope of the vari ables makes your procedure easier to read and debug However sometimes declaring the variables is not the best method In the previous nest pro cedure the variable in the map command is defined by the surrounding 1 1 Nested Procedures e 7 procedure What happens if you define this variable v as local to the invocation of the procedure within map gt nest2 proc x list gt local v gt v x 1 gt map proc y local v y v end x gt end proc gt nest2 1st The nest2 procedure produces different results When the variables are declared in the inner procedure the proper values from the enclosing procedure are not used Either a variable is local to procedure and certain procedures that are completely within it or it is global to the entire Maple session Rule Maple determines whether a variable is local or global from the inside procedure to the outside procedure The name of the variable is searched for among 1 Parameters of the inner procedure 2 Local declarations and global declarations of the inner procedure 3 Parameters of the outside procedure 4 Local and global declarations of the outside procedure 5 Implicitly declared local variables of any surrounding procedure s If found that specifies the binding of the variable If
75. a in the list to represent a range of characters For example A Z represents any capital letter If a is to appear as a character instead of representing a range it must appear at the beginning or the end of the list wft The characters between the left brace and the right brace y are options for scanning Arrays Matrices or Vectors that is the various classes of rtable The optional w is an integer specifying the width to scan for each element any width specified before the opening applies to the entire rtable being scanned but is ignored The character f specifies the format code and can be any format code supported by scanf except or The character t which must be one of a m c or r specifies the type of object to be created Array Matrix Vector column or Vector row respectively For more information on rtable formatting options refer to rtable_scanf M The next sequence of characters must correspond to a well formed XML element The result is a Maple function call whose name is constructed from the XML element whose arguments are either function calls for the child elements or the CDATA as strings and whose attributes are equations defining the XML attributes of the object n The total number of characters scanned up to the n is returned as a Maple integer Maple skips non whitespace characters in the format but not within a conversion specification wher
76. also made in the body of the module so that the assignment is also executed in the session in which the module is instantiated This is done for illustrative purposes better scheme simply invokes setup in the body of the module definition 124 e Chapter 2 Programming with Modules Generic Graph Algorithms The following example uses simple graph algorithms to illustrate generic programming Mathematical Description A directed graph can be thought of as an object that consists of a set V of vertices and a set E C V x V of ordered pairs of vertices called edges Graphs can be visualized by diagrams like the following f This diagram represents a graph with vertex set V a 6 c d e f and edge set E a 6 a c b d c f f d b e d e c b c d y Software Models Graphs can be represented in a variety of ways The choice of storage mechanism depends on the expected applications of the graph Three possibilities for representing graphs in software are 1 Store the set V of vertices and the set E of edges explicitly 2 Store the adjacency matrix of the graph 3 Store for each vertex of the graph the set of all its neighbours The adjacency matrix is a square matrix whose rows and columns are indexed by the vertices of the graph the i 7 entry is equal to 1 if there is an edge from i to j and is equal to 0 otherwise You can write software that manipulates a graph independent of representat
77. and modules The following four options have a predefined meaning for mod ules load unload package and record The load and unload Options The module initialization option is load pname where pname is the name of a procedure in the declared exports or locals of the module If this option is present then the pro cedure is called when the module is read from the Maple repository in which it is found The unload pname option specifies the name of a local or exported procedure of the module that is called when the module is destroyed A module is destroyed either when it is no longer accessible and is garbage collected or when Maple exits There is situation that can arise wherein a module is no longer accessible and hence subject to garbage collection before the unload procedure is executed but becomes accessible again during the execution 58 e Chapter 2 Programming with Modules of that procedure In that case the module is not garbage collected When it eventually is garbage collected or Maple exits the unload procedure is not executed again The load and unload procedures are called with no arguments The package Option Modules with the option package represent Maple packages T he exports of a module created with the package option are automatically protected The record Option The record option is used to identify records Records are produced by the Record constructor and are represented using modules Impli
78. and y coordinates of a point Providing these makes it possible for clients of this submodule to use it without knowing any thing about the concrete representation of points This makes it easier to change the representation later if required Within this submodule the names make area and circumference shadow the names with the same external representation at the top level Shapes module The circle Submodule This submodule provides the circle specific subroutines for the Shapes package gt circle module export make center radius diameter area circumference option package make proc cntrPt radius CIRCLE cntrPt radius end proc center circ gt op 1 circ radius circ gt op 2 circ diameter circ gt 2 radius circ circumference circ gt Pi diameter circ area circ gt Pi radius circ 72 end module VVVVVVVVVVVVVV Again a few extra routines are provided in addition to those required at the top level of the Shapes package The exported procedure radius is used to define other routines It can be made local to this submodule 2 4 The use Statement e 103 2 4 The use Statement The use statement is formally unrelated to modules but is expressly designed to complement them and to make programming with modules easier in some circumstances Syntax and Semantics The keyword use introduces the use statement which has the following syntax template
79. can be used in combination with initializers An incompatible initializer value triggers an assertion failure when the assertlevel kernel option is set to 2 For more information A lt refer to kernelopts gt kernelopts assertlevel 2 gt Record a integer 2 3 b 2 Error in assign internal assertion failed in assignment expected integer got 2 3 gt r Record a integer 2 b numeric 74 e Chapter 2 Programming with Modules r module export a integer b numeric option record end module gt r b a string Error assertion failed in assignment expected numeric got a string If the initializer for a record slot is a procedure you can use the reserved name self to refer to the record you are constructing This allows records to be self referential For example you can write a complex number constructor as follows MyComplex r i gt Record re r im i abs O gt sqrt self re 2 self im 2 c MyComplex 2 3 c re c im c abs 2 3 V13 VVVVV Combined with prototype based inheritance described on page 76 this facility makes the Record constructor a powerful tool for object oriented programming Record Types Expressions created with the Record constructor are of type record gt type rec record irue This is a structured type that works the same way as the module type but recognizes
80. corpusTerms list local terms norm terms FilterDocument doc Vector row 1 nops corpusTerms i gt evalf numboccur terms corpusTerms i nops corpusTerms datatype float 8 storage sparse end proc queryTermVector proc queryTerms list corpusTerms list Vector column 1 nops corpusTerms i gt evalf numboccur queryTerms corpusTerms i nops corpusTerms datatype float 8 storage sparse end proc VVVVVVVVVVVVVVVVVVVVVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv The Tools submodule VVVVVVVVVVVVVVVVVVVVVvVvvVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 2 7 Extended Example A Search Engine e 177 Tools module export permSort permSort proc V Vector local partition quickSort n P i partition proc a lb ub local i j k v i j k lb 1 ub 1b v alk while i lt j do i 1 i while i lt j and al i lt v do i 1 i end do js j while al j j end do p U rr Ca ca La m U rr He H pu nan C ca Lau w U rr UN Lac quickSort proc a lb ub local k if lb lt ub then k partition a lb ub procname a lb k 1 procname a k 1 ub end if a end proc n LinearAlgebra Dimensions V P Array 10 n 1 n datatype integer 4 quickSort V 1 n seq PL il i2 1 n end proc end module The Filte
81. dee eus 410 Next Statement cse 411 Logical NOUS whee ue a dE E ge ew 411 Lorak OR i dub iaa uU a 411 Procedure Parameter within an Expression 411 x e Contents A 3 A 4 Index POWER Sex ee Ear es dem oto ee EP EH P 412 Procedure Definition 2s 412 Product Quotient Power a 414 Range atra bur ate Re ERN Re XL IN 414 Rationale suls se ss a demus pu 414 Read Statement e 415 Return Statement 415 Rectangular Table lr 415 Save Statement lle 417 Serle8 ia E DA A daa d 417 ID ob A c t ban 417 Statement Sequence o 417 Stop Maples iii e xc a e ps 418 nsn dC A de ee 418 Sum Difference i ioi edo eus opm dy qe ee S Re be 418 Tables d eee ost cu eos ees eat ec Cl ife od 419 Table Reference m r ae aa Tir A G 419 Try Statement 2l 419 Unevaluated Expression o oo 0000085 420 Use Statement ss 420 Logical XOR 2 gos be edem qr ee tel de ke ok 421 Polynomials with Integer Coefficients modulon 421 The Use of Hashing in Maple 422 Basic Hash Tables lll 422 Dynamic Hash Tables o 423 The Simplification Table 423 The Name Table honec a oi ny suse pi i a ah 424 Remember Tables 2 0 0 00 eee ee ee 425 Maple Language Arrays and Tables 426 Maple Language Rectangular Tables
82. evalf limit operations Generally symbolic evaluation can be suppressed by using unevaluation quotes For example evalf sin Pi 3 evalf 1 2 3 1 2 while evalf C sin Pi 3 computes a floating point approx imation to sin evalf Pi 3 4 2 Hardware Floating Point Numbers Maple offers an alternative to software floating point numbers computer hardware floating point arithmetic Hardware floating point calculations are typically much faster than software floating point calculations How ever hardware floating point arithmetic accuracy depends on your com puter and you cannot increase the precision The evalhf command evaluates an expression using hardware floating point arithmetic gt evalhf 1 3 0 333333333333333314 gt evalhf Pi 3 14159265358979312 2 228 e Chapter 4 Numerical Programming in Maple Generally computers perform hardware floating point arithmetic us ing a certain number of binary digits The special construct evalhf Digits approximates the corresponding number of decimal digits gt d evalhf Digits d 15 Therefore evalhf and evalf return similar results if evalf uses a setting of Digits that is close to evalhf Digits Maple usually dis plays two or three digits more than the value of evalhf Digits specifies When you perform hardware floating point calculations Maple must con vert all the base 10 software floating point numbers to base 2 hardware floating po
83. external COMPILE OPTIONS gt p COMPILER gcc gt p COBJ FLAG o gt define_external mat_mult WRAPPER LIB libcexttest so The gcc requires a space between o and the object name Modifying the COBJ_FLAG allows this to be easily done All other option default values are acceptable 346 e Chapter 6 Advanced Connectivity To view the executed commands set the infolevel for define external to 3 or higher Repeating the previous example you might see the follow ing gt p define external COMPILE OPTIONS gt p COMPILER gcc gt p C0BJ FLAG o gt infolevel define external 3 gt define external mat mult WRAPPER LIB 2 libcexttest so COMPILE COMMAND gcc g c I user local maple extern include o mwrap mat mult o mwrap mat mult c LINK COMMAND ld znodefs G dy Bdynamic L user local maple bin bin SUN SPARC SOLARIS omwrap mat mult so mwrap mat mult o 1c lmaplec Another way to view the compile and link commands is to call the command builder procedures directly Ensure to set or unassign the vari ables that will be assigned otherwise they are blank gt p define external COMPILE OPTIONS gt p COMPILER gcc gt p C0BJ FLAG o gt p COMPILE COMMAND gcc g c I u maple extern include o o c gt unassign p FILE gt p COMPILE COMMAND gcc g c I u maple extern include o
84. filters with 180 e Chapter 2 Programming with Modules custom code Rather than providing a vector of raw scores the Search command in the package now returns a permutation of the document list indicating document rankings This can be used directly with the GetDocumentIdByIndex routine Using the Package The package can be used with a variety of corpora This subsection demon strates two examples The first is the corpus of short text strings used previously in this section gt with SearchEngine gt corpus Corpus doc 1 9 id gt id gt Filters Text gt NumberOfDocuments corpus 9 gt GetDocumentIdByIndex corpus 1 The mathematician s patterns like the painter s or the poet s must be beautiful the ideas like th e colors or the words must fit together in a harm V onious way Beauty is the first test there is no p ermanent place in this world for ugly mathematiV cs gt ranking Search BuildIndex corpus gt mathematical beauty ranking 1 3 5 6 2 7 9 8 4 gt map2 GetDocumentIdByIndex corpus ranking 1 3 2 Extended Example A Search Engine e 181 The mathematician s patterns like the painter V s or the poet s must be beautiful the ideas like t V he colors or the words must fit together in a har monious way Beauty is the first test there is no V permanent place in this world for ugly mathem atics Anyone wh
85. given procedure fn without converting the hardware float parameters to software floats The procedure fn is a valid Maple PROC dag nargs is the number of parameters to pass to fn and args is the list of parameters Note that args starts at 1 args 1 is the first parameter args nargs is the last and args 0 is not used Setting up a callback may require static local variables in the wrapper module so that the callback has access to the kernel vector unless it is passed via a data parameter that the callback receives The following is an example of a wrapper that uses EvalhfMapleProc to evaluate a function that takes an hfarray and some numeric values include maplec h static MKernelVector kv kernel vector static ALGEB fn function handle static double hfparams HF_MAX_PARAMS 1 parameters void callback int N double X double Y 1 hfparams 1 double N hfparams 2 X hfparams 3 is already set 370 e Chapter 6 Advanced Connectivity EvalhfMapleProc kv fn 3 hfparams main wrapper function called from Maple ALGEB test MKernelVector k ALGEB args skip arg checking for the sake of brevity kv k save kernel vector get the hfarray handle hfparams 3 MapleEvalhf DAG args 1 fn DAG args 2 save the function handle do_stuff callback start the routine that calls callback return k gt toMapleNULL In Maple
86. gt CodeGeneration Fortran p1 doubleprecision function p1 O pi sin x y z dble int aint x return end gt CodeGeneration Translate p1 language UppercaseFortran DOUBLEPRECISION FUNCTION P1 P1 DSIN X Y Z DBLECINT DINT X RETURN END 6 2 External Calling Using Compiled Code in Maple The following three calling methods are presented in this section 330 e Chapter 6 Advanced Connectivity e Calling External Functions e Generating Wrappers e Customizing Wrappers Any of the following three methods can be used to call an external function Typically method 1 is sufficient Methods 2 and 3 can be used when more control over type conversions or greater access to Maple data structures is needed Each method builds upon the previous one When considering method 3 read about methods 1 and 2 first Method 1 Calling External Functions In most cases compiled func tions use only standard hardware types like integers floating point num bers strings pointers to strings integers and floating point numbers matrices and vectors In these cases the Maple software automatically translates between its internal representation and the hardware represen tation T his method is efficient and easy to use because it does not require the use of a compiler This method of directly calling the external code allows the use of an external library without modification Method 2 Generating Wrappers Method 1 can
87. i gt if member SmallCorpusTerms i terms 1 0 gt end proc gt docbVector DocumentTermVector docb doc Vector 0 0 0 1 0 0 1 0 0 0 Compute the query term vector for the search term mathematical beauty gt queryVector DocumentTermVector mathematical beauty query Vector 0 0 1 0 0 0 1 0 0 0 The inner product is gt LinearAlgebra DotProduct queryVector doc5Vector 1 166 e Chapter 2 Programming with Modules which indicates that one of the query terms corresponding to math ematical appears in the document To rank the documents in the corpus for their relevance to the query apply this process to each document in the corpus gt use LinearAlgebra in gt DotProduct queryVector DocumentTermVector doc2 gt DotProduct queryVector DocumentTermVector docb gt DotProduct queryVector DocumentTermVector doc gt end use It is more efficient to represent the entire corpus by a term document matrix in which the rows are the term vectors for the documents in the corpus First determine a fixed ordering of the documents in the corpus The dot products can then be computed by forming the product of the term document matrix representing the corpus with the term vector for a query gt TermDocumentMatrix Matrix gt map s gt s map DocumentTermVector gt doc2 doc5 doc7 1 2 2 TermDocumentMatriz 10000
88. in the Maple language via the table and array functions An array is a table for which the com ponent indices must be integers lying within specified bounds Tables and arrays are implemented using the Maple internal hash tables Because of this sparse arrays are equally as efficient as dense arrays A table object consists of the following 1 Index bounds for arrays only 2 A hash table of components 3 An indexing function The components of a table T are accessed using a subscript syntax for example T a b cos x Since a simplified expression is guaranteed to have a unique instance in memory the address of the simplified index is used as the hash key for a component If no component exists for a given index then the indexed expression is returned The semantics of indexing into a table are described by its indexing function Aside from the default general indexing some indexing func tions are provided by the Maple kernel Other indexing functions are loaded from the library or are supplied by the user Maple Language Rectangular Tables Rectangular tables as implemented by the RTABLE structure can use a variety of storage formats One format Maple sparse is identical to that used in tables and arrays namely a hash table There is another sparse format NAG sparse which uses one vector for each dimension to record indices and a third vector to record the values of the entries The majority of RTABLE storage format
89. infix and prefix operators in the Maple language to be rebound This is not the operator overloading found in some programming languages such as C4 4 because the rebinding occurs during automatic simplification in Maple If an operator name appears on the left side of a binding equation for a use statement consequently if it is an exported name of a module that is bound via use then the corresponding operator expressions in the body of the use statement are transformed into function calls For example gt use F in a b end F a b gt m module gt export gt 4 a b gt atb 1 gt tx a b gt a b gt end module gt s Cstt 2 4 The use Statement e 107 s s t gt use mins s t end S s t 1 The operators that can be rebound are summarized in the following table Operator Arity Position Description Arithmetic Operators binary infix addition binary infix multiplication binary infix multiplication binary infix exponentiation unary prefix negation unary prefix inversion reciprocal Logical Operators and binary infix logical and or binary infix logical or not unary prefix logical negation Relational Operators lt binary infix less than lt binary infix less than or equal gt binary infix greater than gt binary infix greater than or equal binary infix equality lt gt binary infix no
90. is called with the given shape as an argument The shape must be passed as an argument so that the shape specific subroutine can extract the instance data from it Otherwise a diagnostic is issued and an exception raised Shape specific Submodules As already noted each shape is imple mented in a shape specific submodule The set of exports of each mod ule varies but each supports the required exports make area and circumference in the top level Shapes module Particular shapes sup port other operations Only two submodules are described here You can see the source for the other submodules in the sample source code 102 e Chapter 2 Programming with Modules The point Submodule The submodule that implements points is fairly simple In fact it makes no reference to any lexically scoped variables in its parent modules Shapes and Shapes Shapes gt point module gt description support routines for points gt export make area circumference xcoord ycoord gt option package gt gt make x y gt POINT x y gt area gt 0 gt circumference gt 0 gt xcoord p gt op 1 p gt ycoord p gt op 2 p gt end module Since the area and circumference of a point are both 0 these proce dures are trivial to implement In addition to the required exports the point submodule also exports two utility routines xcoord and ycoord for retrieving the x
91. list of search terms This solution is however very ex pensive An automatic indexing procedure known as latent semantic analysis LSA helps to discover relations between terms and documents that are latent in the corpus by analyzing the corpus as a whole The process is related to factor analysis and is essentially a statistical technique relying heavily on linear algebra When used to prepare a search index for a corpus LSA is referred to as latent semantic indexing LSI A thorough discussion of LSI is beyond the scope of this manual so only the operational details necessary to construct the SearchEngine package are discussed 2 7 Extended Example A Search Engine e 173 LSI computes a lower rank approximation to the term document ma trix The approximation is computed by using the singular value decom position of the term document matrix The singular value decomposition of a matrix A is a factorization A U S V where U and V are column orthogonal matrices and S is a diagonal ma trix whose diagonal entries are arranged in descending order The diagonal entries of S are called the singular values of A the columns of U are called the left singular vectors of A and the columns of V are called the right singular vectors of A If A is term document matrix then the columns of U can be interpreted as an orthogonal basis for the semantic factors of term term correlations between terms in the corpus represented by A while the
92. make numer a numer b gt denom a denom b gt end use gt end proc gt end module gt Note The source code for QuotientField mpl is available in the samples AdvPG directory of your Maple installation Most of the exported routines are straightforward The fraction con structor make accepts two members of the ring R as arguments and returns the constructed fraction which is represented by an unevaluated function call of the form FRACTION numerator denominator The exported procedure embed is the canonical embedding 7 of the inte gral domain into its quotient field described previously T his makes the constructor functorial The arithmetic operators are simple implementa tions of the familiar rules for fraction arithmetic a c ad bc b d bd 2 6 Interfaces and Implementations e 135 TER o G F After applying these simple formulae the result is normalized by using a call to the local routine normal not the top level routine normal The normal routine does most of the interesting work in the ring generated by this constructor It uses the manifestation of the division algorithm in the ring R via the exported procedures quo and gcd to reduce each frac tion to the lowest terms The fraction constructor make and the method normal represent field elements by the normal form representative of the appropriate equivalence class The make routine prevents division by zer
93. module declarations are the same as those for procedures Description Strings Provide a brief description outlining the purpose and function of any module you write It is valuable to other users who read your code Include an overview after the description keyword just as you would in a procedure definition gt gt gt gt gt V 2 1 Syntax and Semantics e 51 Hello module description my first module export say say proc print HELLO WORLD end proc gt end module When the module is printed its description string is displayed gt eval Hello module export say description my first module end module The export declaration is explained later in this chapter Global Variables Global variables referenced within a module definition should be declared with the global declaration Following the keyword global is a sequence of one or more symbols These symbols are bound to their global instances In certain cases you must declare a name as a global variable to prevent implicit scoping rules from making it local gt Hello module VVVVVVV export say global message say proc message HELLO WORLD end proc end module message message Hello sayO HELLO WORLD message HELLO WORLD 52 e Chapter 2 Programming with Modules Local Variables You can refer to variables that are local to the module definition by using the local de
94. mpltable h INTEGER32 a2 INTEGER32 r if MapleNumArgs kv fn args 2 MapleRaiseError kv Incorrect number of arguments convert from Maple integer to C int al MapleToInteger32 kv ALGEB fn args 1 convert from Maple integer to C int a2 MapleToInteger32 kv ALGEB fn args 21 r al a2 return ToMapleInteger kv long r This program first verifies if the Maple function call passed exactly two arguments It then converts the two arguments to hardware integers and adds them The result is converted to a Maple integer and returned This program can be compiled into a DLL using your favorite C com piler Ensure that you link with the Maple API shared library The DLL can be placed into the Maple bin SYSTEM directory or somewhere else in the PATH When using DLLs outside of bin SYSTEM directory you may need to specify the full path to the DLL in the LIB argument to define external UNIX developers may need to set their load library path Table 6 5 on page 394 lists the Maple API Libraries for C and Fortran After compiling the DLL the function can be used in Maple No type desciptors are needed in the define external call because Maple does 354 e Chapter 6 Advanced Connectivity no conversion on arguments passed to the custom wrapper gt myAdd define external myAdd MAPLE LIB gt myAdd d11 gt myAdd 2 3 gt myAdd 2 2 1 Error in myAdd
95. myfile The first time a given filename appears as an argument to fprintf or any 3 1 A Tutorial Example e 187 of the other output commands described later the command creates the file if it does not already exist and prepares opens it for writing If the file exists the new version overwrites the old one You can override this behavior for example if you want to append to an already existing file by using the fopen command For more information on the fopen command see 3 4 Opening and Closing Files Format String The format string 4d e n specifies that Maple write the data items as follows e First data item as a decimal integer 4d e Second data item in Fortran like scientific notation Ae e A single space separates the first and second data items e A line break Nn follows the second data item to write each pair of numbers on a new line By default as in the example Maple rounds floating point numbers to six significant digits for output You can specify more or fewer digits by using options to the 4e format The section on fprintf describes these options in more detail Closing a File When you are finished writing to a file you must close it Until you close a file the data may not be in the file because output is buffered under most operating systems The fclose command closes a file If you forget to close a file Maple automatically closes it when you exit One Command for Opening Writing and Closing a
96. n i j n nops gridlist m nops gridlist 1 POLYGONS seq seq polygongrid gridlist i j i 1 m 1 j 1 n 1 VVVVVV end proc The following is a mesh of points in 2 D space gt L seq seq i 1 j 1 i 1 3 j 1 01 5 5 Programming with the plottools Package e 273 L 0 0 1 0 2 0 0 1 1 1 2 1 0 2 1 2 2 2 0 3 1 3 2 3 The makePolygongrid procedure creates the POLYGONS structure cor responding to L gt gridi makePolygongrid L grid1 POLYGONS 0 0 1 0 1 1 0 1 1 0 2 0 2 1 1 1 0 1 1 1 1 2 0 2 0 1 2 1 2 2 4 2 0 2 1 2 1 3 0 3 1 2 2 2 2 3 1 3 Put the polygons inside a PLOT structure to display them gt PLOT grid1 2 5 1 5 0 5 To convert GRID or MESH structures to polygons you can also use the convert POLYGONS command For more information refer to convert POLYGONS The convert POLYGONS command calls the procedure convert POLYGONS which in the case of a MESH structure functions the same as the makePolygongrid procedure 5 5 Programming with the plottools Package While the plotting data structure allows direct access to all the function ality that the Maple plotting facilities provide it does not allow you to specify colors such as red or blue in an intuitive way It also does
97. occurred For more information on the errorCallBack func tion see Error Call back Function on page 381 As in stand alone Maple statements ending in a colon do not generate output Out put caused by print or lprint commands by errors or by help requests is always displayed Raising a Maple Exception The MapleRaiseError function can be called from any call back function to cause a Maple error as if the Maple error statement had been called If a Maple try catch is in effect it catches the error and Maple code continues to execute after the try catch call Otherwise computation stops and a Maple error message is generated and sent to errorCallBack function For more infor mation on the errorCallBack function see Error Call back Function on page 381 The MapleRaiseError family of functions is defined as follows void MapleRaiseError MKernelVector kv char msg void MapleRaiseErrori MKernelVector kv char msg ALGEB argl void MapleRaiseError2 MKernelVector kv char msg ALGEB argi ALGEB arg2 e The kv parameter specifies the handle to the Maple kernel e The msg parameter is the text of the error message to produce unless the exception is caught 5For more information on the try catch statement refer to chapter 6 of the Intro ductory Programming Guide or try 378 e Chapter 6 Advanced Connectivity e The arg parameters are one or more arbitrary Maple objects that are substituted into nu
98. option inline seg LL i i 1 nops L2 J end proc Dihedral proc n posint description dihedral group constructor local a b D if n 2 or n 3 then return Symmetric n end if a 2 n 11 b 1 op lreverse 2 n D PermutationGroup n a b D order gt 2xm eval D 1 end proc 122515 VVVVVVVVVVVVVVV VV Exercises 1 Use the fact that the alternating group A of degree n gt 3 is gen erated by the set 123 234 345 n 2 n 1 n of 3 cycles to write a constructor Alternating for this class of groups Dimino s Algorithm Dimino s algorithm is used to compute a complete enumeration of the elements of a finite group given a generating set for the group Suppose that you are given a generating set gi g2 gn for a finite group G The idea behind Dimino s algorithm is to enumerate successively the elements of each of the subgroups Gr 91 92 e 9 of G which form a chain g Gi lt Go X XGy Gn G These elements can be enumerated by forming products of the generators 91 92 9n in all possible ways until all the elements of G have been found Dimino s algorithm does this in a careful way avoiding unnecessary product computations Use the following utility routine to determine the entries assigned to a table It can be used when you are certain no entry is a non NULL ex pression sequence Since it is sufficiently
99. original larger one The partitioning operation has thus made the work of sorting much eas ier You can bring the array one step closer in the sorting process by partitioning each of the two smaller arrays This operation produces four smaller arrays You sort the entire array by repeatedly partitioning the smaller arrays Example The partition procedure uses an array to store the list because you can change the elements of an array directly Thus you can sort the array in place and not waste any space generating extra copies The quicksort procedure is easier to understand if you look at the procedure partition in isolation first This procedure accepts an array of numbers and two integers The two integers are element numbers of the array indicating the portion of the array to partition While you could possibly choose any of the numbers in the array to partition around this procedure chooses the last element of the section of the array for that purpose namely A n The intentional omission of global and local statements shows which variables Maple recognizes as local and which are global by default It is recommended however that you not make this omission in your procedures gt partition proc A array 1 numeric gt m posint n posint zt i m gt j n gt x 7 A jl 2e while i lt j do gt if A i x then 1 1 Nested Procedures e 9 gt A j A i gt j j 1 gt ALG A j gt else g
100. passes and returns e Name of the DLL containing the function The specification of the parameter types are independent of the com piler The same specification can be used regardless of the language used 332 e Chapter 6 Advanced Connectivity to compile the DLL The example uses the C type int In Maple this is specified as integer 4 The 4 in the square brackets denotes the number of bytes used to represent the integer Most C compilers use 4 byte ints but some older compilers may use 2 byte ints The Maple type specifica tion supports both types of compiler integer sizes For a map of the most common type relations see Table 6 2 on page 335 Since numi and num2 are both ints they can be specified as the fol lowing in Maple numi integer 4 num2 integer 4 The return type does not have a name so the keyword RETURN is used RETURN integer 4 Using all of this information the complete function can be defined by calling the Maple function define_external gt myAdd define_external add numi integer 4 num2 integer 4 RETURN integer 4 LIB mylib dl1 VVVVVV E Important Specify the function exactly and ensure that the arguments are in the correct order Failure to do this may result in strange behavior or program crashes when executing Step 3 Step 3 Function Invocation Executing the define external call for myAdd returns a Maple procedure that translates Maple types t
101. per or lower case represent the digits corresponding to the decimal numbers 10 through 15 T he integer is converted to a decimal and then returned as a Maple integer y The next non whitespace characters in the input must consist of an IEEE hex dump format floating point value This value must consist of sixteen hexadecimal characters The value is converted to and re turned as a Maple float e f or g The next non whitespace characters in the input must consist of a signed or unsigned decimal number possibly including a decimal point and possibly followed by E or e an optional sign and a decimal integer indicating a power of ten The number is returned as a Maple floating point value In addition to numeric values the e f and g formats also recognize the special values inf and NaN If an i or N is encountered when scanf is looking for the first digit of a number it assumes that one of these special values has been found and proceeds to look for the subsequent nf or aN If the rest of the special value is not found an exception is raised he hf or hg These are special formats for reading one or two dimensional numeric arrays In general such arrays should be read by using the more sophisticated functionality provided by the format but the he hf and hg formats are provided for backward compatibility with hfarrays and provide some intelligence in automatically dealing with a variety of textual layouts of such
102. plot func xrange color red args 4 nargs plots display q p 1 end proc You can now use fourierPicture to plot for example the first six Fourier approximations of e gt fourierPicture exp x x 0 10 6 The static version is gt display fourierPicture exp x x 0 10 6 5 8 Animation e 305 x x Og 162 0 te2 05 162 Og 102 Y 102 Y 162 The following are the first six Fourier approximations ofx gt signum x 1 Because the signum function is discontinuous the discont true option is required gt fourierPicture 2 signum x 1 x 2 3 6 gt discont true The static version is gt display fourierPicture 2 signum x 1 x 2 3 6 gt discont true E 2 2 AD ath ap 8 98 2 92 W NIU Ua 2 M 2 M 2 ai Z ib Z p a You can also create similar animations with other series approxima tions such as Taylor Pad and Chebyshev Pad with the generalized series structures that Maple uses Two and Three Dimensions Animation sequences exist in both two and three dimensions Example 3 The following procedure ties a trefoil knot by using the tubeplot function in the plots package 306 e Chapter 5 Programming with Maple Graphics gt TieKnot proc n posint gt local i t curve picts gt curve 10 cos t 2 cos 5 t 15 sin 2 t gt 15 cos 2 t 10 sin t 2 sin 5 t
103. protected The following commands construct and display a stellated dodecahe dron gt stellated display stellate dodecahedronO 3 gt scaling constrained gt display array dodecahedron stellated You can use the convert POLYGONS command to convert a GRID or MESH structure to the equivalent set of POLYGONS 5 5 Programming with the plottools Package e 285 Example 7 This example uses a version of the Klein bottle created from POLYGONS structures gt kleinpoints proc VVVVVVVVVVVVVVV VV local bottom middle handle top p q top 2 5 1 5 cos v cos u 2 5 1 5 cos v sin u 2 5 sin v middle 2 5 1 5 cos v cos u 2 5 1 5 cos v sin u 3 v 6 Pi handle 2 2 cos v sin u cos u 3 v 6x Pi bottom 2 2 cos u cos v sin u 3xPi 2 cos u sin v p plot3d bottom middle handle top u 0 2 Pi v Pi 2 Pi grid 9 9 p select x gt op 0 x MESH op p seq convert q POLYGONS g p end proc display kleinpoints style patch scaling constrained orientation 110 71 ELN j f To alter the view of the Klein bottle use polygon manipulation com mands gt display seq cutout k 3 4 k kleinpoints gt scaling constrained 286 e Chapter 5 Programming with Maple Graphics 5 6 Vector Field Plots This section describes how to plot a vector field of 2 D vectors in the
104. qnorm z v 22 A Maple type for quaternions can be introduced as a structured record type 76 e Chapter 2 Programming with Modules gt TypeTools AddType quaternion record re i j k gt type z quaternion irue Object Inheritance The Record constructor supports a simple form of prototype based inheritance An object system based on prototypes does not involve classes instead it uses a simpler more direct form of object based inheritance New objects are created from existing objects called prototypes by cloning that is copying and augmenting the data and behavior of the prototype The Record constructor supports prototype based inheritance by ac cepting an index argument which is the prototype for the new object record gt p Record a 2 b 3 create a prototype p module export a b option record end module gt p a p b 2 3 gt r Record pl c 4 piss module export a b c option record end module gt r a r b r c 2 3 4 In this example the record p is the prototype and the second record r inherits the slots a and b and their values from the prototype p It also augments the slots obtained from p with a new slot c The prototype p is not changed gt rita 9 2 2 Records e 77 gt p a Behavior as well as data can be copied from a prototype To copy be havior use a constructor procedure for both the prototype and
105. reads an entire file and copies it to a new file using writebytes gt CopyFile proc sourceFile string destFile string gt writebytes destFile readbytes sourceFile infinity gt end proc Formatted Output The fprintf and printf commands write objects to a file using a spec ified format Call the fprintf and printf commands as follows fprintf fileldentifier format expressionSequence printf format expressionSequence The fileldentifier is the name or descriptor of the file to which Maple is to write A call to printf is equivalent to a call to fprintf with default as the fileIdentifier If you call fprintf with a filename and that file is not yet open Maples opens it in WRITE mode as a TEXT file The format specifies how Maple is to write the elements of the ex pressionSequence This Maple string consists of a sequence of formatting specifications possibly separated by other characters Each format spec ification has the following syntax where the brackets indicate optional components 212 e Chapter 3 Input and Output 4lflags width precision modifiers code The symbol begins the format specification One or more of the fol lowing flags can optionally follow the symbol Gon A signed numeric value is output with a leading or sign as appropriate The output is left justified instead of right justified blank A signed numeric value is outp
106. records specifically gt r Record a 2 b foo gt type r record a integer b string irue 2 2 Records e 75 Note Inarecord type the slot types are used to test against the values assigned to the slots if any and are not related to type assertions on the slot names if any gt r Record a integer 2 b symbol string foo gt type r record a numeric b string irue Using Records to Represent Quaternions Records are useful for im plementing simple aggregate data structures for which named access to slots is wanted For example four real numbers can be combined to form a quaternion and you can represent this using a record structure as fol lows gt MakeQuaternion proc a b c d gt Record re a i b gt j c k d gt end proc gt z MakeQuaternion 2 3 2 sqrt 5 z module export re j k option record end module In this example z represents the quaternion 2 4 3i 2j 5k where i j and k are the nonreal quaternion basis units The quaternion records can now be manipulated as single quantities The following procedure ac cepts a quaternion record as its sole argument and computes the Euclidean length of the quaternion that the record represents gt qnorm proc q gt use re q re i q i j q j K q k in gt sqrt re re i it j ej k k gt end use gt end proc gt
107. s method 2 The following formulation of the previous process f z SERE RET Play You can implement this algorithm on a computer in a number of ways Example 1 The following procedure takes a function and creates a new procedure which takes an initial guess and for that particular function generates the next guess The new procedure does not work for other functions To find the roots of a new function use MakeIteration to generate a new guess generating procedure The unapply command turns an expression into a procedure gt Makelteration proc expr algebraic x name gt local iteration gt iteration x expr diff expr x gt unapply iteration x gt end proc The procedure returned by the MakeIteration procedure maps the name x to the expression assigned to the iteration Test the procedure on the expression x 2 z gt expr x 2 sqrt x 16 e Chapter 1 Procedures Variables and Extending Maple expr 2 yT gt Newton MakeIteration expr x r 24 1 Jz Newton gt x Newton returns the solution x 4 after a few iterations gt x0 2 0 x0 2 0 gt to 4 do x0 Newton x0 end do LO 4 828427124 LO 4 032533198 x0 4 000065353 x0 4 000000000 Example 2 The MakeIteration procedure requires its first argument to be an al gebraic expression You can also write a version of MakeIteration that works on functions Since
108. struct MKernelVector k ALGEB fn argi arg2 CallbackArgs void tryCallback void data 1 calls the maple procedure fn with arguments argi and arg2 return void EvalMapleProc CallbackArgs data gt k CallbackArgs data gt fn 2 CallbackArgs data gt argl CallbackArgs data gt arg2 void MainProc MKernelVector k ALGEB fn M_BOOL errorflag ALGEB result CallbackArgs a a k k a fn fn a argl ToMapleFloat k 3 14 a arg2 ToMapleInteger k 44 result ALGEB MapleTrapError k tryCallback amp a amp errorflag if errorflag 1 do something else 1 6 2 External Calling Using Compiled Code in Maple e 369 do something else Hardware Float Evaluation The following procedures evaluate a Maple procedure or statement using hardware floats double MapleEvalhf MKernelVector kv ALGEB s double EvalhfMapleProc MKernelVector kv ALGEB fn int nargs double args The equivalent Fortran functions are as follows DOUBLEPRECISION maple_evalhf kv s DOUBLEPRECISION evalhf_maple_proc kv fn nargs args MapleEvalhf applies evalhf to the given dag s Then evalhf either evaluates an expression using hardware floats to produce a hardware float result or returns the handle to an evalhfable rtable that can be used as a parameter to EvalhfMapleProc EvalhfMapleProc calls the evalhf computation engine directly to evaluate the
109. students answers The input can be the value of a parameter or the answer to a question such as whether a parameter is positive The two commands in Maple for reading input from the terminal are the readline command and the readstat command Reading Strings from the Terminal The readline command reads one line of text from a file or the keyboard Use the readline command as follows readline filename If filename is the special name terminal then readline reads a line of text from the keyboard The readline command returns the text as a string gt s readline terminal Maplesoft s Maplesoft 28 e Chapter 1 Procedures Variables and Extending Maple Example 1 The following application prompts the user for an answer to a question gt DetermineSign proc a algebraic local s gt printf Is the sign of a positive Answer yes or no a gt S readline terminal gt evalb s yes or s y gt end proc gt DetermineSign u 1 Is the sign of u 1 positive Answer yes or no y true Information For more details on the readline command see Read ing Text Lines from a File on page 197 Reading Expressions from the Terminal You can write procedures that interpret user input as a Maple expression rather than a string The readstat command reads one expression from the keyboard readstat prompt The prompt is an optional string gt readstat Ent
110. successful or it returns a pointer to an error message if unsuccessful It may return the same pointer in all cases of failure To save the message make a copy of it immediately Technical Issues This subsection discusses technical issues related to using OpenMaple Memory Usage Maple allocates memory from the operating system through the C malloc function on most architectures in large chunks 64KB on most architectures This memory is not returned to the op erating system that is by free until Maple terminates When Maple no longer requires a piece of memory the memory is added to one of the Maple internal free storage lists Maple maintains several storage lists for different sizes of memory blocks so it can quickly find blocks of the re quired size For example Maple makes extensive use of three word blocks so it maintains a list of free blocks of that size Maple allocates additional memory from the operating system only when it is unable to satisfy a request using its storage lists Maple appears to leak memory because the amount of memory allo cated to Maple only increases The more memory Maple is allocated by the operating system the less it is allocated in future because it reuses memory For most applications 4MB of memory must be available for Maple to allocate Under Microsoft Windows the Maple kernel is compiled using 4 byte structure alignment Your application must be compiled this way This is a general requi
111. such as actual passing order left to right versus right to left The intent is that the Maple procedure define external returns has the same calling sequence as the actual 334 e Chapter 6 Advanced Connectivity external function when used in the language for which it was writ ten The only exception is that one argument may be given the name RETURN This specifies the type returned by the function rather than a parameter passed to the function For more information about how each argi is specified see the following Type Specification subsec tion The options are used to specify argument passing conventions li braries or calling methods For details see the appropriate sections of this chapter If instead of the arg parameters the single word MAPLE is specified the external function is assumed to accept the raw Maple data structures passed without conversion T his assumes that the wrapper has been manually generated and compiled into a DLL Various support func tions for writing such external functions are described in Method 3 Customizing Wrappers on page 349 Using MAPLE instead of specifying arguments is the basis of method 3 The name of the DLL containing the external function is specified by using the LIB option to define external The dllName is a string that specifies the filename of the library in which the function is to be found The format of this name is highly system dependent Likewise whether a full pathnam
112. terms Then map each document to a term vector in this Euclidean space A simple mapping is to represent a document by a term vector whose ith coordinate is equal to 1 if the ith term occurs in the document and is equal to 0 otherwise For each query construct a term vector The dot product of the query term vector with a document term vector is the number of query terms that appear in the 2 Extended Example A Search Engine e 165 document A document containing more query terms might reasonably be judged more relevant than one containing fewer query terms To rank the documents sort the dot products of the query term vector with the document term vectors For example consider a smaller corpus comprising only the documents doc2 doc5 and doc 7 gt SmallIndex BuildIndex doc2 doc5 doc The ordered list of corpus terms is gt SmallCorpusTerms sort op map op findicesj gt SnallIndex SmallCorpus Terms arithmet art beauti believ experi god mathemat mysteri scienc sourc Note Terms in the documents are replaced by their stems and stop words are removed from the index The document term vector can be computed using the following procedure gt DocumentTermVector proc doc gt global SmallCorpusTerms gt local terms gt terms DocumentTerms doc gt Vector row 1 nops SmallCorpusTerms gt
113. the Matlab Package e 243 Now you can properly evaluate MyFcn with numeric as well as symbolic arguments gt MyFcn x x sin x x3 gt MyFcn 0 099999999 0 1665833531735 gt MyFcn 0 1 0 1665833531700 1 5 Extending Maple describes how to extend many other Maple commands 4 5 Using the Matlab Package Another way to accomplish numerical computations in Maple is to use the Matlab package which provides access to several MATLAB built in functions Note You must have a copy of the current MATLAB release properly installed on your computer The mathematical functions pro vided are chol Cholesky factorization defined test whether variable exists det determinant dimensions compute dimensions of matrix eig eigenvalues and eigenvectors evalM evaluate expression fft discrete Fourier transforms getvar get numeric array or matrix 244 e Chapter 4 Numerical Programming in Maple e inv matrix inverse e lu LU decomposition e ode45 solve ordinary differential equation qr QR orthogonal triangular decomposition e size compute size of matrix e square determine whether matrix is square e transpose matrix transposition Some support and utility commands are provided MATLAB converts all Maple structures to its representation of hardware floating point arrays before it performs any computations The results are usually Arrays with data type float 8 that is hardware float entries For more in
114. the file If you specify TEXT when a byte with value 0 resides among the bytes being read the resulting string contains only those characters preceding the 0 byte If you call readbytes with a filename and that file is not open Maple opens it in READ mode If you specify TEXT Maple opens it as a TEXT file otherwise Maple opens it as a BINARY file If readbytes returns 0 indi cating the end of the file when you call it with a filename it automatically closes the file Example The following example defines a Maple procedure which reads an entire file by using readbytes and copies it to a new file gt CopyFile proc sourceFile string destFile string gt writebytes destFile readbytes sourceFile infinity gt end proc Note For information on the writebytes function refer to writebytes or see Writing Bytes to a File on page 211 Formatted Input The fscanf and scanf commands read from a file parsing numbers and substrings according to a specified format The commands return a list of these parsed objects If no more characters remain in the file when you call fscanf or scanf they return 0 instead of a list indicating that it has reached the end of the file Call the fscanf and scanf commands as follows fscanf fileIdentifier format scanf format The fileIdentifier is the name or descriptor of the file to read A call to scanf is equivalent to a call to fscanf with default as the fileldent
115. the form of a list of lists and assumed to represent a list of x y pairs where each x is an integer and each y is a real number gt A 0 0 1 8427007929 2 9953222650 3 9999779095 4 9999999846 5 1 000000000 VVVVV In a real application this list is generated by a Maple command or pro cedure In this example the list was simply entered as above If you want to use another program like a presentation graphics pro gram or perhaps a custom C program to process data that Maple has generated then you often need to save the data to a file in a format that the other program recognizes Using the I O library you can write such data to a file gt for xy in A do fprintf myfile d eWn xy 1 xy 2 gt end do gt fclose myfile The file myfile is saved in the current directory To determine the current directory use the currentdir command If you print the file myfile or view it with a text editor it looks like this 000000e 01 427008e 01 953223e 01 999779e 01 000000e 00 000000e 00 a FPF WNR O ee Q qQ 0 o The fprintf command writes each pair of numbers to the file This com mand takes two or more arguments The first argument specifies the file that Maple is to write and the second argument specifies the format for the data items The remaining arguments are the actual data items that Maple is to write Opening a File In the preceding example the filename is
116. the interface abstraction It allows you to manipulate interfaces without having to worry about how they fit into the Maple type system gt with Interface Warning the protected names define and savelib have been redefined and unprotected define equivalent extend extends satisfies savelib gt define abgroup zero abgroup gt type type abgroup interface true gt type z5 abgroup irue 2 6 Interfaces and Implementations e 123 gt satisfies z5 abgroup true gt extend ring abgroup one ring gt typel type ring interface true gt extends abgroup ring true gt satisfies zb ring true gt type z5 ring true The load Option This package provides an abstraction of the inter face concept in Maple and illustrates a module feature not previously demonstrated the load procedure_name option In the Interface pack age this option is used in a fairly typical way The declaration option load setup that appears in the module definition instructs Maple that when the instantiated module is read from a repository it is to call the procedure setup The procedure named must be a local or an exported local of the module The local procedure setup in this module simply ensures that the global variable type interface is assigned an appropriate value This assignment is
117. the pack age or by calling the list export gt L nil gt for i from 1 to 10 do gt L pair i L gt end do 86 e Chapter 2 Programming with Modules L 1 nil La 2 1 nil L 3 2 1 nil L 4 3 2 1 nil L 5 4 3 2 1 nil L 6 5 4 3 2 1 nil L 7 6 5 4 3 2 1 nil L 8 7 6 5 4 3 2 1 n t L 9 8 7 6 5 4 3 2 1 n l L 10 9 8 7 6 5 4 3 2 1 nal gt length L 10 gt member 3 L true gt member 100 L false gt reverse L 1 2 3 4 5 6 7 8 9 10 nil gt map x gt x 2 L 100 81 64 49 36 25 16 9 4 1 nil gt member 100 true 2 3 Packages e 87 gt L2 list a b c d 5 L2 d c b a nil gt map sin L2 sin d sin c sin b sin a nil gt eval L2 a 1 b 2 c 3 d 4 4 3 2 1 nil gt map evalf 10 1 1 3 2 1 nil Code Coverage Profiling Package The following example is a package called coverage It instruments proce dures and modules for coverage profiling that is turns on statement level tracing It serves as an example of a small package and illustrates ways in which modules can be manipulated Design You can write tests that exercise each part of the program to ensure that the prog
118. two ways to obtain a Printer module The LanguageDefinition GenericPrinter returns a generic Printer module containing no language specific data and the LanguageDefinition Get language name Printer command returns a copy of the Printer module used for a previously defined language language name The most frequently used Printer package function is the Print com mand Given a string Print prints the string to a buffer Given an intermediate form expression Print invokes the print handler appro priate for the expression In this manner Print recurses through the intermediate form until it is printed in its entirety to the buffer At this point translation is complete Table 6 1 lists important Printer functions For a complete listing and more detailed information refer to CodeGeneration LanguageDefinition Printer Example 5 This example illustrates how data is stored and retrieved from a Printer module gt with CodeGeneration LanguageDefinition gt Printer GenericPrinter 326 e Chapter 6 Advanced Connectivity Table 6 1 Select Printer Functions AddFunction AddOperator AddPrintHandler GetFunction GetOperator GetPrintHandler Indent Print PrintTarget Define a translation for a function name and type signature Define a translation for a unary or binary operator Set a procedure to be the print handler for an intermediate form name Get a translation for a function name and type sign
119. type 374 MapleHelp function 385 388 MapleLibName function 385 MapleRaiseError API func tion 377 MCallBack function 379 MCallBackVector function 379 MKernelVector 379 queryInterrupt function 379 383 readLineCallBack function 379 382 384 redirectCallBack function 379 382 RestartMaple API function 375 378 sample program 389 390 StartMaple API function 375 376 378 379 386 Index e 437 statusCallBack function 379 381 StopMaple API function 375 378 streamCallBack function 379 384 streams 383 386 advantages 385 technical issues 388 textCallBack function 379 381 383 385 using Microsoft Visual C CC 374 operator rebinding 106 operators 33 35 custom 33 neutral 33 options converting to PLOToptions 267 286 global 258 272 local 258 271 286 processing 252 type equals numeric 14 or 411 OR internal data structure 411 organization internal 395 output controlling 206 rounding 187 package 57 packages 43 78 exports 78 in the standard library 78 table based 78 use modules for 78 using interactively 79 438 e Index PARAM internal data structure 411 parameters sequence of 18 within procedures 411 parse 30 219 partition 27 partitioning 8 pipes 192 plot drivers 256 plotting 246 249 animations 301 AXESSTYLE 262 COLOR 258 colors 275 CURVES 257 258 262 data structures 254 256 259 262 formulae 246 252 functions 247 252 288
120. use env in body end use Here env is an expression sequence of binding equations each of which is either a module or an equation whose left side is a symbol and body is a sequence of Maple statements The right side of a binding equation can be any Maple expression Executing a use statement executes the body of the statement Each occurrence of a name that appears on the left side of any of the binding equations is replaced by the right side of the corresponding equation For example gt use f sin g cos in gt f x 2 gC x 72 gt end use sin x cos x Characteristics of the use Statement The use statement can be nested gt use f sin in gt use g cos in gt simplify G0 72 g x 2 gt end use gt end use When nested use statements are encountered the name bindings es tablished by the inner use statement take precedence over those of the outer one 104 e Chapter 2 Programming with Modules gt use a 2 b 3 in gt use a 3 in a b end gt end use In this example the inner binding of the value 3 to the name a takes precedence so the value of the expression a b and hence of the entire statement is the number 6 The inner binding of 3 to a has an effect only within the body of the inner use statement Once the execution has exited the inner use statement the binding of 2 to a is restored gt use a 2 b 3 in here a is bound to 2 and b to 3 use a
121. use only standard data types When dealing with complicated compound types or passing func tions or records as parameters a compiled wrapper is needed Java and Fortran do not use these data structures this method applies only to C routines The wrapper performs the conversion between the Maple inter nal representation and the hardware representation Maple automatically generates and compiles wrappers based on your specifications to inter face with libraries of compiled code Compared to directly calling the external function you can use a more diverse set of external libraries External calls that use these wrappers require a C compiler Method 3 Customizing Wrappers For flexibility beyond the other methods an external API allows you to augment existing wrappers or write custom wrappers You can write the wrapper in C or Fortran This powerful method also allows direct access to Maple data structures from the wrapper Calling Methods Summary e Any of the methods 1 3 can be used to call a C function e Methods 1 or 3 can be used to call a Fortran function Method 2 is not applicable to Fortran functions 6 2 External Calling Using Compiled Code in Maple e 331 e Only method 1 is available for calling a Java method Only static methods can be called Method 1 Calling External Functions To understand the Maple external calling facility consider the following C code that adds two numbers and returns the result Note that suc
122. var in which expr is the expression to be differentiated and var is the variable of differentiation For instance to make the differentiator handle items such as sets and lists by differentiating their individual components add the rule gt addRule list set tabular gt map differentiate gt args The first version of the differentiator dealt with sums by mapping itself over the sum expression In the new scheme this is expressed by the statement gt addRule gt map differentiate args in the module body The advantage of using this scheme is that not only can the author of the differentiator extend the system but so can users of the system Having instantiated the module Difflmpl any user can add rules or new functions simply by issuing appropriate calls to addRule and addFunc The differentiator cannot handle the procedure tan gt differentiate tan x exp x 2 x tan x differentiate tan z x et e You must add it to the database of known functions gt Difflmpl addFunc tan x gt 1 tan x 2 t 1 tan x gt differentiate tan x exp x 2 x 5 70 e Chapter 2 Programming with Modules tan x 1 tan x et y et Similarly there is not yet any rule for handling equations and other relations gt differentiate y x sin x2 cost x3 x 5 differentiate y z sin x cos x x gt DifflImpl addRule
123. which is understood to be relative to the surrounding scope When a module def 410 e Appendix A Internal Representation and Manipulation inition is evaluated the lexical seq is updated by replacing each of the second pointers with a pointer to the actual object represented The name pointers are not touched so that the actual identifier names are still avail able The lexical seq for a module contains entries for any surrounding scope identifiers used by that module or by any procedures or modules contained within it The mod name field points to the optional name of the module If a module name was specified when the module was declared the name will appear there If no module name was specified this field will contain NULL Module Instance MODULE export seq mod def local seq Maple syntax none Length 4 Executing a module definition MODDEF results in a module instance Each local or exported member of the module is instantiated and be longs to that instance of the module The export seq field points to an expression sequence of names of the instantiated exports as opposed to the global names as stored in the module definition The mod def field points back to the original module definition The local seq field points to an expression sequence of names of the instantiated local variables of the module Identifier NAME assigned attrib characters character
124. x cos x See Also diff evalf series limit The MapleHelp function retrieves and displays a help page or a sec tion of a help page based on the specified topic The results are passed as a stream of characters and attributes to the specified call back functions char M_DECL MapleHelp MKernelVector kv char topic char section M BOOL M DECL writeChar void data int c M BOOL M DECL writeAttrib void data int a int width void data e The kv parameter specifies the handle to the Maple kernel This han dle is returned by StartMaple e The topic parameter specifies the help page The topic is generally a Maple keyword function name symbol or a combination thereof separated by commas For example to refer to a function in a package use package name function name 6 3 OpenMaple Using Maple in Compiled Code e 387 The section parameter indicates which section of the page to display If this is passed as or NULL the entire page is displayed To restrict display to a particular section of the page pass one of the following values usage Displays the function name one line description and call ing sequence description Displays the detailed description of the function examples Displays examples of the function usage seealso Displays a list of related topics The writeChar parameter defines a call back function to which the characters are passed The character
125. 0 010 26 0 0 30 pee 0 41 90 0 i 0 7 56 0 0 0 0 0 gt use LinearAlgebra in gt Determinant m gt Rank m gt CharacteristicPolynomial m lambda gt end use 0 3 A4 TEX 856 49316X Note that a name that appears in a binding list for a use statement which is intended to be a module must evaluate to a module at the time the use statement is simplified This is necessary because the simplification of the use statement must be able to determine the exports of the module In particular the following attempt to pass a module as a parameter to a procedure does not work and yields an error during the simplification of the procedure 106 e Chapter 2 Programming with Modules gt proc m a b gt use m in e a b end gt end proc Error no bindings were specified or implied The correct way to use a module as a parameter is to specify the names to be bound explicitly such as in this example 7 proc m a b gt use e m e in a b end gt end proc proc m a b a bend proc This is necessary because until the procedure is called with a module expression as first argument the reference to e is ambiguous The variable e could refer to a module export or to something else such as a global name To expand the use statement this must be known at the time the procedure is simplified Operator Rebinding An additional feature of the use statement is that it allows most
126. 0 1 0 1 1 1 2 1 2 3 0 1 gt PLOT3D GRID 1 3 1 2 LL AXESLABELS x y z gt ORIENTATION 135 45 AXES BOXED 5 3 Maple Plot Data Structures e 265 oO Mw The MESH structure contains a list of lists of points LL describing a surface in 3 D space The MESH structure represents the quadrilaterals spanned by LLi LLi41 ELiv1 5 LLi i j for all meaningful values of i and j Example 6 In this example LL contains 3 lists each of length 4 that is twelve points defining six quadrilaterals gt LL 0 0 0 1 0 0 2 0 0 3 0 0 1 gt 0 1 0 1 1 0 2 1 0 9 0 gt 3 2 0 7 01 gt 0 1 1 1 1 1 1 2 2 0 6 1 gt 3 5 0 5 1 1111 LL 0 0 0 t 0 0 2 0 0 3 0 0 0 1 0 1 1 0 2 1 0 9 0 3 2 0 7 011 0 1 1 1 1 1 2 2 0 6 1 3 5 0 5 1 1 gt PLOT3D MESH LL AXESLABELS x y z AXES BOXED gt ORIENTATION 140 45 Somo 266 e Chapter 5 Programming with Maple Graphics The ISOSURFACE structure contains samples of a mathematical func tion f taken over a regular grid in 3 D space and is rendered as a 3 D surface approximating the zero surface of f The data is a nested list containing values z y z f x y z for each grid point x y z The GRID MESH and ISOSURFACE structures allow the data to be provided in a Maple Array instead of a list Often Array data leads to faster processing For brevity exam
127. 0 or y 0 In such cases the procedure fnum returns the name undefined The Maple plot display routines recognize this special name At the point 1 1 the function f has the value 1 sin 1 and so fnum returns a numerical estimate gt fnum 1 1 1 18839510577812123 However if you try to evaluate f at 0 0 Maple returns that the function is undefined at these coordinates 208 e Chapter 5 Programming with Maple Graphics gt fnum 0 0 undefined Summary Creating such a procedure is the first step in creating the grid of values For efficiency when possible compute the function values and the grid points by using hardware floating point arithmetic In addition it is recommended that you perform as much computation as possible in a single call to evalhf For hardware floating point arithmetic Maple must first convert the expression to a series of commands involving hardware floating point numbers and then convert the results back to the Maple format for numbers For more information on numerical calculations see chapter 4 Example 2 The following procedure generates the coordinates of the grid in the form of an Array Because the procedure plots surfaces the Array is two dimensional The procedure returns an Array z of function values evalgrid proc F z a b c d m n local i j dx dy dx b a m dy d c n for i to m do for j to n do zli j F a i 1 dx c j 1 xdy end do end do end pr
128. 00000 0 496918815000000 0 464843910000000 0 458498021000000 The proper design choice here is that U should depend only on the value of Digits when you invoke U The following version of uniform accomplishes this by placing the entire computation inside the procedure that uniform returns gt uniform proc r constant constant procO local intrange f intrange map x gt round x 10 Digits evalf r f rand intrange evalf f O 107Digits end proc end proc VVVVVVV VV The r within the inner proc is not declared as local or global so it becomes the same r as the parameter to the outer proc The procedure that uniform generates is now independent of the value of Digits at the time you invoke uniform 2 U uniform cos 2 sin 1 gt Digits 15 gt seq UO i 1 8 0 0785475551312100 0 129118535641837 0 153402552054527 0 469410168730666 0 0284411444410350 0 136140726546643 0 156491822876214 0 0848249080831220 Note The interface variable displayprecision controls the number of decimal places to be displayed The default value is 1 representing full precision as determined by the Digits environment variable This sim plifies display without introducing round off error For more information refer to interface 14 e Chapter 1 Procedures Variables and Extending Maple Summary This section introduced e Rules Maple uses to distinguish global and local variab
129. 052 1 527422052 8 1 527422052 1 539767731 9 1 539767731 1 549767731 10 1 549767731 10 1 558032194 11 1 558032194 gt points map op points al Oo ON D Oo OND oO B c 5 3 Maple Plot Data Structures e 261 points 1 1 250000000 2 1 250000000 2 1 361111111 3 1 361111111 3 1 423611111 4 1 423611111 4 1 463611111 5 1 463611111 5 1 491388889 6 1 191388889 6 1 511797052 7 1 511797052 7 1 527422052 8 1 527422052 8 1 539767731 9 1 539767731 9 1 549767731 10 1 549767731 10 1 558032194 11 1 558032194 This list has the correct form gt PLOT CURVES points 1 55 TT RR 1 5 1 45 1 4 1 35 1 3 1 25 2 4 6 8 10 The sumplot procedure automates this technique gt sumplot proc s local term n a b psum m points i if typematch s Sum term algebraic n name a integer b integer then psum evalf unapply Sum term n a atm m points seq i psum i i 1 psum i i 1 b a 1 points map op points PLOT CURVES points else error expecting a Sum structure as input end if end proc VVVVVVVVVV VV The following is a sumplot of an alternating series gt sumplot Sum 1 k k k 1 25 262 e Chapter 5 Programming with Maple Graphics 0 55 0 6 0 65
130. 1 For dense rtables return the number of elements of storage allocated for this rtable 2 If rt is in NAG sparse format then this returns the number of ele ments in the data vector specified for the rtable which is the same as the length of each index vector Note that the number returned here represents the number of data elements that are actually filled in not the number of elements allocated Some of the elements may have the value zero 3 For Maple sparse rtables this always returns zero RtableNumDimensions returns the number of dimensions in a given rtable RtableUpperBound and RtableLowerBound give the upper and lower bound of the dimth dimension of the RTABLE rt For a 2 x 3 matrix RtableLowerBound rt 1 returns 1 because the first dimension bounds are 1 2 and the lower bound is 1 RtableIsReal checks the elements of the RTABLE rt to verify whether they are all real If datatype complex it returns FALSE If datatype is a hardware type with no indexing function for example float 8 it returns TRUE Otherwise it scans the rtable and returns FALSE when the first complex entry is found or TRUE if no complex entries are found In addition to the above functions there is an extensive C API for working with rtable data types void RTableAppendAttribute MKernelVector kv RTableSettings s char name void RTableAppendIndFn MKernelVector kv RTableSettings 362 e Chapter 6 Advanced Connectivity s ALGEB indfn
131. 10000 0001001000 0110100111 gt use LinearAlgebra in gt Scores TermDocumentMatrix Transpose queryVector gt end use 0 Scores 1 1 There is a geometric interpretation of the search process The dot product of two vectors u and v is related to the angle between the vectors 2 7 Extended Example A Search Engine e 167 for which the cosine is given by the formula u v u v 1 Consider the projection of the document term vectors onto the hyperplane defined by the component vectors of the query vector and then introduce appropriate scaling using vector norms In this context searching can be viewed as a process of determining those vectors representing documents in a corpus for which the angle between their projections and the query vector is small Term Weighting A document that contains many instances of a given term is generally considered to be more relevant to queries containing that term than a document with fewer instances To improve rankings therefore record not only the presence of a term in a document but also its frequency This is a simple change to DocumentTermMatrix The term vector of a document is the vector of E whose ith entry is equal to the number of times the th corpus term occurs in the document gt DocumentTermVector proc doc gt global SmallCorpusTerms gt local terms gt terms DocumentTerms doc gt Vector row 1 nops SmallCorpus
132. 105 35 41 25 86 20 34 87 95 17 53 42 33 21 62 61 69 112 111 110 36 68 63 37 82 4 90 88 89 22 83 31 19 15 64 32 128 96 13 107 132 6 9 97 76 124 102 101 125 131 8 49 126 104 119 29 59 127 103 11 120 gt map2 GetDocumentIdByIndex corpus2 ranking 1 3 cos arccosh I x 1 xI arccosh 1 y C1 y I 2 1 zI 1 y1 x 2cos arccosh I x 1 lt I arccosh Iy 1 yT js 1 xI 1 y I l y y 1 cos z cos 5 2 sin 5 Zz 1 1 cos z 2 5 cos 2 z Construct a similar corpus using a different choice for the document IDs and the fetcher routine passed to the constructor Instead of using formulae for both the document and its ID use the position of the formula in the global list Formulae as the document ID and pass a suitable fetcher routine gt corpus3 Corpus 1 nops Formulae id gt Formulae gt id Filters Maple query gt op fop query gt ranking Search corpus2 sin cos 2 7 Extended Example A Search Engine e 183 ranking 81 73 79 70 71 46 80 85 72 78 52 51 28 58 77 106 98 99 100 45 55 54 75 74 56 50 84 116 48 47 26 27 44 38 94 43 57 1 118 109 130 121 129 123 122 30 108 24 92 115 23 60 67 91 113 65 39 40 7 12 14 10 16 2 3 18 5 66 93 114 117 105 3
133. 2 gt c 1 8 1 6 14 1 2 up A A 1 2 3 4 5 There are problems with the vectorfieldplot procedure e The procedure only works with operator form You can solve this problem by converting expressions to procedures and then recursively calling the vectorfieldplot procedure with the converted input as in the ribbonplot procedure in section 5 2 e The procedure only works with lists as input not Arrays To overcome such problems first convert all input procedures to pro cedures that generate only a numeric real value or the value undefined the only type of data that can appear in a Maple plot data structure It is recommended that you use the more efficient hardware floating point calculations rather than software floating point operations whenever pos sible For more information see the examples in 5 7 Generating Grids of Points Instead of writing a procedure for computing the grid use the library function convert gridpoints which in the case of a single input generates a structure of the following form Lao by Ces dy Dii Zin 23 zm1 zmn 202 e Chapter 5 Programming with Maple Graphics It uses either expressions or procedures as input The output gives the domain information a b and c d along with the z values of the input that it evaluates over the grid gt convert sin x y gridpoints gt x 0 Pi y 0 Pi grid 2 3 0 3 14159265358979 0 3 14159265358979
134. 2 referring to 48 types of variables in 118 use for new packages 78 versus procedures 44 46 moemapi h file 380 mplshlib h file 374 mpltable h file 374 multiple assignments 288 name 411 NAME internal data structure 410 name table 424 named modules 49 names with a tilde 21 nargs 48 negative integer 406 nested modules 58 nested procedures 5 17 neutral operators 33 defining 34 infix 34 newline character 190 Newton s method 14 230 next 48 411 NEXT internal data structure 411 nops 23 not 411 NOT internal data structure 411 numeric estimate 14 numeric event 236 numerical integration 225 227 numerical limits 227 numerical programming 223 numerical sums 227 numerics 236 objects 44 108 modeling 108 omexample c file 389 op 397 open 193 OpenMaple 373 390 ALGEB data type 374 377 basic API functions 375 378 call back functions 379 385 callBackCallBack function 379 383 385 data types 374 errorCallBack function 377 379 383 EvalMapleStatement API func tion 375 376 378 381 EXT_DECL modifier 374 file structure 388 389 Mac OS X 389 UNIX 389 Windows 389 FLOAT32 data type 374 FLOAT64 data type 374 help database 385 388 retrieving a help page 385 setting the path 385 INTEGER16 data type 374 INTEGER32 data type 374 INTEGER64 data type 374 INTEGERS data type 374 interface overview 374 M_BOOL data type 374 M_DECL modifier 374 379 M_INT data
135. 3 o c o st c u1oadrzo sep NUNLAY Niequeu Nedf a N1oa3draosep NXxequeu VN VN rxequeu TedA3 901d ued a fis TI1O0IATADSODP T19queu 29044 Nzequeu Ned 4 suorado yzoqydtzosep Niequeu VN VN un 1equeu edf4 uorun Ai T1O0IAdTADSOP Jazequew NOINA Nzequeu yodsy suorado yzoqydtzosep Naxequeu VN VN i zequeu Ted 4 39n13s 5 T10IdTIDSOP T19quau LONULS od T esef jodAy ued340 q adAT 1ojdt19seq gq e depy sed punodwoy uaddesy t 9 a1qeL Chapter 6 Advanced Connectivity 394 Table 6 5 Maple API Libraries for C and Fortran Operating Binary Load Library C Maple Fortran Maple System Directory Environment API Library API Library Variable Microsoft Windows bin win PATH maplec lib maplefortran lib maplec dll maplefortran dll Mac OS X NA DYLD LIBRARY PATH maplec dylib maplefortran dylib Solaris bin SUN_SPARC_ SOLARIS LD LIBRARY PATH libmaplec so libmaplefortran so HP UX bin HP_RISC_ UNIX SHLIB PATH libmaplec sl libmaplefortran sl IRIX bin SGI_ MIPS UNIX LD LIBRARY PATH libmaplec so libmaplefortran so AIX bin IBM_RISC_ UNIX LIBPATH libmaplec a libmaplefortran a OSF1 True64 bin DEC ALPHA UNIX LD LIBRARY PATH libmaplec so libmaplefortran so Linux bin IBBM INTEL LINUX LD LIBRARY PATH libmaplec so libmaplefortran so Table A 1 Maple Structures AND ASSIGN BINARY BREAK CATENATE COMPLEX CONTROL DCOLON DEBUG EQUAT
136. 4 1 1X 99 2 A AR A 289890192955 7 e e22249 Ytv1 1 5 2207979 0949 5 e22441DY DDPP 9 95955 9996 0700001185850 1 PAPAPAHFAPHHFETBTRVVBHES PAA AAFAFFFAARPAFPTWEVVVS 0 5 gt o ooo oee cccnop osorno omm Other vector field routines can be derived from the preceding routines For example you can also write a complex vector field plot that takes complex number locations and complex number descriptions of vectors as input Simply generate the grid of points in an alternate manner The arrow procedure in the plots package generates arrows and vec tors The arrow procedure is more versatile than the procedures described in this section 5 7 Generating Grids of Points Section 5 6 illustrated the steps involved in the simple operation of ob taining an Array of grid values from a given procedure You must consider efficiency error conditions and non numeric output To handle the case in which the input is an expression in two variables you can use the method from the ribbonplot procedure in Example 4 of section 5 2 Thus for simplicity of presentation this section deals with only operator form in put The goal is to compute an Array of values for f at each point on a m X n rectangular grid That is at the locations s a 0 and Y e y D 0y where 6 b a m 1 and d c n 1 Here i and j vary from 1 to m and 1 to n respectively The final procedure that is created
137. 5 gt redtop 1 2 3 0 5 gt STYLE PATCH Using yellowsides and redtop you can create a 3 D histogram plot The following is the histogram corresponding to z 1 x y 4 for 0 z 4 and 0 y 4 gt sides seq seq yellowsides i j 1 i j 4 0 75 gt j 0 4 i 0 4 gt tops seq seq redtop i j 1 it j 4 0 75 gt j 0 4 i 0 4 Histograms display well in box style axes gt PLOT3D sides tops STYLE PATCH AXESSTYLE BOXED 264 e Chapter 5 Programming with Maple Graphics To create a listbarchart3d procedure which for a given list of lists of heights gives a 3 D bar chart for its output modify the previous con struction Objects Inside a PLOT3D Data Structure The format of a PLOT3D structure is similar to that of a PLOT structure The allowable plot objects include all the objects that can appear in PLOT structures Of course points are specified by a list of three numerical values x y z instead of two Three additional plot objects can appear in a PLOT3D structure GRID MESH and ISOSURFACE GRID is a structure that describes a functional grid It consists of two ranges defining a grid in the x y plane and a list of lists of z values over this grid Example 5 In this example LL contains 4 lists each of length 3 T here fore the grid is 4x 3 and x runs from 1 to 3 in increments of 2 3 whereas y runs from 1 to 2 in increments of 1 2 gt LL
138. 5 41 25 86 20 34 87 95 17 53 42 33 21 62 61 69 112 111 110 36 68 63 37 82 4 90 88 89 22 83 31 19 15 64 32 128 96 13 107 132 6 9 97 76 124 102 101 125 131 8 49 126 104 119 29 59 127 103 11 120 The common and practical case in which a corpus represents a col lection of files to be indexed can be handled by using a constructor call such as the following gt corpus Corpus gt remove type listdir MyDocuments 1 gt fname gt readbytes fname TEXT infinity gt Filters Text If the documents contain structured text encoded as XML then a similar invocation can be used gt corpus Corpus gt remove type listdir MyDocuments gt fname XMLTools ParseFile fname Filters XML Finally a directory of Maple worksheets can be represented by a cor pus constructed as follows gt corpus Corpus gt remove type listdir MyDocuments gt fname gt Worksheet ReadFile fname Filters WorksheetTerms gt Ja A client of the SearchEngine package can provide a specialized filter routine to be used in constructing a corpus object to represent a collection of documents of a specific type Generic interfaces and careful hiding of representational details provide considerable client flexibility and the ability to evolve the implementation 184 e Chapter 2 Programming with M
139. 9 Beta 100 200 x 0 1 5 1 5 99 1 q 199 2 f B 100 200 gt value q 278522905457805211792552486504343059984 03849800909690342170417622052715523897 76190682816696442051841690247452471818 79720294596176638677971757463413490644 25727501861101435750157352018112989492 972548449 217741280910371516468873V 84971552115934384961767251671031013243 12241148610308262514475552524051323083 132387178403327502493606037826303413761 82537367383346083183346165228661133571 76260162148352832620593365691185012466 147181896006639730419830500271656525951 68426426994847133755683898925781250000 ps B 100 200 gt evalf q 4 2 Hardware Floating Point Numbers e 227 0 3546007367 1077 The two previous examples use the Int command rather than int for the integration If you use int Maple first tries to integrate the expres sion symbolically Thus when evaluating the following commands Maple determines a symbolic answer and then converts it to a floating point approximation rather than performing direct numerical integration gt evalf int x 99 1 x 199 Beta 100 200 x 0 1 5 0 3546007367 1077 When performing numerical calculations do not use commands like int limit and sum that evaluate their arguments symbolically In general results from evalf Int evalf Sum and evalf Limit are more accurate than results obtained from the corresponding evalf int evalf sum and
140. E hex dump format 16 characters per number The dimensions of the array are determined as described for the previous Zhe 4hf and hg formats s The next non whitespace characters up to but not including the fol lowing blank characters or the end of the string are returned as a Maple string a Maple collects and parses the next non whitespace characters up to but not including the following blank characters or the end of the string An unevaluated Maple expression is returned m The next characters must be a Maple expression encoded in the Maple m file format Maple reads enough characters to parse a single com plete expression it ignores the width specification The Maple expres sion is returned 202 e Chapter3 Input and Output c This code returns the next character whitespace or otherwise as a Maple string If a width is specified that many characters blank or otherwise are returned as a single Maple string The characters between and become a list of characters that are acceptable as a character string Maple scans characters from the input until it encounters one that is not in the list The scanned characters are then returned as a Maple string If the list begins with a character the list represents all those characters not in the list If a is to appear in the list it must immediately follow the opening or the if one exists o You can use
141. ER32 a2 INTEGER32 r ALGEB mr int i mapleKernelVec kv args ALGEB fn args if MapleNumArgs mapleKernelVec ALGEB args 2 MapleRaiseError mapleKernelVec Incorrect number of arguments integer 4 al MapleToInteger32 mapleKernelVec args 1 integer 4 a2 MapleToInteger32 mapleKernelVec args 2 r fn ai a2 mr ToMapleInteger mapleKernelVec long r return mr The generated wrapper is a good starting point for creating wrappers There may be some extra variables and declarations used because the wrapper generation is generic For example the use of args rather than fn_args avoids the need for a cast with args 1 but it also is a static global which is useful when working with callbacks that need access to the argument sequence outside the main entry point Remember that the add function simply added the arguments a1 and a2 and returned the result This can be done directly in the wrapper By removing the second argument fn so the MAPLE option can be used plus inlining the al a2 functionality and cleaning up the code the wrapper resembles the following 6 2 External Calling Using Compiled Code in Maple e 353 Program to add two numbers from Maple include lt stdio h gt include lt stdlib h gt include lt maplec h gt main entry point MWRAP add ALGEB myAdd MKernelVector kv ALGEB fn args 1 INTEGER32 a1 INTEGER32 gt int defined in
142. ION ERROR EXPSEQ FLOAT FOR FOREIGN FUNCTION GARBAGE HASH HASHTAB HFLOAT IF IMPLIES INEQUAT INTNEG INTPOS LESSEQ LESSTHAN LEXICAL LIST LOCAL MEMBER MODDEF MODULE NAME NEXT NOT OR PARAM POWER PROC PROD RANGE RATIONAL READ RETURN RTABLE SAVE SERIES SET STATSEQ STOP STRING SUM TABLE TABLEREF TRY UNEVAL USE XOR ZPPOLY A Internal Representation and Manipulation Table A 1 lists the structures currently implemented in Maple Each of structure along with the constraints on its length and con tents is described in the following sections A 1 Internal Organization Maple appears to the user as an interactive calculator The user interface reads input parses it and then calls the math engine for each complete statement encountered Maple can read and evaluate an unlimited number of statements until a quit statement is evaluated or the user interface is shut down 395 396 e Appendix A Internal Representation and Manipulation Components Maple consists of three main components a kernel a library and a user interface T he kernel and library together are known as the math engine Kernel The kernel is written in the C language and is responsible for low level operations such as arbitrary precision arithmetic file I O execu tion of the Maple language and the performance of simple mathematical operations such as differentiation of polynomials Library Most of the Maple mathematical functionality is in the Maple library w
143. LE EXT c and FILE foo OBJ EXT This is the object file extension Common extensions are o and obj DLL_EXT This is the dynamic library extension Common extensions are d11 and so INC_ FLAG This precedes directories in the INC_PATH On most plat forms it is I INC_ PATH This specifies the directories to search for header files Use an expression sequence to specify more than one directory for example INC_PATH usr local maple extern include users jdoe include COMPILE COMMAND This is set to the procedure that generates the compiler command The procedure must return a string In gen eral it is not necessary to change the default LINKER This specifies the name of the linker executable LINK FLAGS This specifies miscellaneous flags passed to the linker including those that cause the linker to build a dynamic shared library LIB FLAG This precedes directories in the LIB PATH On most plat forms it is L LIB PATH This specifies the directories to search for libraries Use an expression sequence to specify more than one directory for example LIB PATH usr local maple extern lib users jdoe lib 6 2 External Calling Using Compiled Code in Maple e 345 LIB This names the library which contains the external function to call This option must be specified in every call to define external LIBS This specifies other libraries that need to be linked with the wrap p
144. LT 0 STYLE PATCHNOGRID 5 9 Programming with Color e 311 The AXESTICKS DEFAULT 0 specification eliminates the axes label ing along the vertical axis but leaves the default labeling along the hori zontal axis You can create a colormapHue procedure that creates the color scale for any color function based on HUE coloring gt colormapHue proc F n gt local i points gt points seq evalf i n 0 i n 1 gt G4 1 n 11 G 1 n 0 gt i 0 n 1 gt PLOT POLYGONS points gt COLOUR HUE seq evalf F i n i 0 n 1 gt AXESTICKS DEFAULT 0 STYLE PATCHNOGRID gt end proc The basis of this color scale is y x sin rx 3 for 0 x lt 40 gt colormapHue x gt sin Pi x 3 40 To create the grayscale coloring use an arbitrary procedure F be cause gray levels have equal parts of red green and blue gt colormapGraylevel proc F n gt local i flatten points grays 312 e VVVVVVVVVV Chapter 5 Programming with Maple Graphics points seq evalf i n 0 i n 1 617 50 1 i 1 n 0 1 i 0 n 1 flatten a gt op map op a grays COLOUR RGB flatten seq evalf F i n F i n F i n D i 1 n PLOT POLYGONS points grays AXESTICKS DEFAULT 0 end proc The identity function x gt x yields the basic gray scale gt colormapGraylevel x gt x 20
145. Maple Advanced Programming Guide M B Monagan K O Geddes K M Heal G Labahn S M Vorkoetter J McCarron P DeMarco Maplesoft a division of Waterloo Maple Inc 1996 2008 11 Maplesoft Maple and Maplet are all trademarks of Waterloo Maple Inc O Maplesoft a division of Waterloo Maple Inc 1996 2008 All rights reserved Information in this document is subject to change without notice and does not represent a commitment on the part of the vendor The software described in this document is furnished under a license agreement and may be used or copied only in accordance with the agreement It is against the law to copy the software on any medium except as specifically allowed in the agreement Windows is a registered trademark of Microsoft Corporation Java and all Java based marks are trademarks or registered trademarks of Sun Microsystems Inc in the United States and other countries Maplesoft is independent of Sun Microsystems Inc All other trademarks are the property of their respective owners This document was produced using a special version of Maple that reads and updates LaTeX files Printed in Canada ISBN 978 1 897310 47 2 Contents Preface 1 Audience Sm zer dad oix unus Que band EN RE de dE SS 1 Worksheet Graphical Interface rn 2 Manualidades A a der o M ed 2 CONVENTIONS e s 40 so rd lr e em pd 3 Customer Feedback o le 3 1 Procedures Variables and Extending Maple 5
146. Maple for performing floating point calculations It causes Maple to evaluate in software floating point mode The Maple software floating point arithmetic has an n digit ma chine floating point model as its basis but allows computations at arbi trary precision The environment variable Digits which has an initial setting of 10 determines the default number of digits for calculations gt evalf Pi 3 141592654 You can alter the number of digits either by changing the value of Digits or by specifying the number as an index to evalf Note that when you specify the number of digits as an index to evalf the default Digits remains unchanged gt Digits 20 gt evalf Pi 3 1415926535897932385 gt evalf 200 Pi 4 The Basics of evalf e 225 3 14159265358979323846264338327950288411 971693993751058209749445923078164062861 208998628034825342117067982148086513281 23066470938446095505822317253594081284 811174502841027019385211055596446229481 9549303820 gt evalf sqrt 2 1 4142135623730950488 gt Digits 10 The number of digits you specify is the number of decimal digits that Maple uses during calculations Specifying a larger number of digits is likely to give you a more accurate answer and the maximum value of Digits is sufficiently large to be considered infinite for practical pur poses Unlike most hardware implementations of floating point arithmetic Maple stores and performs software operations on fl
147. Prerequisite Knowledge ls 5 Im This Chapt r estais e hue ke Greer med 5 1 1 Nested Procedures 0000 ee eee 5 Scoping Rule8 ve poh lo aaa b s d 6 Local Versus Global Variables 6 The Quick Sort Algorithm 8 bxamples s 240 Pea Se oa 8 Creating a Uniform Random Number Generator 11 1 2 Procedures That Return Procedures 14 Conveying Values ee ee 14 Creating a Newton Iteration 0 0 14 Example a Be ney BS de Eae 15 Example Dada its des oe n MA 16 A Shift Operator 2 Etpa a PA Ae cel a HP dera 17 1 3 Local Variables and Invoking Procedures 19 Example ome Bae REUS RR ee E 19 Example oa ad Geek RE tee Se a ad eee 20 Procedure as a Returned Object 22 Example Si 9 4 cd att BA Bae BG es ab ee ree NE 22 Example vase RAUS e ean eye eee Ee 24 EX fclSe8 poaa a e a es m e RR EY de Se t 26 14 Interactive Input lens 27 ii iv e 1 5 1 6 Contents Reading Strings from the Terminal Example T irge dnn aai RISE o Oke Bede Red Reading Expressions from the Terminal Example Di rara bu rue REL BASE Bd Converting Strings to Expressions Extending Maple llle Defining New Types a Exercises 2 52 le x ge Rub RR S pO Ba ee SIE UE Neutral Operators o Example Loca duela Aa e VES EX IClSe fg lee eo A e E Extending Commands
148. SH internal data structure 422 hash tables 422 basic 422 dynamic 423 hashing 424 HASHTAB internal data struc ture 422 help 385 hfarray 214 structured objects 232 HFLOAT internal data structure 404 histograms 258 263 history 382 I 35 IEEE standard 224 236 if 405 IF internal data structure 405 imaginary part Index e 433 sign preservation 236 immediate integer 406 immutable state 110 implementations vs interfaces 118 implicit scoping rules 58 implies 405 IMPLIES internal data structure 405 indets 397 inequality 405 INEQUAT internal data struc ture 405 infinite recursion 35 infinity 236 infix 34 infolevel all 41 simplify 41 input formatted 198 from a file 27 from the terminal 27 28 interactive 27 prompting for 27 Int 227 int 227 integers 406 immediate 406 negative 406 positive 406 integration numerical 225 227 interactive input 27 session 20 interface 35 206 indentamount 208 labelling 208 labelwidth 208 prettyprint 208 434 e Index screenwidth 207 208 verboseproc 208 interfaces 118 manipulation 119 vs implementations 118 internal data structures 398 AND 399 ASSIGN 399 BINARY 399 BREAK 399 CATENATE 400 COMPLEX 400 CONTROL 400 DCOLON 401 DEBUG 401 EQUATION 401 ERROR 401 EXPSEQ 402 FLOAT 402 FOR 403 FOREIGN 403 FUNCTION 404 GARBAGE 404 HASH 422 HASHTAB 422 HFLOAT 404 IF 405
149. StopMaple function also closes open files and performs other cleanup operations The StopMaple function is defined as follows void StopMaple MKernelVector kv The kv parameter specifies the handle to the Maple kernel to termi nate Note After calling the StopMaple function you cannot call OpenMaple API functions including StartMaple 6 3 OpenMaple Using Maple in Compiled Code e 379 Call back Functions Results are returned from a Maple computation using your call back func tions The output is passed to a call back function Otherwise the results go to standard output stdout You must pass the call back functions to the StartMaple function in a structure of type MCallBackVector The MCallBackVector type is defined as follows typedef struct void M DECL textCallBack void data int tag char output void M_DECL xerrorCallBack void data M INT offset char msg void M DECL statusCallBack void data long kilobytesUsed long kilobytesAlloc double cpuTime char M DECL readLineCallBack void data M BDOL debug M BOOL M DECL redirectCallBack void data char name char mode char M DECL streamCallBack void data char name M INT nargs char args M BOOL M DECL queryInterrupt void data char M DECL callBackCallBack void data char output MCallBackVector MCallBack Each function takes one or more parameters All take a gen
150. Sum Difference SUM ezprl factorl expr2 factor2 Maple syntax expri factori expr2 factor2 Length 2n 1 A 2 Internal Representations of Data Types e 419 This structure is interpreted as pairs of expressions and their numeric factors Rational or integer expressions with an integer factor are ex panded and the factor replaced with 1 If there is a rational constant in the sum this constant is moved to the first entry by the simplifier Simple products such as a 2 are represented as SUMs More complex products involving non numeric factors are represented as PROD structures Table TABLE index func array bounds hash tab Maple syntax N A Length 4 This is a general table type as created by the table and array func tions in Maple The index func will point to either a NAME or a PROC For general tables the array bounds field points to the empty expression sequence NULL For arrays not to be confused with Arrays which are implemented as RTABLEs the array bounds field refers to an expression sequence of RANGEs of integers The hash tab field points to a HASHTAB structure containing the elements Table Reference TABLEREF name expr seq attrib expr Maple syntax name expr Length 3 or 4 with attributes This data structure represents a table reference or indexed name The name
151. Terms gt i gt numboccur terms SmallCorpusTerms i gt end proc This can lead to significantly improved results when searching a larger corpus To improve this method scale the number of instances by the size the total number of terms with multiplicities of the document For example a book about cats is not more relevant than a short paper on cats merely because the term cats appears more often in the book than in the short article gt DocumentTermVector proc doc global SmallCorpusTerms local terms terms DocumentTerms doc Vector row 1 nops SmallCorpusTerms i gt evalf numboccur terms SmallCorpusTerms i nops terms VVVVVVV end proc With this change recompute the term document matrix and the matrix of scores which represents the search results Also recompute the query term vector 168 e Chapter 2 Programming with Modules TermDocumentMatrix Matrix map s gt s map DocumentTermVector doc2 docb doc D queryVector DocumentTermVector mathematical beauty use LinearAlgebra in Scores TermDocumentMatrix Transpose queryVector end use VVVVVV 0 Scores 0 250000000000000000 0 0833333333499999968 According to these results the second document in the corpus doc5 is the most relevant to the query followed by the third document doc7 The first document doc2 is judged to have no relevance to the query Build
152. Vector Other Compound Types There are other types including records structs and procedures that are supported when using wrapper gen erated external linking These data descriptors are described in Method 2 Generating Wrappers on page 337 6 2 External Calling Using Compiled Code in Maple e 337 Specifying Argument Passing Conventions Different programming languages have different conventions for parameter passing C always uses pass by value pass by reference must be done explicitly by passing an address Fortran uses pass by reference Pascal uses either depending on how the parameter was declared The Maple external calling mechanism currently supports C For tran and Java calling conventions Automatic wrapper generation is only supported for C There is an external API for writing custom wrap pers for C and Fortran but not Java The default convention used is C To use Fortran calling specify the name FORTRAN as a parameter to define external gt f define external my func FORTRAN To use Java calling specify the name JAVA as a parameter to define external Also specify the CLASSPATH option to point to classes used gt f define external my func JAVA CLASSPATH Some other compiler implementations such as Pascal and C can work with C external calling by using the correct definitions and order of passed parameters Method 2 Generating Wrappers Some types in Maple are not s
153. a sequence of edges end if if not andmap edge gt evalb nops edge 2 edge set then error each edge must be specified as a source target pair end if module export order size vertices edges addedge local N e v n edge pairs N tableO edge pairs gt 1 seq seq v n n N v D v map op 1 indices N 4 vertices O gt map op edge pairsO VVVVVVVVVVVVVVVVVVVVVV VV 128 e Chapter 2 Programming with Modules edges gt map Edge op edge pairs addedge proc src targ if assigned N src and not member targ N src then N src opC NI src targ else N src targ end if NULL end proc order gt nops vertices size gt nops edgesO for e in edge_set do addedge op 1 e op 2 e end do end module gt end proc A graph returned by the constructor Graph2 also satisfies the Graph in terface gt g2 Graph2 a b a c b c D gt type g2 Graph VVVVVVVVVVVVVV VV true Therefore the generic procedure vdeg works equally well with it gt vdeg g2 a 2 0 gt vdeg g2 b 1 1 gt vdeg g2 c 0 2 Note The full source code for these procedures is available in the samples AdvPG graph directory of the Maple installation Generic Computation of Adjacency Matrices Another example of a generic procedure over the Graph interface is the foll
154. ability is very important when you are designing a large software system Edge Object Representation Assume that edges are represented as ob jects that implement the interface module source target The interface provides methods for extracting the source and target vertices from an edge Writing a constructor Edge for edges is easy gt Edge proc src targ settarget proc v the target v gt module gt local the_source the_target gt export source target setsource settarget gt the_source src S the target targ gt source gt the_source gt target gt the_target gt setsource proc v gt the_source v gt end proc gt gt 126 e Chapter 2 Programming with Modules gt end proc gt end module gt end proc First Graph Constructor At first you might choose to adopt a graph representation that is simple to implement Here is a graph constructor that produces graphs represented by storing the vertex and edge sets explicitly as part of the state of a module gt Graphi proc local vertex set edge set description graph constructor edge set args if not andmap type edge set anything anything then error graph must be specified by a sequence of edges end if if not andmap edge gt evalb nops edge 2 edge set then error each edge must be specified as a source target pair en
155. able Manipulation To use Maple tables the following API functions can be used These functions are only available using the C API ALGEB MapleTableAlloc MKernelVector kv void MapleTableAssign MKernelVector kv ALGEB table ALGEB ind ALGEB val 366 e Chapter 6 Advanced Connectivity ALGEB MapleTableSelect MKernelVector kv ALGEB table ALGEB ind void MapleTableDelete MKernelVector kv ALGEB table ALGEB ind M_BOOL MapleTableHasEntry MKernelVector kv ALGEB table ALGEB ind MapleTableAlloc creates a TABLE dag The table is initially empty MapleTableAssign sets the ind element of the given table to the value val That is table ind val where ind can be a NAME or an expression sequence of numbers or any other valid index into a Maple table MapleTableSelect returns the ind element of the given table MapleTableDelete removes the ind element from the table MapleTableHasEntry queries the table to determine whether it con tains an element at index ind If it does TRUE is returned otherwise FALSE is returned Data Selection The following functions are available when using the C API only and deal with selecting from various kinds of Maple data structures ALGEB MapleSelectImaginaryPart MKernelVector kv ALGEB s ALGEB MapleSelectRealPart MKernelVector kv ALGEB s ALGEB MapleSelectIndexed MKernelVector kv ALGEB s M INT dim M INT x ind MapleSelectImaginaryPart and MapleSelectRealPart retu
156. ackage to show the objects that rectangle and arc create gt display a b axes none scaling constrained 5 5 Programming with the plottools Package e 279 BN A dl Example 3 You can tile the plane with a and b type rectangles The following procedure creates a m xn tiling using a procedure g to determine when to use an a tile and when to use a b tile The function g returns either 0 to use an a tile or 1 to use a b tile gt tiling proc g m n VVVVVVVVVVVVVV local i j r h boundary tiles define an a tile r 0 plottools arc 0 0 0 5 0 Pi 2 plottools arc 1 1 0 5 Pi 3 Pi 2 define a b tile r 1 plottools arc O 1 0 5 Pi 2 0 plottools arc 1 0 0 5 Pi 2 Pi boundary plottools curve 0 0 0 n m n m 0 0 0 tiles seq seq seq plottools translate h i j h r g i j 1 i 0 m 1 j 0 n 1 plots display tiles boundary args 4 nargs end proc Example 4 Define the following procedure which randomly returns ei ther 0 or 1 gt oddeven proc rand mod 2 end proc Create a 20 x 10 tiling called a Truchet tiling with no axes and constrained scaling gt tiling oddeven 20 10 scaling constrained axes none 280 e Chapter 5 Programming with Maple Graphics When you use the same procedure again the random tiling is differ ent gt tiling oddeven 20 10 scaling constrained axe
157. al difference between module locals and exports Before the introduction of the module system design by contract was enforced in Maple only by convention Maple routines whose names had to be enclosed in name quotes were considered private and not for client use But this was only a convention Moreover it was necessary to use global variables to communicate information and state among the routines that comprised a subsystem such as solve or assume Now using modules it is possible to design software systems that enforce their contracts by a mechanism embedded in the Maple language Interfaces The contracts discussed previously in this section are represented formally in Maple by an interface An interface is a special kind of structured type It has the form module symseq in which symseq is a sequence of symbols or of typed symbols ex pressions of the form symbol type For example an interface for a ring can be written as gt type ring module zero one while an additive abelian group can take the form gt type abgroup module zero These symbols are the ones to which clients have access as module exports A module is said to satisfy or to implement an interface if it is of the type defined by the interface 2 6 Interfaces and Implementations e 119 gt zb module gt description the integers mo
158. al form of its argument The product of the output values yields the input ring element The other methods only invoke the corresponding built in Maple operations gt type MapleIntegers Ring true gt type MapleIntegers GcdRing true An Interface for Fields The quotient field constructor produces a field An interface that describes fields differs from the one for integral domains by the absence of a gcd method since they are trivial and the addition of the unary operator that computes inverses The methods rem and quo are also not included in the signature for fields because they are trivial in a field Two new methods are included e make for constructing field elements from their numerators and de nominators 2 6 Interfaces and Implementations e 133 e embed the natural embedding of the integral domain D into its field k of fractions Additionally the two methods numer and denonm allow the user to extract the components of a fraction gt type Field module procedure procedure i procedure iprocedure normal procedure iszero procedure isone procedure zero one make procedure embed procedure numer procedure denom procedure VVVVVVVVVV VV ep Bet Naturally the ring Z of integers is not a field gt type MapleIntegers Field false Fields produced by the quotient field constructor satisfy this interface The Quotient Fiel
159. al kernel functions which use remember tables in cluding evalf series divide normal expand diff readlib and frontend The functions evalf series and divide are handled inter nally in a special way for the following reasons e evalf and series need to store some additional environment infor mation Digits for evalf and Order for series Consequently the entries for these are extended with the precision information If a result is requested with the same or less precision than what is stored in the table it is retrieved and rounded If a result is produced with more precision than what is stored it is replaced in the table e evalf remembers only function calls this includes named constants it does not remember the results of arithmetic operations If a division operation succeeds and the divisor is a nontrivial poly nomial the divide function stores the quotient in its remember table Otherwise nothing is stored in the remember table If option remember is specified together with option system at garbage collection time the remember table entries which refer to ex pressions no longer in use elsewhere in the system are removed This provides a relatively efficient use of remembering that does not waste storage for expressions that have disappeared from the expression space 426 e Appendix A Internal Representation and Manipulation Maple Language Arrays and Tables Tables and arrays are provided as data types
160. amming Guide Here is an example of a simple module definition gt module export el local a b a Dent E el x gt a x b x gt end module Evaluating this expression results in a module with one export e1 and 2 3 VVVVVV two local variables a and b A template for a module definition looks like module local L export E global G options 0 description D B end module The simplest valid module definition is gt module end module end module This module definition does not have exported variables locals ref erences global variables or a body of statements The module to which this evaluates is not very useful The Module Definition Every module definition begins with the keyword module followed by an empty pair of parentheses Following that is an optional declaration section and the module body The keyword combination end module or just end terminates a module definition 48 e Chapter 2 Programming with Modules The Module Body The body of a module definition consists of the following e Zero or more Maple statements The body is executed when the mod ule definition is evaluated producing a module e A number of assignment statements that give values to the exported names of the module The body of a module definition can also contain e Assignments to local variables and performance of arbitrary compu tations e return statement but ca
161. and 238 Defining New Constants len 238 Defining New Functions 240 4 5 Using the Matlab Package 243 4 0 Conclusion 202 25 asses ae Se hok a a ew ee Sones 244 Programming with Maple Graphics 245 Maple Plots cit RR o e RES Pe ed 245 Creating Plotting Procedures 245 This Chapter too aaa SOR ia 245 5 1 Basic Plotting Procedures o 246 Altering a Plot i o ad et Bad 248 5 2 Programming with Plotting Library Procedures 249 Contents e vii Plotting a Loop e sesh aw ek ea ook Rd 249 EiXeEClSe nl kai deg se as dt es Be ha ceste ae daa ed 251 A Ribbon Plot Procedure 04 251 5 3 Maple Plot Data Structures 254 The PLOT Data Structure 256 Arguments Inside a PLOT Structure 257 AvSum Plot ia a Be ee id IO Rus 259 The PLOT3D Data Structure 262 Objects Inside a PLOT3D Data Structure 264 5 4 Programming with Plot Data Structures 266 Writing Graphic Primitives 266 Plotting Gears e 268 Polygon M shes serri ee oe eg doy Ra 272 5 5 Programming with the plottools Package 273 A Pie Charts coke il a Se oe 275 A Dropshadow Procedure 276 Creating a Tiling 2 2 oS es Be Ge a 278 Ac Smith Chart xu ae A iem ee ele eee 280 ExerciS os ee OY RR ea des 281 Modi
162. and module locals translated to private static methods For detailed information on translation to a specific language refer to the help pages for that language for example CodeGeneration C and CodeGeneration General CDetails 6 1 Code Generation e 321 You can use many options with the CodeGeneration functions For detailed information refer to the CodeGenerationOptions help page Some of the more commonly used options follow e optimize value This option specifies whether optimization is per formed The default value is false When the value is true the codegen optimize function is used to optimize the Maple code be fore it is translated output value This option specifies the form of the output By de fault formatted output is printed to the terminal If a name different from the name string or a string is specified as the value the result is appended to a file of that name If the value is the name string a string containing the result is returned This string can then be assigned and manipulated reduceanalysis value This option specifies whether a reduced form of type analysis is performed in the case that the Maple in put is a list of equations representing a computation sequence Us ing the default value reduceanalysis false can reduce the num ber of type mismatches in the translated code However using the reduceanalysis true option can significantly reduce the time and memory required for translation No
163. ant You may be familiar with the C and fortran functions in the codegen package It is recommended that you use the newer CodeGeneration package instead However the codegen package also contains a number of support functions not currently available in the CodeGeneration package which can be used to preprocess the Maple input before translation with the CodeGeneration functions Calling CodeGeneration Functions Call the CodeGeneration functions using the following syntax where L is one of the supported languages for example C CodeGeneration L expression options The expression can take one of the following forms e A single algebraic expression Maple generates a statement in the target language assigning this expression to a variable A list of equations of the form name expression Maple interprets this as a sequence of assignment statements Maple generates the equivalent sequence of assignment statements in the target language e A list array or rtable Maple generates a statement or sequence of statements assigning the elements to an array in the target language e A Maple procedure or module Maple generates an equivalent struc ture in the target language For example to translate a procedure to C Maple generates a function along with any necessary directives for library inclusion To translate a module to Java Maple gener ates a Java class declaration with exports translated to public static methods
164. antissa The second integer is called the exponent The number represented is m x 10 Examples of floating point numbers in Maple are 3 1415 1 0 0 0007 1 0e0 and 2e1234567 The last two are examples of floating point numbers entered in scientific notation the e separates the mantissa and expo nent of the number Such numbers can also be used to represent complex numbers as can exact integers and rationals for example 1 0 2 7 I In some contexts Maple distinguishes between software floats and hardware floats The evalhf evaluator discussed in section 4 2 for ex ample works with hardware floats and Maple can construct certain kinds of matrices and vectors with hardware float entries Generally however Maple works with software floats to perform approximate but usually very accurate numerical calculations Floating point number systems are approximations to the mathe matical set of real and complex numbers and hence necessarily have limitations Most importantly such systems have limited range there are largest and smallest representable numbers and limited precision the set of representable floating point numbers is finite One very important feature of the Maple software floating point system is that you control the precision you can specify the precision Maple uses for floating point computations Some of the specific details of these computation systems are provided in the next few sections Software
165. ap y gt COLOR HUE y x colorinfo gt end proc This procedure uses the convert gridpoints procedure to generate a list of lists of function values that specify the colors using hue coloring gt convert sin x y colorgrid x 0 1 y 0 1 grid 2 3 COLOR HUE 0 COLOR HUE 0 COLOR HUE 0 COLOR HUE 0 COLOR HUE 0 479425538604203006 COLOR HUE 0 841470984807896505 Example 9 The final version of the vectorfieldplot procedure is gt vectorfieldplot proc F ri r2 VVVVVVVVVVVVVVVVVV VV local v m n a b dx dy opts p vi v2 L i j norms colorinfo xscale yscale mscale v makevectors F r1 r2 args 4 nargs vi v 3 v2 v 4 n nops vi m nops v1 1 a b dx dy domaininfo v 1 v 2 m n Determine the function used for coloring the arrows opts args 4 nargs if not hasoption opts color colorinfo opts then Default coloring will be via the scaled magnitude of the vectors L max seq seq vi1 jl il 2 v2 jl il 2 i 1 m j 1 n colorinfo F 1 2 F 2 2 L end if 5 6 Vector Field Plots e 295 Generate the information needed to color the arrows colorinfo convert colorinfo colorgrid ri r2 op opts Get all the norms of the vectors using zip norms zip x y gt zip u v gt if u 0 and v 0 then 1 else sqrt u 2 v 2 end if x y vi v2 Normalize vi and v2 agai
166. aphical conventions e courier font Maple command package name and option name e bold roman font dialog menu and text field e italics new or important concept option name in a list and manual titles e Note additional information relevant to the section e Important information that must be read and followed Customer Feedback Maplesoft welcomes your feedback For suggestions and comments related to this and other manuals email docQ maplesoft com Preface 1 Procedures Variables and Extending Maple Prerequisite Knowledge Before reading this chapter you must have an understanding of Maple evaluation rules for variables and parameters as described in chapter 6 of the Introductory Programming Guide In This Chapter Nested Procedures You can define a Maple procedure within another Maple procedure Procedures That Return Procedures You can create procedures that return procedures by using Maple evaluation rules Local Variables Local variables can exist after the procedure which cre ated them has exited This feature allows a procedure to return a proce dure The new procedure requires a unique place to store information Interactive Input You can write interactive procedures querying the user for missing information or creating an interactive tutorial or a test Extending Maple The Maple software includes useful mechanisms for extending Maple functionality which reduce the need to write special pur
167. aple reads and 192 e Chapter 3 Input and Output processes commands The terminal identifier refers to the top level in put stream the one which was the current input stream when you started Maple When Maple is run interactively default and terminal are equiv alent Only when reading commands from a source file using the read statement does a distinction arise In that case default refers to the file being read whereas terminal refers to the session Under UNIX if input is redirected from a file or pipe terminal refers to that file or pipe Note that only the symbols default and terminal are special the strings default and terminal refer to files with those names 3 3 File Descriptors versus File Names The commands of the Maple I O library refer to files in one of two ways by name or by descriptor Name Referring to a file by name is the simpler of the two methods The first time Maple performs an operation on the file it opens the file either in READ mode or in WRITE mode and as a TEXT file or a BINARY file as appropriate to the operation that it is performing The primary advantage of referring to files by name is simplicity However you will experience a slight performance penalty for using this method especially if performing many small operations on a file such as writing individual characters Descriptor Referring to a file by descriptor is only slightly more complex and is a familiar concept to those who hav
168. apter 2 Programming with Modules if assigned ruletab b then ruletab b expr var else gt procname args end if end if end proc addRule list set tabular O gt map differentiate args addRule O gt map differentiate args addRule expr var gt op 1 expr differentiate subsop 1 1 expr var differentiate op 1 expr var subsop 1 1 expr diffPower proc expr var local b e Assert type expr 7 b e op expr if has e var then expr differentiate e var 1n b e differentiate b var b else simpler formula e b e 1 differentiate b var end if end proc addRule eval diffPower addFunc sin cos addFunc cos x gt sin x addFunc exp exp addFunc ln x gt 1 x Hoi 6tc VVVVVVVVWVVVVVWVWVWVVVVVVVVVVVVVVVVVVV0V gt end module gt differentiate DiffImpl differentiate To give the set of rules for nonfunctional expressions similar extensibility you can store those rules in a table The table is indexed by the primary or basic type name for the expression type as given by the Maple procedure whattype gt whattype a 2 gt whattype a b 2 1 Syntax and Semantics e 69 gt whattype a sqrt 2 gt whattypel f x g x 1 5 list A rule is expressed by a procedure of two arguments expr and
169. arbage collection and it is the re sponsibility of the external component to free it when it is finished using it 404 e Appendix A Internal Representation and Manipulation FOREIGN data structures can be created and managed in external code via the MaplePointer API functions For more information refer to MaplePointer Function Call FUNCTION name expr seq attrib expr Maple syntax name exprSeq Length 2 or 3 with attributes This structure represents a function invocation as distinct from a procedure definition that is represented by the PROC structure The name entry follows the same rules as in ASSIGN or it may be a PROC structure The expr seq entry gives the list of actual parameters and is always an expression sequence possibly of length 1 indicating no parameters Garbage GARBAGE Maple syntax none Length 1 or more This structure is used internally by the Maple garbage collector as a temporary object type for free space Hardware Float HFLOAT floatword HFLOAT floatword floatword Maple syntax none Length 2 on 64 bit architectures 3 on 32 bit architectures This structure is used to hold a hardware floating point value The one or two words always 8 bytes after the header hold the actual double precision floating point value HFLOAT objects are currently not available directly to the user but th
170. arrays 3 5 Input Commands e 201 The following input must consist of a one or two dimensional array of floating point or integer values Characters encountered during scanning are categorized into three classes numeric separator and terminator All the characters that can appear within a number the digits decimal point signs E e D and d are numeric Any white space commas or square brackets are separators square bracket not immediately followed by a comma and any other character is a terminator If a backslash is encountered it and the following charac ter are ignored The dimensions of the array are determined by the number of lines read and the number of values in the first line If either of these is 1 or if the number of rows multiplied by the number of columns does not equal the total number of values read a one dimensional array is produced The definition of the first line is everything read up to the first line break that does not immediately follow a comma or a backslash or up to the first closing square bracket that is immediately followed by comma This method can read anything that can be written by the corre sponding printf typical tables of numbers and lprinted or saved in text form Maple lists and lists of lists The result is returned as an hfarray of one or two dimensions hx The following input must consist of a one or two dimensional array of floating point numbers in IEE
171. arsing error it is a computation error e The msg parameter contains the text of the error message If an errorCallBack function is not specified error messages are sent to the textCallBack function with the MAPLE TEXT ERROR tag For more information on the textCallBack function see the previous subsection Text Call back Function Status Call back Function The statusCallBack function is called when Maple reports resource usage information equivalent to the bytes used messages in stand alone Maple void M DECL statusCallBack void data long kilobytesUsed long kilobytesAlloc double cpuTime e The cpuTime parameter is the number of seconds of CPU time con sumed since the Maple kernel was started This includes time spent in any call back functions e The bytesUsed parameter indicates how many bytes of storage have been allocated by the Maple internal storage manager e The bytesAlloc parameter indicates how many bytes of storage have been allocated by the operating system by the Maple internal storage manager If no statusCallBack function is specified status information is sent to the textCallBack function in the form bytes used 1d alloc 41d time 1 2f with the MAPLE TEXT STATUS tag For more information on the textCallBack function see Text Call back Func tion on page 379 382 e Chapter 6 Advanced Connectivity Read Line Call back Function The readLineCallBack function is called when the
172. at im plements operations on circles The same idea is used to select the shape specific constructor it is the value assigned to the local variable ctor upon a true return value from the second call to member Any remaining arguments are used as data to construct the shape These are passed to the make export in a shape specific submodule if found and are not checked further at this level This design localizes the shapes to the corresponding submodule Conditional Dispatching The procedure area uses a simple conditional dispatching mechanism The tag of the input shape is extracted and is used in direct comparisons with hard coded values to determine which shape specific area subroutine to call to perform the area computation area proc shape description compute the area of a shape local tag if not type shape function then error expecting a shape expression but got 41 shape end if Extract the tag information from the shape tag op O shape Dispatch on the tag value if tag POINT then Shapes point area shape elif tag SEGMENT then Shapes segment area shape elif tag CIRCLE then Shapes circle area shape elif tag SQUARE then Shapes square area shape elif tag TRIANGLE then Shapes triangle area shape else VVVVVVVVVVVVVVVVVVVVVVV VV error not a recognized shape 41 tag 2 3 Packages e 101 gt end if gt end
173. ated to a prob lem domain Much of the functionality of the standard Maple library resides in packages 43 44 e Chapter 2 Programming with Modules Objects are easily represented using modules In software engineering or object oriented programming an object is defined as something that has both state and behavior You compute with objects by sending them messages to which they respond by performing services Generic Programs accept objects that possess specific properties or be haviors The underlying representation of the object is transparent to generic programs Examples For better understanding it is helpful to examine a small module Example 1 Simple Module When Maple evaluates the right side of the assignment to TempGenerator it creates a module using the module definition that begins with module and ends with end module TempGenerator module description generator for temporary symbols export gentemp local count count 0 gentemp proc count 1 count tools gensym T count end proc end module VVVVVVVVVVV Temp Generator module local count export gentemp description generator for temporary symbols end module Example Summary The module definition resembles a procedure defi nition The main differences are the use of the keyword module instead of proc and the corresponding terminator and the export declaration following the description string Examp
174. ative law to Hamiltoni ans The following procedure uses the typematch command to determine if its argument is of the form a amp b amp c and if so it selects the a b and c gt s i x amp y amp zZ s r amp y 82 z gt typematch s amp amp a anything b anything gt c anything true gt a b C T Y Z 1 5 Extending Maple e 41 The userinfo Command You can give the user details about procedure simplifications using the userinfo command The simplify amp pro cedure prints an informative message if you set infolevel simplify or infolevel all to greater than or equal to least 2 gt simplify g9 proc x 2 locala b c gt if typematch x gt TO 27 a anything b anything gt c anything then em userinfo 2 simplify applying the associative law z ag b amp c gt else gt X gt end if gt end proc Applying the associative law simplifies some products of Hamiltoni ans gt x amp I amp J amp K r amp I amp J amp K gt sinplify CD If you set infolevel simplify to a sufficiently large value Maple prints information on the methods used by simplify while attempting to simplify the expression gt infolevel simplify 5 infolevel simplify 5 2 w amp x amp y amp 2 w amp z amp y z gt simplify CD simplify amp applying the associative law simplify amp
175. ature Get a translation for a unary or binary operator Get the current print handler procedure for an intermediate form name Indent a printed line when supplied as an argument to Print Print arguments to buffer Initiate printing of an intermediate form Printer module export Print Target GetFunctionSignature AddLibrary AddOperator GetOperator AddType GetType AddPrintHandler GetPrintHandler SetLanguage Attribute ApplyLanguageAttribute GetLanguageAttribute SetPrecedence GetPrecedence GetIncludes GetEzxpression Type GetScopeName GetScopeStructure Indent Comment Endline PopIndentation PushIndentation Print PrintBinary PrintParentheses PrintStatementBlock PrintDelimitedList PrintUnary Function AddFunction AddFunctions GetFunction pexports Bud auedile gt Printer AddOperator Addition CL gt Printer AddFunction sin numeric numeric sine sine 6 1 Code Generation e 327 gt Printer Get perator Addition on gt Printer GetFunction sin sine numeric numeric Within a language definition the Printer module associated with the language definition can be referenced by the name Printer Note This applies for both language definition methods described in the next section Language Translator Definition There are two distinct methods of defining a language translator for use by CodeGen
176. bGroup G proc s gt use G G eq in gt s gF g s gt end use end proc gt end proc Generic Interfaces Dimino s algorithm is relatively slow For many classes of groups there are better alternatives for enumerating group elements Use Dimino s algorithm only as a last resort The advantage of Dimino s algorithm is that it works for any finite group To provide a clean and uniform interface to the enumeration functionality you can develop a frontend procedure which hides the details to choose the best available algorithm gt GroupElements proc G description enumerate the elements of a finite group if type G Group then if type G elements set then G elements elif type G elements procedure then G procedure else G elements Dimino G VVVVVVVV 2 6 Interfaces and Implementations e 149 gt end if gt else gt gt procname args gt end if gt end proc Several elements of the design allow you to take advantage of structural knowledge to improve efficiency This routine first checks whether the export elements of its input group is of type set If it is then it is taken to be a stored enumeration of the group elements and is simply returned Otherwise if the export elements is a procedure then it is taken to be a perhaps specialized routine for computing the requested enumeration Finally Dimino s algorithm is used as a last r
177. bjects allowed in a call to evalhf are arrays of numbers either table based arrays or rtable based Arrays If an array has unas signed entries evalhf initializes them to zero 4 2 Hardware Floating Point Numbers e 233 Example The following procedure calculates the polynomial 24 5z 4 422 gt p proc x gt local a i gt a array 0 2 gt a 0 2 gt a 1 5 a 2 4 gt sum a il l x i i 0 2 gt end proc gt p x 2 5x3 4x If you intend to enclose p in a call to evalhf you cannot define the lo cal array a using array 1 3 2 5 4 because lists are not supported in evalhf You can however enclose p in a call to evalhf if the parameter x is a number gt evalhf p 5 6 155 439999999999997 You can also pass an array of numbers as a parameter inside a call to evalhf Example The following procedure calculates the determinant of a 2 x 2 matrix The 2 2 entry in the array a is unassigned gt det proc a array 2 gt a 1 1 a 2 2 a 1 2 al2 1 gt end proc gt a array 2 3 3 4 4 9 gt 3 4 ole WIN a2 2 V det a 234 e Chapter 4 Numerical Programming in Maple 2 1 32273 If you call det from inside a call to evalhf Maple uses the value 0 for the unassigned entry a 2 2 gt evalhf det a 0 333333333333333314 evalhf passes arrays by value so the 2 2 entry of a is still unas signed gt a 2 2
178. bstractions A record is simply an aggregate data structure in which the members have fixed names Modules provide additional facilities such as computation at initialization and access control Instantiating Records To create a record use the Record constructor In the simplest form it takes the slot names as arguments gt rec Record a b c rec module exporta b c option record end module The name rec is now assigned a record with slots named a b and c These are the slot names for the record rec You can access and assign these slots by using the expressions rec a rec b and rec c gt rec a 2 gt rec a 2 2 Records e 73 If not assigned the record slot evaluates to the local instance of the slot name gt rec b gt evalb 2b false This is useful because the entire record can be passed as an aggregate data structure The record constructor accepts initializers for record slots That is you can specify an initial value for any slot in a new or in an unassigned record by passing an equation with the slot name on the left side and the initial value on the right gt r Record a 2 b sqrt 3 r module export a b option record end module gt r b v3 In addition you can attach type assertions to record slots To intro duce a type assertion use a structure with the slot name specified as the first operand Type assertions
179. c args end proc A end if elif type A procedure then subs X X eval A elif type A moduledefinition module then error cannot copy a module or module definition else A end if Statement 4 has not been called This statement can be reached by assigning an array or table to a name and by calling copy with that name as argument 2t copy table gt copy t gt showstat copy proc A local X Calls Seconds Words 94 e Chapter 2 Programming with Modules PROC 4 0 000 1116 1 4 0 000 88 if type A rtable then 2 1 0 000 167 rtable rtable indfns A rtable dims A A rtable options A readonly false elif type A table then 3 3 0 000 20 if type A name then 4 1 0 000 287 map proc args end proc eval A else 5 2 0 000 554 map proc args end proc A end if elif type A procedure then 6 o 0 000 ol subs X X eval A elif type A moduledefinition module then 7 0 0 000 ol error cannot copy a module or module definition else 8 0 0 000 0 A end if end proc The only case that has not been called is the one in which the argument to copy is something other than an rtable array or table gt copy 2 5 gt showstat copy copy proc A local X Calls Seconds Words PROC 5 0 000 1140 1 5 0 000 112 if type A rtable then 2 1 0 000 167 rtable rtable indfns A rtable dims A
180. c whether using software or hardware floats you are using approximate numbers rather than pre cise real numbers or expressions Maple can work with exact symbolic expressions The difference between an exact real number and its floating point approximation is called the roundoff error For example suppose you request a floating point representation of 7 gt pi evalf Pi m 3 141592654 Maple rounds the precise value m to ten significant digits because Digits is set to its default value of 10 You can approximate the roundoff error above by temporarily increasing the value of Digits to 15 gt evalf 15 Pi pi 0 41021 107 Roundoff errors arise from the representation of input data and as a result of performing arithmetic operations Each time you perform an arithmetic operation on two floating point numbers the infinitely precise 4 3 Floating Point Models in Maple e 237 result is generally not representable in the floating point number system and therefore the computed result also has an associated roundoff error For example suppose you multiply two ten digit numbers with Digits 10 The result can have nineteen or twenty digits but Maple stores only the first ten digits gt 1234567890 1937128552 2391516709101395280 gt evalf 1234567890 evalf 1937128552 0 2391516709 10 Whenever you apply one of the four basic arithmetic operations addi tion subtraction multiplication division
181. can be added to to the set of languages recognized by CodeGeneration by using the CodeGeneration LanguageDefinition Add command Note When creating your language definition module you must delay the evaluation of the module by using single quotes before adding it using LanguageDefinition Add That is the language definition module must be added as a module definition not as a module 6 2 External Calling Using Compiled Code in Maple e 329 Example 7 This example adds a definition module Note the use of delayed evaluation quotes around the module definition gt UppercaseFortran77 module 2 export Printer PrintTarget gt Printer eval CodeGeneration LanguageDefinition Get gt Fortran Printer gt PrintTarget proc ic digits prec func prec namelist gt Printer SetLanguageAttribute Precision prec gt StringTools UpperCase Printer PrintTarget args gt end proc gt end module gt CodeGeneration LanguageDefinition Add UppercaseFortran gt UppercaseFortran77 Using a New Translator After adding the definition of the language us ing either the LanguageDefinition Define or LanguageDefinition Add commands translate to the new language using the CodeGeneration Translate command Example8 This example demonstrates the use of a new translator Com pare the output of the Fortran command with that of the new translator gt pi procO sin x y z trunc x end proc
182. ce from a file it translates it to the single newline char acter When Maple writes to a binary file no translation takes place it reads newline characters and writes them as the single byte with value 10 When running Maple under the UNIX operating system or one of its many variants Maple makes no distinction between text and binary files It treats both in the same way and no translation takes place Identifiers Commands that can specify or query whether a file is a text file or a binary file use the identifiers TEXT and BINARY respectively Read Mode versus Write Mode At any given time a file may be open either for reading or for writing e You cannot write to a file that is open only for reading If you attempt using the Maple I O library to write to a file which is open for reading Maple closes and reopens the file for writing If the user does not have the necessary permissions to write to the file if the file is read only or resides on a read only file system errors occur e You can write to and read from a file that is open for writing Identifiers Commands where you can specify or query whether a file is open for reading or writing use the identifiers READ and WRITE respec tively The default and terminal Files The Maple I O library treats the Maple user interface as a file The iden tifers default and terminal refer to this file The default identifier refers to the current input stream the one from which M
183. cit Scoping Rules The bindings of names that appear within a module definition are deter mined when the module definition is simplified Module definitions are subject to the same implicit scoping rules that procedure definitions are Under no circumstances is a name ever implicitly determined to be ex ported by a module implicitly scoped names can resolve only to locals or globals Lexical Scoping Rules Module definitions along with procedure definitions obey standard lex ical scoping rules Modules may be nested in the sense that a module may have any of its exports assigned to a module whose definition occurs within the body of the outer module Here is a simple example of a submodule gt m module gt export s gt s module gt export e gt e proc gt print HELLO WORLD gt end proc 2 end module gt end module The global name m is assigned a module that exports the name s Within the body of m the export s is assigned a module that exports the name e As such s is a submodule of m The Shapes package described later illustrates a nontrivial use of submodules Modules and procedures can be mutually nested to an arbitrary depth The rules for the visibility of local variables including exported locals of 2 1 Syntax and Semantics e 59 modules and procedure parameters are the same as the rules for nested procedures Parameterized Modules Modules do not take explicit parameters You
184. claration Its format is the same as for procedures Here is a variant on the previous Hello module which uses a local variable gt Hello module local loc export say gt gt loc HELLO WORLD gt say proc gt gt gt V print loc end proc end module Local variables are not visible outside the definition of the module in which they occur They are private to the module and are exactly analogous to local variables of procedures A local variable in a module or procedure is a distinct object from a global variable with the same name Local variables are normally short lived variables the normal lifetime of a local variable is the execution time of the body of code a module or procedure body to which it is local Local variables may persist once execution of the scope in which they oc cur has completed but they are normally inaccessable and will eventually be recycled by the Maple automatic storage management system Exported Local Variables Procedures and modules both support local variables Only modules sup port exported local variables often referred to simply as exports Module exports are declared using the export declaration It begins with the keyword export after which follows a nonempty sequence of symbols A name is never exported implicitly exports must be declared The result of evaluating a module definition is a module You can view a module as a collection of its exports
185. code can be compiled and used inde pendent of Maple External Calling Using Compiled Code in Maple Compiled code can be seamlessly integrated into Maple Maple can ex ecute functions written in C Fortran or Java passing parameters and returning values as if the external function were a native Maple pro cedure Using compiled code truly extends the Maple kernel The kernel extension must be reliable because it can affect the entire Maple program OpenMaple Using Maple in Compiled Code Maple can be used by compiled C or C code using OpenMaple The OpenMaple Application Programming Interface API provides access to Maple algorithms and data structures 6 1 Code Generation The CodeGeneration Package Conversion of Maple code to other programming languages can be per formed using the CodeGeneration package Translators to several pro 319 320 e Chapter 6 Advanced Connectivity gramming languages are available For a complete list refer to Code Generation You can use the Maple symbolic environment to develop a numeric algorithm and then translate it to another language for inclusion in an existing program or for faster execution To perform a translation to one of the supported languages use the CodeGeneration package function of the same name or the context sensitive menu options in the worksheet environment You can also extend the predefined translators or create translators for other programming languages Import
186. columns of V can be interpreted as an orthogonal basis for the semantic factors of the correlations between documents For large corpora the rank of may be on the order of a few thousand To obtain a rank k approximation of A that is closest in the least squares sense choose a rank k smaller than the rank of S say on the order of a few hundred and form the matrix Az Uy Sp VE where U consists of the first k columns of U V consists of the first k columns of V and Sz is the first k x k submatrix of S When the matrix A is a term document matrix its approximation Az is used as a surrogate corpus index for searching It can be argued that the matrix Aj is better able to determine correlations between terms in such a way that searches using it are able to approximate results obtained by human expert indexing For example in a corpus on pets some documents may contain the term cat others the term feline and still others may contain both terms LSI places documents containing only one of these terms closer together in the lower dimensional projection by virtue of their co occurrence in some of the documents in the corpus In practice the rank k chosen for the approximation is an empirically determined value based on the quality of search results Because LSI is a statistical technique in general it produces useful results only for large corpora The Search Engine Package This section modifies the SearchEngine package to
187. contain an isomorphic copy of k Concretely the quotient field of an integral domain D can be thought of as the set of reduced fractions n d with n d D A formal con struction can be produced by defining an equivalence relation on the set D x DN 0 according to which two pairs n1 d1 and n2 d2 are equivalent only if ni d2 n2 dl A representative from each equivalence class is chosen to represent the field element defined by that class This understanding guides the com puter representation of the quotient field Unit Normal Representatives If R is a commutative ring with multi plicative identity then U R x R R u r gt u r is a natural action of the group U R of units of R on R Each orbit of this action has a representative called the unit normal representative of the class Consider an effective mapping R gt R that selects the unit normal representative of each class For instance for the ring Z of integers the group U Z of units is the set 1 1 the orbits are the sets n n for n Z 0 together with 0 and you take the unit normal representative to be the positive member of each orbit and 0 for the orbit 0 Thus the unit normal mapping simply computes the sign and absolute value of an integer The unit normal mapping on the ring k T of polynomials in an indeterminate T over a field k is in which lc p T denotes the leading coefficient of the polynomial p T The group of
188. copied back to Maple unless the string is declared with a size Declaring a size on a string to be passed to a Java method has no effect The string size will not be limited and modifications are not copied back Array Data Formats An array of data is a homogeneous n rectangular structure matching the Maple rtable formats Any datatype that is ac cepted by the Maple Array Matrix or Vector constructor are accepted The options are used to specify array conventions They are the same optional arguments that can be passed to the Array constructor in Maple The only significant difference is that indexing functions must be specified with indfn and are not allowed unless using custom wrapper external calling These options override any defaults normally assumed by the Array constructor datatype Only hardware datatypes are allowed This field is re quired but the equation form of entry is not necessary For example simply specifying integer 4 is sufficient order This can be unspecified for vectors because Fortran and C representation is the same Otherwise this defaults to Fortran order when calling a Fortran library and C order when calling a C or Java library storage If this is not specified the default is full rectangular storage subtype This is optional and restricts the subtype to Array Matrix Vector row or Vector column indfn This specifies the indexing functions of the Array Matrix or
189. ctab functab table functab sin cos functab cos x gt sin x functab exp exp functab 1n x gt 1 x if not has expr var then 0 elif expr var then 1 elif type expr then map procname args elif type expr then a b op expr if a var and not has b var then b a b 1 procname a var else gt procname args end if elif type expr then a b op 1 expr subsop 1 1 expr procname a var b a procname b var elif type expr function and nops expr 1 then functions of a single variable chain rule b op 0 expr the name of the function a 7 op 1 expr the argument if assigned functab b then This is a known function functab b a procname a var else This function is not known return unevaluated gt procname args VVVVVVVVVVVVVVVVVVVVVVVVVV VV VV VV VV 66 e Chapter 2 Programming with Modules gt end if gt else gt procname args gt end if gt end proc This not only simplifies the code used for the function case but also makes it very easy to add new functions Drawbacks Unfortunately this implementation has serious drawbacks e It is not extensible The known functions are hardcoded as part of the procedure definition for differentiate New functions cannot be added without ed
190. d Functor Here is the generic constructor for quotient fields QuotientField proc R GcdRing description quotient field functor module description a quotient field export eps xf ext Hy A zero one iszero isone make numer denom normal embed make proc n d local u nd if R iszero d then error division by zero end if u nd R unormal d FRACTION u n nd end proc embed d gt make d R one numer f gt opC 1 f denom f gt op 2 VVVVVVVVVVVVVVVVVVV VV 134 e Chapter 2 Programming with Modules local g a b if R isone g then end proc zero embed R zero one embed R one iszero f gt evalb normal f zero isone f gt evalb normal f one normal proc f g R gcd numer f denom f f Dd gt p S gt gt gt gt gt gt f gt else gt a R quo numer f g gt b R quo denon f g gt make a b gt end if gt end proc gt f gt normal R numer f denom gt f gt normal make denom f numer f gt proc a b gt use 6 R R in gt normal make numer a denom b gt denom a numer b gt denom a denom b gt end use gt end proc gt proc a b gt use R in gt normal
191. d MapleDispose MKernelVector kv ALGEB s void MapleGcAllow MKernelVector kv ALGEB a void MapleGcProtect MKernelVector kv ALGEB a MapleAlloc allocates nbytes bytes of memory and returns a pointer to it Garbage collection of this memory is handled by Maple Note that to allocate this memory a new BINARY dag structure is created and a pointer to the data part of the dag is returned The following code snapshot might be seen in a wrapper that converts an integer reference a name in Maple to C ALGEB argl INTEGER32 i i MapleAlloc kv sizeof INTEGER32 i MapleToInteger32 kv arg1 MapleDispose frees the memory allocated to the structure s This should only be used on data structures created using MapleAlloc or those that were created externally and are guaranteed not to be pointed to by any other Maple structure The Maple garbage collector reclaims any memory not pointed to by any other data structure so in typical cases it is not necessary to use MapleDispose MapleGcProtect prevents the algebraic a from being collected by the Maple garbage collector The memory pointed to by a is not freed until Maple exits or a call to MapleGcAllow is issued Any dags that must persist between external function invocations must be protected This 6 3 OpenMaple Using Maple in Compiled Code e 373 includes any external global or static ALGEB variables that will be referred to in a later external call Failure to protect s
192. d by three points The curve is colored with RGB values 1 0 0 0 which correspond to red The plot has a horizontal axis running from 0 to 5 Maple by default deter mines the scale along the vertical axes using the information that you provide in the vertical components of the curve The adaptive false and numpoints 3 options turn off adaptive sampling and ensure that the curve consists of only three points Example 2 This example is the graph of z ry over a 3 x 4 grid The PLOT3D structure contains a grid of z values over the rectangular region 0 1 x 0 2 gt lprint plot3d x y x 0 1 y 0 2 grid 3 4 PLOT3D GRID O 1 0 2 Array 1 3 1 4 1 2 2 333333333333333314 2 3 666666666666666629 2 4 1 3 2 666666666666666629 3 3 1 33333333333333326 3 4 2 datatype float 8 storage rectangular order C_order AXESLABELS x y 256 e Chapter 5 Programming with Maple Graphics The structure includes labels x and y for the z axis and y axis but no label for the z axis Example 3 This example is again the graph of z xy but in cylindrical coordinates The PLOT3D structure now contains a mesh of points that define the surface along with the information that the plotting device must display the surface in a point style gt lprint plot3d x y x 0 1 y 0 2 grid 3 2 gt coords cylindrical style point PLOT3D MESH Array 1 3 1 2 1 3 1 1 2 3 2
193. d if vertex set map op edge set edge set map Edge op edge set module export order size vertices edges addedge required exports vertices gt vertex set edges gt edge set addedge proc src targ edge set Edge src targ union edge set vertex set src targ union vertex_set NULL end proc order gt nops vertices size gt nops edges end module gt end proc If you create a small graph using this constructor VVVVVVVVVVVVVVVVVVVVVVVVVVV VV VV gt gi Graphi a b La c b c D gt type gi Graph true 2 6 Interfaces and Implementations e 127 you can use the routine vdeg with the graph g1 since graphs produced by Graph1 implement the Graph interface gt vdeg gl a 2 0 gt vdeg gl b 1 1 gt vdeg gl c 0 2 The important feature of the procedure vdeg is its generic quality It can be used with any implementation of graphs that implements the Graph interface previously specified Second Graph Constructor Here is another different implementation of the Graph interface The graph is represented by using a table N in which the neighbors of each vertex are stored gt Graph2 proc local vertex_set edge_set description graph constructor edge set args vertex set map op edge set if not andmap type edge set list then error graph must be specified by
194. der of the 3 D gear double these points gt bord border double seq outside 2 a 1 1 1 16 gt a 0 15 1 2 gt PLOT3D seq POLYGONS b b bord To display the gear combine these two PLOT3D structures into a single structure Use STYLE PATCHNOGRID as a local option to the top and bottom of the gear so that they do not appear as several triangles gt PLOT3D POLYGONS faces STYLE PATCHNOGRID gt Seq POLYGONS b b bord gt STYLE PATCH SCALING CONSTRAINED 272 e Chapter 5 Programming with Maple Graphics Note The global STYLE PATCH and SCALING CONSTRAINED options apply to the whole PLOT3D structure except where the local STYLE PATCHNOGRID option to the top and bottom of the gear over rides the global STYLE PATCH option Polygon Meshes MESH data structures described on page 265 are generated when you use plot3d to draw parameterized surfaces Example 4 converts a mesh of points to the set of vertices for the corresponding polygon By using poly gons instead of a MESH structure you can modify the individual polygons Example 4 The polygongrid procedure creates the vertices of a quad rangle at the i j th grid value gt polygongrid proc gridlist i j gt gridlist j i gridlist j i 1 gt gridlist j 1 i 1 gridlist j 1 i gt end proc Use the makePolygongrid procedure to construct the appropriate polygons gt makePolygongrid proc gridlist local m
195. der the function x gt x sin z z gt MyFcn x gt x sin x x 3 MyFen x gt pum x This function is not defined at x 0 but you can extend it as a continuous function by placing the limiting value in the MyFcn remember table gt MyFcn 0 limit MyFcn x x 0 1 MyFcn 0 6 4 4 Extending the evalf Command e 241 For small values of z sin x is almost equal to z so the subtraction x sin x in the definition of MyFcn can lead to inaccuracies due to catas trophic cancellation When you evaluate v below to ten digits only the first two are correct gt v MyFcn 0 000195 v MyFen 0 000195 gt evalf v 0 1618368482 gt evalf v 2 Digits 0 16666666634973617222 If you depend on accurate numerical approximations of MyFcn you must write a custom procedure to compute them You could write such a procedure by exploiting the series expansion of MyFcn gt series MyFcn x x 0 11 i vy ee oo d 6 8 O 6 120 5040 3628807 TOW The general term in the series is pi es qul des i 0 dp Gea C Note that a aj 1z 2i 2 2i 3 e For small values of z you can then calculate an approximation to MyFcn x by adding terms until the Maple model for software floating point numbers cannot distinguish successive partial sums e For larger values of x catastrophic cancellation is not a problem so you can use evalf to evaluate the expr
196. description a quotient field end module gt type RR Field true To make printed fractions more readable introduce the following ex tension to the print command gt print FRACTION n d gt sort n sort d Finally construct a few examples and test the arithmetic gt a RR make randpoly T degree 4 terms 3 gt randpoly T degree 4 terms 3 2072 T 1960 T 5432 a a 7 m 5 8 8 gt b RR make randpoly T degree 4 terms 3 gt randpoly T degree 4 terms 3 2190 T 496 T 5766 T BM 99 62 31 138 Chapter 2 Programming with Modules a b a b end use 7781 401827 2790 T T 1638 7 T 2790 GRIS 1943715 144452 87333 T T tM 31 7IM 1 1 2 ps 9l pa 1067 ya 6 qa 693 297 248 496 31 496 248 5780880 T 4440688 T 16127440 T 9252880 T 11301360 T 31320912 91 1067 6 693 297 T5 T T T T 248 496 31 496 7 7 243 5780880 T 1711080 T 28100520 T 13000680 T 16133040 113 241 251 T5 7 T4 T3 T 360 45 120 120 40 T 4 A Generic Group Implementation This section illustrates how to develop a moderately complex software system by using features of the Maple module system Generic program ming is at the heart of the design Only a fraction of the complete system f
197. determines the width automatically verboseproc Use this parameter when printing Maple procedures e If you set verboseproc to 1 Maple prints only user defined proce dures Maple shows system defined procedures in a simplified form giving only the arguments and possibly a brief description of the procedure 3 6 Output Commands e 209 e If you set verboseproc to 2 Maple prints all procedures in full e If you set verboseproc to 3 Maple prints all procedures in full and prints the contents of a procedure s remember table in the form of Maple comments after the procedure When you use Maple interactively it automatically displays each com puted result The format of this display is the same as if you used the print command Therefore all the interface parameters that affect the print command also affect the display of results Example The following command line example illustrates print output and how prettyprint indentamount and screenwidth affect it gt print expand x y 6 x 62 y 15a 4 4 202 y 15a y 6x y y gt interface prettyprint 1 4 gt print expand x y 6 6 5 4 2 3 3 2 4 5 X 6x y 15x y 20x y 15x y 6xuy 6 ay gt interface screenwidth 35 55 gt print expand x y 76 6 5 4 2 3 3 x 6x y 15x y 20x y 2 4 5 6 15x y 6xy y 210 e Chapter 3 Input and Output gt interface indentamount 1 4 gt print expand x y 6 6 5 4 2 3 3 X 6x y
198. dule export e end module 50 e Chapter 2 Programming with Modules Important Do not assign a named module to another variable gt SomeName eval NamedModule SomeName module VamedModule export e end module gt SomeName e NamedModule e Exports of named modules are printed using the distinguished name that was given to the module when it was created regardless of whether it has been assigned to another name Whether a module has a name also affects the reporting of errors that occur during its evaluation When the second attempt to evaluate the named module definition above failed the error message reported the location of the error by name By contrast when an error occurs during the evaluation of a normal module definition the name unknown is used instead gt NormalModule module export e error oops end Error in unknown oops This differs from procedure error reporting Maple cannot report the name of a normal module that is the name of the variable to which the module is assigned because the evaluation of the right side of an assignment occurs before the assignment to the name takes place So the error occurs before any association between a variable and the module has occurred Declarations The declarations section of the module must appear immediately after the parentheses All statements in the declarations section are optional but at most one of each kind may appear Most
199. dulo 5 gt export zero one gt a b gt a b mod 5 gt x a b gt a b mod 5 gt 8 gt 5 s mod 5 gt zero 0 gt one 1 gt end module gt type z5 ring true A module can satisfy more than one interface gt type zb abgroup true Interfaces are an abstraction that form part of the Maple type system They provide a form of constrained polymorphism Not every Maple type is an interface only those that have the form described are You can define a Maple type that as it happens is not itself an interface to describe interfaces gt type interface specfunc symbol symbol type gt module This is a structured type It describes expressions that are themselves structured types They have the form of an unevaluated function call with the operator symbol module and all arguments of type symbol or of type symbol type In the two previous examples in this section the types type ring and type abgroup are the interface expressions and the names ring and abgroup are the respective names of those interfaces A Package for Manipulating Interfaces Interfaces are sufficiently im portant that it is worthwhile to develop a package for manipulating them The package is small enough that it can be reproduced here in full but it is also available in the samples AdvPG directory of the Maple installation gt Interface module
200. e a suite of functions to work on this data structure operating in the domain of polynomials in one or two variables with integer coefficients modulo m written Z xz or Z x y respectively indet seq is an expression se quence of the indeterminates of the polynomial x or x y mod is the integer modulus of the integer domain In a univariate polynomial the coefficients are stored in the following order coefO indet O coefi indet l1 coefi indet i mod n A bivariate polynomial contains pointers to univariate ZPPOLY struc tures representing the coefficients of the first indeterminate coefO indet2 indeti O coef1 indet2 rindet171 mod n where each coefi is a univariate polynomial in indet1 mod n All coefficients are stored including zero coefficients The leading co efficient is always non zero 422 e Appendix A Internal Representation and Manipulation A 3 The Use of Hashing in Maple An important factor in achieving the overall efficient performance of Maple is the use of hash table based algorithms for critical functions Tables are used in both simplification and evaluation as well as for less critical functions For simplification Maple keeps a single copy of each expression or subexpression during a session This is done by keeping all objects in a table In procedures the remember option specifies that the result of each computation of the procedure is to be stored in a remember table associated with th
201. e a Maple string of at least width characters if specified and at most precision characters if specified a or A Outputs the object which can be any Maple object in correct Maple syntax Maple outputs at least width characters if specified and at most precision characters if specified Note Truncating a Maple expression by specifying a precision can result in an incomplete or syntactically incorrect Maple expression in the output The 4a and ZA formats are identical except that 4A omits any quotes that would normally appear around Maple symbols that require them q or Q These are similar to Aa or ZA except that q or Q ignores all remaining arguments and print them as an expression sequence with each element formatted in 4a or 4A format respectively No additional format specifiers can appear after q or AQ since there are no arguments to format m The object which can be any Maple object is output in the Maple m file format Maple outputs at least width characters if specified and at most precision characters if specified Note Truncating a Maple m format expression by specifying a precision can result in an incomplete or incorrect Maple expression in the output A percent symbol is output verbatim Maple outputs characters that are in format but not within a format specification verbatim All the formats apply to Arrays type Array Matrices type Matrix Vectors type Vector and hfar
202. e closure of the procedure p whose name is returned by gen Thus both local variables p and s of gen escape but in different ways The local name p is accessible because it is the assigned value of the global variable g However there is no way to refer to s once gen has returned No Maple syntax exists for that purpose The member selection operator provides a syntax for referencing certain local variables of modules those declared as exports The most recent Hello example has one export named say In this case say is assigned a procedure To call it enter gt Hello sayO HELLO WORLD The following expression raises an exception because the name noSuchModule is not assigned a module expression 54 e Chapter 2 Programming with Modules gt noSuchModule e Error noSuchModule does not evaluate to a module Here a module expression is assigned to the name m and the member selection expression m e evaluates to the value of the exported variable e of m gt m module export e e 2 end module gt m e Since m does not export a variable named noSuchExport the following expression raises an exception gt m noSuchExport Error module does not export noSuchExport Important The following module exports an unassigned name This illustrates the importance of distinguishing module exports from global variables gt m module export e end References to the exported name e in m evaluat
203. e is not yet open Maple opens it in READ mode with type BINARY 3 4 File Manipulation Commands e 195 The position is optional If you do not specify the position Maple returns the current position If you supply the position Maple sets the current position to position and returns the resulting position In that case the returned position is the same as the specified position unless the file is shorter than the specified position in which case the returned position is that of the end of the file that is its length You can specify the position either as an integer or as the name infinity which specifies the end of the file The following command returns the length of the file myfile txt gt filepos myfile txt infinity 36 Detecting the End of a File The feof command determines whether you have reached the end of a file Only use the feof command on files that you have opened as STREAMs implicitly or explicitly via fopen Call feof in the following manner feof fileIdentifier The fileIdentifier is the name or descriptor of the file to query If you give a filename and that file is not yet open Maple opens it in READ mode with type BINARY The feof command returns true if and only if you have reached the end of the file during the most recent readline readbytes or fscanf operation Otherwise feof returns false This means that if 20 bytes remain in a file and you use readbytes to read these 20 bytes
204. e is required depends on the system In general the name should be in the same format as would be specified to a compiler on the same system When calling a Java method dllName is the name of the class containing the method Type Specification Step two of the introductory example indicated how to specify types using Maple notation Maple uses its own notation to provide a generic well defined interface for calling compiled code in any language The format of each arg parameter is as follows argumentIdentifier dataDescriptor The return value description is also described by using a data de scriptor with the name RETURN as the argumentIdentifier If the function returns no value no RETURN parameter is specified Also if no parameters are passed no argument identifiers are required 6 2 External Calling Using Compiled Code in Maple e Table 6 2 Basic Type Translations Maple Data C Type Fortran Type Java Type Descriptor integer 1 char BYTE byte integer 2 short INTEGER 2 short integer 4 int INTEGER int long INTEGER 4 integer 8 long INTEGER 8 long long long INTEGER 8 float 4 float REAL float REAL 4 float 8 double DOUBLE PRECISION double REAL 8 char 1 char CHARACTER char boolean 1 char LOGICAL 1 boolean boolean 2 short LOGICAL 2 boolean 4 int LOGICAL long LOGICAL 4 boolean 8 long LOGICAL 8 long long LOGICAL 8 I The C type long is typically but n
205. e procedure Finally tables are available to the user as one of the Maple data types All table searching is done by hashing The are two types of hash tables basic and dynamic Basic hash tables are used for most Maple hashing However basic hash tables are inefficient when a very large num ber of elements is stored Dynamic hash tables are designed to work with a large number of elements The two types of hash tables are not exposed When a basic hash table becomes full it is automatically converted to a dynamic hash table Basic Hash Tables The algorithm used for the basic hash tables is direct chaining except that the chains are dynamic vectors instead of the typical linked lists The two data structures used to implement hash tables are HASHTAB and HASH Hash Table HASHTAB hash chainl hash chain2 Maple syntax none Length 2 1 This is an internal data structure with no Maple syntax equivalent It is used in the representation of tables within Maple Each entry points to a hash chain a HASH structure or is a null pointer if no entry has been created in that bucket yet The size of a HASHTAB structure depends on the type of table and the platform but is always a power of 2 plus one Hash Chain HASH key exprl key Sexpr2 ex Maple syntax none Length 2n 1 A 3 The Use of Hashing in Maple e 423 Each table element is stored as a pair of consec
206. e programmed in more tradi tional environments descriptor simply identifies a file after you have opened it Use the name of the file once to open it and create a descriptor When you subsequently manipulate the file use the descriptor instead of the file name n example in Opening and Closing Files on page 194 illustrates the use of a file descriptor The advantages of the descriptor method include more flexibility when opening the file you can specify whether the file is TEXT or BINARY and whether Maple opens it in READ mode or in WRITE mode improved effi cency when performing many operations on a file and the ability to work with unbuffered files The disadvantage is a slight increase in the amount of programming that you must do 3 4 File Manipulation Commands e 193 Best Approach Which approach is best depends on the task at hand You can perform simple file I O tasks most easily by using names whereas more complex tasks can benefit from the use of descriptors Note In subsequent sections the term fileldentifier refers to a filename or a file descriptor 3 4 File Manipulation Commands Opening and Closing Files Before you can read from or write to a file you must open it When refer ring to files by name this happens automatically with the first attempt at any file operation When you use descriptors however you must explicitly open the file first to create the descriptor The two commands for opening files are f
207. e standard Maple library For example the group numtheory codegen and LinearAlgebra packages are all provided with Maple along with several dozen others The group package provides procedures that allow you to compute with groups that have a finite representation in terms of permutations or of generators and defining relations The LinearAlgebra package has a large number of procedures available for computational linear algebra Table Based Packages Many packages are implemented as tables The essential idea underlying this implementation scheme is that the name of a package routine is used as the index into a table of procedures The table itself is the concrete representation of the package Use Modules for New Packages Modules are the new implementa tion vehicle for packages A module represents a package by its exported names The exported names can be assigned arbitrary Maple expressions typically procedures and these names form the package Package Exports Some of the data in a package is normally made acces sible to the user as an export of the package For packages implemented as modules the package exports are the same as the exports of the under lying module For packages implemented as tables the package exports are the names used to index the underlying table Accessing the exports of a package is a fundamental operation that is supported by all packages If P is a Maple package and e is one among its exports you can acc
208. e they must match the corresponding char acters in the input It ignores white space in the format except that a 3 5 Input Commands e 203 660 660 space immediately preceding a 4c specification causes the 4c speci fication to skip any blanks in the input If it does not successfully scan any objects Maple returns an empty list The fscanf and scanf commands use the underlying implementa tion that the hardware vendor provides for the Zo and fx formats As a result input of octal and hexadecimal integers are subject to the restrictions of the operating system Example The following example defines a Maple procedure that reads a file containing a table of numbers in which each row can have a different width The first number in each row is an integer specifying how many real numbers follow it in that row and commas separate all the numbers in each row gt ReadRows proc fileName string local A count row num A do Determine how many numbers are in this row count fscanf fileName d if count O then break end if if count then error integer expected in file end if count count 1 Read the numbers in the row row while count gt O do num fscanf fileName e if num O then error unexpected end of file end if if num then error number expected in file end if row op row num 1 count count 1 end do Append the row t
209. e to the name e gt m e Note however that this is a local name e not the global instance of the name gt evalb e m e false The first e in the previous expression refers to the global e while the expression m e evaluates to the e that is local to the module m This distinction between a global and export of the same name is useful For example you can create a module with an export sin Assigning a value to the export sin does not affect the protected global name sin 2 1 Syntax and Semantics e 55 The exports Procedure You can determine the names of the exports of a module by using the exports procedure gt exports Hello say gt exports NormalModule This returns the global instances of the export names gt exports m gt evalb 2e irue You can also obtain the local instances of those names by passing the option instance gt exports m instance gt evalb e false gt evalb m e true For this reason you cannot have the same name declared both as a local and an export gt module export e local e end have the same name Error export and local e 56 e Chapter 2 Programming with Modules The declared exports and locals actually form a partition of the names that are local to a module The member Procedure You have already seen the built in procedure member that is used to test for membership in a set or list
210. ecial meaning to Maple The operators can represent e Algebraic operations such as addition or multiplication e Logical operations e Operations performed on sets Maple also has a special class of operators the neutral operators on which it does not impose any meaning Instead Maple allows you to define the meaning of any neutral operator The name of a neutral operator begins with the ampersand character amp gt 7k 8 amp 9 34 e Chapter 1 Procedures Variables and Extending Maple T amp 8 amp 9 gt evalb 7 amp 7 82 8 amp 7 false gt evalb 7 amp 8 amp 9 T amp 8 amp 9 false Internally Maple represents neutral operators as procedure calls Thus 7 amp 8 is a convenient way of writing amp 7 8 gt amp 7 8 77 8 Maple uses the infix notation in which the operator is placed between the operands only if the neutral operator has exactly two arguments gt amp 4 amp 5 6 amp 7 8 9 amp 4 5 amp 6 2 7 8 9 Information For more information on naming conventions for neutral operators refer to chapter 3 of the Introductory Programming Guide Example 1 You can define the actions of a neutral operator by assigning a proce dure to its name The following example implements the Hamiltonians by assigning a neutral operator to a procedure that multiplies two Hamilto nians Mathematical Premise The Hamiltonians or Quaternions extend the complex numb
211. ecifically integer 2 1 is the index to the NAME of the identifier and integer 2 is the index to a description LOCAL PARAM or LEXICAL relative to the surrounding scope The value of integer can be positive or negative If positive the original identifier is a local variable of a surrounding procedure if nega tive it is a parameter of a surrounding procedure List LIST expr seq attrib expr Maple syntax expr expr Length 2 or 3 with attributes The elements of the ezpr seq are the elements of the list The list can optionally have attributes 408 e Appendix A Internal Representation and Manipulation Local Variable within an Expression LOCAL integer Maple syntax name Length 2 This indicates a local variable when it appears within an expression in a procedure or module The integer is an index into the procedure local seq At procedure execution time it is also an index into the internal data structure holding the active locals on the procedure activation stack and holds private copies of the NAMEs of the local variables private copies in the sense that these NAMEs are not the same as the global NAMEs of the same name Member MEMBER module name Maple syntax module name Length 3 This structure represents a module member access in an expression MEMBER objects typically do not persist when a statement is simpl
212. ecifies the corresponding array bound at run time The options are used to specify how an array is passed The following are valid options COPY Do not operate in place on the given array That is make a copy first and use the copy for passing to and from the external function NO COPY This ensures that a copy of the data is never made Usually when using a wrapper generated external call if the Array Matrix or Vector is of the wrong type say the order is wrong a copy is made with the correct properties before passing it to the external function Using NO COPY prevents this Also the returned array has the prop erties of the copy If NO COPY is specified and an Array Matrix or Vector with incorrect options is passed an exception is raised Ar rays are always passed by reference If no options are given via a REF descriptor they are passed by using the CALL ONLY behavior of REF with the noted exception described at the beginning of this section Non passed Arguments Sometimes it is necessary to pass additional arguments to the Maple wrap per that should not be passed on to the external function For example consider the following hypothetical C function int sum int vi int v2 This function takes two integer vectors v1 and v2 and adds the el ements of v2 to vi stopping when it finds an entry that is zero The generated wrapper can be made to verify whether the vectors are the same size The Maple definition
213. ect are sometimes viewed also as messages Objects respond to these messages by exhibiting the behavior that the messages elicit gt z i reQ z imO 1 1 gt z i absO v2 gt z argO 1 T 4 For instance the expression z abs is viewed as sending the abs message to the complex number object z The object responds by com puting its absolute value Note that each time the procedure MakeComplex is invoked a new module is created using the module definition that is visible within the procedure body Thus complex numbers created by different calls to the constructor are distinct even if the arguments real and imag are the same Whether a constructor should produce distinct objects for the same input instance data depends on the nature of the objects being modeled For complex number objects multiple calls with the same inputs should produce the same object This can be achieved by using the remember option in the constructor For more information refer to chapter 6 of the Introductory Programming Guide Effect of Immutable Local States The previous MakeComplex construc tor represents the local state of complex number objects by using two local variables real_part and imag_part For many object constructors some or all of the local state of the object is expected to be immutable In these cases local variables do not need to be allocated in the module to store the local state of the object The state can instead be represe
214. ect1 vect2 m n a b dx dy gt local i j L xscale yscale mscale gt gt Determine scaling factor ai L max seq seq vecti jl i 2 vect2 jl il 2 gt i 1 m j 1 n gt xscale evalf dx 2 L 1 2 gt yscale evalf dy 2 L 1 2 gt mscale max xscale yscale gt gt Generate plot data structure gt Each arrow is centered over its point gt PLOT seq seq myarrow gt la i 1 dx vecti j i xscale 2 gt b j 1 dy vect2 j i yscale 2 gt vecti j i xscale vect2 jl il yscalel gt mscale 4 mscale 2 1 3 i 1 m j 1 n gt Thickness of tail mscale 4 gt Thickness of head mscale 2 gt end proc 290 e Chapter 5 Programming with Maple Graphics Example 5 With these utility functions you can write the vectorfieldplot command gt vectorfieldplot proc F ri r2 m n local vecti vect2 a b dx dy Generate each component over the grid of points vecti convert F 1 grid ri r2 m n vect2 convert F 2 grid ri r2 m n Obtain the domain grid information from ri and r2 a b dx dy domaininfo r1 r2 m n Generate the final plot structure generateplot vecti vect2 m n a b dx dy end proc VVVVVVVVVV VV Try the procedure on the vector field cos xy sin zy gt p x y gt cos x y q x y gt sin x y gt vectorfieldplot p q 0 Pi 0 Pi 15 20 11 5 Pu
215. ed As with any dynamically typed language Maple allows for a great deal of generic programming Most built in Maple operations including many standard library routines are naturally polymorphic in that they are able to perform successfully with a large variety of data formats Generic Programming as Good Software Engineering Practice On any large project it is important to write reusable code that is code that can perform a well defined function in a wide variety of situations Generic programs do not rely on the details of how their inputs are represented They are able to perform their function on any inputs that satisfy a spec ified set of constraints Normally these constraints are described in terms 118 e Chapter 2 Programming with Modules of the behavior of the inputs rather than on their physical representation or the storage layout of their concrete representation This behavior is sometimes called a contract Generic programs rely only on the object behavior specified by the contract They do not rely on knowledge of how an object is implemented So generic software separates interfaces from implementations Distinction Between Local and Exported Variables The behavior spec ified by the contract for a module includes any module exports Whatever is expressed through its local variables is private to the module and is not to be relied upon or even known by clients of the module Client access is in fact the only technic
216. ed format with the z or Z elided The z format scans the real part followed by the character specified by c followed by the imaginary part The Z format scans the real part followed by a or sign followed by the imaginary part fol lowed by a string of characters corresponding to the current setting of interface imaginaryunit The z and Z options can result in one of the few conditions in which scanf raises an exception If scanf is scanning a complex value for example the real part has already been successfully scanned and is unable to finish scanning the remainder for example there is no imag inary part after the real part scanf raises an exception of the form 200 e Chapter 3 Input and Output 11 expected in input for complex format where 1 is re placed by the expected character for example a comma The code indicates the type of object to scan It determines the type of object that Maple returns in the resulting list The code can be one of the following d The next non whitespace characters in the input must comprise a signed or unsigned decimal integer A Maple integer is returned o The next non whitespace characters in the input must make up an unsigned octal base 8 integer The integer is converted to a decimal and then returned as a Maple integer x The next non whitespace characters in the input must consist of an unsigned hexadecimal base 16 integer The letters A through F up
217. edures versus expressions in the independent variables to define plots e Specifying optional information Many Maple plotting procedures including plot plot3d and some commands in the plots package accept input in one of two forms ex pressions in one or two independent variables or expressions involving procedures and operators For example the input can be the expres sion a b b 1 in variables a and b or the expression p q where p and q are procedures The following command generates a 3 D plot of the surface defined by sin x sin y The independent variables are x and y gt plot3d sin x sin y x 0 4 Pi y 2 Pi 2 Pi 5 1 Basic Plotting Procedures e 247 A IN N AN AM eo p Wy You can plot the same surface by first defining two procedures that each take two arguments gt p x y gt sin x q x y gt sin y and then providing p q as the first argument to the plot3d command gt plot3d p q 0 4 Pi 2 Pi 2 Pi In the first example the plot3d procedure recognizes that the first argument is an expression in z and y because the second and third argu ments have the forms x range and y range In the second example the second and third arguments are simply ranges and contain no variable names Working with expressions in independent variables is simple but in many cases procedures and operators provide a better mechanism for defining plots We use the term operator form to
218. een the new approximation and the previous one is small The iterate procedure prints the sequence of approxima tions to show successive approximations gt iterate proc f procedure df procedure gt x0 numeric N posint gt local xold xnev gt xold x0 gt xnew evalf xold f xold df xold gt to N 1 while abs xnew xold gt 10 1 Digits do gt xold xnew gt print xold gt xnew evalf xold f xold df xold gt end do gt xnew gt end proc The following procedure calculates the derivative of f and passes all the necessary information to iterate gt Newton proc f procedure x0 numeric N posint local df df D f print x0 iterate f df x0 N end proc VVVVV 4 2 Hardware Floating Point Numbers e 231 Use Newton to solve the equation z 2 0 gt f x gt x72 2 fi x gt w 2 gt Newton f 1 5 15 1 5 1 416666667 1 414215686 1 414213562 1 414213562 Example This version of Newton uses hardware floating point arithmetic if possible Since iterate only tries to find a solution to an accuracy of 107 1 Digits Newton uses evalf to round the result of the hardware floating point computation to an appropriate number of digits gt Newton proc f procedure x0 numeric N posint local df result df D f print x0 if Digits lt evalhf Digits then try return evalf evalhf iterate f df x0 N catc
219. efinition 22s Type Specification o Scalar Data Formats ll Structured Data Formats len Specifying Argument Passing Conventions Method 2 Generating Wrappers Additional Types and Options Structured Data Formats 0 Enumerated Types 0 2 000004 Procedure Call Formats 0 Call by Reference 0 00 ee eee Array Options fx ea bad fae a eas BONS Reg Non passed Arguments 0 0 0 eee ee ee Argument Checking and Efficiency Considerations Conversions s 403 mia a a a e Dus PERDE Compiler Options ooo Evaluation Rules 2 ee es Method 3 Customizing Wrappers External Function Entry Point Inspecting Automatically Generated Wrappers External API System Integrity oie ta a ii OpenMaple Using Maple in Compiled Code Interface Overview Call back Functions Maple Online Help Database TechnicalIssues 22e File Structure uan meu x En a Wes Building the Sample Program Conclusion ara x xb ees ee Rune rte A Internal Representation and Manipulation A l A 2 Contents e ix Internal Organization ccs 395 Components axed dui we a dy Ped nd 396 Internal Functions o 396 Eloy of Cont
220. eir procedure 19 referencing 52 returning 22 vs exported variables 118 logical AND 399 Index e 435 logical IMPLIES 405 logical XOR 421 lprint 206 MakeIteration 15 MakeZn 59 malloc C function 388 Mandelbrot set 248 manual audience 1 conventions 3 set 2 map 397 in procedures 6 Maple using Compiled Code in 329 373 using in compiled code 373 390 Maple Getting Started Guide 2 Maple Introductory Program ming Guide 2 Maple User Manual 2 Maple_floats 236 maplec d11l file 388 389 maplec h file 375 376 379 385 maplec 1lib file 388 389 Maplet applications 2 User Interface Customization System 2 427 Maplets package 396 math engine 396 MATLAB 243 Matrices 214 reading 216 writing 216 member 56 100 MEMBER internal data struc ture 408 436 e Index MEMBER objects 408 memory usage 388 MESH 256 converting to polygons 273 messages 110 microwave circuit analysis 280 MODDEF internal data struc ture 408 modeling objects 108 module 44 47 60 408 MODULE internal data struc ture 410 moduledefinition 60 modules 43 and types 60 declarations 50 definition 44 47 51 definition syntax 47 description 50 error reporting 50 exports 110 implicit scoping rules 58 lexical scoping rules 58 manipulation 87 members of 52 membership tests 56 named 49 nested 58 options 57 parameterized 59 referencing global variables 51 referencing local variables 5
221. ence xcoord ycoord gt xcoord gt x gt ycoord gt y gt area gt 0 gt circumference gt 0 116 e Chapter 2 Programming with Modules gt end module gt end proc The module returned by this constructor uses the lexically scoped parameters x and y representing the abscissa and ordinate of the point These values are part of the local state or instance data of each point constructed These points are captured in the closures of the exported methods so that variables local to the module in which to store these values are not necessary The segment Constructor Segments are represented using the start and end points of the segment l hese are the points returned by the point constructor gt segment proc pti pt2 module export area circumference length start point end point local mymidpoint start point gt pti end point gt pt2 area gt 0 circumference gt 0 length proc local Xy ys X 7 pti xcoord pt2 xcoord O y pti ycoord pt2 ycoord sqrt x 2 y 2 end proc midpoint proc local X yi if assigned mymidpoint then mymidpoint else y pt1 ycoord pt2 ycoord 2 x pti xcoord pt2 xcoord 2 point x y end if end proc end module gt end proc VVVVVVVVVVVVVVVVVVVVVVVVVVV VV The segment objects implement methods in addition to the required area and circumfer
222. ence methods Apart from the trivial syntax methods start point and end point there are methods for computing the length of a segment and its midpoint 2 6 Interfaces and Implementations e 117 The circle Constructor Circles are represented by using the center and radius of the circle as instance data gt circle proc ctr rad gt module gt export area circumference diameter gt center centre radius gt radius gt rad gt center gt ctr gt centre eval center UK spelling gt diameter gt 2 radius gt circumference gt Pi diameter gt area gt Pi rad rad gt end module gt end proc Again the lexically scoped parameters ctr and rad encode the in stance data of the circle object Note The remainder of the object oriented version of the Shapes pack age can be read in Shape0bj mpl file in the samples AdvPG directory of your Maple installation 2 6 Interfaces and Implementations Generic programming is a programming style and a software engineering methodology for software reuse In this sense many Maple built in op erations are generic The addition operator computes sums of integers rational numbers complex numbers polynomials special functions and so on When using the addition operator it is not necessary to state how an expression is represented The automatic simplifier recognizes how Maple expressions are represent
223. end other Maple operations such as expand combine or simplify to be effec tive on algebraic expressions involving unevaluated calls to GroupOrder Matrix Groups So far all the groups have been permutation groups returned by one of the constructors previously presented You must test the code on some other kinds of groups A good source for examples of finite groups are the finite groups of exact matrices Equality and Membership Tests for Matrices Because distinct matri ces with equal entries compare differently using the Maple equality com ect parison operator it is necessary to implement a specialized test for membership in a set For example consider the matrices gt A Matrix 1 01 0 11 gt beds gt B Matrix 2 3 3 41 s 31 gt C Matrix 1 0 0 1 gt o 3 Both A and C have the same entries and represent mathematically identical objects However because matrices are mutable data structures necessary for efficiency in matrix computations they are distinct as Maple objects Thus for instance 2 6 Interfaces and Implementations e 153 gt member A B C false To deal with this property of these data structures you must imple ment a generic version of the Maple command member The gmember routine accepts arguments like those required by the member routine in addition to the first argument which specifies an equality test This utility is used in the following im
224. ension is that you must create two argument procedures from one argument procedures which was not required in ribbonplot in Example 3 To do this create an auxiliary procedure extend that uses the unapply command 5 2 Programming with Plotting Library Procedures e 253 gt extend proc f gt local x y gt unapply fGO x y gt end proc For example the extend procedure converts the one argument pro cedure representing the R R mathematical function x gt cos 2x to a two argument procedure gt p 2 x gt cos 2 x extend p q x y gt cos 2 x Example 4 The following is the new ribbonplot code gt ribbonplot proc Flist r range name range VVVVVVVVVVVVVVVVVVVVV VV local i m p n opts newFlist opts args 3 nargs 1 if type ri range then Operator form input if not hasoption opts numpoints n opts then n 25 default numpoints end if m nops Flist Provide operator form input to plot3d p seq plot3d extend Flist i r1 i 1 i grid n 2 op opts i 1 m plots display p else Expressions in variable lhs ri Convert each to a procedure newFlist map unapply Flist lhs r1 Use lhs r1 as the default x axis label opts labels lhs r1 args 3 nargs l ribbonplot newFlist rhs r1 op opts end if end proc The following is a ribbon plot of three functions gt r
225. entiate any function All of that functionality resides in the Maple library in pro cedures named diff functionName This is a fundamental feature of Maple since it permits e Flexibility changing the library e Personal tailoring by defining your refined handling functions e Readability much of the Maple functionality is visible at the user level Maple allows the kernel to remain small by unloading non essential func tions to the library A 2 Internal Representations of Data Types The parser and some internal functions are responsible for building all the data structures used internally by Maple All the internal data structures have the same general format Header Data Datan The header field stored in one or more machine words encodes the length of the structure and its type Additional bits are used to record simplification status garbage collection information persistent store sta tus and various information about specific data structures for example whether or not a for loop contains a break or next The length is encoded in 26 bits on 32 bit architectures resulting in a maximum single object size of 67 108 863 words 268 435 452 bytes or 256 megabytes On 64 bit architectures the length is stored in 32 bits for a maximum object size of 4 294 967 295 words 34 359 738 360 bytes or 32 gigabytes Every structure is created with its own length and that length do
226. entry follows the same rules as for ASSIGN or it may be a TABLE or MODULE structure The parser will not generate a TABLEREF with a TABLE structure for the name entry but this can arise internally The expression sequence contains the indices Try Statement TRY try catch catch final stat str stat stat seq seq seq Maple syntax 420 e Appendix A Internal Representation and Manipulation try tryStat catch catchStr catchStat finally finalStat end try Length 3 or more This structure represents a try statement and can have an arbitrary length depending on how many catch blocks there are within it and whether or not it has a finally block The catch strs point to the catch string of the corresponding catch block If no catch string was specified the catch str points to NULL Empty catch stat seqs are also represented by pointers to NULL as is an empty but present finally block The actual internal tag used for the TRY structure is MTRY to prevent collision with a macro defined by some C exception handling libraries Unevaluated Expression UNEVAL erpr Maple syntax expr Length 2 Use Statement USE bindings statseq Maple Syntax use bindings in statseq end use Length 3 The bindings component points to an expression sequence of equa tions whose left sides are symbols and the stats
227. eq component points to a sequence of statements that form the body of the use statement The right sides of the binding equations can be arbitary expressions The use statement introduces a new binding contour and binds the names that appear on the left side of the equations in bindings For con venience on input a module m can appear among the bindings and is A 2 Internal Representations of Data Types e 421 treated as if it were the sequence el m ei e2 m e2 where the ei are the exports of m Within the sequence statseq of statements the symbols appearing on the left side of the equations in bindings are bound to the corresponding right sides The previous bindings of those symbols are restored upon exit from the use statement Bindings are re solved during automatic simplification Logical XOR XOR ezprl expr2 Maple syntax expri xor expr2 Length 3 Polynomials with Integer Coefficients modulo n ZPPOLY indet mod coef0 coef1 ZPPOLY indet seq mod zppolyO zppoly1 Maple Syntax modp1 ConvertIn expr indet n Maple Syntax modp2 ConvertIn expr indet1 indet2 n Length degree zppoly 2 for the zero polynomial Length degree zppoly 4 3 otherwise This is the internal representation of univariate and bivariate polyno mials modulo some integer The modp1 and modp2 front ends provid
228. equence true option For example you can show how a Fourier series approximates a function f on an interval a b by visualizing the function and successive approximations as the number of terms increase with each frame You can derive the nth partial sum of the Fourier series by using falx co 2 Dj Ck cos E kx sp sin Fo kx where 2 f 2m C f f x cos da are m WE f f x sin mes da and 304 e Chapter 5 Programming with Maple Graphics Example 2 The fourierPicture procedure first calculates and plots the kth Fourier approximation for k up to n T hen fourierPicture generates an animation of these plots and finally it adds a plot of the function as a backdrop gt fourierPicture gt proc func xrange name range n posint VVVVVVVVVVVVVVVVVVVVVVVV VV local x a b 1 k j p q partsum lhs rhs xrange rhs rhs xrange b a 2 Pi Ihs xrange 1 x pop now partsum 1 1 evalf Int func xrange for k from 1 to n do Generate the terms of the Fourier series of func partsum partsum 2 1 evalf Int func sin k x xrange sin k x 2 1 evalf Int func cos k x xrange cos k x Plot k th Fourier approximation q k plot partsum xrange color blue args 4 nargs end do Generate sequence of frames q plots display seq q k k 1 n insequence true Add the function plot p to each frame p
229. er gt GroupOrder A GroupOrder B gt G member proc g S pos name gt if nargs 1 then gt A member g 1 P and B member g 2 gt else gt gmember G eq args gt end if gt end proc gt G elements gt seq seq a b gt a GroupElements A b GroupElements B J gt eval G 1 gt else gt gt procname args gt end if gt end proc Most of the group methods are straightforward but use the known group structure to reduce the complexity of some computations such as those for the order and elements exports gt A Symmetric 3 gt G DirectProduct A B gt GroupOrder G 72 gt nops GroupElements G 2 6 Interfaces and Implementations e 157 Table 2 4 Homomorphism Interface domain Domain of the homomorphism codomain Codomain of the homomorphism genmap Mapping of the generators of the domain into the codomain 72 Homomorphisms In all algebraic theories homomorphisms play a key role A group homomorphism is a mapping from a group to another possibly the same group which commutes with the group operations That is a map y A B of groups A and B is a homomorphism if plab pla p b for all a and b in A A homomorphism is determined uniquely by its effect on a generating set for its domain so to define a homomorphism it is enough to specify the images of each among a set of gene
230. er degree Enter degree n 1 n l1 The user input for a readstat command must have a terminating semi colon or colon or an error is raised Advantages Unlike the readline command which only reads one line the readstat allows you to break a large expression across multiple lines Another advantage of using the readstat command is that if there is an error in the input the readstat command automatically repeats the prompt for user input 1 4 Interactive Input e 29 gt readstat Enter a number Enter a number 5 8 syntax error unexpected 5778 Enter a number 5 8 390625 Example 2 The following is an application of the readstat command that imple ments an interface to the limit command The procedure given the function f x assumes x is the variable if only one variable is present Otherwise the user is asked for the variable and the limit point GetLimitInput proc f algebraic local x a K choose all variables in f K select type indets f name if nops K 1 then x K 1 else x readstat Input limit variable while not type x name do printf A variable is required received a n x x readstat Please re input limit variable end do end if a readstat Input limit point X a end proc VVVVVVVVVVVVVVV VV The expression sin x x depends only on one variable so GetLimitInput does not prompt for a limit variable gt GetLimi
231. er library to resolve all external symbols Use an expression sequence to specify more than one library for example LIBS usr local maple extern lib libtest so users jdoe libdoe so SYS LIBS This specifies system libraries to link with the wrapper li brary to resolve all external symbols Use an expression sequence to specify more than one library for example LIBS 1c 1m EXPORT FLAG This flag is used in combination with the FUNCTION option to name the function to be exported from the shared library This is unassigned or set to NULL on platforms that export all symbols by default FUNCTION This is the name of the external function defined in the wrapper library The system generates a FUNCTION name if this is left unassigned or set to NULL LINK COMMAND This is set to the procedure that generates the linker command The procedure must return a string Set this to NULL if the compile command also does the linking A common use of these options as parameters to define external with a standard compiler would be to specify the filename For example the following generates a wrapper file named foo c gt f define external myfunc WRAPPER FILE foo LIB gt mylib d11 To use a non standard compiler or to alter compile flags assign di rectly to the compile options module Example The following example shows how to set up the GNU compiler on a machine running Solaris gt p define
232. erO0fDocuments corpus gt corpus numberO0fDocuments GetDocumentIdByIndex corpus idx gt corpus getDocumentIdByIndex idx VVVVVVVVVVVVVVVVVVVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvw 2 7 Extended Example A Search Engine e 171 BuildIndex corpus gt corpus buildIndexO Search corpus query gt corpus search query Locals documentTermVector proc doc corpusTerms list local terms terms FilterDocument doc Vector row 1 nops corpusTerms i gt evalf numboccur terms corpusTerms i nops terms datatype float 8 storage sparse end proc queryTermVector proc queryTerms list corpusTerms list Vector column 1 nops corpusTerms i gt evalf numboccur queryTerms corpusTerms i nops queryTerms datatype float 8 1 storage sparse end proc Filters subpackage Filters module description filter subpackage option package export Text local stopWords stopWords Welt ni an the in co which that 5 is and ye it 1 of g E E gt gt E gt gt all y can gt does 5 don t most crue 5 thing Text proc text string local words use StringTools in words map LowerCase Words text words remove type words stopWords map Stem words end use end proc end module end module with SearchE
233. erable subhuman who has learned to wear shoes bathe and not make messes in the house Robert A Heinlein doc4 Things should be made as simple as possible but no simpler doc5 I don t believe in mathematics doc6 Imagination is more important than knowledge doc7 The most beautiful thing we can experience is the mysterious It is the source of all true art and science VVVVVVVVVVVVVVVVVVV VV doc8 Common sense is the collection of prejudices acquired by age eighteen doc9 God does not care about our mathematical difficulties He integrates empirically A Einstein The corpus consists of these documents To facilitate searches the corpus is preprocessed to construct a search index The index aids searches by making it easy to quickly locate documents in the corpus that are relevant to one or more of the search terms in a query 2 Extended Example A Search Engine e 161 Inverted Term Occurrence Indexing An inverted term occurrence index is a simple search index n inverted term occurrence index constructs a list of all the potential search terms present in the corpus and maintains a list of the documents in which each search term occurs Construction of an inverted term occurrence index begins by constructing a document term mapping For simple text strings construct a list of document terms as follows gt DocumentTerms proc text string gt StringTools Words
234. eration using the LanguageDefinition Define command and creating a language defi nition module For simple languages or small extensions of existing languages use the LanguageDef inition Define method To produce a translator that preprocesses or postprocesses the generated output or makes frequent use of a utility function in translations create a language definition module Note The translators supplied with the CodeGeneration package for example C VisualBasic and Java are implemented using language def inition modules Using the Define command The Define command takes a series of function call arguments f1 2 where the function names are for example AddFunction AddFunctions AddOperator AddPrintHandler AddType and SetLanguageAttribute These function calls accept identical syntax and perform the same actions as the Printer functions of the same name That is they define print handlers and other data specific to the language translation you are defining For more information on their purpose and accepted syntax refer to CodeGeneration LanguageDefinition Printer Note The Define command automatically creates a Printer module for the language You do not need to create one using LanguageDefinition GenericPrinter or LanguageDefinition Get 328 e Chapter 6 Advanced Connectivity Example 6 This example illustrates a C translator in which the trans lated code uses a specialized library function my mult for m
235. eric data parameter The data parameter is passed the value of the data parameter of the StartMaple function If a call back function needs the MKernelVector of the kernel from which it was called your application can use the data parameter to pass this information For example the data parameter can pass a pointer to an object or structure containing the MKernelVector Note All the API functions including the call back functions are de clared with the M DECL modifier The functions assigned to the call back vector must also be declared with the M DECL modifier The call back functions are defined in maplec h and described in the following subsections 380 e Chapter 6 Advanced Connectivity Text Call back Function It is recommended that you specify a textCallBack function The textCallBack function is called with typical non exceptional Maple output The output that Maple generates for example an inter mediate result or the output from a printf statement is passed to the textCallBack function void M DECL textCallBack void data int tag char output e The tag parameter indicates the type of Maple output The tag pa rameter can take one of the following values as defined in moemapi h MAPLE TEXT OUTPUT A line printed 1 D Maple expres sion or statement MAPLE TEXT DIAG Diagnostic output high printlevel or trace output MAPLE TEXT MISC Miscellaneous output for example from the Maple printf fu
236. ers in the same way the complex numbers extend the real numbers Each Hamiltonian has the form a bi cj dk where a b c and d are real numbers The special symbols i j and k satisfy the following multiplication rules i 1 j 1 k 1 ij k ji k ik j ki j jk i and kj i 1 5 Extending Maple e 35 The following amp procedure uses J J and K as the three special symbols However J is implemented as the complex imaginary unit in Maple Therefore you should assign another letter to represent the imag inary unit by using the interface function For more information refer to interface 7 interface imaginaryunit j You can multiply many types of expressions by using amp making it convenient to define a new type Hamiltonian by assigning a structured type to the name type Hamiltonian gt type Hamiltonian 4 name realcons gt specfunc anything amp y type Hamiltonian Lx realcons name specfunc anything amp The amp procedure multiplies the two Hamiltonians x and y If either x or y is a real number or variable then their product is the usual product denoted by in Maple If x or y is a sum amp maps the product onto the sum that is amp applies the distributive laws z u v xu zv and u v z uz vz If x or y is a product amp extracts any real factors You must take special care to avoid infi
237. es 58 95 object oriented approach 115 shift multivariate function 18 univariate function 17 sign of zero 236 simplification table 423 simplify extending 40 Smith charts 280 software floating point numbers 224 235 297 accuracy of 225 base of 225 digits of 224 225 solutions analytical 224 numerical 224 sort 424 sorting 8 sprintf 220 sscanf 220 standard worksheet 2 STATSEQ internal data struc ture 418 stop 380 418 STOP internal data structure 418 streamcall 384 STRING internal data structure 418 strings 418 converting to expressions 30 parsing 30 reading from terminal 27 submodules 58 subsop 397 Sum 227 sum 227 SUM internal data structure 418 sums 418 numerical 227 suppressing symbolic evaluation 227 system integrity 373 table 426 TABLE internal data structure 419 426 table references 419 TABLEREF internal data struc ture 419 tables 419 terminators 28 219 thismodule 48 tilde 21 tilings 278 Truchet 279 trace 57 380 transforming plots 281 Truchet tilings 279 try 232 419 TRY internal data structure 419 type record 74 type 398 extending 31 typematch 40 types and modules 60 checking 27 32 250 defining new 31 35 enumerated 338 matching 259 structured 32 unapply 15 unbuffered files 190 undefined 236 UNEVAL internal data structure 420 unevaluated expressions 229 420 uniform distribution 11 unif
238. es not change during the existence of the structure Furthermore the con tents of most data structures are never changed during execution because it is unpredictable how many other data structures may be referring to A 2 Internal Representations of Data Types e 399 it and relying on it not to change The normal procedure to modify a structure is to copy it and then to modify the copy Structures that are no longer used are eventually reclaimed by the garbage collector The following figures describe each of the 60 structures currently im plemented in Maple along with the constraints on their length and con tents The 6 bit numeric value identifying the type of structure is of little interest so symbolic names will be used Logical AND AND expr1 ezpr2 Maple syntax expri and expr2 Length 3 Assignment Statement ASSIGN name seq expr seq Maple syntax namel name2 expri expr2 Length 3 The left hand side name entries must evaluate to assignable objects NAME FUNCTION or TABLEREF structures The right hand side must be an expression sequence of the same length as the left hand side Binary Object BINARY data Maple syntax none Length arbitrary The BINARY structure can hold any arbitrary data It is not used directly as a Maple object but is used as storage for large blocks of data inside other Maple objects currently only RTABLEs
239. es the relative weights of the data along with the centers of each pie slice e Uses a TEXT structure to place the data information at the center of each pie slice e Uses the pieslice command from the plottools package to generate the pie slices e Varies the colors of each slice by first defining a color procedure based on hue coloring gt piechart proc data list integer VVVVVVVVVVVVVV VV local b c i n x y total n nops data total partialsum data n b 0 seq evalf 2 Pixpartialsum data i total i 1 n seq cos b il cos b i 1 3 i 1 n seq sin b i sin b i 1 3 i 1 n i n gt COLOR HUE i n 1 PLOT seq pl ttaols pieniice Lo 0 1 b i b i il color eti n x i 1 n seq TEXTC x il y i convert data i name i 1 n AXESSTYLE NONE SCALING CONSTRAINED end proc 276 e Chapter 5 Programming with Maple Graphics The AXESSTYLE NONE option ensures that Maple does not draw any axes with the pie chart The following is a piechart with six slices gt piechart 8 10 15 10 12 16 ai A Dropshadow Procedure You can use the existing procedures to create other types of plots that are not part of the Maple plotting library For example the following procedure computes the 3 D plot of a surface z f x y that has a dropshadow projection onto a plane located below the surface Example 2 The procedure uses the contourplot
240. es the same output as lprint e If you set prettyprint to 1 or 2 or 3 in the Command line inter face print produces a simulated math notation using only text characters e If you set prettyprint to 2 or 3 in the Worksheet interfaces print produces output using standard math notation e The default setting of prettyprint is 3 in the Worksheet interfaces and 1 in the Command line version indentamount This specifies the number of spaces that Maple uses to indent the continuation of expressions that are too large to fit on a single line This parameter takes effect only when you set prettyprint see previous definition to 1 or when Maple is printing procedures The default setting of indentamount is 4 labelling or labeling You can set this to true or false indicating whether Maple should use labels to represent common subexpressions in large expressions Labels can make large expressions easier to read and comprehend The default setting of labelling is true labelwidth This indicates the size that a subexpression must have for Maple to consider it for labeling if labelling is true The size is the approximate width in characters of the expression when printed with print and prettyprint 1 screenwidth This indicates the width of the screen in characters When prettyprint is 0 or 1 Maple uses this width to decide when to wrap long expressions When prettyprint is 2 the user interface uses pix els instead of characters and
241. esort if no better alternative is provided As a simple optimization the result of Dimino s algorithm is stored as a new value for the elements export so that it need only be computed once Providing the GroupElements interface shields the user from needing to know what the available alternatives are and how to use them An additional benefit of the design is that it allows you to change the algo rithm selection criteria at any time to correct software faults or make functional or performance improvements Code using this interface need not be modified provided that the routine continues to honor its contract Enumerating Elements in Subgroups Once the elements of the parent group are known the members of the subgroup can be computed using a call to the built in Maple command select gt select C test Dimino G How best to enumerate the elements of a subgroup depends upon how it is defined and what is known about the parent group The procedure SubGroupElements that follows takes a subgroup as argument and at tempts to find the optimal way to compute the elements of the subgroup from among the available methods gt SubGroupElements proc description enumerate the elements of a subgroup of a group local P P S while type P SubGroup do P P parent end do if type P Group then if member test S then select S test GroupElements P else ASSERT member gens S
242. esources of the underlying operating system which often imposes a limit on the number of files that you can open simultaneously Close files by using the fclose or close commands These two com mands are equivalent You can call them as follows fclose fileIdentifier close fileIdentifier The fileldentifier is the name or descriptor of the file to close Once you close a file any descriptors referring to the file are no longer valid gt f fopen testFile txt WRITE gt writeline f This is a test gt fclose f gt writeline f This is another test Error in fprintf file descriptor not in use When you exit Maple or issue a restart command Maple automatically closes any open files whether you opened them explicitly by using fopen or open or implicitly through a file I O command Position Determination and Adjustment Associated with each open file is the concept of its current position This is the location within the file to which a subsequent write occurs or from which a subsequent read occurs Any reading or writing operation advances the position by the number of bytes read or written You can determine the current position within a file by using the filepos command Use this command in the following manner filepos fileIdentifier position The fileldentifier is the name or descriptor of the file whose position to determine or adjust If you give a filename and that fil
243. ess e by using the fully qualified reference P e If P is a module then you can also use the syntax P e These methods of accessing the exports of a module are normally used when programming with a package 2 3 Packages e 79 Note that is a left associative operator If S is a submodule of a module P and the name e is exported by S then the notation P 8 e is parsed as P 8 e and so it refers to the instance of e local to S This fact is important to reference members of subpackages For example gt m Matrix 2 2 1 x 2 x 3 x 4 x gt datatype polynom integer wr 1 z2 c 3x2 4 2 gt LinearAlgebra LA_Main Norm m 1 conjugate false max x 1 x 3 x 2 z 4 calls the procedure Norm in the subpackage LA Main of the LinearAlgebra package You can use indexed notation for this gt LinearAlgebra LA Main Norm m 1 conjugate false max x 1 x 3 z 2 z 4 Using Packages Interactively For interactive use it is inconvenient to enter fully qualified references to all the exports of a package To ease this burden the Maple procedure with is provided for the interactive management of package namespaces Using with you can globally impose the exported names of a package This allows you to access the package exports without typing the package prefix by making the names of the exports visible at the top level of the Maple session For
244. ession e Using numerical analysis you can prove that this algorithm calculates an approximation of the function value accurate to the number of digits specified by Digits if you use three extra digits inside the algorithm 242 e Chapter 4 Numerical Programming in Maple The following procedure increments Digits by three and uses evalf to round the result to the proper number of digits before returning gt evalf MyFcn proc xx algebraic VVVVVVVVVVVVVVVV VV local x term s old_s xsqr i x evalf xx Digits Digits 3 if type x numeric and abs x 0 1 then xsqr x 2 term evalf 1 6 S term old s 0 for i from 1 while s lt gt old_s do term term xsqr 2 i 2 2 i 3 old s S S S term end do else S evalf x sin x x 3 end if eval Digits 3 s end proc When you invoke evalf on an expression containing an unevaluated call to MyFcn Maple invokes evalf MyFcn gt evalf MyFcn 0 000195 0 1666666663498 Recode the symbolic version of MyFcn so that it takes advantage of evalf MyFcn if the argument is a floating point number gt MyFcn proc x algebraic VVVVVV if type x float then evalf CMyFcn x else x sin x x 3 end if end proc The evalf command automatically looks for evalf MyFcn when used in the evalf MyFcn syntax gt MyFcn 0 limit MyFcn x x 0 1 MyFen 0 6 4 5 Using
245. essions that Maple would ordinarily simplify au tomatically For example Maple automatically simplifies the expression a a to 2a It is difficult to display the equation a a 2a To display such an equation use the procedure make a from Example 1 gt a make a 2xa ata 2a When you type a name in an interactive session the Maple program interprets it as the global variable While this prevents you from using the assignment statement to directly assign a value to an escaped local variable it does not prevent you from using the assign command You must write a Maple expression which extracts the variable For example in the previous equation you can extract the local variable a by removing the global a from the left side of the equation gt eqn 4 eqn a ta 2a gt another a remove x evalb x a lhs eqn another _a a You can then assign the global name a to this extracted variable and verify the equation 1 3 Local Variables and Invoking Procedures e 21 gt assign another a a gt eqn 2a 2a gt evalb true Assume Facility For complicated expressions you must use the assume command to extract the desired variable You may have encountered this situation before without realizing it when you were using the assume facility to remove an assumption The assume facility attaches various definitions to the variable you specify with one result being that the name subsequently appears as a l
246. essions would not be feasible if it were not done with the aid of hashing Every expression is entered in the simplification table using its signature as a key The signature of an expression is a hashing function itself with one very important attribute signatures of trivially equivalent expressions are equal For example the signatures of the expressions a b c and c 4 a b are identical the signatures of a x b and b a are also identical If two expressions signatures disagree then the expressions cannot be equal at the basic level of simplification Searching for an expression in the simplification table is done by e Simplifying recursively all of its components e Applying the basic simplification rules e Computing its signature and searching for this signature in the table If the signature is found then a full comparison is performed tak ing into account that additions and multiplications are commutative to verify that it is the same expression If the expression is found the one in the table is used and the searched one is discarded A full compari son of expressions has to be performed only when there is a collision of signatures Since simplified expressions are guaranteed to have a unique occur rence it is possible to test for equality of simplified expressions using a single pointer comparison Unique representation of identical expressions is a crucial ingredient to the efficiency of tables hence also the remember opti
247. eters by giving several argu ments of the form variable expression with commas separating them To query the setting of a parameter use the following syntax interface variable The variable argument specifies the parameter to query The interface command returns the current setting of the parameter You can query only one parameter at a time One Dimensional Expression Output The 1print command prints Maple expressions in a one dimensional no tation similar to the format Maple uses for input In most cases you can use this output as input and the same expression would result The single exception is if the expression contains Maple names containing non alphanumeric characters The 1print command is called as follows lprint expressionSequence The expressionSequence consists of one or more Maple expressions Each of the expressions is printed in turn with three spaces separating each of them Maple prints a new line character after the last expression Maple always sends the output that lprint produces to the default output stream You can use the writeto and appendto commands de scribed later to temporarily redirect the default output stream to a file 3 6 Output Commands e 207 The interface parameter screenwidth affects the output of 1print If possible Maple wraps the output between tokens If a single token is too long to display for example a very long name or number Maple brea
248. etimes refer to the intermediate form of the Maple expres sion that triggered the message 324 e Chapter 6 Advanced Connectivity When determining the cause of an error message or writing and debug ging custom language definitions it is recommended that you determine the intermediate form of a Maple expression input In general you can de termine the intermediate form with the CodeGeneration IntermediateCode translator However because some aspects of the intermediate code are specific to the language to which you are translating it may help to see the intermediate code for a specific translator This can be done by setting infolevel CodeGeneration to a value greater than 3 and performing a translation Example 4 shows the intermediate code for the expression 2x 1 The first argument of the Scope structure is the name of a type table used internally during the translation process Example 4 The following example shows the intermediate form of the expression 2z 1 gt CodeGeneration IntermediateCode 2 x 2 1 Scope nametab StatementSequence Assignment GeneratedName cg Sum Product Integer 2 Power Name x Integer 2 Negation Integer 1 Extending the CodeGeneration Translation Facilities The CodeGeneration package is distributed with translators for sev eral programming languages In addition you can define new transla tors to enable CodeGeneration to generate code for other languages Tools
249. eues gt type PriorityQueue module empty top insert gt delete 112 e Chapter 2 Programming with Modules Constructor Implementation Priority queues can be implemented as Maple objects by writing a constructor for the objects gt PriorityQueue description priority queue constructor local largs lnargs VVVVVVVVVVVVVVVVVVvVVVVvvvVVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvv lnargs if lnargs largs else largs end if module proc priority procedure nargs gt 1 then args 2 1 description a priority queue export empty top insert local nitems table heap size delete init heap nitems bubbleup bubbledown 0 bubbleup proc child posint local parent parent iquo child 2 if child gt 1 and priority heap child gt priority heap parent then heap parent heap child heap child heap parent procname parent recurse end if end proc bubbledown proc parent posint local child child 2 parent if child nitems and priority heap 1 child gt priority heap child then child 1 child end if if child lt nitems and priority heap parent lt priority heapl child then heap parent heap child heap child heap parent procname child recurse new parent end if end proc Initialize the priority queue
250. example to use the numtheory package you can issue the command gt with numtheory Warning the protected name order has been redefined and unprotected 80 e Chapter 2 Programming with Modules GIgcd bigomega cfrac cfracpol cyclotomic divisors factorEQ factorset fermat imagunit indez integral basis invcfrac invphi issqrfree jacobi kronecker A legendre mcombine mersenne migcdez minkowski mipolys mlog mobius mroot msqrt nearestp nthconver nthdenom nthnumer nthpow order pdexpand v pprimroot primroot quadres rootsunity safeprime a sq2factor sum2sqr T thue The effect of this command is to make the names exported by the numtheory package a list of which is returned by the call to with avail able temporarily as top level Maple commands gt cfrac 1 x k x 5 subdiagonal simregular 1 1 kx T 1 kK 1 a T 2 1 k 1 x 6 1 k 2x jm Ta ds Writing Maple Packages by Using Modules This section describes how to write Maple packages by using modules The following subsections present several examples that illustrate how to do this The LinkedList Package The first example package is a small package called LinkedList This example illustrates the basic structure of a package implemented by using modules Background Linked lists are a basic data structure used in programs for many different purposes There are many kinds of linked lists with
251. ey are used internally to more efficiently trans fer hardware floating point values between RTABLEs of such values and the Maple I O facilities for example the printf and scanf families of functions A 2 Internal Representations of Data Types e 405 If Statement IF cond stat cond stat stat exprl segl expr2 seq2 ao seqN Maple syntax if condExpri then statSeql elif condExpr2 then statSeq2 else statSeqN end if Length 3 or more This structure represents the if then elif else end if statement in Maple If the length is even the last entry is the body of an else clause The remaining entries are interpreted in pairs where each pair is a condition of the if or elif clause followed by the associated body Logical IMPLIES IMPLIES ezprl expr2 Maple syntax expri implies expr2 Length 3 Not Equal or Test for Inequality INEQUAT ezprl expr2 Maple syntax expri lt gt expr2 Length 3 This structure has two interpretations depending on the context in which it is used It can be either a test for inequality or an inequality statement not to be confused with an assignment Negative Integer INTNEG GMP integer 406 e Appendix A Internal Representation and Manipulation Maple syntax 123 Length 2 or more This data structure represents a negative in
252. f the scanned objects just as fscanf and scanf do The following example illustrates sprintf and sscanf by converting a floating point number and two algebraic expressions into a floating point format Maple syntax and Maple m format respectively This string is then parsed into the corresponding objects using sscanf gt s sprintf 4 2f a m evalf Pi sin 3 cos 3 s 3 14 sin 3 cosG6F gt sscanf s f Ya 4m 3 14 sin 3 cos 3 Information For information on translating Maple expressions into other programming languages see 6 1 Code Generation 3 8 Notes to C Programmers If you have experience programming in the C or C programming lan guages many of the I O commands described in this chapter seem famil iar The Maple I O library design purposely emulates the C standard I O library In general the Maple I O commands work in a similar manner to their C counterparts The differences that arise are the result of differences between the Maple and C languages and how you use them For example in the C library you must pass the sprintf function a buffer into which it writes the result In Maple strings are objects that you can pass as easily as numbers so the sprintf command simply returns a string that is sufficiently long to hold the result This method is both easier to work with and less error prone as it removes the danger of writing past the end of a fixed length buffer Similar
253. fc2 end if end if toset ifci subset toset ifc2 end proc Save an interface to the repository savelib proc description save a named interface to a repository local ifc for ifc in map totype args do if not type ifc interface then error arguments must be interfaces but got A1 ifc end if savelib totype ifc end do end proc Test whether a module satisfies an interface This is simply an alternative to a call to type satisfies proc m ifc description test whether a module satisfies an interface if not type totype ifc interface then error second argument must be an interface name but got A1 ifc end if type m ifc 122 e Chapter 2 Programming with Modules end proc Test whether two interfaces are equivalent Since unevaluated function calls compare differently if their arguments are in a different order we convert them to sets first and then test for equality equivalent proc ifci ifc2 description test whether two interfaces are equivalent local ti t2 ti t2 totype ifcl totype ifc2 if not type ti interface then error expecting an interface name but got A1 ifc1 elif not type t2 interface then error expecting an interface name but got 1 ifc2 end if evalb op t1 op t2 end proc end module VVVVVVVVVVVVVVVVVVVV VV This package implements
254. fied by maple type is being used subtype 2 bits indicates if the RTABLE is an Array Matrix or Vector storage 4 bits describes the storage layout e g sparse upper tri angular etc e order 1 bit indicates C or Fortran ordering of RTABLE elements read only 1 bit indicates the RTABLE is to be read only once created foreign 1 bit indicates that the space pointed to by the data field does not belong to Maple so Maple should not garbage collect it e eval 1 bit indicates if full evaluation should occur on lookup For more information refer to rtable eval literal 1 bit optimization for internal type checking of data con tained in an RTABLE number of dimensions 6 bits the number of dimensions of the RTABLE from 0 to 63 The num elems field indicates the total number of elements of stor age allocated for the data For a Maple sparse RTABLE num elems is not used For a NAG sparse RTABLE num elems specifies the number of elements currently allocated some of which might not be in use The remaining fields specify the upper and lower bounds of each di mension and are stored directly as signed machine integers The limits on bounds are 2 147 483 648 to 2 147 483 647 for 32 bit architectures and 9 223 372 036 854 775 808 to 9 223 372 036 854 775 807 for 64 bit architectures The total number of elements cannot exceed the upper limit numbers either A 2 Internal Repre
255. fol lowing type permutation procedure determines if p is a permutation of the first n positive integers That is p should contain exactly one copy of each integer from 1 through n gt type permutation proc p gt local i gt type p list and op p seq i i 1 nops p 7 gt end proc gt type 1 5 2 3 permutation false gt type 1 4 2 3 permutation true The type testing procedure can accept more than one parameter When you test if an expression expr has type name parameters then Maple invokes type name expr parameters if such a procedure exists The following type LINEAR procedure de termines if f is a polynomial in V of degree 1 1 5 Extending Maple e 33 gt type LINEAR proc f V name gt type f polynom anything V and degree f V 1 gt end proc gt type axx b LINEAR x true gt type x 2 LINEAR x false gt type a LINEAR x false Exercises 1 Modify the type LINEAR procedure so that you can use it to test if an expression is linear in a set of variables For example x 4 ay 1 is linear in both x and y but zy a 1 is not 2 Define the type POLYNOM X which tests if an algebraic expression is a polynomial in X where X is a name a list of names or a set of names Neutral Operators The Maple software recognizes many operators for example and not and union These operators have sp
256. for this function is as follows 6 2 External Calling Using Compiled Code in Maple e 341 Sum define external sum v1 ARRAY 1 size integer 4 v2 ARRAY 1 size integer 4 size NO PASS integer 4 RETURN integer 4 LIB libsum dl1 VVVVVV The NO_PASS modifier specifies that the size argument should not be passed to the external function The Sum function is then called by the following statement gt Sum vi v2 op 1 v1 where v1 and v2 are vectors Maple passes the vector data or a copy of the vector data to the external sum function It does not pass the size element to the external function but size is used for argument checking because the NO CHECK option was not specified Note that this option can only be used for top level arguments That is it is invalid to declare a callback procedure s arguments as NO PASS Argument Checking and Efficiency Considerations It is intended that the time and space costs of calling an external function not be any higher than the costs for calling an equivalent built in function with the same degree of argument type checking The amount of type checking done by a generated Maple language wrapper exceeds that done by most internal functions so there is some additional overhead The define external function has an option NO CHECK which if used disables the type checking done by the Maple language wrapper For frequently called external functions that perfo
257. for this task are available in the LanguageDefinition subpack age of CodeGeneration Custom translators can define a language in its entirety or extend ex isting language definitions overriding and extending only those language components that need to be changed To see a list of languages currently recognized by CodeGeneration and thus available for extending use the CodeGeneration LanguageDefinition ListLanguages command The Printing Phase As noted previously the CodeGeneration package first processes the Maple input and translates it to an intermediate form This is followed by the printing phase which translates the intermediate form to a Maple string according to transformation rules specific to the target language 6 1 Code Generation e 325 For each name used in the intermediate form there is a print handler procedure During the printing phase Maple traverses the intermediate form recursively For each subexpression of the intermediate form Maple calls the print handler associated with that class of expressions Defining a Custom Translator This section explains the process of defining a translator for a target language Using a Printer Module With each CodeGeneration language defini tion there is an associated Maple module called a Printer module which contains language specific print handlers and data A Printer module has a number of functions which set and reference language specific printing data There are
258. forces Maple to write data on demand so that you can monitor the progress of a file Redirecting the default Output Stream The writeto and appendto commands redirect the default output stream to a file T his means that any operations that write to the default stream write to the file you specify instead You can call the writeto and appendto commands as follows 218 e Chapter 3 Input and Output writeto fileName appendto fileName The fileName argument specifies the name of the file to which Maple is to redirect the output If you call writeto Maple truncates the file if it exists and writes subsequent output to the file The appendto command appends to the end of the file if the file exists If the file you specify is open for example it is in use by other file I O operations Maple generates an error The special fileName terminal specified as a name not a string causes Maple to send subsequent default output to the original default output stream the one that was in effect when you started Maple The calls writeto terminal and appendto terminal are equivalent Recommendation Issuing a writeto or appendto call directly from the Maple prompt is not recommended When writeto or appendto is in effect Maple also writes any error messages that can result from subse quent operations to the file Therefore you cannot see what is happening Generally use the writeto and appendto commands within procedures or fi
259. formation refer to Array and Matrix For more information on all these commands and the Matlab pack age in general refer to Matlab To learn how to start the MATLAB application from a Maple session refer to Matlab openlink 4 6 Conclusion With numerical techniques you can solve equations which are other wise unsolvable investigate the properties of complicated solutions and quickly obtain numerical estimates Symbolic calculations give precise representations but in some cases can be expensive to compute even with a tool as powerful as Maple At the other extreme hardware floating point arithmetic allows you fast com putation directly from Maple This involves however limited accuracy Software floating point offers a balance As well as sometimes being much faster than symbolic calculations you also have the option to control the precision of your calculations thus exerting control over errors Software floating point calculations and representations mimic the IEEE 754 standard representation closely except for the great advan tage of arbitrary precision The similarity with this popular standard allows you to readily apply accumulation of error and numerical analysis principles contained in numerous texts and papers 5 Programming with Maple Graphics Maple Plots Maple has a wide range of packages and procedures for generating 2 D and 3 D plots These include e The plot and plot3d procedures for generating basic
260. fying Polygon Meshes 281 5 6 Vector Field Plots o 286 Drawing a Vector is ia y ae p eek a eee EO 286 Generating a Vector Plot Field 288 5 7 Generating Grids of Points 296 O58 cA TIIBALIORI ta BO Ae SE exa Revo POS Te Deed 301 Animation in Static Form 004 302 Graphical Object as Input 302 Methods for Creating Animations 303 Two and Three Dimensions 305 Demonstrating Physical Objects in Motion 306 5 9 Programming with Color 308 Generating Color Tables o 309 Using Animation la A a a xA 310 Adding Color Information to Plots 312 Creating A Chess Board Plot 315 540 Conclusi n 4 naeizo d boy OO RR ak ae 316 6 Advanced Connectivity 319 Iu This Chapter 2 mob eve fet x aos p 319 Code Generation 2 2 319 External Calling Using Compiled Code in Maple 319 viii e 6 1 6 2 6 3 6 4 Contents OpenMaple Using Maple in Compiled Code Code Generation a The CodeGeneration Package Calling CodeGeneration Functions Translation Process 2l Extending the CodeGeneration Translation Facilities Defining a Custom Translator External Calling Using Compiled Code in Maple Method 1 Calling External Functions External D
261. g Guide e The Maple Getting Started Guide provides extensive information for new users on using Maple and the resources available in the soft ware and on the Maplesoft Web site http www maplesoft com e The Maple User Manual provides an overview of the Maple software including Document and Worksheet modes performing computations creating plots and animations creating and using Maplets creating mathematical documents expressions basic programming informa tion and basic input and output information e The Maple Introductory Programming Guide introduces the basic Maple programming concepts such as expressions data structures looping and decision mechanisms procedures input and output de bugging and the Maplet User Interface Customization System The Maple software also has an online help system The Maple help sys tem allows you to search in many ways and is always available There are also examples that you can copy paste and execute immediately l The command line version provides optimum performance However the worksheet interface is easier to use and renders typeset editable math output and higher quality plots The Student Edition does not include the Maple Introductory Programming Guide and the Maple Advanced Programming Guide These programming guides can be pur chased from school and specialty bookstores or directly from Maplesoft Conventions e 3 Conventions This manual uses the following typogr
262. gint local i j for i to nops s do c i cli 1 if c i lt nops s i then return seq s jl c jll j 1 nops s end if c i 1 end do c 1 0 FAIL end proc procO element s c end proc end proc VVVVVVVVVVVVVVVVVVVVV VV VV Again you can find all six elements of o 3 7 x x y gt f CartesianProduct alpha beta gamma x y 1 3 Local Variables and Invoking Procedures e 25 f proc element s c end proc gt to 7 do f end do Y Y a yY B y 7 2 Q PB x FAIL You can use CartesianProduct to study several products simultane ously gt g CartesianProduct x yl N Z R gt 56 23 68 92 g proc element s c end proc The following are the first few elements of x y x N Z R x 56 23 68 92 gt to 5 do g end do lv N 23 2 N 23 ly Z 23 Z 23 ly R 23 The variables s in f and g are local variables to CartesianProduct so they are not shared by different invocations of CartesianProduct Similarly the variable c in f and g is not shared You can see that the two arrays of counters are different by invoking f and g a few more times 26 e Chapter 1 Procedures Variables and Extending Maple gt to 5 do fO gO end do Y Yj T R 23 a Y y N 56 B y z N 56 ly x y Z 56 a x x Z 56 The element procedure in g is also local to CartesianProduct There f
263. gon proc vlist list scale numeric gt local i center outside inside n edges polys gt gt n nops vlist gt center add i i vlist n gt inside seq scale vlist i center center i 1 n gt outside seq inside i vlist i vlist i 1 gt inside i 1 gt i 1 n 1 gt polys POLYGONS outside gt inside n vlist n vlist 1 inside 111 gt STYLE PATCHNOGRID 282 e Chapter 5 Programming with Maple Graphics gt edges CURVES op vlist vlist 11 gt inside inside 1 gt polys edges gt end proc The following are the corners of a triangle gt triangle 0 2 2 2 1 01 triangle 0 2 2 2 1 0 The cutoutPolygon procedure converts triangle to three polygons one for each side and two curves gt cutoutPolygon triangle 1 2 POLYGONS 5 0 2 2 2 5 I 5 3 2 2 1 0 1 5 L 5 1 0 10 2 5 Sh STYLE PATCHNOGRID CURVES 10 2 2 21 1 0 10 2 5s sh gt sb Bs Sh s 3 Use the plots display command to show the triangle 1 gt plots displayl A color red 2 1 5 1 0 5 The following cutout procedure applies cutoutPolygon to every face of a polyhedron gt cutout proc polyhedron scale gt local v gt seq cutoutPolygon v evalf scale v polyhedron gt end proc 5 5 Programming with the plottools Package e 283 Error attempting to assign
264. gram illustrates how to evaluate expressions access help and interrupt compu tations The following assumes the current directory is the root of the Maple installation and that the compiler is set up to work in command line mode that is it is in the PATH and relevant environment variables are set up AIX setenv LIBPATH bin IBMN RISCN UNIX cc samples OpenMaple C cmaple omexample c o bin IBM _RISC _UNIX omexample Lbin IBMN RISCN UNIX Iinclude lmaplec bin IBM _RISC _UNIX omexample Digital UNIX Compaq Tru64 setenv LDN LIBRARYN PATH bin DECN ALPHAN UNIX cc samples OpenMaple C cmaple omexample c o bin DEC _ALPHA _UNIX omexample Lbin DECN ALPHAN UNIX Iinclude lmaplec bin DECX_ALPHAN_UNIX omexample For a list of currently supported operating system versions refer to the installation instructions 390 e Chapter 6 Advanced Connectivity HP UX setenv SHLIBN PATH bin HPN RISCN UNIX cc samples OpenMaple C cmaple omexample c o bin HP _RISC _UNIX omexample Lbin HPN RISCN UNIX Iinclude lmaplec 1Csup bin HP _RISC _UNIX omexample IRIX setenv LD _LIBRARY _PATH bin SGI _MIPS _UNIX cc samples OpenMaple C cmaple omexample c o bin SGI _MIPS _UNIX omexample Lbin SGI _MIPS _UNIX Iinclude lmaplec bin SGI _MIPS _UNIX omexample Linux setenv LD _LIBRARY _PATH bin IBM _INTEL _LINUX gcc samples OpenMaple C cmaple omexample c o bin IBM _INTEL _LINUX omexample Lbin IBM _INTEL _LINUX Iinclude lmap
265. group orders in the same spirit as GroupElements can be written as follows gt GroupOrder proc G gt description compute the order of a finite group gt if type G SubGroup then gt nops GroupElements G gt elif type G Group then gt if type G order posint then gt G order gt elif type G elements set then gt G order nops G elements gt elif type G order procedure then gt G order gt else gt nops GroupElements G gt end if gt else gt gt procname args gt end if gt end proc As with GroupElements this routine checks the possible shortcuts that might be available for a group It begins with those that are likely to involve the least computation and progresses through more costly alter natives Only as a last resort does the procedure call GroupElements to compute a full enumeration of the group elements only to return their number gt G Symmetric 4 G module export id mul inv eq member gens order elements option record end module gt C Centralizer G 1 3 2 4 C module export parent test option record end module gt GroupOrder G 152 e Chapter 2 Programming with Modules 24 gt GroupOrder C Note that when the argument G is neither a group nor a subgroup the procedure GroupElements returns unevaluated This allows you to ext
266. gt gt gt gt gt generateplot v1 v2 m n a b dx dy gt end proc Test this procedure gt p x y gt cos x y gt q x y gt sin x y gt vectorfieldplot p q 0 Pi 0 Pi grid 3 4 ELA A qm quee ep f 5 N NN N gt 05 1415 2v25 3 v85 e All the previous versions of vectorfieldplot scale all vectors by the same factor so that each vector fits into a single grid box No overlapping of arrows occurred However the length of the arrows is dependent on the size of the grid boxes T his can produce graphs that have a large number of very small almost indiscernible vectors For example the following plot of the gradient field of F cos xy exhibits this behavior gt vectorfieldplot y cos x y x sin x y gt x 0 Pi y 0 Pi grid 15 20 2 5 1 5 l e ANS IN a E E IN N ODi er a ha tees un ERE EHE ER cae oh 204 e Chapter 5 Programming with Maple Graphics The final version of vectorfieldplot differs in that all the arrows have the same length the color of each vector indicates its magnitude First create a utility procedure that generates a grid of colors from the function values Example 8 Utility Procedure gt convert colorgrid proc colorFunction gt local colorinfo i j m n gt gt colorinfo op 3 convert colorFunction gt gridpoints args 2 nargs gt map x gt m
267. gt 2 2 1 877582561890372758 2 2 2 479425N 538604203006 2 2 3 2 3 2 1 1 0806046117 3627952 3 2 2 1 68294196961579300 3 2 3 2 datatype float 8 storage rectangular order C_order STYLE POINT Because the plot is not in Cartesian coordinates and there are no de fault labels the PLOT3D structure does not contain an AXESLABELS struc ture The PLOT Data Structure You can construct and manipulate a plot data structure directly to create 2 D and 3 D plots The data structure is an unevaluated PLOT or PLOT3D function call with arguments containing information that determines the objects that the plotting device displays Maple evaluates the expression for example gt PLOT CURVES 0 0 2 1 1 0 8 0 6 0 4 0 2 0 0 5 1 1 5 2 and passes it to the Maple interface which determines that this is a plot data structure The Maple interface then dismantles the contents and passes the information to a plot driver which determines the graphical 5 3 Maple Plot Data Structures e 257 information that it renders to the plotting device In the previous example PLOT structure the result is a single line from the origin to the point 2 1 The CURVES data structure consists of one or more lists of points each representing a curve along with optional arguments for example line style or line thickness information Thus the commands gt n 200 gt points seq 2 cos i
268. gt c array 0 1 c 0 1 In following procedure element nops s is the number of sets and nops s il is the number of elements in the ith set When you have seen all the elements the procedure re initializes the array of counters and returns FAIL Therefore you can repeatedly trace the Cartesian product by calling element gt element proc s list set c array 1 nonnegint gt local i j gt for i to nops s do gt cli cli 1 gt if cli lt nops s i then gt return seq s jl c jll j 1 nops s gt end if gt cli 1 end do gt c 1 0 gt FAIL gt end proc gt element s c element s c element s c 24 e Chapter 1 Procedures Variables and Extending Maple gt element s c FAIL gt element s c ly v Example 4 Instead of writing a new procedure for each Cartesian product you study you can write a procedure CartesianProduct that returns such a pro cedure CartesianProduct creates a list s of its arguments which must be sets and then initializes the array c of counters and defines the sub procedure element Finally the element subprocedure is invoked inside a proc structure gt CartesianProduct proc local S c element s 7 args if not type s list set then error expected a sequence of sets but received args end if c array 0 1 nops s 1 element proc s list set c array 1 nonne
269. h end try else iterate f df x0 ND end if end proc VVVVVVVVVVVV Newton uses hardware floating point arithmetic for the iterations and rounds the result to software precision Hardware floating point num bers have more digits than the software floating point numbers given the present setting of Digits gt Newton f 1 5 15 232 e Chapter 4 Numerical Programming in Maple 1 5 1 41666666666666674 1 41421568627450988 1 41421356237468987 1 41421356237309514 1 414213562 Newton must use software floating point arithmetic to find a root of the following Bessel function gt F z gt BesselJ 1 z F z gt BesselJ 1 z gt Newton F 4 15 Software arithmetic is used because evalhf does not recognize BesselJ and the symbolic code for BesselJ uses the type command and remember tables which evalhf does not allow gt evalhf BesselJ 1 4 Error remember tables are not supported in evalhf Using a try catch block as in the previous Newton procedure allows the procedure to work when evalhf fails The previous Newton procedure prints many digits when it is trying to find a ten digit approximation The reason is that the print command is located inside the iterate procedure which is inside a call to evalhf where all numbers are hardware floating point numbers and print as such Computing with Arrays of Numbers Use the evalhf command for calculations with numbers The only struc tured Maple o
270. h a function would never be used because the Maple operator exists but working through this example demonstrates the steps required to use compiled code in Maple int add int numi int num2 return numi num2 There are 3 basic steps required to call an external function Step 1 DLL Creation First this function must be compiled into a Dy namic Link Library Windows XXX DLL or Shared Library UNIX libXXX so or Macintosh XXX dylib For the rest of this chapter the compiled library is referred to as a DLL If the sources are downloaded from the internet or purchased a DLL may already have been built Oth erwise consult the compiler s documentation for help on how to build a DLL When building the DLL ensure that you export the function that Maple is intended to be able to call In this case the function name is add This is the only step that requires the user to have knowledge of a specific compiler For the remaining steps it does not matter if the function was written in C Fortran or Java For Maple the external library functions must be compiled by using the _stdcall calling convention which is the default under UNIX but must be specified when using most Windows compilers Step 2 Function Specification To make the appropriate argument con versions Maple requires information about the function that it calls At a minimum Maple requires the following e Name of the function e Type of parameters the function
271. h the size of the enumerated type of the compiler with which the external function was compiled usually this is the same size as the int type 6 2 External Calling Using Compiled Code in Maple e 339 Procedure Call Formats Some languages like C support passing functions as arguments A Maple procedure can be passed to an external function in the same way The wrapper sets up a C style procedure to call Maple to execute the passed procedure with the given arguments This C callback is given to the ex ternal call to be used like any other C function Each member descriptor pair describes one parameter of the proce dure T he descriptor is any of the types described in this chapter It is not permitted to declare a procedure that itself takes a procedure parameter In other words a callback cannot itself call back to the external code Call by Reference Unless overridden each argument is passed by value The REF modifier can be used to override this argumentIdentifer REF dataDescriptor options The REF modifier can take the following options ANYTHING This option must be first in the list of options Use this option to declare the equivalent of a C void parameter The wrapper code attempts to convert passed arguments to simple types 4 byte integer 8 byte float complex or string when encountered If no conversion to one of these types is possible NULL is passed to the external function CALL ONLY T
272. he RtableSettings data structure can be manipulated directly as follows settings data type RTABLE DAG settings maple type EvalMapleStatement kv complex numeric RtableSelect returns the value rt index where rt is an RTABLE and index is an integer array RtableAssign assigns the value val to rt index This function must be used instead of assigning directly to the rtable data block whenever the given rtable has an indexing function or unusual storage format for example sparse The index is an integer array For example the fol lowing code assigns the value 3 14 to the 2 1 element of the given datatype float 8 rtable RTableData val M INT x index index 0 2 index 1 1 val float64 3 14 RTableAssign kv rt index val RtableSparseCompact removes any zeros in the sparse rtable data block This should be called after an external routine that modifies the sparse data block directly RtableSparseIndexRow returns the vector of indices for the ith di mension of rt The rt must be a NAG sparse rtable 6 2 External Calling Using Compiled Code in Maple e 365 RtableSparseIndexSort sorts the Nth index vector for the NAG sparse rtable rt This is done in place and the other index vectors are adjusted accordingly so that the index value mapping is preserved RtableSparseSetNumElems sets the number of non zero entries in the NAG sparse rtable rt to N This should be done only if the number of elements has cha
273. he integer O represents address 0 gt double it NULL gt gt concat define external concat gt RETURN string a string b string gt LIB libtest dl1 gt concat NULL x NULLx 6 2 External Calling Using Compiled Code in Maple e 349 gt concat 0 0 0 In the concat example the C code might look like the following Note that this function does not clean memory as it should char concat char a char b 1 char r if la b return NULL r char malloc strlen a strlen b 1 sizeof char strcpy r a strcat r b return r Method 3 Customizing Wrappers For complete control over data conversions Maple allows modification of existing wrappers and creation of custom wrappers There are numerous C and Fortran functions available for translating and manipulating Maple data structures To use this method you must be familiar with the steps required to use compiled code in Maple described in Method 1 Calling External Functions on page 331 For this method you do not declare a func tion specification because Maple passes one data structure containing all the passed information Therefore there are only two basic steps DLL creation and function invocation as described on pages 331 332 in ad dition to wrapper generation Wrappers were introduced in Method 2 Generating Wrappers on page 337 External Function Entry Point Maple finds the symbol name g
274. he name of a module rprofile selects any exports of the module that are 2 3 Packages e 91 procedures or modules and calls itself recursively to instrument them If the parameter s is assigned a value of any other type then an exception is raised 2 The expression exports s instance evaluates to a list of all the exported variables of the module that are assigned to s It is important to pass the instance option to exports because when those names are passed to rprofile in a recursive call rprofile must test the type of their assigned values This list contains all the module exports so those that are of type procedure or of type module are selected by using a call to select The recursion is effected in the call to add which sums the return values of all the recursive calls to rprofile 3 The exported procedure covered is used to determine which proce dures have been instrumented and called with profiling information stored One possible design would store this information in a private table in the coverage package With this design covered could sim ply query that internal table for the names of the procedures that have been instrumented and that have profiling information stored However a user may have instrumented the procedure manually by calling debugopts directly or historical profiling data may have been read from a Maple repository Therefore a design that queries the system directly without regard to how a
275. hich is written in the Maple language The library is stored in an archive and pieces of it are loaded and interpreted by the kernel on demand User Interface The user interface is the part of Maple that the user sees and is conceptually separate from the math engine The same math engine can be used with different user interfaces Usually Maple is provided with a graphical user interface GUI and a command line interface The GUI is more useful for interactive use especially when working with plots or large matrices T he command line interface is practical for batch processing or solving large problems where you want to devote all the resources of your computer to computation Maplet applications provide an alternate user interface which is built from a description generated in the Math Engine by a series of user com mands For more information on the Maplets package refer to the Intro ductory Programming Guide Internal Functions The internal functions in Maple are divided into five distinct groups 1 Evaluators The evaluators are the main functions responsible for evaluation There are six types of evaluations statements algebraic expressions boolean expressions name forming arbitrary precision floating point arithmetic and hardware floating point arithmetic The user interface calls only the statement evaluator but thereafter there are many interactions between evaluators For example the statement ifa gt Othen blli
276. his operation by using the Maple composition operator Q gt evalf CNO 5 709873593 The following uniform procedure uses evalf to evaluate the constants in the range specification r to floating point numbers the map command to multiply both endpoints of the range by 10 Digits and round to round the results to integers gt uniform proc r constant constant local intrange f intrange map x gt round x 10 Digits evalf r f rand intrange evalf eval f 10 Digits end proc V gt gt gt You can now generate random floating point numbers between 4 and 7 gt U uniform 4 7 gt seq U i 1 20 4 906178722 4 342783855 5 845560096 5 720041409 4 477799871 6 851756647 4 806779819 5 504811662 6 060694649 6 238504456 6 440125341 5 459747079 5 177099028 5 921894219 6 758265656 5 792661441 4 988664160 4 994950840 4 374705325 5 782030884 The uniform procedure has a serious flaw uniform uses the current value of Digits to construct intrange thus U depends on the value of Digits when uniform creates it On the other hand the evalf command within U uses the value of Digits that is current when you invoke U These two values are not always identical 1 1 Nested Procedures e 13 gt U uniform cos 2 sin 1 gt Digits 15 gt seq UO i 1 8 0 440299060400000 0 366354657300000 0 0671154810000000 0 224056281100000 0 1311304357
277. his option specifies that although the object is to be passed by reference any changes made by the external function are not written to the Maple symbol that was passed This can be used both to protect the objects passed see the following Array Options section and to reduce overhead as no translation back to Maple data structures need be made RETURN ONLY This option specifies that no data is actually passed to the external function Instead only a reference to the allocated space is passed and the external function is expected to fill the space with data The result is converted into an appropriate Maple object Array Options If an ARRAY argument is declared as CALL ONLY and an Array Matrix or Vector with proper settings is passed to the external function so that no 340 e Chapter 6 Advanced Connectivity copying is required CALL ONLY has no effect and thus does not prevent the called function from overwriting the original array To prevent this from occurring include the option COPY in the ARRAY descriptor The ARRAY descriptor accepts extra options when used with wrapper generation These options can be specified as follows ARRAY dimi dimN datatype typename order options The dim1 through dimN parameters are integer ranges specifying the range of each dimension of the array Any of the upper or lower bounds may be the name of another argument in which case the value of that argument sp
278. ibbonplot cos sin cos sin Pi Pi 254 e Chapter 5 Programming with Maple Graphics 5 3 Maple Plot Data Structures Maple generates plots by sending the user interface a PLOT or PLOT3D data structure which is in fact an unevaluated function call The information included inside these structures specifies the objects to plot Every Maple plotting procedure creates such a structure This process is described below and shown schematically in figure 5 1 1 A Maple command produces a PLOT structure and passes it to the user interface 2 In the user interface Maple constructs primitive graphic objects based on the PLOT structure 3 Maple then passes these objects to the chosen device driver for display 5 3 Maple Plot Data Structures e 255 Figure 5 1 How plots are displayed Maple Library Postscript e g plot plot3d EET X11 Motif Primitive objects Maple Graphics Package Win Metafile device independent You can assign the plot data structures to variables transform them into other structures save them or print them Example 1 Use the 1print command to line print a plot structure gt lprint plot 2 x 3 x 0 5 numpoints 3 adaptive false PLOT CURVES O 3 2 61565849999999989 8 2313170 0000000066 5 13 COLOUR RGB 1 0 0 0 AXESLABELS x VIEW O 5 DEFAULT The previous plot command generates a PLOT data structure that includes the information for a single curve define
279. ide the polygon structure It also constructs the boundary of the entire arrow via a closed curve through the vertices gt myarrow proc point list vect list t1 t2 t3 local a b i x y L Cos Sin v locopts a vect 1 b vect 2 if has vect undefined or a 0 and b 0 then return POLYGONS VVVVV 5 6 Vector Field Plots e 287 end if x point 1 y point 2 L length of arrow L evalf sqrt a 2 b 2 Cos evalf a L Sin evalf b L v 1 x ti Sin 2 y t1 Cos 2 v 2 x ti Sin 2 y t1 Cos 2 v 3 x ti Sin 2 t3 Cos L a y ti Cos 2 t3 Sin L b v 4 x ti Sin 2 t3 Cos L a y ti Cos 2 t3 Sin L b v 5 x t2 Sin 2 t3 Cos L a y t2 Cos 2 t3 Sin L b v 6 x a y bl v 7 x t2 Sin 2 t3 Cos L a y t2 Cos 2 t3 Sin L b v seglevalf v il i 1 7 convert optional arguments to PLOT data structure form locopts convert style patchnogrid args 6 nargs 11 PLOToptions POLYGONSC v 1 v 21 v 3 v 4 v 5 v 61 v 7 op locopts CURVES v 1 v 21 v 3 v 51 v 6 v 7 v 41 v 111 VVVVVVVVVVVVVVVVVVVVVVVVV VV end proc Note Because each polygon must be convex you must build the poly gon structure for the arrow in two parts In the special case that the vector has both components equal to zero or an undefined component such as a value resulting f
280. if Ci j 1 2 C 0 Ca b gt MatrixMatrixMultiply a b mul CO gt foldl G G id args inv m gt MatrixInverse m gens matgens eq a b gt Equal a b member proc g S pos name local i s if nargs 1 then if type g Matrix square then evalb Determinant g lt gt 0 else false end if else gmember G eq args end if end proc order elements if nargs 1 then G order 1 G elements G id end if end use eval G 1 end proc Here the matrix group constructor is used to generate a dihedral matrix group of order 12 gt VV V theta Pi 3 Hu ST a Matrix 2 2 0 1 1 0 11 5 x ead oS la o b Matrix 2 2 cos theta sin theta sin theta cos theta 2 6 Interfaces and Implementations e 155 1 1 E 2 2 d Me 1 n E V3 2 gt B MatrixGroup 2 a b B module export id mul inv gens eq member order elements option record end module gt GroupElements B 1 1 1 1 a 34 o 9 9g 10 1 1 g qp 1 1 739 3 234 1 1 1 1 1 1 E 2 y 399 os a 1 1 11 1 i 1 1 us le 3 E NI 1 1 1 1 1 1 A ee me uu RU Ert V3 2 a 2 2 2 1 0 1 1 IM IE 1 19 E 1 I 0 1 2 V3 2 2 V3 V3 2 Direct Products To enrich the supply of example groups that you can use develop a constructor for the direct product of two
281. ified Instead they are replaced by the actual member that they refer to an instance of a NAME Module Definition MODDEF param local option export stat desc seq seq seq seq seq seq global lexical mod seq seq name Maple syntax module modName description descSeq local localSeq export exportSeq global globalSeq option optionSeq statSeq end module A 2 Internal Representations of Data Types e 409 Length 10 The param seq points to an expression sequence describing the formal parameters of the module Currently Maple does not support parameter ized modules so this field always points to the sequence containing just an instance of the name thismodule The local seq points to an expression sequence listing the explicitly and implicitly declared local variables Each entry is a NAME The explicitly declared variables appear first Within the module locals are referred to by LOCAL structures the local variable number being the index into the local seq The export seq points to an expression sequence listing the exported module members Each entry is a NAME Within the module exports are referred to by LOCAL structures the local variable number being the num ber of elements in the local seq plus the index into the export seq The option seq points to an expression sequence of options to the module for modules options are the same thing as att
282. ifier 3 5 Input Commands e 199 If you call fscanf with a filename and that file is not open Maple opens it in READ mode as a TEXT file If fscanf returns 0 indicating the end of the file when you call it with a filename Maple automatically closes the file Format String The format specifies how Maple is to parse the input The format is a Maple string consists of a sequence of conversion spec ifications that may be separated by other characters Each conversion specification has the following format where the brackets indicate op tional components D width modifiers code e The symbol begins the conversion specification e The optional indicates that Maple is to scan the object but not return it as part of the result It is discarded e The optional width indicates the maximum number of characters to scan for this object You can use this to scan one larger object as two smaller objects The optional modifiers are used to indicate the type of the value to be returned 1 or L The letters 1 and L are supported for compatibility with the C scanf function and indicate that a long int or long long is to be returned In Maple these flags have no effect zc or Z One of these flags can precede any of the numeric formats namely d o x e f or g indicating that a complex value is to be scanned The real and imaginary parts of the complex value are scanned by using the specifi
283. in this section in Example 3 is similar to the convert gridpoints library procedure except that it produces an Array instead of a list of lists Consider the function f z y 1 sin xy You need to evaluate f over the m x n grid with the ranges a b and c d 5 7 Generating Grids of Points e 297 gt f x y gt 1 sin x y IU SE Example 1 The first step is to convert the function f to a numeric procedure Because Maple requires numeric values rather than symbolic for plots convert f to a procedure that returns numerical answers or the special value undefined gt fnum convert f numericproc fnum proc z y local r try r evalhf f r y catch end try if not type r numeric then try r evalf f z y catch end try end if if type r numeric r undefined end proc The fnum procedure which is the result of this conversion attempts to calculate the numerical values as efficiently as possible Hardware floating point arithmetic although of limited precision is more efficient than soft ware floating point and is frequently sufficient for plotting Thus the fnum procedure tries the evalhf function first If evalhf generates an error or returns a non numeric result the fnum procedure attempts the calculation again by using software floating point arithmetic and then calling evalf Even this calculation is not always possible For example the function f is undefined whenever x
284. incorporate LSI with out changing the interface that was designed for the simpler indexing scheme The updated package contains more filters to allow for a greater variety of corpora 174 gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt 5 gt gt gt gt gt gt gt gt gt 5 gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Chapter 2 Programming with Modules SearchEngine module description a generic search engine package option package export Filters subpackage of filters Document document constructor DocumentID FilterDocument FetchDocument Corpus corpus constructor NumberOfDocuments BuildIndex GetDocumentIdByIndex Search local Tools private submodule documentTermVector queryTermVector Exports Document constructor Document proc id fetch filter description document constructor Record i id id fetch fetch gt filter filter end proc Document accessors DocumentID doc gt doc id FetchDocument doc gt doc fetch doc id FilterDocument doc gt doc filter FetchDocument doc Corpus constructor Called with either a sequence of documents or a list of document IDs a fetcher and a document filter routine and a query filter routine Corpus p
285. ing a Search Engine Package The next step is to design a search engine package that includes all the features described to this point T he search engine must also be as generic as possible and accept a variety of document and term types The package manages two kinds of data objects documents and cor pora Each is represented by an object that supports certain features A document is abstracted as a record object with three slots The constructor is gt Document proc id fetch filter gt Record gt gt id id gt gt fetch fetch gt filter filter gt end proc The id slot is the document ID The document ID must uniquely represent the document within the corpus For efficiency document IDs are small while their referents may be quite large While enormous documents can be handled in the design for simplicity it is assumed that any document can reasonably be read into memory in its entirety The fetch slot is a procedure that returns the body of a document given its document ID The filter slot contains a procedure that generates a list of terms ap pearing in the document with multiplicities Several accessor procedures for documents are also provided in the package A corpus is a collection of documents It is represented by an object that supports methods for accessing indexing and searching the collec tion gt SearchEngine module gt description a simple search engine
286. ing that a complex value is to be formatted Each of the real and imaginary parts of the complex value are formatted using the specified format with the z or Z elided The 3 6 Output Commands e 213 z format prints the real part followed by the character specified by c followed by the imaginary part The Z format prints the value in the form x yi where x is the real part y is the imaginary part and i is the current setting of interface imaginaryunit If y is negative a is output instead of a If a supplied value is not complex it is treated as a complex value with a zero imaginary part The code indicates the type of object that Maple is to write The code can be one of the following d Formats the object as a signed decimal integer o Formats the object as an unsigned octal base 8 integer x or X Formats the object as an unsigned hexadecimal base 16 integer Maple represents the digits corresponding to the decimal numbers 10 through 15 by the letters A through F if you use X or a through f if you use x e or E Formats the object as a floating point number in scientific nota tion One digit will appear before the decimal point and precision digits will appear after the decimal point six digits if you do not specify a precision This is followed by the letter e or E and a signed integer specifying a power of 10 The power of 10 will have a sign and at least three digits
287. int numbers and then convert the result back to base 10 The extra decimal digits allow Maple to reproduce the binary number precisely if you use it again in a subsequent hardware floating point calculation gt expr 1n 2 Pi exp 2 1 pcc T expr ln 2 gt evalhf expr 1 40300383684168617 gt evalf round d expr 1 40300383684169 The results that evalhf returns even including for evalhf Digits are not affected by the value of Digits gt Digits 4658 Digits 4658 gt evalhf expr 1 40300383684168617 4 2 Hardware Floating Point Numbers e 229 gt evalhf Digits 15 gt Digits 10 Digits 10 You can use the evalhf Digits construct to determine whether hardware floating point arithmetic provides sufficient precision in a par ticular application If Digits is less than evalhf Digits then you can take advantage of the faster hardware floating point calculations Oth erwise you should use software floating point arithmetic to perform the calculation with sufficient digits T he following evaluate procedure takes an unevaluated parameter expr Without the uneval declaration Maple would evaluate expr symbolically before invoking evaluate gt evaluate proc expr uneval gt if Digits lt evalhf Digits then gt evalf evalhf expr gt else gt evalf expr gt end if gt end proc The evalhf command evaluates many Maple function
288. invoke it Local variables from the outer procedure are used to keep track of which term to return next The Cartesian product of a sequence of sets is the set of all lists in which the ith entry is an element of the ith set Thus the Cartesian product of a 8 y and x y is a b y x x y la x B xl y x o yl 8 yl ly yl The number of elements in the Cartesian product of a sequence of sets grows very rapidly as the number of sets or size of the sets increases It therefore requires a large amount of memory to store all the elements of the Cartesian product Solution You must write a procedure that returns a new element of the Cartesian product each time you call it By calling such a procedure re peatedly you can process every element in the Cartesian product without storing all its elements at once The following procedure returns the next element of the Cartesian product of the list of sets s It uses an array c of counters to determine the next element For example c 1 3 and c 2 1 correspond to the third element of the first set and the first element of the second set gt s alpha beta gamma x y 1 s 7 a B ty 33 gt c array 1 2 3 1 c 3 1 1 3 Local Variables and Invoking Procedures e 23 gt seq s j c j j 1 2 1 8 y Before you call the element procedure you must initialize all the coun ters to 1 except the first one which must be 0
289. ion Designing a Graph Interface To demonstrate how this can be achieved consider graphs as objects that implement the methods listed in Table 2 2 Then represent the abstract interface of a graph by a Maple type gt type Graph module vertices edges addedge order gt size An object implements the graph interface if it is of type Graph 2 6 Interfaces and Implementations e 125 Table 2 2 Graph Methods vertices Returns the set of vertices of the graph edges Returns the set of edges of the graph addedge Allows one to add a new edge to a graph order Returns the number of vertices of the graph size Returns the number of edges of the graph Computing Vertex Degrees Generically If an object implements this interface then you can write generic code based on that interface For example you can write the following procedure to compute the in degree and out degree of a vertex of a given graph gt vdeg proc G Graph v gt local vs vt e description compute the in and out degrees gt of a vertex in a graph gt if member v G vertices then gt vs select e gt evalb v e source gt G edgesO gt vt select e gt evalb v e target gt G edges gt nops vs nops vt gt else gt 0 0 gt end if gt end proc You can write this procedure even though at this point you do not know the graph implementation This cap
290. ion of G to the representation of H Thus the Maple repre sentations G and H of G and H would both be of type Group There is a different approach that is better suited to implicit repre sentations of subgroups T his design can be extended to allow implicit representations of subgroups that you do not need to compute with di rectly The idea is to represent a subgroup by a simpler structure that maintains a link to its parent group and an indication of how it is defined in terms of its parent group Thus a subgroup is represented by a module with an export parent that is assigned the group in which the subgroup is contained A second export has a name depending upon the way in which the subgroup is defined One way to define a subgroup in terms of its parent is to specify a generating set Subgroups defined in this way are 2 6 Interfaces and Implementations e 147 represented by a module having the export gens of type set A second way to define a subgroup is by a property For example the center of a group is defined by the property that all its members commute with every element of the group or equivalently that each member of the subgroup commutes with all the generators of the parent group You can specify properties by using a procedure that tests for membership in the subgroup Thus subgroups can be described by either of the following interfaces parent Parent group test Membership test a procedure gens Set
291. it automatically closes the file when readdata returns Example The following two examples are equivalent uses of readdata to read a table of x y z triples of real numbers from a file gt AM readdata my xyz file text 3 A1 1 5 2 2 3 4 2 7 3 4 5 6 1 8 3 1 6 7 gt A2 readdata my xyz file text float float float A2 1 5 2 2 3 4 2 7 3 4 5 6 1 8 3 1 6 7 Note Data elements in the file are white space delimited Newlines sepa rate rows and white space separates columns The numColumns argument defines how many columns to read and those columns are read from all rows For the file 1234 5678 readdata 2 returns 1 2 5 6 and readdata 3 returns 1 2 3 5 6 7 206 e Chapter 3 Input and Output 3 6 Output Commands Configuring Output Parameters Using the interface Command The interface command is not an output command It is a mechanism to provide communication between Maple and the user interface You can use it to configure parameters affecting the output produced by various commands within Maple To set a parameter call the interface command as follows interface variable expression The variable argument specifies which parameter to change and the ex pression argument specifies the value that the parameter is to have For a list of parameters you can use see the following sections or refer to interface You can set multiple param
292. ith other expressions in the language the distinc tion between state and behavior is somewhat artificial and exists only as a convention The essential idea behind programming with objects is that the ob jects carry their behavior with them Clients of an object can elicit be havior by sending the object messages Objects respond to these messages by performing some prescribed computation that is determined by both the recipient of the message the object and the message itself which may be parameterized by other arguments This is in contrast to non object oriented approaches to programming in which the objects in a software system merely contain static data and serve as inputs and out puts of the algorithms which are represented separately from the objects by procedures or other routines Objects and Constructors Objects are usually created by invoking a constructor constructor is a procedure that builds the object expression from some possibly empty set of inputs Maple uses constructors for a number of its native expression types For example the procedure table 2 5 Modeling Objects e 109 is a constructor for Maple tables and series is a constructor for Maple series expressions A constructor must be used to create objects that have no input syntax such as series and tables in Maple but can also be used for expressions that do have an input syntax the Float constructor is an example of the latter case Therefore mos
293. iting this source code e A second problem relates to performance A complete implementation would require a table of dozens or hundreds of functions That large ta ble would need to be created and initialized each time differentiate is invoked Encapsulation and Extensibility One way to fix both problems is to make the table of functions a global variable However using global vari ables can be dangerous because they pollute the user namespace and are subject to unwanted inspection and tampering Solution A better solution is to put the differentiate procedure along with its table of functions into a module The table is then ini tialized only once when the module is created and can be saved to a Maple repository with the rest of the module by using a savelib call By making the table a local variable of the module you prevent users from modifying the table or otherwise inspecting it in unwanted ways This does not prevent you from making the differentiator user extensible however You can add an access procedure addFunc that allows users to add rules for differentiating new functions For example you can use the call gt addFunc cos x gt sin x to add the derivative of the sin function The export addFunc of the Difflmpl module is a procedure that requires two arguments The first is the name of a function whose derivative is to be made known to the differentiator The second is a Maple procedure of one argument that
294. its clones BaseComplex proc r i Record re r im i end proc NewComplex proc r i Record BaseComplex r i abs O gt sqrt self re 2 self im 2 end proc c NewComplex 2 3 c re c im c abs 2 3 18 VVVVVVVVV An object created from a prototype can serve as a prototype for an other object V NewerComplex proc r i gt Record NewComplex r i arg gt O gt arctan self im self re gt end proc gt c2 NewerComplex 2 3 gt c2 re c2 im c2 absO c2 argO 3 2 3 V13 arctan gt Note Prototypes are supertypes of their clones gt subtype record re im abs record re im true For example NewComplex creates objects of a type that is a subtype of the objects created by BaseComplex 78 e Chapter 2 Programming with Modules 2 3 Packages Modules are ideal for writing Maple packages They provide facilities for large software projects that are better than table and procedure based methods What Is a Package A package is a collection of procedures and other data that can be treated as a whole Packages typically gather a number of procedures that enable you to perform computations in some well defined problem domain Pack ages may contain data other than procedures and may even contain other packages subpackages Packages in the Standard Library A number of packages are shipped with th
295. iven as the first argument to define external in the DLL specified in the LIB argument Maple also finds the MWRAP_symbolName in the wrapper library This MWRAP_symbolName func tion prototype has the following format ALGEB MWRAP quadruple it 350 e Chapter 6 Advanced Connectivity MKernelVector kv FLOAT32 fn FLOAT32 a1 ALGEB fn args 35 This prototype is taken from the wrapper quad c described in the previous section The first argument kv is a handle to the Maple kernel function vector The second argument fn is a function pointer assigned the symbol found in the external DLL In this case fn is assigned the quadruple it external function The last argument is a Maple expres sion sequence data structure containing all the arguments passed to the function during any given call to the Maple procedure generated by the define external command The entry point is the format used when wrappers are automatically generated and when WRAPLIB is specified An alternate external entry point that excludes the function pointer is available when the parameter MAPLE is specified instead of WRAPPER or WRAPLIB ALGEB MWRAP quadruple it MKernelVector kv ALGEB fn args The API function prototypes for manipulating Maple data structures are in MAPLE extern include where MAPLE is the path of the Maple installation The header file maplec h should be included when writ ing custom C wrappers One of the header files maplefortra
296. kernel executes the Maple readline function which is also used by readstat and history to obtain a line of input from the user In most applications this is not used char M DECL readLineCallBack void data M BOOL debug e The debug parameter indicates that the call to readline was made by the Maple debugger the Maple debugger uses readline to get debugger commands from the user If debug is TRUE the readline call is from the debugger If debug is FALSE the readline call is from history readstat or another non debugger call If no readLineCallBack function is provided any attempt to exe cute the Maple readline function produces an error reported using the errorCallBack or textCallBack function For more information on the errorCallBack function see Error Call back Function on page 381 For more information on the textCallBack function see Text Call back Function on page 379 Redirect Call back Function The redirectCallBack function is called when the kernel executes the Maple writeto or appendto function The intent is to redirect subsequent output M BOOL M DECL redirectCallBack void data char name char mode e The name parameter specifies the name of the file to which output is appended e The mode parameter specifies the file access mode to use wt for write or at for append The name and mode parameters are compatible with the C library function fopen
297. ks it across lines and prints a backslash A before each line break Example The following command line example illustrates lprint out put and how screenwidth affects it gt lprint expand x y 75 X b b x 4 ytiO x 3 y 2 10 x 2 y S3tb x y 4 y 5 gt interface screenwidth 30 95 gt lprint expand x y 5 X bt b x 4 ytiO x 3 y 2 10 x 2 y Stb xx y 4 y 5 Two Dimensional Expression Output The print command prints Maple expressions in a two dimensional no tation Depending on the version of Maple and the user interface this notation is either the standard math notation that appears in text books and other typeset mathematical documents or an approximation of stan dard math notation using only text characters The print command is called as follows print expressionSequence The expressionSequence consists of one or more Maple expressions Maple prints each expression in turn with commas separating them The output produced by print is always sent to the default output stream You can use the writeto and appendto commands described later to temporarily redirect the default output stream to a file Several interface parameters affect the output of print They are set using the syntax 208 e Chapter 3 Input and Output interface parameter value They include prettyprint This selects the type of output that print is to produce e If you set prettyprint to 0 print produc
298. kv int x73 x 0 1 CResult mapleToFloat64 kv MapleResult MapleEval evaluates a Maple expression It is especially useful for determining the value of an assigned name Assignment to Maple Variables The following assignment functions are available only when using the C API ALGEB MapleAssign MKernelVector kv ALGEB lhs ALGEB rhs ALGEB MapleAssignIndexed MKernelVector kv ALGEB lhs M INT dim M INT ind ALGEB rhs MapleAssign sets the value dag rhs to the name dag 1hs This is equivalent to the Maple statement gt lhs rhs MapleAssignIndexed sets the value rhs to the indexed variable 1hs The second parameter dim indicates the number of dimensions in the array or 1 if lhs is a table The third parameter ind is a hardware array of indices For example to make the assignment a 1 2 3 3 14 the fol lowing code could be used assuming arg1 points to the array a ALGEB rhs M INT ind 3 ind 0 ind 1 1 2 372 e Chapter 6 Advanced Connectivity ind 3 3 rhs ToMapleFloat kv 3 14 MapleAssignIndexed kv argi 3 ind rhs User Information The MapleUserInfo command displays msg when infolevel name is set to level This command is only available in the C API void MapleUserInfo MKernelVector kv int level char name char msg Memory Management The following functions are available only when using the C API void MapleAlloc MKernelVector kv M INT nbytes voi
299. latform dependencies such as word size byte ordering storage alignment requirements differences in hardware floating point support and sometimes C compiler bugs The Maple library is interpreted by the Maple kernel Therefore other than issues such as maximum object size it is completely independent of the underlying architecture The Maple graphical user interface has two versions the Standard Worksheet and the Classic Worksheet not available on Macintosh The Standard Worksheet is implemented in Java which is platform indepen dent The Classic Worksheet is implemented in C and C 4 and makes use of a platform independent user interface class library to achieve porta bility The Maplet User Interface Customization System available in both worksheet versions is written in Java with some native libraries The Java portion is identical on all platforms 428 e Appendix A Internal Representation and Manipulation Index Y 204 amp 33 accuracy 223 225 229 297 algebraic functions 397 anames 425 and 399 AND internal data structure 399 animations 301 data structures of 301 static form of 302 with backdrops 304 with display 303 306 appendto 217 382 383 args 18 48 arguments 251 not passed 340 sequence of 18 Array 234 array 426 Arrays 232 arrays 22 214 232 and hardware floats 232 hardware floating point 234 initializing 23 sorting 8 assign 20 ASSIGN internal data structure 399 as
300. le 2 Procedure In the following example the previous module is written using only procedures gt TempGeneratorProc proc gt description generator for temporary symbols gt local count gentemp gt count 0 gentemp proc count 1 count tools gensym T count end proc eval gentemp 1 end proc VVVVVV You can assign the procedure returned by TempGeneratorProc and then use it to generate temporary symbols gt f TempGeneratorProc f proc count 1 count tools gensym T count end proc gt f0 T1 gt f T2 Module Versus Procedure The module TempGenerator and the procedure TempGeneratorProc are similar In the procedure version the local variable gentemp is assigned a pro cedure that references another local variable count the value of gentemp is returned by the procedure to its caller The module version of the generator behaves similarly Its structure differs its gentemp variable is declared as an export not a local and there is no explicit return In both versions of the generator the variables count and gentemp are local variables The significant difference here is that in the module version one of those local variables is exported This means that it is available outside the scope of the structure in which it was created Special syntax is used access exported local variables For example to call the exported variable gentemp of the module enter
301. le raise error kv msg len These functions display the message msg stop execution and return to the Maple input loop A call to MapleRaiseError does not return The character string msg can contain wildcards of the form N where N is a non zero integer These wildcards are replaced by the extra argument argl or arg2 before displaying the message If N is specified then the optional argument is displayed with st nd rd or th appended to it For example MapleRaiseError2 kv the 4 1 argument 2 is not valid ToMapleInteger i args il This if invoked raises the error the 4th argument foo is not valid assuming i 4 and args i is set to the Maple name foo The only option not allowed is 40 because the function cannot deter mine the number of unparsed optional arguments The C API also provides a mechanism for trapping errors raised by Maple For more information refer to error 368 e Chapter 6 Advanced Connectivity void MapleTrapError MKernelVector kv void proc P void data void data M BOOL errorflag MapleTrapError executes the C function proc passing it the data data If an error occurs errorflag is set to TRUE and traperror returns immediately If no error occurs the result of proc data is returned and errorflag is FALSE For example the following code attempts to execute a Maple proce dure If an error occurs a separate branch of code is taken typedef
302. le shows 1 5 3333333333 25 2 5 3333333333 25 2 1666666667 3333333333 25 2 1666666667 1428571429 25 2 1666666667 1428571429 125 2 1666666667 1428571429 125 1111111111 Flushing a Buffered File I O buffering may result in a delay between when you request a write operation and when Maple physically writes the data to the file This capitalizes on the greater efficiency of performing one large write instead of several smaller ones Normally the I O library chooses when to write to a file automatically In some situations however you want to ensure that the data you write is inserted into the file For example in UNIX a common procedure is to run a command such as tail f fileName in another window to monitor the information as Maple is writing it For cases such as these the Maple I O library provides the fflush command Call the fflush command using the following syntax fflush fileIdentifier The fileIdentifier is the name or descriptor of the file whose buffer Maple is to flush When you call fflush Maple writes all information that is in the buffer but not yet in the physical file to the file Typically a program would call fflush whenever something significant is written for example a complete intermediate result or a few lines of output Note that you do not need to use fflush anything you write to a file is physically written before you close the file The fflush command simply
303. lec bin IBM _INTEL _LINUX omexample Mac OS X setenv DYLD _LIBRARY _PATH bin APPLENX PPCN OSX gcc samples OpenMaple C cmaple omexample c o bin APPLE _PPC _OSX omexample Lbin APPLE _PPC _OSX Iinclude lmaplec lmaple bin APPLE _PPC _OSX omexample Microsoft Windows with Microsoft Visual C C MSVC cd bin IBM _INTEL _NT cl Gz samples OpenMaple C cmaple omexample c I include maplec lib omexample Solaris setenv LDN LIBRARYN PATH bin SUNN SPARCN SOLARIS cc samples OpenMaple C cmaple omexample c o bin SUN _SPARC _SOLARIS omexample Lbin SUN _SPARC _SOLARIS Iinclude lmaplec bin SUN _SPARC _SOLARIS omexample 6 4 Conclusion e 391 6 4 Conclusion This chapter outlined how the CodeGeneration package provides utilities for translating Maple code to other programming languages Additionally this chapter discussed how the Maple kernel can be extended by integrat ing compiled code using the ExternalCalling package and how Maple can be used by compiled code using OpenMaple Chapter 6 Advanced Connectivity 392 Table 6 3 Compound Types Maple Data Descriptor C Type Fortran Type Java Type ARRAY datatype typename type A type A typel A order etc string n char x n CHARACTER 2 string complex 4 struct COMPLEX float r i COMPLEX 8 NA complex 8 struct DOUBLE NA double r i COMPLEX COMPLEX 16 REF typename TYPENAME NA NA 393 c 2
304. lementation The LinkedList package is implemented as a module containing the primitive operations on pairs and higher level operations that implement the list abstraction gt macro _PAIR for nice printing 7 LinkedList module description routines for simple linked lists export nil nullp pair head tail list length member reverse append map local setup cleanup VVVVVVVVVVVVVV VV Lisp programmers will recognize the pair head and tail operations as the more traditional operations known as cons car and cdr 82 e Chapter 2 Programming with Modules mapi reversel _PAIR option package load setup unload cleanup setup proc global type Pair type LinkedList type Pair _PAIR anything anything identical nil type LinkedList proc expr if expr nil then true elif type expr Pair then type tail expr LinkedList else false end if end proc userinfo 1 LinkedList new types Pair and LinkedList defined NULL end proc cleanup proc global type Pair type LinkedList userinfo 1 LinkedList cleaning up global types type Pair evaln type Pair type LinkedList evaln type LinkedList NULL end proc pair a b gt setattribute _PAIR a b inert head c Pair gt if
305. les e Principal implications of these rules e Tools available for writing nested procedures 1 2 Procedures That Return Procedures Some of the standard Maple commands return procedures For example rand returns a procedure which in turn produces randomly chosen inte gers from a specified range The dsolve function with the type numeric option returns a procedure which supplies a numeric estimate of the so lution to a differential equation You can write procedures that return procedures This section dis cusses how values are passed from the outer procedure to the inner pro cedure Conveying Values The following example demonstrates how locating the roots of a function by using Newton s method can be implemented in a procedure Creating a Newton Iteration Use Newton s method to find the roots of a function 1 Choose a point on the x axis that you think might be close to a root 2 Find the slope of the curve at the point you chose 3 Draw the tangent to the curve at that point and observe where the tangent intersects the x axis For most functions this second point is closer to the real root than your initial guess To find the root use the new point as a new guess and keep drawing tangents and finding new points 1 2 Procedures That Return Procedures e 15 To find a numerical solution to the equation f r 0 guess an ap proximate solution xo and then generate a sequence of approximations using 1 Newton
306. les of Maple commands that the read command is reading 3 7 Conversion Commands Conversion between Strings and Lists of Integers The readbytes and writebytes commands described in sections 3 5 and 3 6 can work with either Maple strings or lists of integers You can use the convert command to convert between these two formats as follows convert string bytes convert integerList bytes If you pass convert bytes a string it returns a list of integers if you pass it a list of integers it returns a string Due to the way strings are implemented in Maple the character cor responding to the byte value 0 cannot appear in a string Therefore if integerList contains a zero convert returns a string of only those char acters corresponding to the integers preceding the occurrence of 0 in the list 3 7 Conversion Commands e 219 Conversion between strings and lists of integers is useful when Maple must interpret parts of a stream of bytes as a character string while it must interpret other parts as individual bytes In the following example Maple converts a string to a list of integers Then it converts the same list but with one entry changed to 0 back to a string Notice that the string is truncated at the location of the 0 gt convert Test String bytes 84 101 115 116 32 83 116 114 105 110 103 gt convert 84 101 115 116 0 83 116 114 105 110 103 bytes Test Parsing Maple
307. licitly to the interactive session where it can exist indefinitely These variables are called escaped local variables T his concept can be confusing particularly since they can have the same name as global variables or local variables which another procedure or a different call to the same procedure created You can create many distinct variables with the same name Example 1 The following procedure creates a new local variable a and then returns this new variable gt make a proc gt local a gt a gt end proc make _ a proc locala a end proc By using local variables you can produce displays that Maple would otherwise simplify For example in Maple a set contains unique elements The following demonstrates that each variable a that make_a returns is unique gt test a a a test a gt test test union make_a test a a gt test test union make_a 5 lest a a a a a a a 20 e Chapter 1 Procedures Variables and Extending Maple This demonstrates that Maple identities consist of more than names Important Independent of the number of variables you create with the same name when you type a name in an interactive session Maple interprets that name to be a global variable You can easily find the global a in the previous set test gt seq evalb i a i test true false false false false false false Example 2 You can display expr
308. ly the fscanf scanf and sscanf commands return a list of the parsed results instead of requiring you to pass references to variables 222 e Chapter 3 Input and Output This method is also less error prone as it removes any danger of passing the wrong type of variable or one of insufficient size Other differences include the use of a single command filepos to perform the work of two C functions ftell and fseek You can do this in Maple because functions can take a variable number of arguments In general if you have C or C programming experience you should have little trouble using the Maple I O library 3 9 Conclusion This chapter presented the details of importing and exporting data and code to and from Maple While this book teaches fundamental concepts and provides a pedagogical introduction to topics the Maple help system provides the details on each command and feature It explains such things as the options and syntax of Maple commands and serves as a resource for use of the Maple interface For more information on a command enter command name at the Maple prompt 4 Numerical Programming in Maple Floating Point Calculations The focus of this chapter is on how to perform floating point calculations in Maple You can select from the following e Software floating point calculations of arbitrary precision other than speed independent of your computer e Hardware floating point arithematic precision dete
309. mation about a specific language refer to its detailed help page for example CodeGeneration General CDetails The return type of a procedure is deduced if you do not declare it If more than one return statement is present the types of all objects returned must be compatible in the target language If a return statement contains a sequence of objects the sequence is translated to an array Implicit returns are recognized in some situatiions but translations to explicit returns can be suppressed with the deducereturn false option When necessary an automatically generated return variable is used to hold a return value Lists Maple objects of type array and rtables are translated to arrays in the target language Type analysis and deduction capabilities with respect to arrays are very limited It is recommended that you declare the type and ranges for all arrays In some target languages arrays are reindexed to begin at index 0 Example 1 The following example demonstrates the translation of a procedure to Java gt f proc x gt local y gt y ln x rexp x gt printf The result is 4f y gt end proc gt CodeGeneration Javal f import java lang Math class CodeGenerationClass public static void f double x double y y Math log x Math exp x System out print The result is y Example 2 The following example demonstrates the translation of a procedure to C The defaulttype option
310. mbered parameter locations in the msg string when the exception is displayed For information on using optional arguments refer to error Reinitializing Maple The RestartMaple function can be called any time to reinitialize the state of a Maple kernel Reinitializing the kernel is equivalent to restarting the application except that any existing allocated memory is allocated to the kernel internal free storage lists the memory is not returned to the operating system Calling RestartMaple when no computation is active is equivalent to sending the statement restart to the EvalMapleStatement function The RestartMaple function is defined as follows M_BOOL RestartMaple MKernelVector kv char errstr e The kv parameter specifies the handle to the Maple kernel to be restarted e The errstr parameter is a preallocated string buffer The error pa rameter points to a memory area where an error is written if reini tialization fails The error message will not exceed 2048 characters including the nul terminator If an error occurs when the RestartMaple function is called and no computation is active Restart Maple returns FALSE and an error mes sage is written in the memory pointed to by the errstr parameter If no error occurs it returns TRUE Terminating Maple To terminate the Maple kernel for example prior to exiting your application call the StopMaple function to free memory that has been allocated by Maple The
311. member tables refer to chap ter 6 of the Introductory Programming Guide gt C amp I I 9 1 8 C J J 1 amp K K 1 gt amp I J K amp J I K gt amp L K J amp RK I1 J gt amp J K I amp K J I Since amp is a neutral operator you can write products of Hamilto nians using amp as the multiplication symbol gt 1 2x1 3 J 4xK amp 5 3x1 7xJ 20 4174 20J 3K gt 5 3x1 T J amp 1 2x1 3 J 4 K 20 151 4J 4A3K 1 5 Extending Maple e 37 gt 56 amp I 561 In the following example a is an unknown Hamiltonian until you enter the assumption that a is an unknown real number gt a amp J a amp J gt assume a real gt a amp J a J Exercise 1 The inverse of a general Hamiltonian a b 4 cj dk is a bi cj dk a b c d You can demonstrate this fact by assuming that a b c and d are real and define a general Hamiltonian h gt assume a real assume b real gt assume c real assume d real gt h a bel c J d K hi a b IT eJ4 d K By the formula above the following should be the inverse of h gt hinv a b I c J d K a 2 b 24c 2 d 2 a bI c J d K a h 7467447 hinv Check that h hinv and hinv amp h simplify to 1 2 h amp hinv 38 e Chapter 1 Procedures Variables and Extending Maple a a
312. mmand line arguments passed in argv 376 e Chapter 6 Advanced Connectivity The argv parameter is an array of string pointers giving the command line parameters This array must have at least argc 1 elements the first of which argv 0 must be the name of the application or the string maple If argv is NULL argc and argv are ignored The OpenMaple kernel supports a subset of the command line options supported by the command line version of Maple Options that take arguments such as b can be passed as either A single parameter in which the argument immediately follows the option with no intervening space for example b usr maple lib pair of parameters for example b and usr maple lib Options that are not supported include preprocessor directives D I U and filter modes F 1 P Options specific to only the graphical interface are also not supported The cb parameter specifies a collection of functions that Maple uses to return results to your application For more information on call back functions see Call back Functions on page 379 The user data parameter is an arbitrary user supplied value It is the first argument passed to the call back functions The info parameter is currently used only for internal purposes It must be set to NULL The errstr parameter is a preallocated string buffer The error pa rameter points to a memory area where an error is written if ini tializa
313. more details about the parse command see Parsing Maple Expressions and Statements on page 219 Summary The techniques in this section are very simple but you can use them to create useful applications such as Maple tutorials procedures that test students or interactive lessons 1 5 Extending Maple Although it may be useful to write custom procedures to perform new tasks sometimes extending the abilities of Maple commands is most ben eficial This section familiarizes you with e Defining custom types and operators e Modifying how Maple displays expressions e Extending commands such as simplify and expand Defining New Types If you are using a complicated structured type it is recommended that you assign the structured type to a variable of the form type name 32 e Chapter 1 Procedures Variables and Extending Maple Writing the structure once reduces the risk of errors When you have defined the variable type name you can use name as a type gt type Variables name list name set name gt type x Variables irue gt type x 1 x 2 Variables irue If the structured type mechanism is not powerful enough you can define a new type by assigning a procedure to a variable of the form type name When you test whether an expression is of type name Maple invokes the procedure type name on the expression if such a procedure exists The procedure should return true or false The
314. n compute the terms in a Maple expression local fns terms nocc fns op map2 op 0 indets expr function nocc map2 numboccur expr fns terms seq seq fns i j 1 nocc il i 1 nops fns 2 7 Extended Example A Search Engine e 179 sort map op terms lexorder end proc WorksheetTerms proc mws description compute the terms in a worksheet local rec wks count t i rec proc x t table local cm texts text others use XMLTools in if IsElement x and ElementName x Text field then cm ContentModel x texts others selectremove IsText cm for text in texts do count 1 count t count text end do map procname others t elif not type x string then map procname args end if end use end proc use XMLTools in if IsDocument mws then wks select IsElement op mws if nops wks 1 then wks wks 1 else error ill formed worksheet 1 fname end if end if end use count 0 t tableO rec wks t t seq tl i i 1 count use XMLTools in t map TextText t t cat op t 5 Filters Text t end use end proc end module VVVVVVVVVVVVVVVVVVvVVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvw end module The revised package contains several new document filters To use doc ument formats that are not directly supported compose these
315. n as the transposition 2 6 Interfaces and Implementations e 141 12 The constructor takes a positive integer as its first argument indi cating the degree of the permutation group The remaining arguments are expected to be permutations represented as lists of the stated degree These are used to form the generating set of the group returned by the constructor gt PermutationGroup proc deg posint description permutation group constructor local G gens gens args 2 1 G Group G id 1 deg G proc a b local i seq bl i i a end proc G mul gt foldl G G id args G inv proc g local i a a array 1 deg for i from 1 to deg do al gl i i end do seq al i i 1 deg end proc G member proc g S pos name if nargs 1 then type g list posint and op g M3 1 deg else member args end if end proc G eq a b gt evalb a b 5 G gens gens eval G 1 gt end proc For example to construct the group 12 123 in the symmetric group 4 use the PermutationGroup constructor as follows gt G PermutationGroup 4 2 1 3 4 2 3 1 4 D VVVVVVVVVVVVVVVVVVVVVVVVVVV VV G module export id mul inv eq member gens order elements option record end module 142 e Chapter 2 Programming with Modules To compute with its element
316. n can be used to query the number of arguments contained in the argument expression sequence passed as the last argument to the external function entry point The expression sequence passed to this entry point can be queried directly for example ALGEB expr 1 If n MapleNumArgs kv expr the last argument is ALGEB expr n M INT MapleNumArgs MKernelVector kv ALGEB expr The arguments passed to the Fortran entry point cannot be queried directly The maple extract arg function must be used to access the argument data for example arg1 maple extract arg kv args 1 If n maple num args kv s then the last argument is maple extract arg kv args n 356 e Chapter 6 Advanced Connectivity INTEGER INTEGER maple num args kv s maple extract arg kv s i The following functions indicate the type of the given Maple object M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL M_BOOL IsMapleAssignedName MKernelVector kv ALGEB s IsMapleComplexNumeric MKernelVector kv ALGEB s IsMapleNumeric MKernelVector kv ALGEB s IsMapleInteger MKernelVector kv ALGEB s IsMapleInteger8 MKernelVector kv ALGEB s IsMapleIntegeri6 MKernelVector kv ALGEB s IsMapleInteger32 MKernelVector kv ALGEB s IsMapleInteger64 MKernelVector kv ALGEB s IsMapleName MKernelVector kv ALGEB s IsMapleNULL MKernelVect
317. n hf or maplefortran64bit hf should be included when writing custom For tran wrappers Other header files mplshlib h and mpltable h contain macros types and data structures that are needed for direct manipula tion of Maple data structures Maple uses directed acyclic graphs dags to represent all objects such as integers floating point numbers sums modules or procedures For more information about Maple internal representation of objects see Appendix A These dags have the type ALGEB in C wrappers and INTEGER or INTEGER 8 in Fortran wrappers Fortran 77 has no user type definition semantics so ALGEB pointers must be faked by using ma chine word sized integers If the machine word size is 64 bit for example as on a DEC Alpha the header maplefortran64bit hf must be used and INTEGER 8 must be used as the dag datatype Execute the Maple command kernelopts wordsize to determine whether you need to use 32 bit or 64 bit integer dag types in Fortran When working with C the datatype is ALGEB regardless of the machine word size 6 2 External Calling Using Compiled Code in Maple e 351 You do not have to know the internal details of dags to manipulate and use them The only exception is the argument sequence passed to the wrapper entry point This is an expression seqence EXPSEQ dag and can be treated as an array of dags starting at index 1 not O Thus fn args 1 is the first parameter passed to the external function Use
318. n using zip vi zip x y gt zip u v gt u v x y vi norms v2 zip x y gt zip u v gt u v x y v2 norms Generate scaling information and plot data structure xscale dx 2 0 yscale dy 2 0 mscale max xscale yscale PLOT seq seq myarrow a i 1 dx vi jllil xscale 2 b j 1 dy v2 jl il yscale 2 vi jl il xscale v2 jllil yscalel mscale 4 mscale 2 1 3 gt color colorinfo j i i 1 m j 1 0 VVVVVVVVVVVVVVVVVVVVV VV VV end proc This version produces the following plots gt vectorfieldplot y cos x y x sin x y gt x 0 Pi y 0 Pi grid 15 20 ys ay as 2 5 eg 2e weer ere setLYuare cer ret FYYus Raeeseecrr rey A OR Eom 9 4 oo oo 599990099 Gococodcoed4dg284d 2AAAZEBRAA Gti SR 1 5 a 2 E gt 3 8 id f t N 7p o y n c c C C9 c c 5495555959553 353395959500 c mb c c 583999500202 P 9555 cu PAPPAPAPHHAETBSRS ST eee FAFAAFAAAFAPAPHFRBIBRRSS c cb oc c co c c cb c c c c c c oc c oc 07705 1 15 2 25 3 You can color the vectors via a function such as sin xy gt vectorfieldplot y cos x y x sin x y gt x 0 Pi y 0 Pi grid 15 20 color sin x y 206 e Chapter 5 Programming with Maple Graphics ft 2 5e22U7VYy9 5221 259o 3 f 26 9 552201U Vi9522125V9 tfttttsxser Es UYarrre ty 25 7t 2922 5 220 V 9 o271 f 2 92554555 5242
319. nction MAPLE TEXT HELP Text help output This is generated in response to a help request For a more comprehensive help facility see 6 3 Maple Online Help Database MAPLE TEXT QUIT Response to a Maple quit done or stop command MAPLE TEXT WARNING A warning message generated dur ing computation MAPLE TEXT ERROR An error message generated during parsing or processing This is generated only if you do not specify an errorCallBack function For more information on the errorCallBack function see the following Error Call back Function subsection MAPLE TEXT STATUS Kernel resource usage status a bytes used message This is generated only if you do not spec ify a statusCallBack function For more information on the statusCallBack function see the following Status Call back Function subsection MAPLE TEXT DEBUG Output from the Maple debugger e The output parameter contains the output of the type indicated by the tag parameter Each output string can be arbitrarily long 6 3 OpenMaple Using Maple in Compiled Code e 381 Error Call back Function The errorCallBack function is called when an error occurs during parsing or processing void M_DECL errorCallBack void data M INT offset char msg e The offset parameter indicates the location of a parsing error If offset gt 0 the error was detected at the specified offset in the string passed to EvalMapleStatement If offset lt 0 the error is not a p
320. nd pointers with a pointer to the actual object repre sented The name pointers are not touched so that the actual identifier 414 e Appendix A Internal Representation and Manipulation names are still available The lezical seq for a procedure contains entries for any surrounding scope identifiers used by that procedure or by any procedures contained within it The eop field is BINARY The first entry specifies the number of posi tional parameters of the procedure The remaining entries if any specify the evaluation order permutation for the procedure that is an evaluation order for the arguments that is consistent with any dependencies among the parameter specifications The return type field is present only if a return type has been spec ified for the procedure return type is an assertion about the type of the value returned by the procedure if kernelopts assertlevel is set to 2 then this type is checked as the procedure returns Product Quotient Power PROD ezprl exponl expr2 expon2 Maple syntax expri exponi expr2 expon2 Length 2n 1 This structure is interpreted as pairs of factors and their numeric ex ponents Rational or integer expressions to an integer power are expanded If there is a rational constant in the product this constant is moved to the first entry by the simplifier A simple power such as a 2 is represented as a PROD structure More complex p
321. ng the existence of different NaNs When integer2 is infinity integer must be 1 or 1 For While Loop Statement FOR name from by to cond stat expr expr expr expr seq A 2 Internal Representations of Data Types e 403 FOR name in expr cond expr stat seq Maple syntax for name from fromExpr by byExpr to toExpr while condExpr do statSeq end do Maple syntax for name in inExpr while condExpr do statSeq end do Length 7 or 5 The name follows the same rules as in ASSIGN except that it can also be the empty expression sequence NULL indicating that there is no controlling variable for the loop The from expr by expr to expr and cond expr entries are general expressions All are optional in the syntax of for loops and can thus be filled in with default values 1 1 NULL and true respectively by the parser The stat seq entry can be a single Maple statement or expression a STATSEQ structure or NULL indicating an empty loop body An additional bit in the FOR structure s header is used to indicate whether the stat seq contains any break or next statements Foreign Data FOREIGN Maple syntax none Length 1 or more This is similar to the BINARY structure except that it is for use by components of Maple outside the kernel such as the user interface A FOREIGN structure is exempt from g
322. nged RtableSparseSize returns the number of entries allocated to store data in the NAG sparse rtable rt This is not necessarily the same as RtableNumElems RtableCopy returns a copy of the rtable rt with new settings as given by the RtableSettings structure s RtableCopyImPart returns a copy of the imaginary part of the rtable rt with new settings as given by the RtableSettings structure s The copy returned is purely real but contains only the imaginary parts of the given rtable RtableCopyRealPart returns a copy of the real part of the rtable rt with new settings as given by the RtableSettings structure s RtableZipReIm combines two real RTABLEs rt re and rt im into a complex rtable of the form rt re I rt_im The settings of the new rtable that is returned are determined by the RtableSettings structure s List Manipulation To work with Maple lists the following API functions can be used These functions are only available using the C API ALGEB MapleListAlloc MKernelVector kv M INT num members void MapleListAssign MKernelVector kv ALGEB list M INT i ALGEB val ALGEB MapleListSelect MKernelVector kv ALGEB list M INT i MapleListAlloc creates a LIST dag with space for num members ele ments This list must be filled before it can be passed to Maple MapleListAssign sets the ith element of the given list to the value val That is list i val MapleListSelect returns the th element of the given list T
323. ngine corpus Corpus doc 1 9 s gt s Filters Text NumberOfDocuments corpus 9 172 e Chapter 2 Programming with Modules gt GetDocumentIdByIndex corpus 1 The mathematician s patterns like the painter s or the poet s must be beautiful the ideas like th V e colors or the words must fit together in a harm onious way Beauty is the first test there is no p ermanent place in this world for ugly mathematiV CS gt BuildIndex corpus gt Search corpus mathematical beauty 0 0483870967749999992 0 0 0208333333349999990 0 0 250000000000000000 0 0 0833333333499999968 0 0 0500000000000000028 Latent Semantic Analysis The simple vector space model described previously has shortcomings Suppose a user searches a corpus of documents about pets for the term cat The simple vector space model search engine locates all the docu ments that contain the term cat However the search engine does not locate documents that contain the word feline but not the word cat or any term for which the stem is cat This issue is called synonymy the problem that distinct search terms may represent the same concept One way to circumvent this problem is to have a human domain expert prepare search term lists for each document in the corpus All documents referring either to cats or felines would contain the search term cat included in their
324. nite recursion when x or y is a product that does not contain real factors If none of the multiplication rules apply amp returns the product unevaluated gt amp proc x Hamiltonian y Hamiltonian gt local Real unReal isReal gt isReal z gt evalb is z real true gt gt if isReal x or isReal y then gt X y gt gt elif type x then gt x is a sum utv so xg y u amp y v amp y gt map amp x y gt gt elif type y then gt y is a sum utv so x amp y x amp u x amp v gt map2 amp x y gt gt elif type x then gt Pick out the real factors of x gt Real unReal selectremove isReal x 36 e Chapter 1 Procedures Variables and Extending Maple Now x amp y Real unReal amp y if Real 1 then if type y then Real unReal selectremove isReal x Real amp x unReal else Ng tno ty end if else Real amp unReal y end if elif type y then 4 Similar to the x case but easier since x cannot be a product here Real unReal selectremove isReal y if Real 1 then DE AEN d y else Real amp x unReal end if else P f amp 5 x y end if end proc VVVVVVVVVVVVVVVVVVVVVVVV VV You can place all the special multiplication rules for the symbols J J and K in the remember table of amp Information For more information on re
325. nnot contain a break or next statement outside a loop Executing a return statement terminates the execu tion of the body of the module definition Module Parameters Module definitions begin with the Maple keyword module followed by an empty pair of parentheses This is similar to the parentheses that follow the proc keyword in a procedure definition Unlike procedures however module definitions do not have explicit parameters because modules are not called or invoked with arguments Implicit Parameters Every module definition has an implicit parameter called thismodule Within the body of a module definition this special name evaluates to the module in which it occurs This allows you to refer to a module within its own definition before the result of evaluating it has been assigned to a name All procedure definitions can reference the implicit parameters proc name args and nargs Module definitions cannot reference these im plicit parameters Additionally the difference between thismodule and procname is that procname evaluates to a name while thismodule evaluates to the module expression itself This is because the invocation phase of evaluating a module definition is part of its normal evaluation and it occurs immediately Procedures on the other hand are not invoked until called with arguments Normally at least one name for a procedure is known by the time it is called this is not the case for modules Named Modules
326. not allow you to use all the Maple representations of numeric data such as 7 or V2 274 e Chapter 5 Programming with Maple Graphics This section demonstrates how to work with basic graphic objects at a level higher than that of the plotting data structures The plottools package provides commands for creating 2 D objects such as lines and disks and 3 D objects such as spheres tori and polyhedra For example to draw a sphere of unit radius and a torus with a specified center using a patch rendering style and a frame axis style enter gt with plots with plottools Warning the name changecoords has been redefined Warning the assigned name arrow now has a global binding gt display sphere O 0 21 torus O 0 0D 2 Style patch axes frame scaling constrained z To rotate the plot or apply other transformations use the procedures in the plottools package gt rotate Pi 4 Pi 4 Pi 4 5 5 Programming with the plottools Package e 275 A Pie Chart You can write a plotting procedure to build a pie chart of a list of integer data The piechart procedure uses the following partialsum procedure which calculates the partial sums of a list of numbers up to a given term gt partialsum proc d i gt local j gt evalf Sum d jl j 1 i gt end proc The following is an example of a call to partialsun gt partialsum 1 2 3 6 3 6 Example 1 The piechart procedure e Comput
327. ns remove them Use the fremove command to do this fremove fileIdentifier The fileldentifier is the name or descriptor of the file to remove If the file is open Maple closes it before removing it If the file does not exist Maple generates an error To remove a file regardless of whether it exists use a try catch state ment to trap the error that fremove might create gt try fremove myfile txt catch end try 3 5 Input Commands e 197 3 5 Input Commands Reading Text Lines from a File The readline command reads a single line of text from a file Characters are read up to and including a new line The readline command then discards the new line character and returns the line of characters as a Maple string If readline cannot read a whole line from the file then it returns 0 instead of a string Call the readline command by using the following syntax readline fileIdentifier The fileldentifier is the name or descriptor of the file to read For compatibility with earlier versions of Maple you can omit the filel dentifier in which case Maple uses default Thus readline and readline default are equivalent If you use 1 as the fileldentifier Maple also takes input from the default stream except that the Maple command line preprocessor runs on all input lines This means that lines beginning with pass to the operating system instead of returning through readline and that lines
328. nt to specify to make the kind of shape to return The area Procedure To compute the area of a shape call the exported procedure area with the shape as its argument gt area circ area make circle make point 0 0 2 The circumference Procedure The exported procedure circumference computes the circumference of a given shape gt circumference circ circumference make circle make point 0 0 2 2 3 Packages e 99 Shape Representation Shapes are represented as unevaluated function calls The arguments to the call are the instance specific data for the shape For example a point with coordinates 2 3 is represented by the unevaluated function call POINT 2 3 Some instance data are shapes themselves For example a segment is represented using its endpoints as an unevaluated function call of the form SEGMENT start point end point The start and end points of the segment can be obtained by calls to the point constructor Procedure Dispatch The Shapes package illustrates three types of pro cedure dispatching 1 Dispatching on submodule exports 2 Conditional dispatching 3 Table based dispatching Dispatching on Submodule Exports The procedure make which is ex ported from the Shapes package uses the submodule Shapes Shapes for procedure dispatching To test whether a method for a given shape is available the pro cedure make tests whether there is a submodule by that name in the Shapes Shapes s
329. nt filter qfilter eval filter 2 end if Construct list of documents docs map Document listOfIds fetch filter 170 VVVVVVVVVVVVVVVVVVVVVvVvvvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Chapter 2 Programming with Modules Build the corpus module export search buildIndex numberOfDocuments getDocument IdByIndex local ids corpusTerms documents term_document_matrix ids listOflds documents docs numberOfDocuments gt nops documents getDocumentIdByIndex proc idx posint if idx lt numberOfDocuments then ids idx else error there are fewer than 1 documents in the corpus idx end if end proc buildIndex proc local docterms Construct corpus terms docterms map FilterDocument documents corpusTerms sort op union op map op docterms 2 Build the term document matrix term document matrix Matrix map s gt s map documentTermVector docs corpusTerms datatype float 8 storage sparse eval thismodule 1 end proc search proc query number0fResults posint local qt qv scores if not type term_document_matrix Matrix then error corpus not yet indexed end if qt qfilter query qv queryTermVector qt corpusTerms use LinearAlgebra in scores Transpose MatrixVectorMultiply term_document_matrix qv end use end proc end module end proc Numb
330. ntax expri lt expr2 expr2 gt expri Length 3 This structure has two interpretations depending on the context It can be interpreted as a relation that is an inequation or as a comparison for example in the condition of an if statement or the argument to a call to evalb Maple does not have a greater than or equal structure Any input of that form is stored as a LESSEQ structure A 2 Internal Representations of Data Types e 407 Less Than LESSTHAN ezprl expr2 Maple syntax expri lt expr2 expr2 gt expri Length 3 Like the LESSEQ structure above this structure has two interpreta tions depending on the context It can be interpreted as a relation that is an inequation or as a comparison for example in the condition of an if statement or the argument to a call to evalb Maple does not have a greater than structure Any input of that form is stored as a LESS structure Lexically Scoped Variable within an Expression LEXICAL integer Maple syntax name Length 2 This represents an identifier within an expression in a procedure or module that is not local to that procedure but is instead declared in a surrounding procedure or module scope The integer field identifies which lexically scoped variable of the current procedure is being referred to The integer multiplied by 2 is an index into the lexical seq structure referred to by the PROC DAG of the procedure Sp
331. nted by the parameters to the constructor which are visible within the module by the Maple lexical scoping rules Using this idea the previous constructor can be simplified as follows 2 5 Modeling Objects e 111 Table 2 1 Priority Queue Methods Priority Queues empty Test for an empty priority queue top Return the highest priority item insert Insert a prioritized item delete Remove and return the highest priority item gt MakeComplex proc real imag gt if nargs lt gt 2 then gt error real and imaginary parts are required gt end if gt module gt description a complex number gt export re im abs arg gt re gt real gt im gt imag abs gt sqrt real 2 imag 2 gt arg gt arctan imag real gt end module gt end proc A useful data structure that can be implemented in an object oriented way with modules is the priority queue priority queue is a container data structure that admits the following operations e Test for an empty priority queue e Insert a prioritized item into a priority queue e Return non destructively the highest priority item in the priority queue e Delete the highest priority item from a priority queue Design Table 2 1 lists the methods of an object representation of priority queues This representation leads directly to the following Maple type which can be used to identify priority qu
332. o and forces denominators to be unit normal representatives The normal routine ensures that fractions are reduced to lowest terms The most important property of the QuotientField functor is that it is generic It relies solely on the GcdRing interface No knowledge of the concrete representation of the input integral domain R other than that it is a module that satisfies the required interface is used in the construction Therefore it works with any implementation of the GcdRing interface that bere EIS e Implements the correct semantics for its public operations e Satisfies the abstract constraint that it be a software representation of an integral domain This constraint is required to ensure that the arithmetic operations are well defined Constructing the Rationals as the Quotient Field of Z To construct the quotient ring of the ring MapleIntegers defined previously proceed as follows gt FF QuotientField MapleIntegers FF module e 6 export 5 5 zero one iszero isone make numer denom normal embed description a quotient field end module gt type FF Field 136 e Chapter 2 Programming with Modules irue gt a FF make 2 3 a FRACTION 2 3 gt b FF make 2 4 b FRACTION 2 4 gt use FF in gt a b gt a b gt a b gt end use FRACTION T 6 FRACTION 1 3 FRACTION 4 3 Note This is a complex re
333. o cannot cope with mathem V atics is not fully human At best he is a tolerabl V e subhuman who has learned to wear shoes bat he and not make messes in the house I don t believe in mathematics The second example corpus is a database of formulae The intent is to be able to locate formulae relevant to a search query consisting of function names For the formula database generate a list of identities among elementary functions using the FunctionAdvisor command gt Formulae map2 FunctionAdvisor identities gt FunctionAdvisor elementary quiet quiet gt Formulae map op sort Formulae length gt nops Formulae 132 Use each formula as both the document and its ID The Maple filter in the Filters subpackage extracts the terms from each document gt corpus2 Corpus Formulae id gt id Filters Maple gt query gt opl fop query gt BuildIndex corpus2 It is possible to locate formulae relevant to for example the sin and cos functions gt ranking Search corpus2 sin cos 182 e Chapter 2 Programming with Modules ranking 81 73 79 70 71 46 80 85 72 78 52 51 28 58 77 106 98 99 100 45 55 54 75 74 56 50 84 116 48 47 26 27 44 38 94 43 57 1 118 109 130 121 129 123 122 30 108 24 92 115 23 60 67 91 113 65 39 40 7 12 14 10 16 2 3 18 5 66 93 114 117
334. o hardware types that can work with an external function This procedure can be used the same way as other Maple procedures gt myAdd 1 2 33 22 VV o w 6 2 External Calling Using Compiled Code in Maple e 333 gt myAdd a b 95 gt r myAdd a 11 r i 44 Important Procedures generated in this manner contain run time infor mation and thus cannot be saved The define_external command must be reissued after exiting or restarting Maple The following subsections provide additional information for Step 2 the function specification External Definition The define_external function constructs and returns another function which can be used to make the actual call The define_external function is called as follows define external functionName LANGUAGE arg1 type1 define external functionName MAPLE argN typeN options LIB dllName options LIB dllName The functionName parameter specifies the name of the actual external function to be called This name can be specified as a Maple string or name The LANGUAGE parameter denotes the programming language used to compile the DLL The default is C Other recognized languages are JAVA and FORTRAN The parameters arg through argN describe the arguments of the function to be called These should be specified in the order they appear in the documentation or source code for the external func tion without regard to issues
335. o the accumulated result A op A row end do A end proc VVVVVVVVVVVVVVVVVVVVVVVVVV VV VV 204 e Chapter 3 Input and Output Reading Maple Statements The readstat command reads a single Maple statement from the terminal input stream Maple parses and evaluates the statement and returns the result Call the readstat command as follows readstat prompt ditto3 ditto2 dittol The prompt argument specifies the prompt that readstat is to use If you omit the prompt argument Maple uses a blank prompt You can either supply or omit all of the three arguments ditto3 ditto2 and dittol If you supply them they specify the values which Maple uses for 44 44 and 7 in the statement that readstat reads Specify each of these arguments as a Maple list containing the actual value for substitution This allows for values that are expression sequences For example if is to have the value 2 n 3 and is to have the value a b then use 2 n 3 for dittol and a b for ditto2 The response to readstat must be a single Maple expression The expression can span more than one input line but readstat does not permit multiple expressions on one line If the input contains a syntax error readstat returns an error describing the nature of the error and its position in the input Example The following example shows a trivial use of readstat within a procedure gt InteractiveDiff proc local a b a readstat Plea
336. oating point numbers in base 10 Accuracy All floating point computations are preferred in finite preci sion with intermediate results generally being rounded to Digits pre cision As such it is possible for round off errors to accumulate in long computations Maple ensures that the result of any single floating point arithmetic operation or m is fully accurate Further many of the basic functions in Maple such as the trigonometric functions and their inverses the exponential and logarithm functions and some of the other standards special functions for mathematics are accurate to within 6 units of last place ulps meaning that if the Digits 1st digit of the true result is a 4 Maple may round it up or if it is a 6 Maple may round it down Most mathematical functions in Maple including numerical integration achieve this accuracy on nearly all inputs Some definite integrals have no closed form solution in terms of stan dard mathematical functions You can use evalf to obtain an answer via numerical integration gt r Int exp x 3 x 0 1 1 3 p ed dr 0 226 e Chapter 4 Numerical Programming in Maple 1 3 fe dz 0 gt value r gt evalf r 1 341904418 In other cases Maple can find an exact solution but the form of the exact solution is almost incomprehensible The following function Beta is a special function that appears in mathematical literature gt q Int x 99 1 x 19
337. oc VVVVVVVVVV This evalgrid procedure is purely symbolic and does not handle error conditions gt A Array 1 2 1 2 gt evalgrid f A 1 2 1 2 2 2 gt A gt evalgrid f A O Pi O Pi 2 2 5 7 Generating Grids of Points e 299 Error in f numeric exception division by zero Example 3 The gridpoints procedure uses the evalgrid procedure The procedure accepts a procedure two ranges and the number of grid points to generate in each dimension Like the procedure fnum which Maple generated from the previously defined procedure f this routine attempts to create the grid using hardware floating point arithmetic Only if this fails does gridpoints use software floating point arithmetic gt gridpoints proc f ri r2 m n local u x y Z a b c d VVVVVVVVVVVVVVVVVVVVV VV VV Domain information a lhs ri b rhs r1 c lhs r2 d rhs r2 if Digits lt evalhf Digits then try Try to use hardware floats z Array 1 m 1 n datatype float 8 evalhf evalgrid f z a b c d m n catch Use software floats first converting f to a software float function z Array 1 m 1 n evalgrid convert f numericproc z a b c d m n end try else Use software floats first converting f to a software float function z Array 1 m 1 n evalgrid convert f numericproc z a b c d m n end if ES end proc Testing the
338. ocal name with an appended tilde No relationship exists between the local variable b with an assumption which is displayed as b and the global variable name containing a tilde b gt assume b gt 0 gt x b 1 y 1 1 gt subs b 2c x b c1 When you clear the definition of the named variable the association between the name and the local name with the tilde is lost but expressions created with the local name still contain it gt b evaln b To reuse the expression you must either perform a substitution before removing the assumption or perform some manipulations of the expres sions similar to those used for the equation eqn 22 e Chapter 1 Procedures Variables and Extending Maple Procedure as a Returned Object An important use for returning local objects arises when the returned object is a procedure When you write a procedure which returns a pro cedure you will often find it useful to have the procedure create a variable that holds information pertinent only to the returned procedure This al lows different procedures or different invocations of the same procedure to pass information among themselves The following examples illustrate how different procedures pass information Example 3 Creating the Cartesian Product of a Sequence of Sets When you pass a sequence of sets to the procedure it constructs a new procedure The new procedure returns the next term in the Cartesian product each time you
339. oceed symbolically on expressions that the procedure is unable to dif ferentiate This first example is simple but it is already able to handle polyno mials with numeric coefficients gt differentiate 2 x x 2 3 x 9 x c pcm However it fails on expressions containing calls to standard mathe matical functions gt differentiate sin x x differentiate sin x x It is also unable to deal successfully with symbolic coefficients gt differentiate axx 2 b x c x differentiate a x z 2a x differentiate b x x b differentiate c x Adding Missing Functionality To add the missing functionality add a case for expressions of type function gt differentiate proc expr var gt local a b gt gt if not has expr var then xx 0 gt elif expr var then gt 1 gt elif type expr then gt map procname args gt elif type expr then gt a b op expr gt if not has b var then gt b a b 1 procname a var gt else gt gt procname args 64 e Chapter 2 Programming with Modules end if elif type expr then a b op 1 expr subsop 1 1 expr procname a var b a procname b var elif type expr function and nops expr 1 then functions of a single variable chain rule b op 0 expr the name of the function a op 1 expr the argument if b
340. odule that exports symbols a and b is a module that exports the symbol a Example A Symbolic Differentiator This section illustrates the various module concepts through a symbolic differentiator example Since Maple provides a built in differentiator diff the example symbolic differentiator is named differentiate Its final implementation is in the module DiffImpl later in this chapter which holds all the local state for the program Much of the code for the dif ferentiator is designed to implement either a standard rule such as the rule that the derivative of a sum is the sum of the derivatives of the sum mands or special case rules for mathematical functions such as sin and exp The example differentiator handles only real valued functions of a single real variable 62 e Chapter 2 Programming with Modules The following example shows several steps in the development of the module from a very simple first try to the final fully functional program The final form of the differentiator is a good illustration of a very common Maple design pattern This pattern arises when you have a single top level routine that dispatches a number of subroutines to handle special cases using special purpose algorithms The First Attempt This initial example presents the differentiator as an ordinary procedure not a module gt differentiate proc expr var local a b if type expr constant then 0 elif expr var then 1
341. odules 2 8 Conclusion This chapter introduced the concept of Maple modules It described the structure and flexibility of modules Encapsulation and generic programming with modules allow you to write code that can be reused transported and easily maintained By collecting procedures into a module called a package you can organize procedures into distinct sets of related functions You can also use modules to implement objects in Maple 3 Input and Output Although Maple is primarily a system and language for performing math ematical manipulations many situations arise where such manipulations require e Data originating outside Maple e Output of data in a form accepted by other applications e Input directly from the user e Output presented directly to the user The Maple software includes a comprehensive collection of input and output I O commands Maple I O library refers to these commands as a group In This Chapter e Tutorial Example e File Types and Modes e File Descriptors Versus File Names e File Manipulation Commands e Input Commands e Output Commands e Conversion Commands e Notes to C Programmers 185 186 e Chapter 3 Input and Output 3 1 A Tutorial Example This section illustrates how you can use the Maple I O library Specifi cally the examples show how to write a table of numerical data to a file and how to read such a table from a file The examples refer to the follow ing data set given in
342. oes not reflect any markup in the help file By calling the help system directly formatted help pages can be retrieved Setting the Help Database Search Path The help system is accessed using the MapleHelp function As with stand alone Maple the help search path is defined by the value of libname The MapleLibName function can be used to query or change this path For more information on the MapleLibName function refer to maplec h Retrieving a Help Page To retrieve and display a help page use the MapleHelp function The following figure illustrates text mode help output 5For more information on libname refer to libname 386 e Chapter 6 Advanced Connectivity int or Int Definite and Indefinite Integration Calling Sequences int expr x int expr x a b Parameters expr an algebraic expression the integrand x a name a b interval on which integral is taken options Description The function int computes an indefinite or definite integral of the expression expr with respect to the variable x The name integrate is a synonym for int Indefinite integration is performed if the second argument X is a name Note that no constant of integration appears in the result Definite integration is performed if the second argument is of the form x a b where a and b are the endpoints of the interval of integration For numerical integration see int numerical Examples gt int sin x
343. of generators Only one of the methods test and gens need be present A Maple implementation of this interface is as follows gt type SubGroup 4 gt module parent Group gens set gt module parent Group test procedure gt P The SubGroup constructor must dispatch on the type of its second argu ment to determine which kind of record to create to model the subgroup gt SubGroup proc G Group SubGroup how set procedure gt description subgroup constructor gt local 8 gt if type how procedure then gt S Record parent test eval how 1 gt else gt S Record parent gens how gt end if gt S parent G gt eval S 1 gt end proc For example the center of the symmetric group S3 can be defined as follows gt 83 Symmetric 3 gt Z SubGroup 83 proc z gt local g gt use S3 in gt for g in gens do gt if not eq mul inv g inv z g z then gt return false gt end if gt end do gt end use gt true gt end proc 148 e Chapter 2 Programming with Modules Z module export parent test option record end module gt Z test 2 1 3 false gt Z test 2 3 1 false gt Z test 1 2 3 true Similarly you can write a constructor for the centralizer of an element in a group gt Centralizer proc G g gt Su
344. olors flatten gt points sequence of corners for rectangles gt points seq seq evalf gt i m j n it1 m j n gt i 1 m j 1 n i m j 1 n gt i 0 m 1 j 0 n 1 gt colors listlist of RGB color values gt colors seq seq i m 1 j n 1 B gt i 0 m 1 j 0 n 1 gt flatten turns the colors listlist into a sequence gt flatten a gt op map op a gt POLYGONS points gt COLOUR RGB flatten colors gt TITLE cat Blue convert B string 310 e Chapter 5 Programming with Maple Graphics gt end proc The following is a 10 x 10 table of colors the blue component is 0 gt PLOT colormap 10 10 0 Blue 0 Using Animation You can use animation to vary the blue component of the previous table Example 2 The following colormaps procedure uses animation to gen erate an m x n x f color table colormaps proc m n f local t PLOT ANIMATE seq colormap m n t f 1 t 0 f 1 AXESLABELS Red Green For example the following function produces a 10 x 10 x 10 color table not shown gt colormaps 10 10 10 You can create a color scale for HUE coloring as follows gt points evalf seq i 50 0 i 50 1 gt it1 50 1 1 1 50 0 J gt i 0 49 gt PLOT POLYGONS points COLOUR HUE seq i 50 i 0 49 gt AXESTICKS DEFAU
345. on 11 random numbers generating 11 range 414 RANGE internal data structure 414 rational 414 RATIONAL internal data struc ture 414 read 415 READ internal data structure 415 readability of code 6 readbytes 197 readdata 189 204 reading bytes from files 197 columns 204 data 187 expressions from terminal 28 from default 197 Index e 439 lines from files 197 remainder of file 198 statements 204 strings from terminal 27 readline 27 195 197 382 ReadRows 203 readstat 28 219 382 advantages 28 record 57 records 72 instantiating 72 representing quaternions 75 types 74 rectangular tables 426 REF 342 reference call by 339 remember tables 36 240 425 return statement 48 415 RETURN internal data structure 415 RGB 255 root finding 14 rotating plots 274 rounding 225 roundoff errors 236 237 catastrophic cancellation 238 241 IEEE standard 237 increasing precision 238 similar magnitudes 237 rtable 415 426 RTABLE internal data structure 415 426 rtables 212 214 216 232 samples directory 46 save 4177 SAVE internal data structure 417 protect 198 scanning 440 e Index files 189 198 strings 220 scoping rules 6 searching 424 selection operation 18 sequence of sets Cartesian product 22 sequences of arguments 251 of statements 418 series 397 425 SERIES internal data structure 417 SET internal data structure 417 sets 19 shadows 276 Shap
346. on Also since the relative order of objects is preserved during garbage collection this means that sequences of objects can be ordered by ma chine address For example sets in Maple are represented this way The set operations such as union or intersection can be done in linear time by merging sorted sequences Sorting by machine address is also available to the user with the sort command The Name Table The simplest use of hashing in the Maple kernel is the name table This is a symbol table for all global names Each key is computed from the name s character string and the entry is a pointer to the data structure A 3 The Use of Hashing in Maple e 425 for the name The name table is used to locate global names formed by the lexical scanner or by name concatenation It is also used by functions that perform operations on all global names These operations include 1 Marking for garbage collection 2 Saving a Maple session environment in a file 3 Maple functions anames and unames which return all assigned and unassigned global names respectively Remember Tables A remember table is a hash table in which the argument s to a procedure call are stored as the table index and the result of the procedure call is stored as the table value Because a simplified expression in Maple has a unique instance in memory the address of the arguments can be used as the hash function Hence searching a remember table is very fast There are sever
347. on corresponding to that argument 6 3 OpenMaple Using Maple in Compiled Code e 385 The streamCallBack function must return a string in valid Maple syntax If no result is to be returned it must return the NULL pointer User defined streams are an alternative to using the callBackCallBack function For more information on the callBackCallBack function see Call Back Call back Function on page 383 Streams have several ad vantages e The stream name is passed You can use multiple streams in Maple code and quickly determine which operation to perform by examining the stream name in the streamCallBack function e Multiple arguments are passed as separate strings unlike the callBackCallBack function to which multiple arguments are passed as a single comma separated string This reduces parsing requirements in the OpenMaple application The number of arguments is passed making it easier to check that the correct arguments are passed If no streamCallBack function is specified and output is sent to an unknown stream the arguments to the stream are sent to the call back function to which Maple results are sent that is the textCallBack func tion Maple Online Help Database The Maple online help system is also available to your application Al though help output can be generated by passing a Maple help command to a kernel in which case the output is returned to the textCallBack function with a MAPLE TEXT HELP tag such output d
348. onjugate Group x y Gnv y x y Similarly you can compute the commutator a b adb ap generically as follows Commutator proc G a b description compute the commutator of two group elements use G inv mul G mul in mul inv a inv b a b end use end proc Again this computation is done symbolically so the group operations return unevaluated VVVVVVV gt Commutator Group x y mul inv x inv y x y The ability to write generic algorithms over a given interface is im portant for the management of large software projects involving many developers One developer can be assigned the task of implementing par ticular group constructors along with the attendant arithmetic while an other developer can begin coding generic routines The two developers can work independently provided each ensures that the work conforms to some agreed upon interface and semantics Permutation Groups Before attempting to develop any complicated al gorithms it is helpful to have a few constructors for specific kinds of groups These can then be used to validate generic algorithms in specific instances For this reason develop a straightforward implementation of permutation groups Permutations are represented using Maple lists For example the list 2 1 3 represents the permutation that maps 1 2 maps 2 1 and leaves 3 fixed In cycle notation this is writte
349. ons available in the external call API plus StartMaple StopMaple and RestartMaple functions For more information on external calling see 6 2 External Calling Using Compiled Code in Maple or refer to external calling The sequence for calling the basic API functions is as follows 1 Call StartMaple For more information see the following Initializing Maple subsection 2 Execute a string command in Maple by calling EvalMapleStatement or use any of the other functions listed in maplec h For more infor mation see Evaluating Maple Input on page 376 3 Reset Maple by calling RestartMaple if necessary To execute ad ditional commands in this session return to step 2 For more infor mation on restarting Maple see Reinitializing Maple on page 378 4 Call StopMaple Once you stop the Maple kernel you cannot restart it For more information on stopping Maple see Terminating Maple on page 378 The call back functions are declared in maplec h and defined in the following subsections Initializing Maple The StartMaple function e Creates a Maple kernel e Passes command line parameters to this kernel a subset of those that can be passed to the stand alone version of Maple e Prepares the kernel for computation The calling sequence is as follows MKernelVector StartMaple int argc char argvl MCallBackVector cb void user data void info char errstr e The argc parameter indicates the number of co
350. onverting expressions to strings 275 310 grids to polygons 315 integers to string 218 meshes to polygons 273 284 315 strings to bytes 218 strings to expressions 30 219 to formatted strings 220 to PLOToptions 267 286 CopyFile 198 211 Copyright 57 coverage 87 customer feedback 3 data from other applications 185 reading from files 187 saving to file 186 data structures 39 for animations 301 for plotting 254 256 262 internal see internal data struc tures manipulation 397 DCOLON internal data structure 401 DEBUG internal data structure 401 debugopts 87 define external 333 description 50 diff 70 397 extending 39 Digits 12 224 235 237 evalhf 228 digits number of 224 display insequence 303 divide 397 done 380 418 dsolve 14 efficiency 22 223 229 234 239 297 298 embedding 2 D graphics in 3 D 268 269 277 encapsulation 43 66 end 47 end module 47 enumerated types 338 equality 401 EQUATION internal data struc ture 401 error 401 ERROR internal data structure 401 errors catastrophic cancellation 238 241 roundoff 236 eval 16 31 evalb 20 397 evalf 12 224 227 397 425 extending 238 new constants 238 new functions 240 evalhf 227 397 arrays 232 234 Digits 228 structured objects 232 233 var 234 evaln 397 evaluating parsed strings 219 evaluation full 16 numerical 224 using hardware floats 227 using software floats 224
351. open and open The fopen command opens buffered STREAM files whereas the open command opens unbuffered RAW files Use the fopen command as follows fopen fileName accessMode fileType The fileName specifies the name of the file to open This name is specified as a string and follows the conventions that the underlying operating system uses The accessMode must be one of READ WRITE or APPEND indicating whether you should initially open the file for reading writing or appending The optional fileType is either TEXT or BINARY If you try to open the file for reading and it does not exist fopen generates an error If you try to open the file for writing and it does not exist Maple creates it If it does exist and you specify WRITE Maple truncates the file to zero length if you specify APPEND subsequent calls to commands that write to the file append to it Call the open command as follows open fileName accessMode The arguments to open are the same as those to fopen except that you cannot specify a fileType TEXT or BINARY Maple opens an unbuffered file with type BINARY 194 e Chapter 3 Input and Output Both fopen and open return a file descriptor Use this descriptor to refer to the file for subsequent operations You can still use the filename When you have finished with a file instruct Maple to close it This en sures that Maple writes all information to the disk It also frees r
352. opts PLOToptions gt gt V CURVES evalf x yl op opts end proc 5 4 Programming with Plot Data Structures e 267 The convert PLOToptions command converts user level op tions to the format that PLOT requires gt convert axes boxed color red PLOToptions AXESSTYLE BOX COLOUR RGB 1 00000000 0 0 Example 2 The disk procedure is similar to the line procedure in Ex ample 1 except that you can specify the number of points that disk uses to generate the disk Therefore disk must handle the option numpoints separately gt disk proc x list r algebraic gt draw a disk of radius r centered at x in 2 D gt local i n opts vertices gt opts args 3 nargs gt if not hasoption opts numpoints n opts gt then n 50 gt end if gt opts convert opts PLOToptions gt vertices seq evalf x 1 r cos 2xPi i n S x 2 r sin 2xPi i n gt i 0 n gt POLYGONS vertices op opts gt end proc To display two disks connected by a line enter gt with plots Warning the name changecoords has been redefined display disk 1 0 1 2 color plum line 1 1 2 1 1 21 disk 1 0 1 2 thickness 3 gt gt gt gt scaling constrained 0 4 0 2 7 0 2 0 4 268 e Chapter 5 Programming with Maple Graphics The options to the individual objects apply to only those objects Plotting Gear
353. or kv ALGEB s IsMaplePointer MKernelVector kv ALGEB s IsMaplePointerNULL MKernelVector kv ALGEB s IsMapleProcedure MKernelVector kv ALGEB s IsMapleRTable MKernelVector kv ALGEB s IsMapleString MKernelVector kv ALGEB s IsMapleTable MKernelVector kv ALGEB s IsMapleUnassignedName MKernelVector kv ALGEB s IsMapleUnnamedZero MKernelVector kv ALGEB s Equivalent Fortran functions are as follows The C functions IsMaplePoin not available INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER ter IsMaplePointerNULL and IsMapleUnnamedZero are in the Fortran API is maple assigned name kv s is maple complex numeric kv s is maple numeric kv s is maple integer kv s is maple integer8 kv s is maple integeri6 kv s is maple integer32 kv s is maple integer64 kv s is maple name kv s is maple null kv s is maple procedure kv s is maple rtable kv s is maple string kv s is maple table kv s is maple unassigned name kv s 6 2 External Calling Using Compiled Code in Maple e 357 These functions all return TRUE 1 when the Maple dag s fits the de scription given by the function name If s is not of the correct type FALSE 0 is returned The Maple NULL is not the same as a C Pointer NULL The former is the empty expression sequence in the Maple language The
354. ore you can change the value of the global variable element without breaking g gt element 45 element 45 gt gO y R 56 Summary The previous examples demonstrate that local variables can escape the bounds of the procedures which create them and that escaped variables allow you to write procedures which create specialized proce dures Exercises 1 The procedure that CartesianProduct generates does not work if one of the sets is empty gt f CartesianProduct x y f proc element s c end proc gt 0 Error in element invalid subscript selector 1 4 Interactive Input e 27 Improve the type checking in CartesianProduct so that it generates an informative error message in each such case 2 A partition of a positive integer n is a list of positive integers whose sum is n The same integer can appear several times in the partition but the order of the integers in the partition is irrelevant Thus the following are all the partitions of 5 1 1 1 1 1 L 1 1 2 1 1 3 2 2 1 4 2 3 5 Write a procedure that generates a procedure that returns a new partition of n each time you call it 1 4 Interactive Input Normally you pass input to Maple procedures as parameters Sometimes however you need a procedure to request input directly from the user For example you can write a procedure that tests students on some topic by generating random problems and verifying the
355. ored in its own source file these files are included into the main package source file shapes mpl The package module Shapes has a submodule also called Shapes The submodule Shapes Shapes contains one submodule for each shape supported This submodule hierarchy is illustrated in the following dia gram ShapesPackageSubmoduleStructure The result of preprocessing the main file shapes mpl produces a module whose source has the following general outline Shapes module export make area circumference local Shapes circum table Shapes module export point segment circle square triangle point module end segment module end end module make proc end area proc end circum table table circumference proc end end module 98 e Chapter 2 Programming with Modules The Package API The Shapes package exports the following routines 1 make 2 area 3 circumference The make Procedure The exported procedure make is a constructor for shapes It is used to create a shape expression from the input data For example points are constructed from their x and y coordinates gt org make point 0 0 org make point 0 0 A circle is constructed from its center and radius gt circ make circle org 2 circ make circle make point 0 0 2 In each case the name of the shape is passed as the first argume
356. ority items are removed first In this sample computation with a priority queue use the Maple built in procedure length as the priority of an expression Here the randomly generated expressions are all polynomials gt pq PriorityQueue x gt length x pq module local heap nitems bubbleup bubbledown export empty top insert size delete init description a priority queue end module for i from 1 to 10 do pq insert randpoly x end do while not pq empty do pq delete end do VVVVVV 71 102 6224 822 8027 442 814 952 1124 4932 47 27 40x 774 912 6827 102 3127 51lz 29 722 37 x 232 8777 4 442 29 98 2 23 xf 102 61 x 87 42 17 x 75 zf 10 z 7x 407 74 502 23 xf 75x3 923 62 56 72 22 x1 55a 942774 8T x 16 95 z z r 4552 282 83 629149722 73a Ax Priority Queue Usage Priority queues can be used to implement a heap sort algorithm gt HeapSort proc L list numeric gt local pq t count 2 5 Modeling Objects e 115 gt pq PriorityQueue x gt x op L gt t array 1 nops L gt count 0 gt while not pq empty do gt count 1 count gt t count pq delete gt end do gt ASSERT count nops L gt seq t count
357. orm random number genera tor 11 unload 57 use 46 103 420 USE internal data structure 420 user input 27 30 user interface 396 User Manual 2 userinfo 41 variables exported vs local 118 global 20 21 identifying 20 lexically scoped 407 local 19 26 408 scope of 6 unassigning 21 undeclared 7 vector fields 286 Vectors 214 216 read 216 Index e 441 write 216 version classic worksheet 2 command line 2 standard worksheet 2 worksheet classic 2 graphical interface 2 standard 2 versions 2 wrapper 330 custom 330 349 Maple generated 330 337 writebytes 211 writedata 187 215 writeline 210 writeto 217 382 383 xor 421 XOR internal data structure 421 Zero floating point representation 236 sign of 236 ZPPOLY internal data structure 421 442 e Index
358. os x gt use SpecFuncs in gt differentiate F x x gt end use e22 With the traditional mechanism this does not work gt diff F x gt sin x cos x diff F x gt sin x cos x gt diff F x x sin x cos x gt use SpecFuncs in gt diff F x gt diff F x x gt end use gt exp 2 x diff F x gt e NS The definition for the global F has been lost gt diff F 2 x x ND 72 e Chapter 2 Programming with Modules You can use a different argument to diff to avoid recalling the an swer from its remember table The traditional mechanism fails because it relies on the external representation of names and not upon their bindings so each attempt to define an extension to diff in fact adds a definition for the derivative of all functions whose names are spelled F Note A commented version of the differentiate module is available in the samples AdvPG directory of the Maple installation The implemen tation shown in the text has been somewhat simplified 2 2 Records The simplest way to use modules is as Pascal style records or structures as in C and C A record is a data structure that has some number of named slots or fields In Maple these slots can be assigned arbitrary values Although the underlying data structure of a Maple record is cur rently a module records and modules represent distinct a
359. osition within the string at which Maple detected the error When you call parse from the Maple prompt Maple displays the parsed result depending on whether the call to parse ends in a semi colon or a colon The string passed to parse does not require a trailing semicolon or a colon If included it is ignored gt parse a 2 b 3 a 5 b gt parse sin 3 0 gt hs 0 1411200081 Formatted Conversion to and from Strings The sprintf and sscanf commands are similar to fprintf printf and fscanf scanf except that they read from or write to Maple strings in stead of files Call the sprintf command using the following syntax sprintf format expressionSequence The format specifies how Maple is to format the elements of the ex pressionSequence This Maple string consists of a sequence of formatting specifications possibly separated by other characters For more informa tion see 3 6 Formatted Output on page 211 The sprintf command returns a string containing the formatted re sult Call the sscanf command as follows sscanf sourceString format The sourceString provides the input for scanning The format specifies how Maple is to parse the input A sequence of conversion specifications 3 8 Notes to C Programmers e 221 and possibly other anticipated characters consist of this Maple string For information on the format see Formatted Input on page 198 The sscanf command returns a list o
360. ot necessarily 4 bytes on 32 bit machines and 8 bytes on 64 bit machines Use the sizeof operator or consult your compiler manual to verify sizeof long Scalar Data Formats External libraries generally deal with scalar data supported directly by the underlying machine All array string and structured formats are built up from these The data descriptors used to represent scalar formats usually contain a type name and size The size represents the number of bytes needed to represent the given hardware type Table 6 2 lists the basic type translations for standard C Fortran and Java compilers Structured Data Formats In addition to the basic types listed in Table 6 2 Maple also recognizes some compound types that can be derived from the basic types such as arrays and pointers These compound types are listed in Table 6 3 on page 392 335 336 e Chapter 6 Advanced Connectivity Character String Data Formats Strings are similar to both scalar and array data A string in C is an array of characters but it is often manip ulated as if it were an object A string in Maple is an atomic object but it can be manipulated as if it were an array of characters Parameter n in string n indicates that the called function is expecting a fixed size string Otherwise a pointer to a character buffer char is used Strings are implicitly passed by reference only a pointer to the string is passed but any changes made to the string are not
361. owers involving non numeric exponents are represented as POWER structures Range RANGE exprl expr2 Maple syntax expri expr2 Length 3 Rational RATIONAL integer pos integer Maple syntax 1 2 Length 3 This structure is one of the basic numeric objects in Maple Note that this is not a division operation but only a representation for rational numbers Both fields must be integers INTPOS INTNEG or an immediate integer and the second must be positive A 2 Internal Representations of Data Types e 415 Read Statement READ expr Maple syntax read expr Length 2 The Maple read statement The expression must evaluate to either a string or symbol STRING or NAME structure and specifies the name of the file to read Return Statement RETURN expr seq Maple syntax return expri expr2 Length 2 The Maple return statement The expression sequence is evaluated giving the value s to return Rectangular Table RTABLE data maple ind attrib flags num type fn elems fy U Ly Un Py Po Maple syntax rtable Length 2n p where n is the number of dimensions 0 to 63 and p is 0 1 or 2 depending on the number of P parameters The data field points to either a block of memory for dense and NAG sparse RTABLE
362. owing routine for computing the adjacency matrix of a graph 2 6 Interfaces and Implementations e 129 AdjacencyMatrix proc g Graph local a the adjacency matrix returned the order of the graph g the vertex set of the graph the edge set of the graph row index for matrix column index for matrix induction variable for loop row col e ti HHHH HH H g order Matrix n n storage sparse sort convert g vertices list g edges or e in E do if not member e source V row or not member e target V col then error inconsistent graph structure detected hs B M end if al row col 1 end do a end proc VVVVVVVVVVVVVVVVVVVVV VV AdjacencyMatrix gl Ep gt AdjacencyMatrix g2 Quotient Fields As an example of generic programming a generic quotient field or field of fractions construction algorithm is discussed Mathematical Description Given an integral domain D its quotient field is up to isomorphism the unique field k paired with a nonzero ring homomorphism 7 D k with the property that for any nonzero ring homomorphism py D F in which F is a field there is a unique ring homomorphism for which the diagram 130 e Chapter 2 Programming with Modules commutes Because a nonzero ring homomorphism into a field must be injective this says that every field F that contains D as a subring must also
363. p s gt s map documentTermVector docs corpusTerms datatype float 8 storage sparse use LinearAlgebra in u S V SingularValues term_document_matrix output U S Vt v Transpose v if nargs gt O then k k else Use a default if no dimension provided k floor Rank DiagonalMatrix s 0 7 end if 176 e Chapter 2 Programming with Modules u u 1 1 1 k v v 1 k 1 1 s DiagonalMatrix s 1 k Replace the term document matrix with its rank k approximation term_document_matrix MatrixMatrixMultiply u MatrixMatrixMultiply s v end use eval thismodule 1 end proc search proc query number fResults posint local qt qv scores if not type term document matrix Matrix then error corpus not yet indexed end if qt qfilter query qv queryTermVector qt corpusTerms use LinearAlgebra in Scores Transpose MatrixVectorMultiply term document matrix qv Tools permSort scores end use end proc end module end proc NumberO0fDocuments corpus gt corpus number0fDocuments GetDocumentIdByIndex corpus idx gt corpus getDocumentIdByIndex idx BuildIndex corpus k gt if nargs 1 corpus buildIndex corpus buildIndex k Search corpus query gt corpus search query Locals documentTermVector proc doc
364. parameters of the procedure Each entry is either a NAME or a DCOLON which in turn contains a NAME and an expression specifying a type Within the procedure parameters are referred to by PARAM structures the parameter number being the index into the param seq A 2 Internal Representations of Data Types e 413 The local seq points to an expression sequence listing the explicitly and implicitly declared local variables Each entry is a NAME The explicitly declared variables appear first Within the procedure locals are referred to by LOCAL structures the local variable number being the index into the local seq The option seq field points to an expression sequence of options to the procedure for procedures options are the same thing as attributes Each entry is a NAME or EQUATION specifying an option Typical options are remember operator and Copyright The rem table field points to a hash table containing remembered values of the procedure Entries in the table are indexed by the procedure arguments and contain the resulting value If there is no remember table this field contains a pointer to NULL the empty expression sequence The stat seq field points to a single statement or a statement sequence STATSEQ If the procedure has an empty body this is a pointer to NULL instead For each procedure that is built into the kernel there is a wrapper PROC that has the option builtin in its option seq and a single Maple intege
365. pe Table 6 4 on page 393 lists additional types that are supported when the keyword WRAPPER is specified Structured Data Formats A structure is a non homogeneous collection of members corresponding to a struct in C or a record in Pascal union is similar except that all the members start at the same memory address Each member descriptor pair describes one member of the structure or union The descriptor is any of the types described in this chapter The options are used to specify what kind of datatype the wrap per should expect for conversion purposes The following two options are supported TABLE Tables are used as the corresponding Maple type Using tables is the default behavior and they are easier to use than lists When tables are used the member names correspond to table indices LIST Lists are used as the corresponding Maple type Lists are primarily used in a read only basis Lists cannot be modified in place so making updates to a list structure in external code requires a copy to be made When structures must be passed back to Maple or if they contain pointer types it is better to use tables Lists and tables cannot be used interchangeably Once the wrapper has been generated it accepts only the declared type not both Enumerated Types The Maple external calling mechanism does not directly support enumer ated types such as enum in C Instead use the integer n type with n of an appropriate size to matc
366. plementation of the matrix group constructor gt gmember proc test g anything S set list pos name gt description a generic membership predicate gt local i gt if type test procedure then gt for i from 1 to nops S do gt if test g SL i then gt if nargs gt 3 then gt pos i gt end if gt return true gt end if gt end do gt false gt elif test then gt use the standard membership test gt member args 2 1 gt else gt gt procname args gt end if gt end proc The built in procedure Equal in the LinearAlgebra package provides an equality predicate that is suitable for use with matrices gt gmember LinearAlgebra Equal A B C true The MatrixGroup Constructor Except for the member export most of the exported methods for matrix groups simply delegate to the appropri ate routine in the LinearAlgebra package The MatrixGroup constructor takes the degree n of the matrix group as its first argument and if given more than one argument takes the remaining ones to be matrices that form a set of generators for the group gt MatrixGroup proc n posint gt description matrix group constructor gt local matgens G gt use LinearAlgebra in 154 e VVVVVVVVVVVVVVVVVVVVVVVVVVV VV Chapter 2 Programming with Modules matgens args 2 1 G Record id Matrix n n Ci j gt
367. ples affect the numerical data generated by the plotting commands You can use other options to specify visual information such as shading line style and coloring For a description of all options available for 2 D and 3 D plotting refer to 7plot options and plot3d options It is recommended that any plotting procedure you create allow users to specify a similar set of options When writing programs that call ex isting Maple plotting procedures simply pass the optional arguments di rectly to the Maple procedures 5 2 Programming with Plotting Library Procedures This section gives examples of programming with Maple plotting proce dures Plotting a Loop Consider the problem of plotting a loop from a list of data menti 5 29 11 23 11 36 9 351 L1 5 29 11 23 11 36 9 35 The plot command draws lines between the listed points gt plot L1 250 e Chapter 5 Programming with Maple Graphics 36 A 34 32 30 28 26 24 5 6 7 8 9 10 11 To draw a line from the last point to the first point append the first point in L1 to the end of L1 gt L2 op L1 L1 11 L2 5 29 11 23 11 36 9 35 5 29 gt plot L2 36 34 32 30 28 26 24 5 6 7 8 9 10 11 Example 1 The procedure loopplot automates the previous technique gt loopplot proc L gt plot op L L 1 gt end proc loopplot proc L plot op L L1 end proc
368. ples of ISOSURFACE structures and data in Array form are not presented here For a complete specification of PLOT3D ob jects refer to plot3d structure All the options available for PLOT are also available for PLOT3D There are additional 3 D options such as GRIDSTYLE LIGHTMODEL and AMBIENTLIGHT For a complete list of options refer to 7plot3d structure 5 4 Programming with Plot Data Structures This section describes tools for programming at the PLOT and PLOT3D data structure level Plotting data structures allows direct access to the Maple plotting facilities The examples in section 5 3 showed the extent of the facilities power T his section provides examples that describe how to program at this lower level Writing Graphic Primitives You can write procedures that allow you to work with plot objects at a more fundamental level For example the line and disk commands in the plottools package provide a model for programming primitives such as points lines curves circles rectangles and arbitrary polygons in both two and three dimensions In all cases you can specify options such as line or patch style and color in the same format as in other plotting procedures in Maple Example 1 In the procedure line args 3 nargs is the sequence of arguments that follow x and y gt line proc x list y list x and y represent points in either 2 D or 3 D gt local opts gt opts args 3 nargs gt opts convert
369. point in the plane e When ObjectName is CURVES ObjectData consists of one or more lists of points where each list specifies a single curve in the plane e When ObjectName is POLYGONS ObjectData consists of one or more lists of points where each list specifies the vertices of a single polygon in the plane e When ObjectName is POINTS ObjectData consists of one or more points e When ObjectName is TEXT ObjectData consists of a point followed by a name representing the text string Plot Option Structures Plot options have the form OptionName Option Value Examples of option structures are AXESTYLE BOX COLOR RGB 0 0 1 0 0 0 and VIEW 4 4 1 1 For a complete list of the plot option structures and the values each structure accepts refer to plot structure Some plot options cannot be specified as a local option within a plot object structure For example the AXESSTYLE option must be a global option while a different COLOR option can be specified for each plot object Example 4 This example demonstrates a simple way to generate a filled histogram of sixty three values of the function y sin x from 0 to 6 3 with each trapezoid colored individually by the HUE value corresponding to y cos x gt p i gt i 1 10 0 117 10 sin i 1 10 gt i 10 sin i 10 i 10 0 The function p i returns the vertices of the ith trapezoid in a list For example p 2 contains the vertices of the second trapezoid
370. pose procedures Several Maple commands can be extended 1 1 Nested Procedures You can define a Maple procedure inside another Maple procedure Some Maple commands are very useful inside a procedure In the worksheet 5 6 e Chapter 1 Procedures Variables and Extending Maple environment the map command is used to apply an operation to the elements of a structure For example you can divide each element of a list by a number such as 8 gt Ist 8 4 2 16 gt map x gt x 8 1st 1 Ble N Consider a variation on the map command which appears in the fol lowing procedure Example This new procedure divides each element of a list by the first element of that list gt nest proc x list gt local v gt v x 1 gt map y gt y v x gt end proc gt nest lst 1 N A The procedure nest contains a second procedure map which in this case is the Maple command map Maple applies its lexical scoping rules which declare the v within the call to map as the same v as in the outer procedure nest Scoping Rules This section explains Maple scoping rules You will learn how Maple de termines which variables are local to a procedure and which are global You must have a basic understanding of Maple evaluation rules for pa rameters and for local and global variables For more information refer to chapter 6 of the Introductory Programming Guide Local Versus Global
371. presentation of the field of rational numbers The Quotient Field of the Polynomial Ring Q 7 To illustrate the generic quality of this constructor construct the field Q T of rational functions in a single indeterminate T from a concrete representation of Maple rational polynomials gt MaplePoly module if iszero p then one zero else use lc lcoeff p in lc normal p lc gt description the ring of rational polynomials gt export Cee Cue gt zero one gt iszero isone gt gcd unormal gt quo rem gt a b gt expand a b gt a b gt expand a b gt i2 p gt p gt gcd a b gt gcd a b gt unormal proc p gt local lc gt gt gt gt gt 2 6 Interfaces and Implementations e 137 gt end use gt end if gt end proc gt iszero p gt Testzero p gt isone p gt Testzero p 1 gt zero 0 gt one 1 gt rem a b gt rem a b gt quo a b gt quo a b gt end module The unormal method produces the leading coefficient and monic associate of a given polynomial in Q T The remaining exports simply capture built in Maple operations on univariate rational polynomials gt RR QuotientField MaplePoly RR module 6 6 export 5 5 zero one iszero isone make 6 y numer denom normal embed
372. proc Convert an interface name to the corresponding type totype ifc symbol gt type ifc Convert an interface name to a set of symbols toset ifc symbol gt op type ifc y Install a new interface into the type system define proc ifc description define an interface if map type args symbol lt gt true then error arguments must all be symbols end if gassign type ifc gt module args 2 nargs ifc return the interface name end proc VVVVVVVVVVVVVVVVVVVVVvVvvVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 2 6 Interfaces and Implementations e 121 Implement subtyping extend proc new old description extend an existing inteface if map type args symbol lt gt true then error arguments must all be symbols end if if not type totype old interface then error cannot find an interface named 1 old end if define new op totype old args 3 nargs end proc Test whether ifc2 is an extension of ifcl extends proc ifci ifc2 description test whether the second interface extends the first local ti t2 ti t2 op map totype ifci ifc2 if not type t1 t2 interface interface then if not type ti interface then error arguments must be interface names but got 1 ifct else error arguments must be interface names but got A1 i
373. proc Table based Dispatching The third dispatch method illustrated in the Shapes package is table based This technique is used by the exported procedure circumference which references the table circum_table to look up the appropriate routine to call This table is built simply by assigning its entries in the body of the Shapes package circum_table table circum table POINT Shapes point circumference circum table SEGMENT Shapes segment circumference circum table CIRCLE Shapes circle circumference circum table SQUARE Shapes square circumference circum table TRIANGLE Shapes triangle circumference VVVVVV The source code for the procedure circumference follows gt circumference proc shape gt description compute the circumference of a gt shape expression gt if not type shape function then gt error expecting a shape but got 1 shape gt end if gt if assigned circum table op 0 shape then gt circum table op 0 shape shape gt else gt error no circumference method available gt for shape 41 Supported shapes gt are 42 tag gt sprintf q op ALL SHAPES gt end if gt end proc Minimal checking is done to ensure that the input has the right struc ture If an entry is found in the table circum_table for the shape tag as with the area routine then the corresponding procedure
374. procedure was initially in strumented is best used The procedure covered queries Maple for all the names currently as signed values using the Maple command anames assigned names Names corresponding to profiled user procedures are selected using the subroutines userprocs and traced If the nonzero option is passed to covered then only those which have actually been called are chosen The final statement gt map parse map convert S string first converts the names to strings and then calls parse on each string to convert it to the procedure for which profiling data is stored Using the Package As with all packages you can access the coverage package interactively by using the with command gt with coverage Warning the protected name profile has been redefined and unprotected 92 e Chapter 2 Programming with Modules covered profile A list of the package exports is returned Alternatively the package ex ports can always be accessed by using the long forms coverage profile and coverage covered Suppose that you want to test the procedure copy chosen because it is short This procedure produces a new copy of a table array or rtable Now that the coverage package has been globally imposed by using with simply call gt profile copy The return value of 1 indicates that as expected one procedure was instrumented Next call copy with a few arguments output suppressed g
375. putational capabilities Overriding default methods which may not be efficient but are always present with methods that take advantage of specific structural informa tion allows for efficient computation without sacrificing generality This leads to a powerful paradigm for software reuse and is the principal mo tivation underlying the Maple module system 2 7 Extended Example A Search Engine Search engines are used in a variety of contexts to locate documents that match or satisfy a query Queries consist of sequences of search terms words that are meant to prescribe the subject matter of matching documents Examples of search engines include Web search engines and database interfaces However search engines can be adapted to search a wide variety of structured or unstructured data This example illustrates how a simple search engine based on the vec tor space model can be constructed using Maple Various Maple packages are used to pre and post process the data to be searched as well as the queries and the LinearAlgebra package is used to effect the computa tions necessary to locate relevant documents Introduction to Searching Prototypically a document is a file of structured or unstructured text but this section treats documents as abstract data items A document can be 160 e Chapter 2 Programming with Modules a scientific article in LaTeX format a web page an integral formula an image or a simple string of text a
376. r guments are evaluated during a function call It therefore may be nec essary to enclose assigned names in right single quotes when passing by reference For example consider the following function that multiplies a number by two in place void double it int i 1 if i NULL return i 2 In Maple the wrapperless definition of this function might appear as follows 348 e Chapter 6 Advanced Connectivity gt double it define external double it i REF integer 4 gt LIB libtest dl1 When executing this function the argument i is converted from the Maple internal representation of an integer to a 4 byte hardware integer A pointer to the hardware integer is then passed to the external function gt double_it Though i is declared as a pointer to an integer it is acceptable to call double_it with non pointer input double it 3 In this case a pointer to the hardware integer 3 is sent to double it The modified value is not accessible from Maple To access the modified value the parameter must be named The name must be enclosed in right single quotes to prevent evaluation gt n 3 gt double_it n n is evaluated first so 3 is passed gt n gt double it n use unevaluation quotes to pass n gt 0 6 For numeric data the string NULL can be passed as a parameter to represent the address 0 the C NULL For strings because NULL is a valid string t
377. r library Maple requires the use of a C compiler installed on the same machine that is running Maple Maple generates a system command to call the compiler The compiler must be recog nized by the system It should be in the system PATH and all associated environment variables must be set The compile and link commands are completely customizable provided that your compiler has a command line interface Default configurations are provided which should make most cases work out of the box Maple is preprogrammed to use the vendor supplied C compiler to compile wrap pers on most platforms All default compile and link options are stored in a module that can be obtained by using the command define external COMPILE OPTIONS When the module returned by this command is modified the modifica tion affects all wrapper generation commands via define external for the remainder of the session Any of the names exported by the compile options module can also be specified as a parameter to define external When specified as a parameter the effect lasts only for the duration of that call The compile and link commands are assembled by calling the COMPILE COMMAND and LINK COMMAND procedures defined in the compile options module These procedures make use of the definitions in the com pile options module to formulate a command string that is executed using ssystem To customize the compile and link commands you can modify the following option
378. r names gt LinkedList pair a b a b For consistency with the older table based package implementations an indexed notation can also be used gt LinkedList pair a b a b 2 3 Packages e 85 This form requires that the index in this case the symbol pair be protected from evaluation and the notation does not extend to packages with nested subpackages To access the package exports interactively use the with command gt with LinkedList Warning the protected names length map and member have been redefined and unprotected append head length list map member nil nullp pair reverse tail Note that since some of the package exports shadow global procedures with the same name the with command issues warnings These warnings are normal They remind you that these names now refer to expressions different from the expressions to which they referred previously Once the exports of the package LinkedList have been bound you can call them as you would global Maple routines with those names Note that you can still access the global version of member for example by using the syntax member gt use LinkedList in gt member a 4 gt member a a b c d 1 gt end use irue irue This is one of the principal advantages of using modules and binding rather than assignment to implement packages Lists are either built incrementally using the pair export of
379. r of digits before returning The procedure does not have to reset the value of Digits because Digits is an environment variable which is automatically reset after executing the procedure gt evalf constant MyConst proc local i term halfpi s old_s Digits Digits 2 halfpi evalf Pi 2 old_s 1 term 1 0 s 0 for i from 1 while s lt gt old_s do term term halfpi i old s s S S term end do evalf Digits 2 s end proc VVVVVVVVVVV VV When you invoke evalf on an expression containing MyConst Maple invokes evalf constants MyConst to calculate an approximate value gt evalf MyConst 0 7921204237 gt evalf 40 MyConst 0 7921204236492380914530443801650212299661 You can express the particular constant MyConst in closed form and in this case you can use the closed form formula to calculate approxima tions to MyConst more efficiently 240 e Chapter 4 Numerical Programming in Maple gt Sun 1 i Pi i 2 i i i 1 infinity yet x qu gt value 1 e 1 2m eau gt expand gt evalf 0 7921204237 Defining New Functions If you define new functions you can write procedures that calculate nu merical approximations to the function values When you invoke evalf on an expression containing an unevaluated call to a function F Maple calls the procedure evalf F if such a procedure exists Consi
380. r pointed to by its stat seq The integer gives the built in function number The desc seq field points to an expression sequence of NAMEs or STRINGs These are meant to provide a brief description of what the pro cedure does and are displayed even when interface verboseproc is less than 2 The global seq field points to a list of the explicitly declared global variables in the procedure those that appeared in the global statement This information is never used at run time but it is used when simplifying nested procedures to determine the binding of lexically scoped identifiers For example an identifier on the left side of an assignment in a nested procedure can be global if it appears in the global statement of a sur rounding procedure This information is also used at procedure printing time so that the global statement will contain exactly the same global identifiers that were declared in the first place The lexical seq field points to an expression sequence of links to iden tifiers in the surrounding scope if any The sequence consists of pairs of pointers T he first pointer of each pair is to the globally unique NAME of the identifier this is needed at simplification and printing time The sec ond pointer is a pointer to a LOCAL PARAM or LEXICAL structure which is understood to be relative to the surrounding scope When a procedure is evaluated not necessarily called the lexical seq is updated by replacing each of the seco
381. ram e Works correctly e Continues to work when it or other programs on which it depends change over time It is important to be able to determine whether each statement in a procedure is executed by some test case The traceproc option of the Maple command debugopts provides that capability It takes the name p of a procedure using the syntax The Maple CodeTools package provides tools for profiling code and testing code coverage For more information refer to CodeTools 88 e Chapter 2 Programming with Modules debugopts traceproc p and instruments the procedure assigned to p for coverage profiling Here is an example gt p proc x gt if x lt 0 then gt 2 x gt else gt 1 2 x gt end if gt end proc gt debugopts traceproc p Once the procedure has been instrumented each time it is executed profiling information at the statement level is stored To view the profiling information use the procedure showstat gt pC 2 9 gt showstat p p proc x Calls Seconds Words PROC 1 0 000 121 1 1 0 000 12 if x lt O then 2 0 0 000 ol 2 x else 3 1 0 000 ol 1 2 x end if end proc The display shows that only one branch of the if statement that forms the body of p was taken so far This is because only a non negative argu ment has been supplied as an argument to p To get complete coverage a negative argument must also be supplied gt
382. rators for the domain Use the interface in Table 2 4 for homomorphisms This leads directly to a simple constructor for homomorphism objects gt type Homomorphism module domain codomain genmap gt Homomorphism proc A Group B Group p procedure gt description homomorphism constructor gt Record domain A codomain B genmap p gt end proc The image of a group homomorphism y A B is the subset y A of B consisting of all elements of B having the form y a for some element a in A It is a subgroup of B These various design choices lead to a simple formulation for computing or representing images of homomorphisms gt HomImage proc hom Homomorphism gt description compute the image of a homomorphism gt SubGroup hom codomain gt map hom genmap hom domain gens gt end proc As an example computation compute the image of a homomorphism from the symmetric group 4 onto a two element matrix group generated by the reflection gt Matrix 0 1 1 01 1 0 1 10 First define the groups 158 e Chapter 2 Programming with Modules gt A Symmetric 4 gt B MatrixGroup 2 Matrix 0 1 1 0 Define a mapping from the generators of A to the group B by inserting the images of the generators into a procedure s remember table gt h 2 1 3 4 Matrix D0 1 1 011 2 gt h 2 3 4 1 se Matriz 1 0 0 1
383. rays type hfarray all of which are objects of type rtable e If no rtable specific formatting options are specified via the op tion refer to rtable printf the 4a A 4m and M format codes print a representation of the rtable structure itself For example the format code a prints a Matrix Vector or Array call 3 6 Output Commands e 215 e If no additional rtable specific formatting options are specified for a format code other than fa 4A m and 4M or if an empty rtable option sequence that is just is specified for any format code the following default formatting is applied One dimensional objects are formatted as one long line with the ele ments separated by at least one space Objects of N dimensions where N gt 1 are formatted as a sequence of N 1 dimensional objects separated by N 2 blank lines There fore two dimensional objects are formatted in the obvious way three dimensional objects are formatted as a series of two dimensional ob jects separated by blank lines and so on e Any of the floating point formats can accept integer rational or floating point objects Maple converts the objects to floating point values and then outputs them appropriately e The fprintf and printf commands do not automatically start a new line at the end of the output If you require a new line the format string must contain a new line character An Out put from fprintf and printf is not subjec
384. red files respectively Text Files versus Binary Files Many operating systems including DOS Windows and the Macintosh operating system Mac OS distinguish between files containing se quences of characters text files and files containing sequences of bytes binary files The distinction lies primarily in the treatment of the new line character Other distinctions may exist on some platforms but they are not visible when using the Maple I O library Within Maple the newline character which represents ending one line and beginning a new one is a single character although you can type it as the two characters An within Maple strings The internal 3 2 File Types and Modes e 191 representation of this character is the byte whose value is 10 the ASCII linefeed character Many operating systems however represent the con cept of newline within a file using a different character or a sequence of two characters For example DOS Windows represents a newline with two consecutive bytes whose values are 13 and 10 carriage return and line feed The Macintosh represents a newline with the single byte with value 13 carriage return The Maple I O library can use text files or binary files When Maple writes to a text file any newline characters that it writes to the file are translated into the appropriate character or character sequence that the underlying operating system uses When Maple reads this character or character sequen
385. refer to the form of the calling sequence that accepts procedures and operators Example 1 The following procedure accepts a complex starting point c x ty and computes the required number of iterations to a maximum of 10 for the sequence z441 es c to exit the disk of radius 2 gt mandelbrotSet proc x y local z m z evalf x y 1 m 0 to 10 while abs z 2 do Z z 2 x y I m m 1 end do m end proc VVVVVVVVV 248 e Chapter 5 Programming with Maple Graphics You can use the procedure to compute a 3 D Mandelbrot set on a 50 x 50 grid gt plot3d mandelbrotSet 3 2 3 2 3 2 3 2 grid 50 50 Altering a Plot After you issue a plotting command the result is displayed on the default plotting device in the worksheet generally the current window You can use the tools available in the worksheet interface to interactively alter the plot characteristics such as drawing style axes style and orientation You can also specify this information using optional arguments to plot3d gt plot3d sin x sin y x 2 Pi 2 Pi y 2 Pi 2 Pi gt style patchnogrid axes frame gt plot3d mandelbrotSet 1 5 1 5 1 5 1 5 grid 50 50 gt style wireframe orientation 143 31 5 2 Programming with Plotting Library Procedures e 249 Most Maple plotting procedures accept optional arguments in the form name option Some of these options such as the grid option used in previous exam
386. rement for Windows applications File Structure Off the main Maple installation path the following subdirectories contain files related to OpenMaple bin SYS Location of maplec dll and maplec lib Also holds various dynamic libraries used by the OpenMaple kernel To determine SYS for your platform see Table 6 5 on page 394 samples OpenMaple C Location of the C C ttinclude files for use with external calling and OpenMaple lib Location of the Maple math libraries and help database extern examples Location of platform independent sample code 6 3 OpenMaple Using Maple in Compiled Code e 389 The OpenMaple files installed are platform dependent UNIX On UNIX platforms the OpenMaple engine consists of a shared object library libmaplec so libmaplec sl HP or libmaplec a AIX which exports the functions described in this document Microsoft Windows Under Microsoft Windows the OpenMaple engine consists of a DLL maplec d11 which exports the functions described in this document An import library is also provided The file maplec lib in the bin SYS directory is an import library in COFF format Mac OS X Under Mac OS X the OpenMaple engine consists of two dynamic libraries libmaplec dylib and libmaple dylib which export the functions described in this document Building the Sample Program The code for one simple example of how to use OpenMaple is in the file samples OpenMaple C cmaple omexample c The example pro
387. ributes Each entry is a NAME or EQUATION specifying an option Typical options are load and unload The stat seq field points to a single statement or a statement sequence STATSEQ If the module has an empty body this is a pointer to NULL instead The desc seq field points to an expression sequence of NAMEs or STRINGs T hese are meant to provide a brief description of what the Mod ule does and are displayed even when interface verboseproc is less than 2 The global seq field points to a list of the explicitly declared global variables in the module those that appeared in the global statement This information is never used at run time but it is used when simplify ing nested modules and procedures to determine the binding of lexically scoped identifiers for example an identifier on the left side of an assign ment in a nested procedure can be global if it appears in the global statement of a surrounding context This information is also used at printing time so that the global statement contains exactly the global identifiers that were declared in the first place The lexical seq field points to an expression sequence of links to iden tifiers in the surrounding scope if any The sequence consists of pairs of pointers T he first pointer of each pair is to the globally unique NAME of the identifier this is needed at simplification and printing time The sec ond pointer is a pointer to a LOCAL PARAM or LEXICAL structure
388. rm simple operations this can significantly improve performance However there is a risk asso ciated with using the NO CHECK option If you pass an object of the wrong type the generated C language wrapper might misinterpret what it has received resulting in erroneous translations to external types and hence unpredictable behavior of the external function Conversions When the procedure returned by define external is called the Maple arguments that are passed are converted to the corresponding arguments of the external function Likewise the value returned from the external function is converted to the corresponding Maple type The following table describes the external types and the Maple types that can be converted The first listed Maple type is the one to which a result of the corresponding external type is converted into 342 e Chapter 6 Advanced Connectivity External Type Allowed Maple Type s boolean n boolean integer n integer float n float rational integer numeric complex n complex numeric float rational integer char n one character string string n string symbol 0 ARRAY Array Vector Matrix name 0 STRUCT list table UNION table PROC procedure For STRUCTs either lists or tables are valid for a particular declaration Once declared only one of the types a list or a table is acceptable They cannot be used interchangeably unless the wrapper is regenerated For
389. rmation on rtables refer to rtable 360 e Chapter 6 Advanced Connectivity ALGEB RTableCreate MKernelVector kv RTableSettings s void pdata M INT bounds void RTableDataBlock MKernelVector kv ALGEB rt M INT RTableNumElements MKernelVector kv ALGEB rt M INT RTableNumDimensions MKernelVector kv ALGEB rt M INT RTableLowerBound MKernelVector kv ALGEB rt M INT dim M INT RTableUpperBound MKernelVector kv ALGEB rt M INT dim M BOOL RTableIsReal MKernelVector kv ALGEB rt The Fortran API contains the following functions SUBROUTINE copy to array kv rt a num rdims rbounds num fdims fbounds data type SUBROUTINE copy to rtable kv a rt num fdims fbounds num rdims rbounds data type INTEGER convert to rtable kv a num rdims rbounds num fdims fbounds data type INTEGER rtable num elements kv s INTEGER rtable num dimensions kv s INTEGER rtable lower bound kv s dim INTEGER rtable upper bound kv s dim INTEGER rtable is real kv s RtableDataBlock returns a pointer to the data block of a given rtable T he returned value should be casted to the known data type of the rtable The data block can be manipulated directly instead of using RtableAssign or RtableSelect Users who directly manipulate the data block must be aware of the storage type order data type and presence of indexing functions to do this properly In Fortran there is no way to re
390. rmined by the architecture of your computer but offers exceptional speed In This Chapter e Basics of the evalf Command e Hardware Floating Point Numbers e Foating Point Models in Maple e Extending the evalf Command e Using the Matlab Package Why Use Numerical Computations Representation and manipulation of expressions in symbolic mode in terms of variables functions and exact constants is a powerful feature of the Maple system Practical scientific computation also demands floating point calculations which represent quantities by approximate numerical values Typically numerical computations are used for one of three reasons 223 224 e Chapter 4 Numerical Programming in Maple 1 Not all problems have analytical or symbolic solutions For example there are many forms of partial differential equations but only a small subset have known closed form solutions Despite this it is usually possible to find numerical solutions 2 The analytic solution that Maple returns to a problem may be very large or complex To understand the behavior of these expressions compute a floating point approximation 3 In some cases it is wasteful to compute an exact answer Comput ing an analytic solution is not necessary if only an approximation is needed For example to plot a solution an approximation accurate to the resolution of the plotting device is sufficient 4 1 The Basics of evalf The evalf command is the primary tool in
391. rn the imaginary and real parts of a complex number dag respectively MapleSelectIndexed returns a value from any indexable object in Maple such as list array or set The index is specified by filling the ind array with the desired index The second parameter dim is the number of dimensions in the array s also the number of elements in ind For example to lookup a 1 2 3 the following code could be used assuming argi points to the array a ALGEB val M INT ind 3 ind 0 1 ind 1 2 ind 2 3 6 2 External Calling Using Compiled Code in Maple e 367 val k selectIndexed argi 3 ind Unique Data The following function is available only in the C API ALGEB MapleUnique MKernelVector kv ALGEB s This function processes the given Maple expression s and returns the unique copy of that expression from the Maple simpl table For example if you create the number num one billion then you com pute the number val 2x500 million An address comparison of num and val does not indicate equality After calling simplify as in num MapleUnique kv num both num and val point to the same memory Error Handling The following functions raise a Maple software style er ror message void MapleRaiseError MKernelVector kv char msg void MapleRaiseErrori MKernelVector kv char msg ALGEB argl void MapleRaiseError2 MKernelVector kv char msg ALGEB argi ALGEB arg2 The Fortran equivalent is SUBROUTINE map
392. roc listOflds list fetch filter _qfilter description corpus constructor local docs qfilter Process arguments if nargs 0 then error expecting corpus description elif nargs gt 3 then Allow the query filter to be different than the document filter qfilter eval _qfilter 2 else If not query filter is specified use the document filter qfilter eval filter 2 VVVVVVVVVVVVVVVVVVVVvVVvVVvVVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvw 2 7 Extended Example A Search Engine e 175 end if Construct list of documents docs map Document listOfIds fetch filter Build the corpus module export search buildIndex numberOfDocuments getDocumentIdByIndex local ids corpusTerms documents term document matrix Initialize private data ids listOflds documents docs Accessor methods numberOfDocuments gt nops docs getDocumentIdByIndex proc idx posint if idx lt number0fDocuments then ids idx else error there are fewer than 1 documents in the corpus idx end if end proc Construct an index based on a _k dimensional approximation to the term document matrix buildIndex proc _k posint local docterms k u S V Construct corpus terms docterms map FilterDocument documents corpusTerms sort op union op map op docterms 2 2 2 5i Build the term document matrix term document matrix Matrix ma
393. rol 2 2 bee a o e cd Bos 397 Internal Representations of Data Types 398 Logical AND uus pe aa a RE 399 Assignment Statement 399 Binary Object a a ene a A eot a aa a a 399 Break Statement aoaaa a 399 Name Concatenation a 400 Complex Value naaa aa e e 400 Communications Control Structure 400 Type Specification or Test lll 401 WE DUB glace cet ets ee ehh care ye te eg Y t EAD ord e ts 401 Equation or Test for Equality 401 Error Statement gt 44 a PSU Ae ERR uU 401 Expression Sequence 22e 402 Floating Point Number a 402 For While Loop Statement 402 Foren Data la Wu Roe ee Iss 403 Function Wall e 4 25 cee fade dee Goes BONS exc ees 404 Garbage ers Paaa EU BAA eee a alan a Eu 404 Hardware Float 22s 404 TE Statementila de oe A Ax rue TE ia 405 Logical IMPLIES llle 405 Not Equal or Test for Inequality 405 Negative Integer 405 Positive Integer 406 Less Than or Equal o 406 Less Baan sc oo wol Yak ease a as 407 Lexically Scoped Variable within an Expression 407 ASE ad edo Duc Een dido eve adt dfe ves 407 Local Variable within an Expression 408 Membrana 408 Module Definition sns 408 Module Instance llle 410 Identities eee Rt ur buque Nou
394. rom a non numeric value for example a complex value or a singularity point the myarrow procedure returns a trivial polygon The following are four arrows gt arrowl1 PLOT myarrow 0 0 1 1 0 2 0 4 1 3 gt color red gt arrow2 PLOT myarrow 0 0 1 1 0 1 0 2 1 3 gt color yellow gt arrow3 PLOT myarrow 0 0 1 1 0 2 0 3 1 2 gt color blue gt arrow4 PLOT myarrow 0 0 1 1 0 1 0 5 1 4 gt color green The display command from the plots package can show an array of plots gt with plots Warning the name changecoords has been redefined 288 e Chapter 5 Programming with Maple Graphics gt display array arrowi arrow2 arrow3 arrow4 gt scaling constrained Generating a Vector Plot Field The remainder of this section presents a number of solutions to the pro gramming problem of generating a vector field plot each more powerful than its predecessors T he first and simplest solution requires the input be in operator form This solution uses three utility procedures that process the domain information generate a grid of function values and place the information in a PLOT3D structure Example 2 The procedure domaininfo determines the endpoints and increments for the grid It takes as input the two ranges r1 and r2 and the two grid sizes m and n and returns the grid information as an expression sequence of four elements gt domaininfo proc ri
395. rom which the examples are taken is shown A system for computing with finite groups comprises the examples that follow Recall that a group is a set of objects together with an associative binary operation for which there is an unique two sided identity element and with respect to which each member of the underlying set possesses an unique inverse Examples of groups include e Systems of numbers using addition e Closed sets of invertible matrices all of the same size with a common ground field using multiplication linear groups e Closed sets of permutations bijective mappings on a set using com position permutation groups e Groups of points on elliptic curves Only finite groups are discussed 2 6 Interfaces and Implementations e 139 Table 2 3 Abstract Group Methods id Returns the group identity is Performs the binary operation on the group mul n ary version of inv Performs the unary inversion operation pow Computes integral powers of group elements eq Tests whether two group elements are equal member Tests membership in the group and in sets gens Returns a generating set for the group order Returns the order of the group elements Returns an enumeration of the group s members An Interface for Finite Groups First you must decide how to represent the generic group interface This is determined by the proposed use of the group objects Once again the design takes a group to be a reposito
396. rs subpackage Filters module option package export Text XML Maple WorksheetTerms local stopWords 178 VVVVVVVVVVVVVVVVVVVVVvVvVvVvVvVvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Chapter 2 Programming with Modules stopWords 4 The 48 most common English words s Wale tall an and are n as 5 at 5 be 3 been p but gt by A can a do n for E from 5 had has 5 have he his fu an is it s not 5 of on 3 or E She 5 that the their there they this to 5 Was n 5 We R Were What 5 which E Who z Will 5 with 5 would you 5 a few others thing E crue most y does g don t f NULL Text proc text string description compute the terms in a text string local words use StringTools in words map LowerCase Words text words remove type words stopWords map Stem words end use end proc XML proc xml description compute the terms in an XML document local t count rec rec proc xml t table local cm texts text others use XMLTools in if IsElement xml then cm ContentModel xml texts others selectremove IsText cm for text in texts do count 1 count t count text end do map procname others t end if end use end proc count 0 t rec xml t seq C tl i i end proc 1 count Maple proc expr descriptio
397. rve gt frame n gt POLYGONS 0 O 2 seq points t t 0 60 n gt COLOR RGB 1 0 n 1 0 n 1 0 n The animation not shown consists of six frames gt PLOT ANIMATE seq frame n n 1 6 Animation in Static Form The display command from the plots package can show an animation in static form gt with plots Warning the name changecoords has been redefined gt display PLOT ANIMATE seq frame n n 1 6 Graphical Object as Input The varyAspect procedure illustrates how a stellated surface varies with the aspect ratio Example 1 The procedure takes a graphical object as input and creates an animation in which each frame is a stellated version of the object with a different aspect ratio gt with plottools Warning the assigned name arrow now has a global binding 5 8 Animation e 303 gt varyAspect proc p gt local n opts gt opts convert args 2 nargs PLOT3Doptions gt PLOT3D ANIMATE seq stellate p n sqrt 2 1 gt n 1 4 gt op opts gt end proc Try the procedure on a dodecahedron 7 varyAspect dodecahedron scaling constrained The static version is gt display varyAspect dodecahedron gt scaling constrained Methods for Creating Animations The Maple library provides two methods for creating animations the animate command in the plots package and the display command with the ins
398. ry of data and computational services that you can query or invoke The Group signature used in the examples describes a computational model of abstract groups that supports the methods in Table 2 3 gt type Group module gt id mul inv gt eq member gt gens gt order elements zt A corresponding constructor for groups is easily written using the Record constructor introduced earlier For the examples in this section no default methods are introduced gt Group proc gt Record op type Group gt end proc This constructor does very little work on its own It relies on more spe cialized constructors to establish useful values or defaults for the methods exported You can write generic algorithms using this interface immediately A few simple examples are these routines for computing conjugates and commutators of group elements The conjugate of a group member a by a group member b is b7 ab This routine computes the conjugate of an element a by an element b in a group G gt Conjugate proc G a b gt description compute the conjugate of a gt group element by another 140 e Chapter 2 Programming with Modules gt use G inv G in gt b 10 a b gt end use gt end proc Since the group operations and inv in a generic group remain unas signed the following computation is done symbolically 1 4 gt C
399. s Example 3 shows how you can manipulate plotting data structures to embed 2 D plots into a 3 D setting Example 3 The following procedure creates part of the boundary of a 2 D graph of a gear like structure gt outside proc a r n VVVVVVV local pi p2 pi evalf cos a Pi n sin a Pi n p2 evalf cos a 1 Pi n sin a 1 Pi n if r 1 then pl p2 else pi r pi r p2 p2 end if end proc For example gt outside Pi 4 1 1 16 0 9881327882 0 1536020604 1 086946067 0 1689622664 1 033097800 0 3777683623 0 9391798182 0 3434257839 gt PLOT CURVES SCALING CONSTRAINED 0 35 0 3 0 25 0 2 83518 1 01306 1 08695 5 4 Programming with Plot Data Structures e 269 When you display the pieces together you produce a gear The op tion structure SCALING CONSTRAINED which corresponds to the option scaling constrained ensures that the gear appears circular gt points seq outside 2 a 1 1 16 a 0 16 gt PLOT CURVES points AXESSTYLE NONE SCALING CONSTRAINED Fill this object using the POLYGONS object Because Maple assumes that the polygons are convex you must draw each wedge shaped section of the gear as a triangular polygon gt a seq 0 0 outside 2 j 1 1 16 j 0 15 gt b seg 0 0 outside 2 j 1 1 16 j 0 15 gt PLOT POLYGONS a b AXESSTYLE NONE SCALING CONSTRAINED Adding STYLE PATCHNOGRID
400. s display seq translate box 0 0 sin u n Pi 4 Pi 5 u 1 n insequence true bottoms display seq translate box 0 0 1 u 1 n insequence true balls display seq translate ball O O 4 sin u 1 n 1 Pi 8 sin u n Pi Pi 10 u 1 n insequence true display springs tops bottoms balls style patch orientation 45 76 scaling constrained end proc VVVVVVVVVVVVVVVVV VV The code in the springPlot procedure uses the short names of com mands from the plots and plottools packages to improve readability In general it is recommended that you use long names To use this version of the springPlot procedure you must first load the plots and plottools packages gt with plots with plottools gt springPlot 6 gt display springPlot 6 For information on the commands in the plottools package related to graphics procedures see 5 5 Programming with the plottools Package 308 e Chapter 5 Programming with Maple Graphics 5 9 Programming with Color You can color each type of object in plot data structures and add colors to plotting routines The color option allows you to use a e Solid color by specifying a name RGB value or HUE value e Color function by specifying a Maple formula or function Try the following commands output not shown plot3d sin x y x 3 3 y 3 3 color red plot3d sin x y x 3 3 y 3 3 color COLOUR RGB 0 3 0 42
401. s or to a HASHTAB structure for Maple sparse RTABLEs The data block is either an object of type BINARY or memory allocated directly from the operating system s storage manager when the block would be too large to be allocated as a Maple data structure If the data block is a BINARY object the data pointer points to the first data word not to the object header The maple type field points to a Maple structure specifying the data type of the elements of an RTABLE of Maple objects If the RTABLE con tains hardware objects the maple type field points to the Maple NAME anything 416 e Appendix A Internal Representation and Manipulation The ind fn pointer points to either an empty expression sequence NULL or an expression sequence containing at least one indexing func tion and a pointer to a copy of the RTABLE structure The copy of the RTABLE is identical to the original except that its ind fn field refers to one less indexing function either NULL or another expression sequence containing at least one indexing function and a pointer to another copy of the RTABLE with one less indexing function again The attrib pointer points to an expression sequence of zero or more arbitrary attributes which can be set by the setattribute function and queried by attributes The flags field is a bit field containing the following subfields e data type 5 bits indicates one of several hardware datatypes or that a Maple data type as speci
402. s All option values must be strings or NULL except for COMPILE COMMAND and LINK COMMAND which must be procedures or NULL COMPILER This specifies the name of the compiler executable CFLAGS This specifies miscellaneous flags passed to the compiler COMPILE ONLY FLAG This flag indicates that the file is only to be compiled On most platforms it is c which causes the compiler to generate an object file but not link it to form any executable or library A separate command performs the linking In Microsoft Windows Maple uses the Microsoft Visual C Compiler 21f using the Microsoft C compiler the LINK COMMAND is set to NULL because the COMPILE COMMAND does both the compiling and linking 344 e Chapter 6 Advanced Connectivity COBJ FLAG This is the flag used by the compiler to specify the ob ject filename The compiler command uses COBJ FLAG FILE 0BJ EXT to name the object file On most platforms it is o LOBJ FLAG This is the flag used by the linker to specify the tar get library name The link command uses LOBJ FLAG FILE DLL EXT to name the shared library FILE This is the base name of the file to be compiled The file extension must not be included in this name For example to compile foo c set FILE foo and FILE EXT c When FILE is set to NULL the system generates a file name based on the function name FILE EXT This is the program file extension If you want to compile foo c set FI
403. s but not all For example you cannot evaluate an integral using hardware floating point arithmetic gt evaluate Int exp x 3 x 0 1 Error in evaluate unable to evaluate function Int in evalhf You can improve the evaluate procedure so that it traps such errors and tries to evaluate the expression using software floating point numbers instead gt evaluate proc expr uneval local result if Digits lt evalhf Digits then try return evalf evalhf expr catch end try else evalf expr end if VVVVVVVVV 230 e Chapter 4 Numerical Programming in Maple gt end proc gt evaluate Int exp x 3 x 0 1 The evaluate procedure provides a model of how to write procedures that use hardware floating point arithmetic whenever possible Newton s Method This section illustrates how to take advantage of hardware floating point arithmetic to calculate successive approximations using Newton s method You can use Newton s method to find numerical solutions to equations As section 1 2 describes if n is an approximate solution to the equation f x 0 then z441 given by the following formula is typically a better approximation Tn41 Xn Fa n Example The iterate procedure takes a function f its derivative df and an initial approximate solution x0 as input to the equation f x 0 The iteration procedure calculates at most N successive Newton itera tions until the difference betw
404. s expr expr Maple syntax name Length 4 or more The assigned expr field points to the assigned value of the name If the name has no assigned value this field is a null pointer not a pointer to NULL The next field points to an expression sequence of attributes of the name If there are no attributes this field points to the empty expression sequence NULL The remaining fields contain the characters making up the name stored 4 or 8 per machine word for 32 bit and 64 bit architectures respectively The last character is followed by a zero byte Any unused bytes in the last machine word are also zero The maximum A 2 Internal Representations of Data Types e 411 length of a name is 268 435 447 characters on 32 bit architectures and 34 359 738 351 characters on 64 bit architectures Next Statement NEXT Maple syntax next Length 1 Logical NOT NOT expr Maple syntax not expr Length 2 Logical OR OR exprl expr2 Maple syntax expri or expr2 Length 3 Procedure Parameter within an Expression PARAM integer Maple syntax name Length 2 This indicates a parameter when it appears within a procedure The integer is an index into the procedure param seq Several special PARAM structures exist PARAM 0 This represents the Maple symbol nargs the number of arguments passed when the procedure was called
405. s use the methods exported by the in stantiated group G gt use G in gt inv L 2 1 3 4 2 3 1 4 gt end use 3 2 1 4 It is useful to provide more specialized permutation group con structors for special kinds of groups Using the general constructor PermutationGroup and overriding some of the exported methods you can define several of these specialized constructors as follows The full symmetric group Sn on the n points 1 2 3 n is pro duced by specifying a particular set of generators for a given degree which must be specified as an argument to the constructor gt Symmetric proc n posint E description symmetric group constructor gt if n lt 2 then gt error argument must be an integer larger than 1 gt elif n 2 then gt PermutationGroup 2 2 1 D else gt PermutationGroup n 2 1 3 n 2 n 1 gt end if gt end proc This uses the fact that S is the two generator group Sn 12 1238 n for any integer n gt 3 A second special case is the class of dihedral groups Think of these as the groups of symmetries of regular plane polygons The symmetry group of the regular n gon is the dihedral group of degree n and order 2n it is denoted by Dn 1 1 yf 123456 P Use the following utility for reversing the order of a list 2 6 Interfaces and Implementations e 143 lreverse proc L list description reverse a list
406. s any ring theoretic properties such as being an integral domain or having unique factorization It merely spec ifies the admissible operations To compute with infinite rings and even large finite ones you do not require an enumeration of the elements of the ring You can focus entirely on the effectively computable operations that the ring must support Representing the ring Z of Integers One of the simplest examples of a ring that supports the computations is the ring of integers Z in its native Maple representation 132 e Chapter 2 Programming with Modules gt MapleIntegers module gt description the ring of integers gt export E es gt gcd unormal iszero gt isone zero one rem quo gt 6 a b gt as b gt tx a b gt a b gt 2 im i gt cj gt quo a b gt iquo a b gt rem a b gt irem a b gt gcd a b gt igcd a b gt unormal proc i integer gt if i O then gt 1 i gt else gt 1 i includes O gt end if gt end proc gt iszero i gt evalb i 0 gt isone i gt evalb i 1 zero 0 gt one 1 gt end module This is a software representation of the ring of integers The unit normal mapping is represented by the exported procedure unormal It returns an expression sequence of length two whose first member is a unit and whose second member is the unit norm
407. s are all printable Leading spaces are added to achieve the appropriate alignment No trailing spaces are generated A newline n character is sent at the end of each line The writeChar function terminates rendering by returning TRUE The writeAttrib parameter defines a call back function to which attribute information is passed The attribute passed to writeAttrib applies to all characters passed to writeChar until another attribute is passed to writeAttrib The possible attribute values are FN NORMAL Normal text mode FN BOLD Boldfaced text mode This can be used for key words in Maple procedures in example output and for section headings FN ITAL Italic text mode This can be used for calling sequence parameter names FN UNDER Underlined text mode This is used for links to other topics The format of this text is JinkReference 4 4E link Tezt where linkReference is the topic to which the link refers and link Text is the link text displayed in the help page It is equivalent to the HTML code lt A HREF linkReference gt linkText lt A gt The writeAttrib function can be omitted by passing NULL for the writeAttrib parameter The width parameter indicates the width in characters to which the help information is formatted The data parameter is an arbitrary user supplied value It is the first argument passed to the call back functions 388 e Chapter 6 Advanced Connectivity The MapleHelp function returns NULL if
408. s are dense the simplest being the rectangular Other dense formats include upper triangular and band where storage is allocated only for the upper triangle or a band of elements respectively To the user rectangular tables manifest themselves as objects of type Array Matrix Vector row and Vector column Note that an Array is not the same thing as an array For definitions refer to Array and array Note Unlike the array command the Array command creates a rectangular table which is described in the following subsection A 4 Portability e 427 Table A 2 Select Supported Maple Platforms Hardware Operating System Intel Pentium Based PC Microsoft Windows Linux Apple Power Macintosh Mac OS Sun SPARC Sun OS Solaris Silicon Graphics Iris IRIX Hewlett Packard PA RISC HP UX IBM RS 6000 AIX DEC Alpha Digital UNIX Compaq Tru64 A 4 Portability The Maple kernel and the command line interface are not tied to any one operating system or hardware architecture The Maple kernel is designed to be portable to any system which supports a C compiler a flat address space and a 32 bit or 64 bit word size Table A 2 lists some platforms on which Maple is supported refer to the installation instructions for a list of currently supported operating system versions The majority of the source code comprising the kernel is the same across all platforms Extensive use of macros and conditional compila tion take care of p
409. s none A Smith Chart You can use the commands in the plottools package to create graphs such as a Smith Chart which is used in microwave circuit analysis gt VVVVVVVVVVVVVV VV smithChart proc r local i a b c a PLOT seq plottools arc i r 4 0 i r 4 0 Pi i 1 4 plottools arc 0 r 2 r 2 Pi arcsin 3 5 3x Pi 2 plottools arc O r r Pi Pi arcsin 15 17 plottools arc 0 2 r 2 r Pitarcsin 3 5 Pitarcsin 63 65 plottools arc O 4 r 4 r Pi arcsin 15 17 Pi arcsin 63 65 25 b plottools transform x y gt x y1 a c plottools line 0 0 2 r 0 plots display a b c axes none scaling constrained args 2 nargs end proc 5 5 Programming with the plottools Package e 281 The following is a Smith Chart of radius 1 gt gmithChart 1 Exercise 1 Make a Smith Chart by building appropriate circular arcs above the axes 2 Create a copy reflected on the axis using the plottools transform procedure 3 Add a final horizontal line The parameter r denotes the radius of the largest circle 4 Modify the smithChart procedure to add text to mark appropriate grid markers Modifying Polygon Meshes You can construct new plot tools that work like those in the plottools package Example 5 Create a procedure that removes the inside of a single face of a polygon Then apply it to every face of a polygon gt cutoutPoly
410. s of GRID or MESH output type The MESH output type is used for parametric surfaces or surfaces that use alternate coordinate systems for example gt chessplot3d 4 3 x sin y x 1 2 Pi y 0 Pi gt coords spherical style patch gt lightmodel light4 5 10 Conclusion In this chapter you have learned how to make graphics procedures based on the plot and plot3d commands as well as the commands found in the plots and plottools packages However for greater control you must create PLOT and PLOT3D data structures directly these are the primitive 5 10 Conclusion e 317 specifications of all Maple plots Inside PLOT data structures you can specify for example point curve and polygon objects Inside PLOT3D data structures you can specify the objects used in PLOT structures as well as for example grids of values and meshes of points You have also learned how to handle plot options create numerical plotting procedures work with grids and meshes manipulate plots and animations and apply non standard coloring to graphics 318 e Chapter 5 Programming with Maple Graphics 6 Advanced Connectivity In This Chapter e Code Generation e External Calling Using Compiled Code in Maple e OpenMaple Using Maple in Compiled Code Code Generation The CodeGeneration package provides utilities for translating Maple code into other programming languages such as C Fortran Java MATLAB and Visual Basic The resulting
411. s used here for illustrative purposes The document is a raw piece of data that can be identified as a whole Each document is equipped with a document ID that is an identifier that is used as a handle for the document data The document ID is small while the document containing data may be arbitrarily large For searching documents are organized into corpora A corpus is a collection of documents that can be searched collectively using search terms A query is a list of search terms A search term is typically a natural language word or phrase The purpose of a search is to identify among documents in a given corpus those which match the search terms Thus search input consists of a corpus to search and one or more search terms The output is a ranked list of documents that the search criteria judge to be relevant to the search terms For this example consider the following simple corpus of documents Each document is a short string of text which serves as both the document ID and the document data gt doci The mathematician s patterns like the painter s or the poet s must be beautiful the ideas like the colors or the words must fit together in a harmonious way Beauty is the first test there is no permanent place in this world for ugly mathematics Hardy doc2 God does arithmetic Karl Friedrich Gauss doc3 Anyone who cannot cope with mathematics is not fully human At best he is a tol
412. se enter an expression b readstat Differentiate with respect to printf The derivative of a with respect to a is an a b diff a b end proc VVVVVV Reading Tabular Data The readdata command reads TEXT files containing tables of data For simple tables this is more convenient than writing a procedure by using a loop and the fscanf command Use the following syntax to call the readdata command readdata fileldentifier dataType numColumns The fileIdentifier is the name or descriptor of the file from which readdata reads the data The dataType must be one of integer or float or you 3 5 Input Commands e 205 can omit it in which case readdata assumes float If readdata needs to read more than one column you can specify the type of each column by using a list of data types The numColumns argument indicates how many columns of data are to be read from the file If you omit numColumns readdata reads the number of columns specified by the number of data types that you spec ified one column if you did not specify any data Type If Maple reads only one column readdata returns a list of the values read If Maple reads more than one column readdata returns a list of lists each sublist of which contains the data read from one line of the file If you call readdata with a filename and that file is not open Maple opens it in READ mode as a TEXT file Furthermore if you call readdata with a filename
413. sed to explicitly pass intermediate values of a computation to your code and to return a value to Maple If no callBackCallBack function is provided any attempt to exe cute the Maple callback function produces an error reported using the errorCallBack function or textCallBack function Query Interrupt Call back Function The queryInterrupt call back function is called to allow the user to halt the computation This function is called before each Maple statement is executed In general this occurs hundreds of times per second For some operations notably large integer manipulations the queryInterrupt function is called every few seconds M BOOL M DECL queryInterrupt void data To halt the computation the function must return TRUE To continue the computation the function must return FALSE 384 e Chapter 6 Advanced Connectivity If no queryInterrupt function is provided computations cannot be interrupted Stream Call back Function The Maple math engine and the Open Maple API communicate using logical streams The Maple engine in terprets a stream as an unevaluated call to a function with a name that begins with INTERFACE Data is sent on a stream either implicitly by various operations for example the Maple print function sends its data on the INTERFACE PRINT stream or explicitly by a call to the Maple streamcall function There are several predefined streams In Open Maple most streams map to one of
414. sentations of Data Types e 417 Save Statement SAVE expr seq Maple syntax save expr expr Length 2 The Maple save statement The expression sequence gives a list of names of objects to save and either a file name or repository name in which to save them The file or repository name can be specified as a NAME or STRING Series SERIES exprl expr2 integer expr3 integer Maple syntax none Length 2n 4 2 This is the internal representation of a series in Maple There is no input syntax for a series one can only arise from a computation The first expression has the general form x a where x denotes the variable of the series used to do that expansion and a denotes the point of expansion The remaining entries are interpreted as pairs of coefficients and expo nents The exponents are integers not pointers to integers or immediate integers The exponents appear in increasing order A coefficient 0 1 a function call to the function 0 with parameter 1 is interpreted specially by Maple as an order term Set SET expr seq attrib expr Maple syntax expr expr Length 2 or 3 with attributes The entries in the set s expression sequence are sorted in order of increasing memory address This is an arbitrary but consistent order necessary for efficiently working with sets Statement Sequence STATSEQ statl
415. set of generators to use Thus you could compute the same set using the set 12 23 n 1 n of transpositions instead gt Dimino G 2 1 3 4 1 3 2 4 1 2 4 3 2 1 3 4 2 3 1 4 L 2 3 4 3 2 1 4 2 3 4 1 3 2 4 1 1 3 4 2 3 1 4 2 3 4 1 2 4 3 1 2 2 4 1 3 4 2 1 3 3 4 2 1 14 3 2 1 4 1 2 3 1 4 2 3 3 1 2 4 11 3 2 4 4 1 3 2 1 4 3 2 4 2 3 1 2 4 3 1 1 2 4 3 2 1 4 3 You still need to pass the group object G for Dimino to access its operations Dimino s algorithm is a useful fallback algorithm but many finite groups of interest can be enumerated more efficiently using specific knowl edge of their structure For small examples the implementation presented here suffices but a well optimized implementation that takes advantage of fast arithmetic for group elements is required Representing Subgroups A subset of a group that forms a group for larger groups using the operations inherited from the group by restric tion is called a subgroup For example the 3 member set 123 132 1 is a subgroup of the full symmetric group S3 of degree 3 which has 6 members There are many approaches for representing of subgroups One way is to represent a subgroup H of a known group G by specifying a generating set for H and copying the computational services from the representat
416. sets the default type to integer 6 1 Code Generation e 323 and the output option specifies that a string is returned In this case the output is assigned to the variable s gt g proc x y Z gt return x y y ztx z gt end proc gt s CodeGeneration C g defaulttype integer output string s int g int x int y int z return x y y z x z A Example 3 The following example demonstrates the translation of a procedure to Fortran Because Fortran 77 is case insensitive the variable X is renamed to avoid a conflict with the variable x gt h proc X numeric x Array numeric 5 7 gt return X x 5 x 6 x 7 gt end proc gt CodeGeneration Fortran h Warning The following variable name replacements were made cg x doubleprecision function h X cg doubleprecision X doubleprecision cg 5 7 h X cg 5 cg 6 cg 7 return end The Intermediate Code All Maple input to CodeGeneration transla tors is processed and converted to an inert intermediate form known as the intermediate code The intermediate code is the basic object upon which all CodeGeneration translators operate For information about the inter mediate code refer to CodeGeneration General IntermediateCodeStructure The names appearing in intermediate code expressions are members of the subpackage CodeGeneration Names Error and warning messages issued from CodeGeneration package functions som
417. sh keys that are identical in the first 18 bits When a hash chain with unused bits overflows it is split into two This may require creating a subdirectory with two children or doubling the size of the hash chain s parent directory In either case another bit from the hash key is introduced for indexing This bit is used to divide the elements of the old chain into the two new chains If the hash chain has no unused bits for indexing the chain grows as needed This growth occurs only if many elements are inserted with identical hash keys The Simplification Table By far the most important table maintained by the Maple kernel is the simplification table All simplified expressions and subexpressions are stored in the simplification table The main purpose of this table is to en sure that simplified expressions have a unique instance in memory Every expression which is entered into Maple or generated internally is checked against the simplification table and if found the new expression is dis carded and the old one is used This task is done by the simplifier which 424 e Appendix A Internal Representation and Manipulation recursively simplifies applies all the basic simplification rules and checks against the table Garbage collection deletes the entries in the simplifica tion table that cannot be reached from a global name or from a live local variable The task of checking for equivalent expressions within thousands of subexpr
418. signment multiple 288 assignment statements 399 assume 21 37 assumptions 21 atomic 60 audience 1 automatic simplification 20 429 backdrops 304 BesselJ 232 Beta 226 binary 399 BINARY internal data structure 399 binding list 105 break 48 399 BREAK internal data structure 399 buffered files 190 flushing 217 C notes 221 call by reference 339 ANYTHING 339 CALL ONLY 339 RETURN ONLY 339 callback function 383 Cartesian product sequence of sets 22 CATENATE internal data struc ture 400 classic worksheet 2 close 194 CodeGeneration 319 329 calling functions 320 Define command 327 extensibility 324 329 intermediate code 323 intermediate form 325 language definition 327 language definition model 328 Printer module 325 translation process 321 using a new language 329 430 e Index coeff 397 COLOR 308 HUE 259 POLYGONS 308 RGB 262 color 255 308 adding 312 315 color tables 309 310 gray scale 311 HUE 310 columns printing 187 215 reading 204 command line version 2 commands long names of 252 compiled code using in Maple 329 373 using Maple in 373 390 Complex 400 COMPLEX internal data struc ture 400 complex numbers 236 imaginary unit 35 computing areas 95 circumferences 95 concatenation 70 400 constants defining numeric 238 constructors 108 CONTROL internal data struc ture 400 control flow of 397 conversions 341 c
419. simple it is defined with option inline gt Entries proc T gt description return a set of simple table entries 144 e Chapter 2 Programming with Modules gt option inline gt map op entries T gt end proc Here is the code for Dimino s algorithm gt Dimino proc G Group description enumerate the elements of a finite group local s g ord elements i j prev_ord rep_pos elt addElt gens if nargs gt 1 then gens args 2 else gens G gens end if if not type gens set list then error no generating set specified end if if nops gens O then trivial group return 1 G id end if addElt proc h ord 1 ord elements ord h end proc elements table ord 0 addElt G id Handle the first cyclic subgroup s gens 1 8 stile not G eq g G id do addElt g g G g s end do userinfo 1 Dimino finished first cycle order is ord for i from 2 to nops gens do userinfo 1 Dimino Adding generator number i s 7 gens i if not G member s Entries elements then prev ord ord addElt s for j from 2 to prev ord do addElt G elements j 1 s end do VVVVVVVVVVVVVVVVVVVvVVVvVvvvvvvvvvvvvvvvvvvvvvvvvVvevw rep pos 1 prev ord 2 6 Interfaces and Implementations e 145 for s in gens 1 i do elt G mul elemen
420. t an integer and a floating point number and then closing the file However readdata does not provide the precise parsing control that you may need in some cases For this use fscanf directly The next section expands on the basic concepts of the Maple I O library 190 e Chapter 3 Input and Output 3 2 File Types and Modes Most of the Maple I O library commands operate on files In this chapter the term file is not limited to a disk file It can include the default output stream to a terminal or worksheet output region Almost any operation that you can perform on a real file you can perform on a data output stream to the terminal or worksheet Buffered Files versus Unbuffered Files The Maple I O library can use two file types buffered STREAM and unbuffered RAW Maple uses these files similarly Buffered Files e When buffering a lot of I O buffered file operations are usually faster e Maple collects characters in a buffer and writes them to a file when the buffer is full or the file is closed Changes made in Maple may not appear on disk until later e In general you should use buffered files They are used by default with most I O library commands Raw Files e Raw files are useful when examining the properties of the underlying operating system such as the block size on the disk Identifiers Commands that provide information about I O status use the identifiers STREAM and RAW to indicate buffered and unbuffe
421. t copy tableO gt copy array 1 3 Using covered copy has its profiling information stored gt covered nonzero From the output of showstat gt showstat copy copy proc A local X Calls Seconds PROC 2 0 000 1 2 0 000 2 0 0 000 3 2 0 000 4 0 0 000 5 2 0 000 6 0 0 000 copy p Words 620 50 ol if type A rtable then rtable rtable indfns A rtable dims A A rtable options A readonly false elif type A table then if type A name then map proc args end proc eval A else map proc args end proc A end if elif type A procedure then subs X X eval A elif type A moduledefinition T 8 0 0 end proc 0 000 0 000 0 0 2 3 Packages e 93 module then error cannot copy a module or module definition else A end if it appears that the rtable case statement 2 has not been called Add a test for the rtable case gt copy rtable gt showstat copy copy proc A local X Calls Seconds PROC 3 0 000 1 3 0 000 2 1 0 000 3 2 0 000 4 0 0 000 5 2 0 000 6 0 0 000 7 0 0 000 8 0 0 000 end proc Words 791 54 1671 0 0 if type A rtable then rtable rtable indfns A rtable dims A A rtable options A readonly false elif type A table then if type A name then map proc args end proc eval A else map pro
422. t i itt gt end if gt end do gt Aljl x gt eval A gt end proc Warning i is implicitly declared local to procedure partition Warning j is implicitly declared local to procedure partition Warning x is implicitly declared local to procedure partition Maple declares i j and x local because the partition procedure con tains explicit assignments to those variables The partition procedure also assigns explicitly to A but A is a parameter not a local variable Because you do not assign to the name eval Maple makes it the global name which refers to the eval command After partitioning the array a in the following all the elements less than 3 precede 3 but they are in no particular order similarly the elements larger than 3 come after 3 gt a array 2 4 1 5 3 a 2 4 1 5 3 gt partition a 1 5 2 1 3 5 4 The partition procedure modifies its first argument changing a gt eval a 2 1 3 5 4 The final step in assembling the quicksort procedure is to insert the partition procedure within an outer procedure The outer proce dure first defines the partition subprocedure then partitions the array In general avoid inserting one procedure in another However you will 10 e Chapter 1 Procedures Variables and Extending Maple encounter situations in following sections of this chapter in which it is nec essary to nes
423. t equal Other Operators binary infix composition QQ binary infix power composition unary postfix factorial Note that the operators and are treated as unary operators that represent negation and inversion respectively Subtraction is represented internally in Maple by composing addition and negation a b a b Similarly for division Therefore it is not necessary to override the binary infix operators and Note also that an expression such as a b c d is treated as though it were parenthesized as a b c d so that each op erator is binary For example 108 e Chapter 2 Programming with Modules gt use F in gt a tb Gc cd gt a b c d gt end use F F F a b c d F a F F b c d 2 5 Modeling Objects A principle application of modules is modeling objects An object is some thing that has both state and behavior Many programming languages provide support for programming with objects Some of these are called object oriented popular examples include Smalltalk CLOS Java M and C Maple is not an object oriented programming language but it does support programming with objects In Maple an object can be repre sented by a module The state of the object module is stored in the local and exported data variables The behavior of the object is represented by procedures assigned to the exported variables In Maple procedures stand on an equal footing w
424. t procedures Since the next step is to partition each of the two subarrays by calling quicksort recursively partition must return the location of the element which divides the partition Example This example illustrates the role of nested procedures The outer procedure quicksort contains the inner procedure partition gt quicksort proc A array 1 numeric m integer n integer local partition p partition proc m n i m j n x 7 ALjl while i lt j do if A i x then A 3 A i ji 3 15 A i ALjl else i iti end if end do A j x pj end proc if m lt n then if m gt n there is nothing to do p partition m n quicksort A m p 1 quicksort A p 1 n end if VVWVVVVVVVVVVVVVVVVVVVVVVVVov eval A gt end proc Warning i is implicitly declared local to procedure 4 s gt partition Warning partition Warning x partition j is implicitly declared local to procedure is implicitly declared local to procedure gt a array 2 4 1 5 3 a 2 4 1 5 3 1 1 Nested Procedures e 11 gt quicksort a 1 5 1 2 3 4 5 gt eval a 1 2 3 4 5 Maple determines that the A and p variables in the partition sub procedure are defined by the parameter and local variable respectively from the outer quicksort procedure and everything works as planned The variable A can be passed as a parameter to the partition s
425. t to line wrapping at interface screenwidth characters e The o Ax and ZX formats use the underlying implementa tion that the hardware vendor provides As a result output of octal and hexadecimal values is subject to the restrictions of the operating system Writing Tabular Data The writedata command writes tabular data to TEXT files In many cases this is more convenient than writing an output procedure by using a loop and the fprintf command Call the writedata command in the following manner writedata fileIdentifier data dataType defaultProc The fileIdentifier is the name or descriptor of the file to which writedata writes the data If you call writedata with a filename and that file is not yet open Maple opens it in WRITE mode as a TEXT file Furthermore if you call writedata with a filename the file automatically closes when writedata returns 216 e Chapter 3 Input and Output The data must be a vector matrix list or list of lists e If the data is a vector or list of values writedata writes each value to the file on a separate line e If the data is a matrix or a list of lists of values writedata writes each row or sublist to the file on a separate line with tab characters separating the individual values The data Type is optional and specifies whether writedata is to write the values as integers floating point values the default or strings e If you specify integer
426. t user defined objects must be created by using a constructor Most of the object examples in this section are defined by specifying a constructor for the object Example Complex Number Constructor A simple example of an object is the following representation of a complex number gt MakeComplex proc real imag gt if nargs lt gt 2 then gt error real and imaginary parts are required gt end if gt module gt description a complex number gt local real_part imag_part gt export re im abs arg gt gt real_part imag_part real imag gt re gt real_part gt im gt imag part gt abs gt sqrt reO 2 inO 2 gt arg gt arctan imO re gt end module gt end proc To create the complex number 1 i use the constructor gt z MakeComplex 1 1 z module local real part imag part export re im abs arg description a complex number end module The procedure MakeComplex is a constructor for complex number ob jects The value returned by the procedure is the instantiation of the module whose definition appears in the body of MakeComplex The local state of the complex number is represented by the local variables of the module real_part and imag_part The behavior is rep resented by the exported procedures re im abs and arg 110 e Chapter 2 Programming with Modules The exports of a module that represents an obj
427. tInput sin x x Input limit point 0 30 e Chapter 1 Procedures Variables and Extending Maple In the following output the user first tries to use the number 1 as the limit variable Because 1 is not a name GetLimitInput requests another limit variable gt GetLimitInput exp u x Input limit variable 1 A variable is required received 1 Please re input limit variable x Input limit point infinity L OC Information You can specify a number of options to readstat For more information see Reading Maple Statements on page 204 Converting Strings to Expressions For greater control of how and when Maple evaluates user input to a pro cedure use the readline command instead of readstat The readline command reads the input as a string and the parse command converts the string to an expression The string must represent a complete expres sion gt s a x 2 1 s akx 2 1 gt y parse s y az 41 When you parse the string s you get an expression In this case you get a sum gt type s string type y 0 true true 1 5 Extending Maple e 31 The parse command does not evaluate the expression it returns You must use eval to evaluate the expression explicitly In the following out put the variable a is not evaluted to its value 2 until you explicitly use the eval command gt a i 2 a 2 gt z parse s z az 41 gt eval z 222 1 Information For
428. tatements ss 204 Reading Tabular Data len 204 3 6 Output Commands 2 22 llle 206 vi e Contents Configuring Output Parameters Using the interface Com mand a a ns M ida ck 206 One Dimensional Expression Output 206 Two Dimensional Expression Output 207 Writing Maple Strings toa File 210 Writing Bytes to a File ooa aaa 211 Formatted Output e 211 Writing Tabular Data 215 Flushing a Buffered File lll 217 Redirecting the default Output Stream 217 3 7 Conversion Commands oaoa aa a 218 Conversion between Strings and Lists of Integers 218 Parsing Maple Expressions and Statements 219 Formatted Conversion to and from Strings 220 3 8 Notes to C Programmers oaoa 221 3 9 Conclusion uf uode OS he ek Sea IUS 222 Numerical Programming in Maple 223 Floating Point Calculations 223 In This Chapter anie iir aosiy ee ed weed RU ES Ia 223 Why Use Numerical Computations 223 4 1 The Basics of evalf 224 4 2 Hardware Floating Point Numbers 227 Newton s Method 0000005048 230 Computing with Arrays of Numbers 232 4 8 Floating Point Models in Maple 235 Software Floats suene oO Se ee aes 235 R ndo Error ou iuo Ponce pa shar BO ae Ses 236 4 4 Extending the evalf Comm
429. te Only portions of the source code for this package are shown here The fully commented source code can be found in the samples AdvPG shapes directory of the Maple installation Source Code Organization The Shapes package is organized into sev eral source files shapes mpl point mpl segment mpl circle mpl square mpl triangle mpl 96 e Chapter 2 Programming with Modules To avoid platform specific differences a flat directory structure is used All the source files reside in the same directory or folder ShapesPackage To define the module that implements this package use the Maple pre processor to include the remaining source files at the appropriate point in the master source file shapes mpl A number of include directives are included in shapes mpl such as include point mpl include segment mpl Splitting a large project into a number of source files makes it easier to manage and allows several developers to work on a project simultane ously The source file is divided into shape specific functionality Most of the functionality for points for instance is implemented by source code stored in the file point mp1 Package Architecture The Shapes package is structured as a module with a number of exported procedures Individual submodules provide 2 3 Packages e shape specific functionality for each shape type supported by the package Each of these shape specific submodules is st
430. teger of arbitrary preci sion For a complete description of the integer representation including positive integers see the following section Positive Integer INTPOS GMP integer Maple syntax 123 Length 2 or more This data structure represents a positive integer of arbitrary precision Integers are represented internally in a base equal to the full word size of the host machine On 32 bit architectures this base is 2 On 64 bit architectures the base is 2 Integers in this range use the GNU Multiple Precision Arithmetic GMP library for integer arithmetic Small integers are not represented by data structures at all Instead of a pointer to an INTPOS or INTNEG structure a small integer is represented by the bits of what would normally be a pointer The least significant bit is 1 which makes the value an invalid pointer since pointers must be word aligned Such an integer is called an immediate integer The range of integers representable in this way is 1 073 741 823 to 1 073 741 823 that is about 10 on 32 bit architectures and 4 611 686 018 427 387 903 to 4 611 686 018 427 387 903 that is about 4 1018 on 64 bit architectures These numbers may not seem small but consider that the Maple maximum integer magnitude is about 22 147 483 488 on 39 bit architectures and 2274 877 906 688 on 64 bit architec tures Less Than or Equal LESSEQ exprl expr2 Maple sy
431. tes on Code Translation Because the Maple language differs sub stantially from the target languages supported by CodeGeneration the translation capabilities are limited and the generated output may not be the exact equivalent of the input code The CodeGenerationDetails help page provides more information on the translation process and hints on how to take full advantage of the facilities In addition there are help pages containing notes relevant to specific languages For de tails refer to the help pages for the corresponding language for example CodeGeneration General CDetails Translation Process The CodeGeneration functions recognize only a subset of the Maple types These are listed on the CodeGenerationDetails help page The Maple types are translated to appropriate types in the target language Compatibility of types is checked before operations are translated and type coercions are performed if necessary The CodeGeneration func tions attempt to deduce the type of any untyped variable You can exercise greater control over type analysis and deduction by using the 322 e Chapter 6 Advanced Connectivity coercetypes declare deducetypes and defaulttype options as de scribed on the CodeGenerationOptions help page The CodeGeneration functions can translate a subset of the Maple functions T hese are listed on the CodeGenerationDetails help page Some functions are translated only to certain target languages For more infor
432. text gt end proc gt DocumentTerms doci The mathematician s patterns like the painter s or the poet s must be beautiful the ideas like the colors or the words must fit together in a harmonious way Beauty is the first test there is no permanent place in this world for ugly mathematics Using this construct an inverted term occurrence index gt BuildIndex proc corpus list string local docterms corpusterms index term doc use StringTools in Construct all terms in the corpus docterms table seq doc DocumentTerms doc doc corpus corpusterms union seq op docterms doc doc corpus Map each term to the documents containing it index table for doc in corpus do for term in docterms doc do if assigned index term then index term index term union 1 doc else index term doc end if end do end do end use Return the table eval index 1 VVVVVVVVVVVVVVVVVVV VV gt Index BuildIndex doc 1 9 gt nops indices Index 162 e Chapter 2 Programming with Modules 104 Searching is simple using this index Search for
433. th Modules Because the stop word the has been removed from the index it returns no matches This is also a user interface enhancement because queries can contain stop words without affecting the results gt Search mathematical beauty The mathematician s patterns like the painter V s or the poet s must be beautiful the ideas like t V he colors or the words must fit together in a har V monious way Beauty is the first test there is no V permanent place in this world for ugly mathem atics Anyone who cannot cope with mathem atics is not fully human At best he is a tolerabl e subhuman who has learned to wear shoes bat he and not make messes in the house I don t believe in mathematics The most bea utiful thing we can experience is the mysterious It is the source of all true art and science Gol d does not care about our mathematical difficult V ies He integrates empirically gt nops The new process returns many more documents relevant to the query The Vector Space Model It is possible to model the search by using a vector space model of the term document indices for corpora After collecting the relevant search terms for a corpus represent each document by a vector in a Euclidean space E where n is the number of distinct terms in the corpus Each coordinate in this vector space represents a term in the corpus First determine an ordering of the corpus
434. the call back functions described in this subsection Streams are usually used to output information as is done by the INTERFACE PRINT stream but some streams can be used to request in formation as well For example the INTERFACE READLINE stream is used to request user input during execution of a Maple procedure In Open Maple INTERFACE READLINE is mapped to the readLineCallBack In addition to the predefined streams a Maple user or an OpenMaple developer can create streams by passing a Maple expression of the form INTERFACE streamName arguments to the streamcall function If the stream returns a result the streamcall function returns that result You can also send to a stream by passing such an expression to the Maple print function or by allowing such an expression to be the result of a computation but in that case no result can be passed on the stream back to Maple The streamCallBack function is called when Maple sends output as a stream that is not explicitly handled by the OpenMaple API char M DECL streamCallBack void data char name M INT nargs char args e The name parameter specifies the name of the stream without the INTERFACE prefix e The nargs parameter indicates the number of arguments passed If no arguments are passed nargs is zero e The args parameter points to an array of string pointers one for each argument passed Each string is a line printed 1 D Maple expressi
435. the following MakeIteration procedure recog nizes the parameter f as a procedure you must use the eval command to evaluate it fully gt MakeIteration proc f procedure gt x gt x eval f D eval f gt end proc gt g i x gt x cos x g x z cos x gt Sirlsaac MakeIteration g x x cos x Sirlsaac x x Emo 1 2 Procedures That Return Procedures e 17 Note that SirIsaac is independent of the name g Thus you can change g without breaking SirIsaac You can find a good approximate solution to z cos x 0 in a few iterations gt x0 1 0 x0 1 0 gt to 4 do x0 Sirlsaac x0 end do x0 0 7503638679 x0 0 7391128909 x0 0 7390851334 xO 0 7390851332 A Shift Operator Consider the problem of writing a procedure that takes a function f as input and returns a function g such that g a f x 4 1 You can write such a procedure in the following manner gt shift f procedure gt x gt f x 1 Try performing a shift on sin x gt shift sin x gt sin x 1 Maple lexical scoping rules declare the f within the inner procedure to be the same f as the parameter within the outer procedure Therefore the shift command works as written The previous example of shift works with univariate functions but it does not work with functions of two or more variables gt h x y gt x y hi z y gt zy gt hh
436. the fourth argument by calling the hasoption procedure e The next section of dropshadowplot determines the z value of the base Note that it checks for input in operator form e The remaining sections create the correct plotting objects which rep resent the two types of contour plots The dropshadowplot procedure embeds the 2 D contour plot into 3 D space using the transformation x y gt x y minz from R R3 Finally it displays the two plots in one 3 D plotting object 278 e Chapter 5 Programming with Maple Graphics Note You can provide an alternate number of levels or specify the pre cise contour locations by using the contours option Thus gt dropshadowplot expr x 3 3 y 3 3 z 4 3 gt filled true contours 2 1 0 1 2 produces a plot similar to the one just generated except that it pro duces 5 contours at levels 2 1 0 1 and 2 Creating a Tiling The plottools package provides a convenient environment for writing plotting programs For example you can draw circular arcs in a unit square gt with plots with plottools Warning the name changecoords has been redefined Warning the assigned name arrow now has a global binding gt a rectangle 0 0 1 1 gt arc 0 0 0 5 0 Pi 2 gt arc 1 1 0 5 Pi 3 Pi 2 gt b rectangle 1 5 0 2 5 1 gt arc 1 5 1 0 5 Pi 2 0 gt arc 2 5 0 0 5 Pi 2 Pi You must use display from the plots p
437. the terms mathe matical and beauty gt Search proc query list string global Index local results term results for term in query do if assigned Index term then results results union Index term end if end do results gt end proc gt Search mathematical beauty VVVVVVV VV God does not care about our mathematical diff iculties He integrates empirically gt nops There are several problems with this index One problem is that the index is quite large relative to the size of the corpus Many words that occur in the corpus convey little or no information about the content of the documents in which they occur This can lead to irrelevant results especially for poorly chosen search terms gt nops Search the 4 This problem can be solved by removing unimportant terms from the index This set of unwanted terms is called a stop list gt STOP_WORDS aU A 3 y an R the in to gt Which 3 that E is E and A qe E it of n A gt All 5 can does E don t j most 5 true gt thing A second problem is synonymy in the corpus That is many distinct terms in the corpus have the same meaning in the context of searching For example searching for the term mathematics should return documents 2 7 Extended Example A Search Engine e 163 that contain the terms mathematical math and
438. then debugopts traceproc s elif type s module then add procname e e 7 select type exports s instance W module procedure else error only procedures and modules can be profiled end if end proc Subroutine to recognize non builtin procedures userprocs proc s type s procedure and not type s builtin end proc Subroutine to recognize profiled procedures traced proc s debugopts istraceproced s end proc Determine which procedures have coverage information covered proc local 8 S anames S select userprocs S S select traced S if nargs gt 0 and args 1 nonzero then S select s gt evalb s 1 1 lt gt 0 S elif nargs gt 0 then error optional argument is the name nonzero end if map parse map convert S string end proc end module VVVVVVVVVVVVVVVVVVVVVVVVVVV VV VV VV VV VV VV VV How the Package Works The export profile is an interface to the package s principal facility instrumenting procedures and modules for coverage profiling It returns the number of procedures instrumented and calls the private subroutine rprofile to do most of the work 1 The procedure rprofile accepts a name s as an argument If s is the name of a procedure rprofile simply calls debugopts to instrument the procedure assigned to that name Otherwise if s is t
439. then feof still returns false You encounter the end of file only after you attempt another read Determining File Status The iostatus command returns detailed information about all the files currently in use Call the iostatus command with the following syntax iostatus The iostatus command returns a list The list contains the following elements iostatus 1 The number of files that the Maple I O library is cur rently using 196 e Chapter 3 Input and Output iostatus O 2 The number of active nested read commands when read reads a file which itself contains a read statement iostatus 3 The upper bound on iostatus 1 iostatus 2 that the underlying operating system imposes iostatus n forn gt 3 A list giving information about a file currently in use by the Maple I O library When n gt 3 the lists that iostatus n return each contain the following elements iostatus n 1 The file descriptor which fopen or open returned iostatus n 2 The filename iostatus O n 3 The file kind STREAM RAW or DIRECT iostatus n 4 The file pointer or file descriptor that the underlying operating system uses The pointer is in the form FP integer or FD integer iostatus O n 5 The file mode READ or WRITE iostatus O n 6 The file type TEXT or BINARY Removing Files Many files are solely for temporary use Because you do not need these files in future Maple sessio
440. thmetic packages the basic simplifier and retrieval of library functions 4 Data Structure Manipulation Functions These are like the alge braic functions but instead of working on mathematical objects such as polynomials or sets they work on data structures such as expres sion sequences sums products or lists Examples of such functions are operand selection op operand substitution subsop searching has and length determination length 5 General Service Functions Functions in this group are at the lowest hierarchical level That is they may be called by any other function in the system They are general purpose and not necessar ily specific to symbolic or numeric computation Some examples are storage allocation and garbage collection table manipulation internal I O and exception handling Flow of Control The flow of control need not remain internal to the Maple kernel In many cases where appropriate a decision is made to call functions written in Maple and residing in the library For example many uses of the expand 398 e Appendix A Internal Representation and Manipulation function are handled in the kernel However if an expansion of a sum to a large power is required then the internal expand calls the external Maple library function expand bigpow to resolve it Functions such as diff evalf series and type make extensive use of this feature Thus for example the basic function diff cannot differ
441. tion fails The error message will not exceed 2048 characters including the nul terminator The StartMaple function returns a Maple kernel handle if successful This handle is needed as an argument to all other functions listed in maplec h If MapleInitialize fails for example if incorrect arguments are passed it returns a zero and an error message is written in the memory pointed to by the errstr parameter Currently multiple kernels are not supported Evaluating Maple Input The most general evaluation function EvalMapleStatement takes an input string parses it and then executes it as if it were entered in stand alone Maple The result and interme diate output can be displayed using the call back functions supplied to StartMaple 6 3 OpenMaple Using Maple in Compiled Code e 377 The structure representing the final result is also returned and can be manipulated by other functions that work with ALGEB types The EvalMapleStatement function is defined as follows ALGEB M_DECL EvalMapleStatement MKernelVector kv char statement e The kv parameter specifies the handle to the Maple kernel This is the handle returned by StartMaple e The statement parameter specifies the statement to be evaluated expressed in Maple syntax If the expression contains a syntax error EvalMapleStatement calls the errorCallBack with two parameters a syntax error message and the offset into statement at which the error
442. to plottools cutout which is protected The following command removes 3 4 of each face of a dodecahedron and displays the result gt display cutout dodecahedron 1 2 31 3 4 gt scaling constrained Example 6 Raise or lower the barycenter of a polygon gt stellateFace proc vlist list aspectRatio numeric gt local apex i n gt gt n nops vlist gt apex add i i vlist aspectRatio n gt POLYGONS seq apex vlist i vlist modp i n 111 gt i 1 n end proc The following are the corners of a triangle in 3 D space gt triangle 1 0 0 0 1 0 0 0 1 triangle 1 0 0 0 1 0 0 0 1 The stellateFace procedure creates three polygons one for each side of the triangle gt stellateFace triangle 1 1 1 1 POLYGONS gt 3l 1 0 0 0 1 0 111 111 l 3 3 3h 0 1 0 0 0 1J E ai 3 0 0 1 1 0 0 284 e Chapter 5 Programming with Maple Graphics Because these polygons are 3 D objects to display them place the POLYGONS structure inside a PLOT3D structure gt PLOT3D As in Example 5 you can extend the stellateFace procedure to act on arbitrary polyhedra with more than one face gt stellate proc polyhedron aspectRatio gt local v gt seq stellateFace v evalf aspectRatio gt v polyhedron gt end proc Error attempting to assign to plottools stellate which is
443. to the preceding structure and com bining it with the curve from the first picture creates a filled gear like structure To embed this in three dimensions at a thickness of f units use the utility procedures double gt double proc L t gt local u gt seqC u 1 u 2 0 u L gt seq u 1 u 2 t u L gt end proc 270 e Chapter 5 Programming with Maple Graphics which takes a list of vertices and creates two copies in 3 D space the first at height 0 and the second at height t and border gt border proc L1 L2 local i n n nops L1 seq L1 i L2 i L2 i 1 L1 i 1 i 1 n 1 Li n L2 n L2 1 L1 1 end proc VVVVV which accepts two lists of vertices and joins the corresponding vertices from each list into vertices that comprise quadrilaterals You can create the top and bottom vertices of the gear embedded into 3 D space as follows gt faces gt seq double p 1 2 gt p seq outside 2 a 1 1 1 16 0 0 gt a 0 16 gt seq outside 2 a 1 16 0 01 a 0 16 gt 1 The faces structure is a sequence of doubled outside values gt PLOT3D POLYGONS faces Similarly the following are points on the outline of a gear gt points seq outside 2 a 1 1 16 a 0 16 gt PLOT CURVES points AXESSTYLE NONE SCALING CONSTRAINED 5 4 Programming with Plot Data Structures e 271 To create vertices of the polygons that comprise the bor
444. tructor in Maple RtableAppendAttribute appends the name attribute to the list of attributes in the RtableSettings structure 6 2 External Calling Using Compiled Code in Maple e 363 RtableAppendIndFn appends the indexing function infn to the list of indexing functions in the RtableSettings structure Note that infn must be a valid Maple name or table reference For example RTableAppendIndFn kv amp settings ToMapleName kv symmetric TRUE RTableAppendIndFn kv amp settings EvalMapleStatement kv triangular upper RtableGetDefaults fills the RtableSettings structure s with stan dard default values These defaults are as follows data_type RTABLE_DAG maple_type anything Maple name anything subtype RTABLE_ARRAY storage RTABLE_RECT pl 71 p2 1 order RTABLE_FORTRAN read_only FALSE foreign FALSE num_dimensions 1 index functions NULL Maple NULL attributes NULL Maple NULL transpose FALSE fill 0 RtableGetSettings fills the RtableSettings structure s with the settings held by the RTABLE rt RtableIndFn returns the ith indexing function code The indexing codes are defined in mpltable hin the form RTABLE INDEX XXXX If there are no indexing functions this gives an error for any value of i If there is one indexing function then rtableIndFun rt 1 returns the code for the only indexing function Use MapleNumArgs to determine the number of indexing f
445. ts rep_pos s addElt elt for j from 2 to prev ord do end do end if end do rep pos rep pos prev ord if rep pos gt ord then break end if end do end if end do Entries elements gt end proc The coding of this algorithm is generic The exported members of the group object G are used to effect computations within the procedure Even comparisons of equality use the export eq instead of the built in comparison operator The need for this is illustrated below Using the Symmetric constructor previously defined you can compute the elements of the symmetric group 4 using Dimino s algorithm as follows VVVVVVVVVVVVVVVV VV gt G Symmetric 4 G module export id mul inv eq member gens order elements option record end module gt Dimino G 2 15 3 4 2 3 1 4 1 2 3 4 3 2 1 4 2 3 4 1 3 2 4 1 1 3 4 2 3 1 4 2 3 4 1 2 4 3 1 2 2 4 1 3 4 2 1 3J 3 4 2 1 4 3 2 1 4 1 2 3 1 4 2 3 3 1 2 4 11 3 2 4 4 1 3 2 1 4 3 2 4 2 3 1 2 4 3 1 1 2 4 3 2 1 4 3 if not G member elt Entries elements then addElt G elements j elt 146 e Chapter 2 Programming with Modules Anticipating later developments the procedure Dimino has been coded to accept a second optional argument that specifies an alternate
446. turn an ARRAY pointer To work with an array created in Maple the data block must be copied to a pre allocated Fortran data block using the copy to array function It copies the contents of the rtable rt to the ARRAY a For a complete explanation of the parameters that are passed refer to the maplefortran hf file To copy an array back to Maple the copy to rtable function can be used RtableCreate returns a newly created RTABLE as specified by 1 The definitions given in the RtableSettings structure s 2 A pointer to an existing block of data If pdata is NULL a data block is allocated and initialized to s gt fi11 When providing an already 6 2 External Calling Using Compiled Code in Maple e 361 created block of data it is important that s foreign is set to TRUE Size storage data type order and indexing functions should all be considered when managing your data block Generally let Maple cre ate the data block then use RtableDataBlock to gain access to it 3 The bounds array bounds An m x n matrix must have bounds 1 m 1 n that is both the upper and lower bounds must be specified The Fortran equivalent function is convert to rtable It creates an rtable from an existing Fortran array The data is not copied into the table Instead the rtable maintains a pointer to the external data RtableNumElements returns the number of elements in a given rtable This may be different in sparse versus dense rtables
447. types to improve porta bility between architectures Some types are used as parameters or return values for OpenMaple API functions M_INT An integer that is the same size as a pointer on the architecture On most architectures for example Windows this is equivalent to int On some architectures this is equivalent to long int M_BOOL An integer that can take one of two values TRUE or FALSE The size of this type is the same as M INT ALGEB A Maple expression in native internal format The format is not documented but some functions such as MapleEval use such an expression for further processing by other API functions The data type definitions are in mplshlib h and mpltable h INTEGER8 INTEGER16 INTEGER32 INTEGER64 FLOAT32 FLOAT64 These macros aid in developing platform independent code The macro re solves to the correct byte sized integer type recognized by the under lying compiler All API functions are declared with the modifier M_DECL and EXT DECL When using Microsoft Visual C C MSVC M DECL is defined us ing define as __stdcall and EXT DECL is defined using define as __declspec dllimport to specify calling conventions and d11 symbol exports For other compilers these are defined using define as noth ing When not using MSVC on Windows ensure that you define them appropriately 6 3 OpenMaple Using Maple in Compiled Code e 375 Basic API Functions The OpenMaple API consists of all the standard functi
448. ubmodule If no such submodule is found an excep tion is raised Otherwise the export make from the submodule is passed the arguments that were given to the top level Shapes make procedure The make source code follows gt make proc what symbol gt description constructor for shapes gt local ctor the shape constructor gt if found gt theShape the submodule for the gt kind of shape requested gt gt if not member what Shapes theShape then gt error shape 1 not available what gt end if gt if member make theShape ctor then gt ctor args 2 nargs gt else gt error no constructor provided for gt shape 41 what gt end if gt end proc 100 e Chapter 2 Programming with Modules Summary The first argument to make is a symbol that denotes the kind of shape to construct point circle triangle This symbol is used as an index in the Shapes Shapes submodule The first statement uses member to test whether the symbol passed in the parameter what is ex ported by the submodule Shapes Shapes If it is not found an appro priate diagnostic is issued and an exception raised If member returns the value true then its third argument the local variable theShape is assigned the export found in the submodule For example if what is the symbol circle then the local variable theShape is assigned the submodule Shapes Shapes circle th
449. ubproce dure as in the stand alone partition procedure However A does not need to be passed because by using Maple scoping rules it is available to the inner procedure Creating a Uniform Random Number Generator If you want to use Maple to simulate physical experiments you likely need a random number generator The uniform distribution is particu larly simple any real number in a given range is equally likely Thus a uniform random number generator is a procedure that returns a ran dom floating point number within a certain range This section develops the procedure uniform which creates uniform random number genera tors The rand command generates a procedure which returns random n tegers For example rand 4 7 generates a procedure that returns ran dom integers between 4 and 7 inclusive gt f rand 4 7 gt seq O i 1 20 4 6 6 5 4 7 5 5 6 7 7 5 4 6 7 4 7 4 5 6 The uniform procedure is similar to rand but returns floating point numbers rather than integers You can use rand to generate random floating point numbers between 4 and 7 by multiplying and dividing by 10 Digits gt f rand 4 10 Digits 7 10 Digits 10 Digits gt fO 12 e Chapter 1 Procedures Variables and Extending Maple 9482484381 2000000000 The procedure f returns fractions rather than floating point numbers so you must compose it with evalf that is use evalf f Alterna tively you can perform t
450. uch a persistent variable leads to unexpected results if the Maple garbage collector removes it between function calls MapleGcAllow allows the algebraic structure a to be collected by the Maple garbage collector Any algebraic structure that is not referenced by another algebraic structure is automatically destroyed and its memory reclaimed Algebraics are protected from garbage collection if they are used somewhere that is the value of a global name or part of an array s data The normal state of an algebraic is to have garbage collection enabled on it System Integrity The Maple kernel has no control over the quality or reliability of external functions If an external function performs an illegal operation such as accessing memory outside of its address space that operation can result in a segmentation fault or system error The external routine crashes causing Maple to crash too If an external routine accesses memory outside of its address space but inside the Maple address space the external routine will likely not crash but Maple will become corrupted resulting in inexplicable behavior or a crash later in the Maple session Similarly an external routine that deals directly with Maple data structures can corrupt Maple by misusing the data structure manipulation facilities Therefore use external calling at your own risk Whether an external routine is one that you have written or is one supplied by a third party to which you ha
451. uitable for automatic conversions Two of these types are procedures callbacks and records structs Maple provides an alternate mechanism for handling this kind of data For a description of the steps required to use compiled code in Maple see Method 1 Calling External Functions on page 331 The same three basic steps DLL creation function specification and function in vocation as described on pages 331 333 are used in this method The information in this section extends the basic information by describing the use of wrappers Specifying the keyword WRAPPER in the call to define external causes Maple to generate code for data translations Maple compiles this code into a DLL and dynamically links to the new library Subse quently invoking the procedure returned by define external calls the newly generated conversion routine before calling the external function in the library you provided The C code generated by Maple wraps the Maple data structures by translating them to hardware equivalent types Hence the code file is 338 e Chapter 6 Advanced Connectivity called the wrapper and the library generated by this code is called the wrapper library Additional Types and Options Generating a wrapper file allows Maple to translate more complicated types that are difficult to handle without compilation technology It also allows greater flexibility when dealing with pointers and passed data that do not exactly match the required ty
452. ultiplication instead of the built in operator gt CodeGeneration LanguageDefinition Define MyNewLanguage gt extend C gt AddPrintHandler gt CodeGeneration Names Product proc x y gt Printer Print mymult args 1 args 2 gt 5 gt end proc gt 2 Note In the previous example one of the arguments of the LanguageDefinition Define command is the function call AddPrintHandler which takes a name and a procedure as arguments This makes the sup plied procedure responsible for printing any Product subexpression of the intermediate form The call to Printer Print specifies that the translator uses the automatically generated Printer module Creating a Language Definition Module A language definition module is a Maple module with exports PrintTarget and Printer The module exports must satisfy the following criteria e Printer Printer module that is either a generic Printer module returned by CodeGeneration LanguageDefinition GenericPrinter or a Printer module obtained from another language definition mod ule using LanguageDefinition Get language name Printer e PrintTarget Returns a string the translated output In most cases PrintTarget simply calls Printer PrintTarget The body of the module definition must contain a sequence of calls to Printer functions that define language specific data and utility proce dures Once defined a language definition module
453. unctions RtableIndFnArgs returns the argument expression sequence for in dexing function num in rtable rt If there are no arguments Maple NULL is returned The result can be further converted to a hardware type using the MapleToXXX function s The number of arguments returned can be determined using MapleNumArgs Note that some knowledge about the indexing functions is required to convert the return value to the ap propriate hardware type For example RTableIndFnArgs kv rt 1 of a band b1 b2 rtable returns the b part of the expression sequence 364 e Chapter 6 Advanced Connectivity b1 b2 The user must know that b1 and b2 are always integers Conversely c in constant c is always the same type as the rtable s datatype Thus for float 8 rtables to convert to a hardware type use MapleToFloat64 RtableSetAttribute sets all the attributes of the RtableSettings structure s to the single NAME attribute name RtableSetIndFn sets all the indexing functions of the RtableSettings structure s and resets it to the single indexing function infn RtableSetType sets the data type field in the given RtableSettings structure s to id and when id RTABLE_DAG sets the maple type to name For example to set the data type to f1oat 8 RTableSetType kv amp s RTABLE FLOAT NULL is called To set the type to numeric RTableSetType kv amp s RTABLE DAG numeric is called Basic type ids are defined in mpltable h To set compound types t
454. unctions return a dag of the specified dag type when given a dag the corresponding hardware data ALGEB ToMapleBoolean MKernelVector kv long b ALGEB ToMapleChar MKernelVector kv long c ALGEB ToMapleComplex MKernelVector kv double re double im ALGEB ToMapleComplexFloat MKernelVector kv ALGEB re ALGEB im ALGEB ToMapleExpressionSequence MKernelVector kv int nargs ALGEB argi ALGEB arg2 ALGEB ToMapleInteger MKernelVector kv long i ALGEB ToMapleInteger64 MKernelVector kv INTEGER64 i ALGEB ToMapleFloat MKernelVector kv double f ALGEB ToMapleName MKernelVector kv char n M BOOL is global ALGEB ToMapleNULL MKernelVector kv ALGEB ToMapleNULLPointer MKernelVector kv ALGEB ToMaplePointer MKernelVector kv void v M INT type ALGEB ToMapleRelation MKernelVector kv const char rel ALGEB lhs ALGEB rhs ALGEB ToMapleString MKernelVector kv char s 6 2 External Calling Using Compiled Code in Maple e 359 ALGEB ToMapleUneval MKernelVector kv ALGEB s The equivalent Fortran routines are as follows The Fortran API does not support ToMapleExpressionSequence ToMapleNULLPointer ToMaplePointer ToMapleRelation or ToMapleUneval to maple boolean kv b to maple char kv c to maple complex kv re im to maple complex float kv re im to maple integer kv i to maple integer64 kv i to maple float kv f to maple name kv s
455. units in k T is the set k k 0 of nonzero members of k and each orbit of k T under the action of k contains an unique monic polynomial that is its representative 2 6 Interfaces and Implementations e 131 Designing the Ring Interfaces The first step in representing these ideas in software is to devise an interface that describes the rings Suppose that the rings are equipped with the basic ring operations as well as several methods that implement desired computations gt type Ring module procedure procedure i procedure iszero procedure isone procedure zero one VVVVVV gt This interface corresponds naturally with a formal mathematical charac terization of the ring as a tuple S RE 0 1 that satisfies a number of properties and to which some computational capabilities have been added Given the way operator overrides work in Maple unary negation is added In a more tightly integrated system you specify the number and types of arguments to each of the procedures For these computations you need a slightly richer structure gt type GcdRing module procedure procedure procedure quo procedure rem procedure gcd procedure unormal procedure iszero procedure isone procedure zero one VVVVVVVVV VV This interface extends the Ring interface defined previously Note that nothing in the signature enforce
456. used for the ERROR structure is MERROR to prevent collision with a macro defined by some C compilers Expression Sequence EXPSEQ exprl expr2 Maple syntax expri expr2 Length 1 or more Expression sequences are available to the user as a data structure and are also used to pass arguments to procedures Effectively procedures take a single argument that is an expression sequence n expression sequence may be of length 1 that is an empty sequence which is represented by the Maple symbol NULL or in some contexts such as parameters to a function call as nothing at all Floating Point Number FLOAT integerl integer2 attrib expr Maple syntax 1 2 1 2e3 Float 12 34 Float infinity Length 2 or 3 with attributes A floating point number is interpreted as integerl x 10W te9er2 A floating point number may optionally have attributes in which case the length of the structure is 3 and the third word points to a Maple ex pression This suggests that several floating point numbers with the same value but different attributes can exist simultaneously The integer2 field can optionally be one of the names undefined or infinity in which case the FLOAT structure represents an undefined floating point value not a number or NaN in IEEE terminology or a floating point infinity When integer2 is undefined integer can take on different small integer values allowi
457. using the above rule Maple cannot determine whether a variable is global or local the following default decisions are made e If a variable appears on the left side of an explicit assignment or as the controlling variable of a for loop Maple regards the variable as local e Otherwise Maple regards the variable as global to the whole session In particular Maple assumes by default that the variables you pass as arguments to other procedures which may set their values are global 8 e Chapter 1 Procedures Variables and Extending Maple The Quick Sort Algorithm Sorting a few numbers is quick using any method but sorting large amounts of data can be very time consuming thus finding efficient meth ods is important The following quick sort algorithm is a classic algorithm The key to understanding this algorithm is to understand the operation of partition ing This involves choosing any one number from the array that you are about to sort Then you reposition the numbers in the array that are less than the number that you chose to one end of the array and reposition numbers that are greater to the other end Lastly you insert the chosen number between these two groups At the end of the partitioning you have not yet entirely sorted the array because the numbers less than or greater than the one you chose may still be in their original order This procedure divides the array into two smaller arrays which are easier to sort than the
458. ut with either a leading or a leading blank depending on whether the value is negative or non negative O0 The output is padded on the left between the sign and the first digit with zeroes If you also specify a the 0 is ignored The braces enclose a set of detailed formatting options for printing an rtable These are described in more detail in the help page rtable_printf The optional width indicates the minimum number of characters to output for this field If the formatted value has fewer characters Maple pads it with blanks on the left or on the right if you specify The optional precision specifies the number of digits that appear after the decimal point for floating point formats or the maximum field width for string formats You can specify both width or precision as in which case Maple takes the width or precision from the argument list The width or precision argument s must appear in that order before the argument that is being output negative width argument is equivalent to the appearance of the flag The optional modifiers are used to indicate the type of the value to be printed 1 or L The letters 1 and L are supported for compatibility with the C printf function and indicate that a long int or long long is to be formatted In Maple these flags have no effect zc or Z One of these flags can precede any of the numeric formats namely d o x e f or g indicat
459. utive entries in a hash bucket vector The first entry of this pair is the hash key and the second is a pointer to a stored value In some cases for example procedure remember tables user defined tables the key is also a pointer In other cases the key is a hashed value for example the simplification table the symbol table The key cannot have the value zero or the null pointer since this is used to indicate the bottom of the bucket Dynamic Hash Tables The Maple dynamic hash table is a complex data structure complete description of the algorithms is not given The following is a brief descrip tion of the structure Instead of using a flat fixed length directory Maple dynamic hash tables use a tree structure with contiguous bits from the hash key to select a child A child of a directory can be a subdirectory or a hash chain For example a top level directory may use the first 10 bits to index 1024 children One of its children may be a directory that uses say the next 8 bits of the key to index 256 children A hash chain in a dynamic table stores elements using key value pairs in the same way that a hash chain does in a basic hash table The first n bits of the keys in a hash chain are identical where n is the number of bits required to locate the hash chain The remaining bits are arbitrary Using the example in the previous paragraph the elements of a hash chain that is a child of the directory with 256 children have ha
460. valf command can evaluate many functions and constants such as sin and Pi You can also define custom functions or constants and extend evalf by adding information about how to compute such functions or constants Defining New Constants You can define a new constant and write procedures that manipulate this constant symbolically You can then write a procedure that calculates a floating point approximation of the constant to any number of digits If you assign the procedure a name of the form evalf constant name Maple invokes the procedure when you use evalf to evaluate an expres sion containing the constant name Example Let the name MyConst represent the following infinite series ET a 1 Y MyConst J 2 i i 1 4 4 Extending the evalf Command e 239 You can calculate approximations to the series in many ways the following procedure is one implementation Note that if a is the th term in the sum then a 1 a 7 2 i gives the next term e You can calculate an approximation to the series by adding terms until the Maple model for software floating point numbers cannot dis tinguish successive partial sums e Using numerical analysis you can prove that this algorithm calcu lates an approximation of MyConst accurate to the number of digits specified by Digits if you use two extra digits inside the algorithm The following procedure increments Digits by two and uses evalf to round the result to the proper numbe
461. variations on the basic idea intended to address performance and func tionality issues The example package shown in this subsection provides a few operations on the simplest possible form of linked lists The links in a linked list are formed from a very simple data structured called a pair A pair is essentially a container with space for exactly two elements Pairs can be modeled by fixed length records with two slots 2 3 Packages e 81 When used to implement linked lists the first slot holds the data for the list entry and the second slot stores a pointer to the next pair in the list The LinkedList package implements an abstract data definition for the pair data structure and adds some higher level operations on pairs to effect the list abstraction A linked list is effectively represented by its first pair The pair abstract data structure is very simple It consists of a con structor pair and two accessors called head and tail that satisfy the algebraic specification p pair head p tail p for each pair p In addition there is a distinguished pair nil satisfying this algebraic relation that is unequal to any other pair and satisfies head nil nil tail nil nil Note that linked lists are quite different from the Maple built in list structures which are really immutable arrays Linked lists are best suited for applications in which you want to incrementally build up the list from its members Package Imp
462. ve declared an interface via define external Maple must rely on the integrity of the external routine when it is called 6 3 OpenMaple Using Maple in Compiled Code This section describes the Application Programming Interface APT to the OpenMaple kernel OpenMaple is a suite of functions that allows you to access Maple algorithms and data structures in your compiled C or C program To run your application Maple must be installed You can distribute your application to any licensed Maple user The information in this document is hardware independent Unless otherwise noted the information is also operating system architecture independent 374 e Chapter 6 Advanced Connectivity Interface Overview The programming interface APT is built on the existing external call ing mechanism Using OpenMaple provides direct access to many of the Maple internal data types This is similar to the access define_external provides to the author of an external wrapper For more information on external calling see 6 2 External Calling Using Compiled Code in Maple or refer to external_calling and CustomWrapper OpenMaple provides the ability to start the Maple kernel and control output By default output is sent to stdout Setting up call back functions allows you to direct output to for example a text box or a string For more information on call back functions see Call back Functions on page 379 Data Types Maple defines a few low level data
463. verted to an Array with datatype float 8 before being placed inside a plot data structure 5 8 Animation e 301 5 8 Animation Maple can generate animations in two or three dimensions As with all Maple plotting facilities such animations produce user accessible data structures Data structures of the following type represent animations PLOT ANIMATE Or PLOT3D ANIMATE Inside the ANIMATE function is a sequence of frames each frame is a list of the same plotting objects that can appear in a single plotting struc ture Every procedure that creates an animation builds such a sequence of frames For example print the output of such a procedure using the following Maple command output not shown gt lprint plots animate plot x t x 1 1 t 1 3 gt numpoints 3 frames 3 The function points is a parameterization of the curve x y 1 cos tr 180 1 cos tr 180 sin tr 180 gt points t gt evalf gt 1 cos t 180 Pi cos t 180 Pi gt 1 cos t 180 Pi sin t 180 Pi For example gt points 2 1 998172852 0 06977773357 You can plot a sequence of points gt PLOT POINTS seq points t t 0 90 0 81 0 67 0 41 0 24 302 e Chapter 5 Programming with Maple Graphics You can now make an animation Make each frame consist of the polygon spanned by the origin 0 0 and the sequence of points on the cu
464. with leading zeroes added if necessary If the value being formatted is infinity infinity or undefined the output is Inf Inf or NaN respectively f Formats the object as a fixed point number The number of digits spec ified by the precision will appear after the decimal point If the value being formatted is infinity infinity or undefined the output is Inf Inf or NaN respectively Gu g or G Formats the object using d e or E if you specified G or f format depending on its value If the formatted value does not contain a decimal point Maple uses d format If the value is less than 1074 or greater than 10P cision Maple uses e or E format Otherwise Maple uses format If the value being formatted is infinity infinity or undefined the output is Inf Inf or NaN respectively y or Y The floating point object is formatted in byte order independent IEEE hex dump format 16 characters wide At least 16 characters 214 e Chapter 3 Input and Output are always output regardless of the specified width The precision is ignored T he digits corresponding to the decimal numbers 10 through 15 are represented by the letters A through F if uppercase Y was specified or a through f if lowercase y was specified c Outputs the object which must be a Maple string containing exactly one character as a single character s Outputs the object which must b
465. you use diff to differentiate F arguments with respect to x then diff invokes diff F as follows diff F arguments x The following procedure differentiates a polynomial in u with constant coefficients with respect to x gt diff POLYNOM proc u gt locali S x gt x args 1 gt S seq i args i 2 i 1 nargs 3 gt gt POLYNOM u s diff u x gt end proc gt diff POLYNOM x 1 1 1 1 1 1 1 1 1 1 x POLYNOM x 1 2 3 4 5 6 7 8 9 gt diff POLYNOM x y 34 12 876 11 76 x POLYNOM z y 12 1752 33 304 y 40 e Chapter 1 Procedures Variables and Extending Maple Extending the simplify Command The implementation of the Hamil tonians in this section 1 5 does not include the associative rule for multipli cation of Hamiltonians that is 1y z x yz Sometimes using associa tivity simplifies a result Recall that I here is not the complex imaginary unit but rather one of the special symbols J J and K that are part of the definition of the Hamiltonians 2x amp I amp J a amp I amp J gt x8 I amp J r amp K You can extend the simplify command so that it applies the as sociative law to unevaluated products of Hamiltonians If you write a procedure with a name of the form simplify F then simplify in vokes it on any unevaluated function calls to F Thus you must write a procedure simplify amp that applies the associ
466. ype Specification or Test DCOLON expr type expr Maple syntax expr typeExpr Length 3 This structure has three interpretations depending on the context in which it is used When it appears in the header of a procedure definition it is a typed parameter declaration When it appears in the local section of a procedure or on the left side of an assignment it is a type assertion When it appears elsewhere specifically in a conditional expression it is a type test Debug DEBUG Mexpr1 expr2 Maple syntax none Length 2 or more This is another internal only structure It is used by the kernel when printing error traceback information to transmit that information up the call stack Equation or Test for Equality EQUATION ezprl expr2 Maple syntax expri expr2 Length 3 This structure has two interpretations depending on the context in which it is used It can be either a test for equality or a statement of equality not to be confused with an assignment Error Statement ERROR expr Maple syntax error msg arg arg Length 2 402 e Appendix A Internal Representation and Manipulation This represents the Maple error statement The expr is either a single expression if only a message was specified in the error statement or an expression sequence if arguments were also specified The actual internal tag

Download Pdf Manuals

image

Related Search

Related Contents

Epson V33 Warranty Statement  Emergency brakes signal unit    User`s Manual - Impatica.com  Vehicle Manufacture Technical Bulletinsr  PresencePLUS P4 EDGE and EDGE 1.3 User's Manual  DP350 User`s Manual (V2.1 001)  Denver MT-743 Portable DVD Player with 7” TFT/LCD Screen and 7" Slave Unit  SOMA INSTALLATION MANUAL    

Copyright © All rights reserved.
Failed to retrieve file