ebook img

Maple 9 advanced programming guide PDF

454 Pages·2003·2.246 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Maple 9 advanced programming guide

Maple 9 Advanced Programming Guide M. B. Monagan K. O. Geddes K. M. Heal G. Labahn S. M. Vorkoetter J. McCarron P. DeMarco (cid:173)c Maplesoft, a division of Waterloo Maple Inc. 2003. ii • Maple, Maplesoft, Maplet, and OpenMaple are trademarks of Water- loo Maple Inc. (cid:173)c Maplesoft, a division of Waterloo Maple Inc. 2003. All rights re- served. The electronic version (PDF) of this book may be downloaded and printed for personal use or stored as a copy on a personal machine. The electronicversion(PDF)ofthisbookmaynotbedistributed.Information in this document is subject to change without notice and does not rep- resent 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 copythesoftwareonanymediumasspecificallyallowedintheagreement. Windows is a registered trademark of Microsoft Corporation. Java and all Java based marks are trademarks or registered trade- marksofSunMicrosystems,Inc.intheUnitedStatesandothercountries. 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 1-894511-44-1 Contents Preface 1 Audience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Worksheet Graphical Interface . . . . . . . . . . . . . . . . . . 2 Manual Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Customer Feedback . . . . . . . . . . . . . . . . . . . . . . . . . 3 1 Procedures, Variables, and Extending Maple 5 Prerequisite Knowledge . . . . . . . . . . . . . . . . . . . 5 In This Chapter . . . . . . . . . . . . . . . . . . . . . . . 5 1.1 Nested Procedures . . . . . . . . . . . . . . . . . . . . . . 5 Scoping Rules . . . . . . . . . . . . . . . . . . . . . . . . . 6 Local Versus Global Variables . . . . . . . . . . . . . . . . 6 The Quick-Sort Algorithm . . . . . . . . . . . . . . . . . . 8 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Creating a Uniform Random Number Generator . . . . . 11 1.2 Procedures That Return Procedures . . . . . . . . . . . . 14 Conveying Values . . . . . . . . . . . . . . . . . . . . . . . 14 Creating a Newton Iteration . . . . . . . . . . . . . . . . . 14 Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 A Shift Operator . . . . . . . . . . . . . . . . . . . . . . . 17 1.3 Local Variables and Invoking Procedures . . . . . . . . . . 19 Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Procedure as a Returned Object . . . . . . . . . . . . . . 22 Example 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Example 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.4 Interactive Input . . . . . . . . . . . . . . . . . . . . . . . 27 iii iv • Contents Reading Strings from the Terminal . . . . . . . . . . . . . 27 Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Reading Expressions from the Terminal . . . . . . . . . . 28 Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Converting Strings to Expressions . . . . . . . . . . . . . 30 1.5 Extending Maple . . . . . . . . . . . . . . . . . . . . . . . 31 Defining New Types . . . . . . . . . . . . . . . . . . . . . 31 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Neutral Operators . . . . . . . . . . . . . . . . . . . . . . 33 Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Extending Commands . . . . . . . . . . . . . . . . . . . . 39 1.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2 Programming with Modules 43 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Module Versus Procedure . . . . . . . . . . . . . . . . . . 45 Accessing Module Exports . . . . . . . . . . . . . . . . . . 46 In This Chapter . . . . . . . . . . . . . . . . . . . . . . . 46 2.1 Syntax and Semantics . . . . . . . . . . . . . . . . . . . . 47 The Module Definition . . . . . . . . . . . . . . . . . . . . 47 The Module Body . . . . . . . . . . . . . . . . . . . . . . 48 Module Parameters . . . . . . . . . . . . . . . . . . . . . . 48 Named Modules . . . . . . . . . . . . . . . . . . . . . . . 48 Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Exported Local Variables . . . . . . . . . . . . . . . . . . 52 Module Options . . . . . . . . . . . . . . . . . . . . . . . . 57 Implicit Scoping Rules . . . . . . . . . . . . . . . . . . . . 58 Lexical Scoping Rules . . . . . . . . . . . . . . . . . . . . 58 Modules and Types . . . . . . . . . . . . . . . . . . . . . . 60 Example: A Symbolic Differentiator . . . . . . . . . . . . 61 2.2 Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 2.3 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 What Is a Package . . . . . . . . . . . . . . . . . . . . . . 78 Writing Maple Packages by Using Modules . . . . . . . . 80 The LinkedList Package . . . . . . . . . . . . . . . . . . 80 Code Coverage Profiling Package . . . . . . . . . . . . . . 87 The Shapes Package . . . . . . . . . . . . . . . . . . . . . 94 2.4 The use Statement . . . . . . . . . . . . . . . . . . . . . . 103 Operator Rebinding . . . . . . . . . . . . . . . . . . . . . 106 Contents • v 2.5 Modeling Objects . . . . . . . . . . . . . . . . . . . . . . . 108 Priority Queues . . . . . . . . . . . . . . . . . . . . . . . . 111 An Object-oriented Shapes Package . . . . . . . . . . . . 115 2.6 Interfaces and Implementations . . . . . . . . . . . . . . . 117 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Generic Graph Algorithms . . . . . . . . . . . . . . . . . . 124 Quotient Fields . . . . . . . . . . . . . . . . . . . . . . . . 129 A Generic Group Implementation . . . . . . . . . . . . . . 138 2.7 Extended Example: A Search Engine . . . . . . . . . . . . 159 Introduction to Searching . . . . . . . . . . . . . . . . . . 159 Inverted Term Occurrence Indexing . . . . . . . . . . . . . 161 The Vector Space Model . . . . . . . . . . . . . . . . . . . 164 Term Weighting . . . . . . . . . . . . . . . . . . . . . . . . 167 Building a Search Engine Package . . . . . . . . . . . . . 168 Latent Semantic Analysis . . . . . . . . . . . . . . . . . . 172 The Search Engine Package . . . . . . . . . . . . . . . . . 173 Using the Package . . . . . . . . . . . . . . . . . . . . . . 180 2.8 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 184 3 Input and Output 185 In This Chapter . . . . . . . . . . . . . . . . . . . . . . . 185 3.1 A Tutorial Example . . . . . . . . . . . . . . . . . . . . . 186 3.2 File Types and Modes . . . . . . . . . . . . . . . . . . . . 190 Buffered Files versus Unbuffered Files . . . . . . . . . . . 190 Text Files versus Binary Files . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . 193 Opening and Closing Files . . . . . . . . . . . . . . . . . . 193 Position Determination and Adjustment . . . . . . . . . . 194 Detecting the End of a File . . . . . . . . . . . . . . . . . 195 Determining File Status . . . . . . . . . . . . . . . . . . . 195 Removing Files . . . . . . . . . . . . . . . . . . . . . . . . 196 3.5 Input Commands . . . . . . . . . . . . . . . . . . . . . . . 197 Reading Text Lines from a File . . . . . . . . . . . . . . . 197 Reading Arbitrary Bytes from a File . . . . . . . . . . . . 197 Formatted Input . . . . . . . . . . . . . . . . . . . . . . . 198 Reading Maple Statements . . . . . . . . . . . . . . . . . 204 Reading Tabular Data . . . . . . . . . . . . . . . . . . . . 204 3.6 Output Commands . . . . . . . . . . . . . . . . . . . . . . 206 vi • Contents ConfiguringOutputParametersUsingtheinterfaceCom- mand . . . . . . . . . . . . . . . . . . . . . . . . . 206 One-Dimensional Expression Output . . . . . . . . . . . . 206 Two-Dimensional Expression Output . . . . . . . . . . . . 207 Writing Maple Strings to a File . . . . . . . . . . . . . . . 210 Writing Bytes to a File . . . . . . . . . . . . . . . . . . . . 210 Formatted Output . . . . . . . . . . . . . . . . . . . . . . 211 Writing Tabular Data . . . . . . . . . . . . . . . . . . . . 215 Flushing a Buffered File . . . . . . . . . . . . . . . . . . . 216 Redirecting the default Output Stream . . . . . . . . . . 217 3.7 Conversion Commands . . . . . . . . . . . . . . . . . . . . 218 Conversion between Strings and Lists of Integers . . . . . 218 Parsing Maple Expressions and Statements . . . . . . . . 218 Formatted Conversion to and from Strings . . . . . . . . . 220 3.8 Notes to C Programmers . . . . . . . . . . . . . . . . . . . 221 3.9 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 221 4 Numerical Programming in Maple 223 Floating-Point Calculations . . . . . . . . . . . . . . . . . 223 In This Chapter . . . . . . . . . . . . . . . . . . . . . . . 223 Why Use Numerical Computations . . . . . . . . . . . . . 223 4.1 The Basics of evalf . . . . . . . . . . . . . . . . . . . . . 224 4.2 Hardware Floating-Point Numbers . . . . . . . . . . . . . 227 Newton’s Method . . . . . . . . . . . . . . . . . . . . . . . 230 Computing with Arrays of Numbers . . . . . . . . . . . . 232 4.3 Floating-Point Models in Maple . . . . . . . . . . . . . . . 235 Software Floats . . . . . . . . . . . . . . . . . . . . . . . . 235 Roundoff Error . . . . . . . . . . . . . . . . . . . . . . . . 236 4.4 Extending the evalf Command . . . . . . . . . . . . . . . 238 Defining New Constants . . . . . . . . . . . . . . . . . . . 238 Defining New Functions . . . . . . . . . . . . . . . . . . . 240 4.5 Using the Matlab Package . . . . . . . . . . . . . . . . . . 243 4.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 244 5 Programming with Maple Graphics 245 Maple Plots . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Creating Plotting Procedures . . . . . . . . . . . . . . . . 245 In This Chapter . . . . . . . . . . . . . . . . . . . . . . . 245 5.1 Basic Plotting Procedures . . . . . . . . . . . . . . . . . . 246 Altering a Plot . . . . . . . . . . . . . . . . . . . . . . . . 248 5.2 Programming with Plotting Library Procedures . . . . . . 249 Contents • vii Plotting a Loop . . . . . . . . . . . . . . . . . . . . . . . . 249 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 A Ribbon Plot Procedure . . . . . . . . . . . . . . . . . . 251 5.3 Maple Plot Data Structures . . . . . . . . . . . . . . . . . 254 The PLOT Data Structure . . . . . . . . . . . . . . . . . . 256 Arguments Inside a PLOT Structure . . . . . . . . . . . . . 257 A Sum Plot . . . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . 268 Polygon Meshes . . . . . . . . . . . . . . . . . . . . . . . . 272 5.5 Programming with the plottools Package . . . . . . . . 273 A Pie Chart . . . . . . . . . . . . . . . . . . . . . . . . . . 275 A Dropshadow Procedure . . . . . . . . . . . . . . . . . . 276 Creating a Tiling . . . . . . . . . . . . . . . . . . . . . . . 278 A Smith Chart . . . . . . . . . . . . . . . . . . . . . . . . 280 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Modifying Polygon Meshes . . . . . . . . . . . . . . . . . 281 5.6 Vector Field Plots . . . . . . . . . . . . . . . . . . . . . . 286 Drawing a Vector . . . . . . . . . . . . . . . . . . . . . . . 286 Generating a Vector Plot Field . . . . . . . . . . . . . . . 288 5.7 Generating Grids of Points . . . . . . . . . . . . . . . . . 296 5.8 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Animation in Static Form . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . 309 Using Animation . . . . . . . . . . . . . . . . . . . . . . . 310 Adding Color Information to Plots . . . . . . . . . . . . . 312 Creating A Chess Board Plot . . . . . . . . . . . . . . . . 315 5.10 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 316 6 Advanced Connectivity 319 In This Chapter . . . . . . . . . . . . . . . . . . . . . . . 319 Code Generation . . . . . . . . . . . . . . . . . . . . . . . 319 External Calling: Using Compiled Code in Maple . . . . . 319 viii • Contents OpenMaple: Using Maple in Compiled Code . . . . . . . . 319 6.1 Code Generation . . . . . . . . . . . . . . . . . . . . . . . 319 The CodeGeneration Package . . . . . . . . . . . . . . . . 319 Calling CodeGeneration Functions . . . . . . . . . . . . . 320 Translation Process . . . . . . . . . . . . . . . . . . . . . . 321 Extending the CodeGeneration Translation Facilities . . . 324 Defining a Custom Translator . . . . . . . . . . . . . . . . 325 6.2 External Calling: Using Compiled Code in Maple . . . . . 330 Method 1: Calling External Functions . . . . . . . . . . . 332 External Definition . . . . . . . . . . . . . . . . . . . . . . 334 Type Specification . . . . . . . . . . . . . . . . . . . . . . 335 Scalar Data Formats . . . . . . . . . . . . . . . . . . . . . 336 Structured Data Formats . . . . . . . . . . . . . . . . . . 336 Specifying Argument Passing Conventions . . . . . . . . . 338 Method 2: Generating Wrappers . . . . . . . . . . . . . . 338 Additional Types and Options . . . . . . . . . . . . . . . 339 Structured Data Formats . . . . . . . . . . . . . . . . . . 339 Enumerated Types . . . . . . . . . . . . . . . . . . . . . . 339 Procedure Call Formats . . . . . . . . . . . . . . . . . . . 340 Call by Reference . . . . . . . . . . . . . . . . . . . . . . . 340 Array Options . . . . . . . . . . . . . . . . . . . . . . . . 340 Non-passed Arguments . . . . . . . . . . . . . . . . . . . . 341 Argument Checking and Efficiency Considerations . . . . 342 Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Compiler Options . . . . . . . . . . . . . . . . . . . . . . . 344 Evaluation Rules . . . . . . . . . . . . . . . . . . . . . . . 348 Method 3: Customizing Wrappers . . . . . . . . . . . . . . 350 External Function Entry Point . . . . . . . . . . . . . . . 350 Inspecting Automatically Generated Wrappers . . . . . . 352 External API . . . . . . . . . . . . . . . . . . . . . . . . . 356 System Integrity . . . . . . . . . . . . . . . . . . . . . . . 374 6.3 OpenMaple: Using Maple in Compiled Code . . . . . . . . 374 Interface Overview . . . . . . . . . . . . . . . . . . . . . . 375 Call-back Functions . . . . . . . . . . . . . . . . . . . . . 380 Maple Online Help Database . . . . . . . . . . . . . . . . 386 Technical Issues . . . . . . . . . . . . . . . . . . . . . . . . 389 File Structure . . . . . . . . . . . . . . . . . . . . . . . . . 389 Building the Sample Program . . . . . . . . . . . . . . . . 390 6.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 392 A Internal Representation and Manipulation 397 Contents • ix A.1 Internal Organization . . . . . . . . . . . . . . . . . . . . 397 Components . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Internal Functions . . . . . . . . . . . . . . . . . . . . . . 398 Flow of Control . . . . . . . . . . . . . . . . . . . . . . . . 399 A.2 Internal Representations of Data Types . . . . . . . . . . 400 Logical AND . . . . . . . . . . . . . . . . . . . . . . . . . 401 Assignment Statement . . . . . . . . . . . . . . . . . . . . 401 Binary Object . . . . . . . . . . . . . . . . . . . . . . . . . 401 Break Statement . . . . . . . . . . . . . . . . . . . . . . . 401 Name Concatenation . . . . . . . . . . . . . . . . . . . . . 402 Complex Value . . . . . . . . . . . . . . . . . . . . . . . . 402 Communications Control Structure . . . . . . . . . . . . . 402 Type Specification or Test . . . . . . . . . . . . . . . . . . 403 Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Equation or Test for Equality . . . . . . . . . . . . . . . . 403 Error Statement . . . . . . . . . . . . . . . . . . . . . . . 403 Expression Sequence . . . . . . . . . . . . . . . . . . . . . 404 Floating-Point Number. . . . . . . . . . . . . . . . . . . . 404 For/While Loop Statement . . . . . . . . . . . . . . . . . 404 Foreign Data . . . . . . . . . . . . . . . . . . . . . . . . . 405 Function Call . . . . . . . . . . . . . . . . . . . . . . . . . 406 Garbage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Hardware Float . . . . . . . . . . . . . . . . . . . . . . . . 406 If Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Logical IMPLIES . . . . . . . . . . . . . . . . . . . . . . . 407 Not Equal or Test for Inequality . . . . . . . . . . . . . . 407 Negative Integer . . . . . . . . . . . . . . . . . . . . . . . 407 Positive Integer . . . . . . . . . . . . . . . . . . . . . . . . 408 Less Than or Equal. . . . . . . . . . . . . . . . . . . . . . 409 Less Than . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Lexically Scoped Variable within an Expression . . . . . . 409 List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 Local Variable within an Expression . . . . . . . . . . . . 410 Member . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 Module Definition . . . . . . . . . . . . . . . . . . . . . . 410 Module Instance . . . . . . . . . . . . . . . . . . . . . . . 412 Identifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 Next Statement . . . . . . . . . . . . . . . . . . . . . . . . 413 Logical NOT . . . . . . . . . . . . . . . . . . . . . . . . . 413 Logical OR . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Procedure Parameter within an Expression . . . . . . . . 413 x • Contents Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 Procedure Definition . . . . . . . . . . . . . . . . . . . . . 414 Product, Quotient, Power . . . . . . . . . . . . . . . . . . 416 Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Rational . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Read Statement . . . . . . . . . . . . . . . . . . . . . . . . 417 Return Statement . . . . . . . . . . . . . . . . . . . . . . 417 Rectangular Table . . . . . . . . . . . . . . . . . . . . . . 417 Save Statement . . . . . . . . . . . . . . . . . . . . . . . . 419 Series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Statement Sequence . . . . . . . . . . . . . . . . . . . . . 420 Stop Maple . . . . . . . . . . . . . . . . . . . . . . . . . . 420 String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 Sum, Difference . . . . . . . . . . . . . . . . . . . . . . . . 421 Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Table Reference . . . . . . . . . . . . . . . . . . . . . . . . 421 Try Statement . . . . . . . . . . . . . . . . . . . . . . . . 422 Unevaluated Expression . . . . . . . . . . . . . . . . . . . 422 Use Statement . . . . . . . . . . . . . . . . . . . . . . . . 422 Logical XOR . . . . . . . . . . . . . . . . . . . . . . . . . 423 Polynomials with Integer Coefficients modulo n . . . . . . 423 A.3 The Use of Hashing in Maple . . . . . . . . . . . . . . . . 424 Basic Hash Tables . . . . . . . . . . . . . . . . . . . . . . 424 Dynamic Hash Tables . . . . . . . . . . . . . . . . . . . . 425 The Simplification Table . . . . . . . . . . . . . . . . . . . 426 The Name Table . . . . . . . . . . . . . . . . . . . . . . . 427 Remember Tables . . . . . . . . . . . . . . . . . . . . . . . 427 Maple Language Arrays and Tables . . . . . . . . . . . . . 428 Maple Language Rectangular Tables . . . . . . . . . . . . 429 A.4 Portability . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Index 431

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.