Maple is a very powerful software package that is best known for symbolic computation (meaning it can manipulates expressions in terms of variables, as opposed to evaluating them numerically). However, Maple also provides excellent numerical computation capabilities. In addition it provides a great user interface for interactive problem solving. Specifically, a user can incrementally build solutions to complex problems, with more help than is offered by traditional programming environments. Along the way (s)he can also produce publication quality graph plots and diagrams and very decent typesetting of reports and documents.

__Why symbolic computation?__

There are many aids one can use for numerical computing, starting from basic
calculators to advanced software packages. There are far fewer resources to
do some tasks that Mathematics, Physics, Engineering (and many other
disciplines) demand, viz., dealing with symbolic expressions. These include
(but are not limited to) manipulating algebraic expression (you will often
see Maple being called a *Computer Algebra System* or CAS),
differentiating expressions, evaluating indefinite integrals, simplifying
expressions and expanding and evaluating series sums. An engineer can write
down a mathematical model of the system he is designing or analyzing (e.g.,
traffic flow on some part of the Internet, or the mechanical rigidity of a
proposed bridge design) and then not have to worry about how to sum a series
or analytically find an integral. He can simply type the expressions into
Maple and invoke the appropriate command to get his questions answered.

__Other packages:__

There are other packages that offer similar capabilities but each has a
different focus. MatLab was designed primarily for scientific computations
and specializes in matrix computations. R (and other similar statistical
packages) is best suited for Statistics, Machine Learning and Computational
Biology problems. None of these offer symbolic computation capabilities.
Mathematica is a package that offers many of the functionalities of Maple,
including symbolic computation.

__A little history:__

It is instructive to know why and when Maple came about. I sketch a few key
developments here. Please see Chapter 1 of [1] for more details.

- Initial versions conceived and developed by the Symbolic Computation group at the University of Waterloo in the early 80's.
- Waterloo Maple Inc. created in 1988 to commercialize the software.
- The first graphical user interface (GUI) introduced for Maple version 5 in 1990.
- A
*document mode*was added to the UI in version 10 in 2003. - Version 11 (2007) added significantly more mathematical tools.
- The latest version is 14.

Maple can be, and is, used in many different ways, depending on user needs. On one extreme, it is a very, very powerful calculator. Consider this: how many ways do you know (if any) to compute 265! (the factorial of 265, or 1*2*...*264*265) exactly? Maple will do it if you simply type "265!" at the prompt! Maple will also expand symbolically the series for (x+1)^23 and solve simultaneous linear equations. In addition, it will tabulate and plot data very neatly and will allow the user to customize the text and graphical output.

For some applications this is not enough. What if the precise functionality a user needs is not provided by Maple? This happens particularly in research -- if a technique is newly discovered, it cannot have been implemented already in Maple. Even otherwise, no package can provide everything users need.

__ Computer Programming __

Simply speaking, computer programs are sequences of commands that implement
a solution conceived for a problem. The commands that are available are
packaged in specific ways as "computer languages". You may have heard of
different languages like Java or C or Visual Basic. The reason for having
many different languages is that computer hardware only accepts sequences of
0 and 1 (or "binary strings"). Since humans find it difficult to program with
binary strings, high-level languages are designed to act as intermediary.
Different languages provide different command sets (and different
expressiveness) but translate into binary strings that can be executed by
the hardware.

Obviously computer programming plays a pivotal role in Computer Science and Engineering (CSE). However, CSE would be neither a "Science" nor an "Engineering" discipline if it only dealt with programming. Pioneers of computer programming realized that programming is not an "ad hoc" activity and needs deeper thought. Indeed there is significant overlap between Pure Mathematics and CSE that include reasoning about the correctness of programs, the computational complexity of algorithms, the computational complexity of problems (the difference is exactly the difference between the questions "how efficient is my solution to this problem?" and "how efficient a solution can one conceive of for this problem?") and the expressiveness of languages. The engineering aspects arise from the design processes and analysis of the hardware, software and hybrid systems that are used in CSE.

While simple problems can be solved by experts in very short times without any systematic design process, non-trivial problems need more time and effort. One key step in the design process is algorithm design, or the detailed description of the steps and decisions involved in the proposed solution. Most human beings do not think explicitly about algorithms, at least at the level of detail that a computer requires, because the human brain is excellent at abstraction. Therefore, beginning programmers need to get used to thinking of solutions to problems in a way that allows them to specify the solution in ways that make translation to computer programs easy.

** High-level view of this course **

This course will attempt to teach students the basics of using Maple as a calculator as well as introductory computer programming using the capabilities of Maple. Of course Maple provides you more functionality than accessible to typical first-year students. In particular, many students will not have great mastery over Calculus or Linear Algebra or Differential Equations. Therefore it will not be possible for us to learn the functionalities Maple provides in those areas. Nevertheless, fluency and familiarity to a subset of Maple will make the task of picking up those functions easy. Many (most?) of you will take a Differential Equations course that will also use Maple.

This course is unusual in that most introductory courses (and books) on Maple focus on using Maple as a calculator, but this course focuses more on learning programming using the Maple environment.

It is worth pointing out that computer programming in (say) Java and that in Maple are somewhat different because of the extra functionalities provided by Maple. In case you are wondering why Java (or similar languages) do not provide the extra features, recall that Maple is a specialized package that is targeted towards Mathematics whereas Java is more general-purpose and can be used to design software for Math, Science, Commerce, or Digital Art! Nevertheless, the process of designing computer programs is similar enough that you should be well-equipped to pick up on your own other high-level languages after completion of this course. By the same token, since this course is designed for students that have no background in programming, students with previous experience will find that they are familiar with parts of the course.

A key aspect of this course is that it is meant to have a large "hands-on" component. Programming is best learned by doing - all the little mistakes and issues that will irritate many of you are actually key in mastering the language and developing your skills. The other ingredient of programming is problem-solving and this is also part of the assignments you will be given.

** Expectations from students**

The primary expectation of this course is that students put significant effort towards learning and using Maple. This will not only help you do well in this course but also equip you for later courses. You will see that good Maple skills will help you a lot even in courses that do not explicitly use Maple. For example, you can make great use of Maple functions in courses in Calculus, Linear Algebra and even Discrete Mathematics and Number Theory.

__Expected learning outcomes:__

Modern pedagogy emphasizes that learning outcomes be explicitly identified to help both students and instructors. We will identify fine-grained outcomes in the coming sections of the course. For now, let us list a few coarse-grained (or high-level) expectations for this course.

- Familiarity with the basic Maple environment.
- Ability to "code" solutions to simple problems in Maple.
- Introduction to computer programming, including encapsulation of functionality into procedures and functions, elements of efficient programming principles, simple algorithm design, debugging programs.

The unusual nature of this course makes most textbooks unsuitable, because introductory texts (e.g. [2]) put little (or no) emphasis on programming, and focus instead on Maple functionality. More advanced texts like [1] focus on advanced problem solving, and assume background that first-year students usually do not have. Also some books (e.g. [3]) do not keep up with newer versions of Maple. Both [2] and [3] are good sources of information and I encourage you to consult them when you feel necessary. There are also many, many tutorial and introductory articles on the web, probably more than you can read. I will refer to some of those from time to time.

Since no textbook fills our need well, I decided to use guide [4] published by the publishers of Maple. This is free, up-to-date and covers almost everything we need. When needed I will supplement the book with other material.

My slides will contain useful information that you can use for review or learning. However, they are primarily a teaching aid for me and are not meant to substitute for, or systematically complement, a textbook. I will periodically publish notes (like the current document) that will complement the text.

__Getting the software__: Maple is expensive. However, the University has
a licensing agreement using which they can make it more affordably to students.
Please direct questions about getting Maple to your software support staff or UIT.

** References**

- Maple and Mathematica, I.K. Shingareva and C. Lizarraga-Celaya, 2nd edition, Springer-Verlag, 2009.
- Getting started with Maple, D. Meade, M. May, C-K. Cheung, G. Keough, 3rd edition, Wiley and Sons, 2009.
- Introduction to Maple 8, D. Schwartz, Pearson Education, 2003.
- Maple Introductory Programming Guide, M. Monagan, K. Geddes, K. Heal, G. Labahn, S. Vorkoetter, J. McCarron, P. DeMarco, Maplesoft, a division of Waterloo Maple Inc. 2010. Available at "http://www.maplesoft.com/view.aspx?SF=53256/0/Maple14Intropg.pdf" or from "http://www.maplesoft.com/documentation_center/"