Maplesoft Blog

The Maplesoft blog contains posts coming from the heart of Maplesoft. Find out what is coming next in the world of Maple, and get the best tips and tricks from the Maple experts.

Latest Posts Latest Blog Posts Feed

As an Arts major at the University of Waterloo, my first day as a co-op student in the Maplesoft marketing department was a bit of a blur. I was hearing a lot of mathematical jargon that I did not understand. Other than a mandatory statistics class in my second year at university, I haven’t taken a math course since high school, over two years ago. I spent my first week as the marketing assistant educating myself about the basics of marketing complex math software. My favourite method for doing this was to read through the Maplesoft user stories. As I read, I was amazed by the variety of customers and the endless applications that Maplesoft products had contributed to. It became apparent that math is a part of every industry and it is in the design of many products. There were a few stories from the robotics industry in particular that really sparked my interest in the software that I now market. 


We’ve all seen the futuristic movies where robots gradually get smarter and smarter, developing enough intelligence to control the human race, and eventually, take over the world. As it turns out, Engineered Arts, a UK robotics company, is bringing us one step closer to that reality. Well… they’re maybe not ready for world domination just yet, but they are working on one of the most advanced and human-like robots that the world has seen outside of a Hollywood production, and they are doing this using MapleSim. The first generation of the biologically inspired robot was named RoboThespian. With his ability to speak and sing, he was used to educate, entertain, and investigate new developments in robotics. However, he was largely static. That’s when the engineers began work on generation two of their robot, named Byrun, who has the ability to walk, run, jump, and hop as well as speak and sing. Byrun can even express thousands of different facial features thanks to his projective head display. This makes him even more human-like; scary or cool? I’m thinking a bit of both. If you’re interested in the story, click here to continue reading about it.


Another unexpected use of MapleSim was adopted as a joint research project between Ryerson University and McMaster University. I never would have guessed that math software could be applied to the process of human birth. Nevertheless, a group of researchers used MapleSim to simulate induced labour with a Foley Catheter. In short, this is when a small balloon is inserted through the opening of the cervix creating a downward pressure that effectively tricks the cervix into opening for labour to begin. Though the application of this story surprised me, it makes a lot of sense to use modelling software for a research project like this. It’s more efficient to get all of the kinks out of the virtual model in a simulation program before building a physical model that could end up being dysfunctional. According to Dr. James Andrew Smith, a Biomedical Engineering researcher and Assistant Professor in Electrical and Computer Engineering, who is the lead researcher on the project, “Modern engineering has a lot to offer the medical world,” especially when it saves on time and cost. Click here to read more about this story and to watch a video of the finished model.


After two months at Maplesoft, I have noticed that I don’t look at things in the same way that I used to. I find myself staring at a toaster and imagining how it was designed. Did the engineers use advanced physical simulation and modeling software to make the most efficient toaster possible? Well, if it can still only toast on one side then, my guess is no! Maplesoft has many more user stories that I haven’t had the chance to read yet. With customers ranging from BMW to Pixar, Maplesoft continues to expand its customer base and adapt its software to support more and more unique applications. I can’t wait to hear what new and unexpected things will be done with the software next!


Here at Maplesoft, we like to foster innovation in technological development. Whether that is finding solutions to global warming, making medical discoveries that save millions, or introducing society to very advanced functional robots, Maplesoft is happy to contribute, support and encourage innovative people and organizations researching these complex topics. This year, we are delighted to have sponsored two contests in the robotics field that provide opportunities to think big and make an impact: Create the Future Design Contest and the International Space Apps Challenge. 

Create the Future Design Contest

Established in 2002, and organized by TechBriefs, the goal of the Create the Future Design Contest is to help engineers bring their product design ideas to life. The overall ‘mission of the contest is to benefit humanity, the environment, and the economy.’ This year, there were a record 1,159 new product ideas submitted by students, engineers, and entrepreneurs from all over the globe. In the machinery/automation/robotics category, which Maplesoft sponsored, the project with the top votes was designed by two engineers who chose to name their innovation CAP Exoskeleton, a type of assistive robotic machine designed to aid the user in walking, squatting, and carrying heavy loads over considerable distances. It can either be used to enhance physical endurance for military purposes or to help the physically impaired perform daily tasks. A contest like Create the Future is a perfect opportunity, for engineers in particular, to learn, explore, and create. 

The CAP Exoskeleton - ©2015 Create the Future Design Contest


International Space Apps Challenge

The exploration of space has always been unique in its search for knowledge. The International Space Apps Challenge, a NASA incubator innovation program, is an ‘international mass collaboration focused on space exploration that takes place over 48-hours in cities around the world’. It is a unique global competition where people rally together to find solutions to real world problems, bringing humanity closer to understanding the Earth, the universe, the human race, and robotics. These goals, the organizers believe, can be reached much faster if we combine the power of the seven billion or so brains that occupy the planet, not forgetting the six that are currently orbiting above us aboard the International Space Station. The competition is open to people of all ages and in all fields, including engineers, technologists, scientists, designers, artists, educators, students, entrepreneurs, and so on. With an astounding 13,846 participants from all over the world, several highly innovative solutions were presented. 

Maplesoft sponsored the University of York location in the UK where the winning team of five modeled an app called CropOp, a communication tool that connects the government to local farmers with the goal of providing instantaneous, crucial information regarding pest breakout warnings, extreme weather, and other important updates. This UK-based team believes the quality and quantity of food produced will be improved, especially benefiting the undernourished communities in Africa. Maplesoft supports the Space Apps Challenge because it proves that collaboration makes for bigger and better discoveries that can save millions of people.


Donating Maplesoft software for contestants to use is part of the sponsorship. The real delight is to wait and see what innovative concepts they come up with. When we sponsor contests like these, we find it benefits our software as much as it does the participants. Plus, if the contestants can provide solutions to real world issues, well, that benefits everyone! 

I have two linear algebra texts [1, 2]  with examples of the process of constructing the transition matrix Q that brings a matrix A to its Jordan form J. In each, the authors make what seems to be arbitrary selections of basis vectors via processes that do not seem algorithmic. So recently, while looking at some other calculations in linear algebra, I decided to revisit these calculations in as orderly a way as possible.


First, I needed a matrix A with a prescribed Jordan form. Actually, I started with a Jordan form, and then constructed A via a similarity transform on J. To avoid introducing fractions, I sought transition matrices P with determinant 1.


Let's begin with J, obtained with Maple's JordanBlockMatrix command.



Tools_Load Package: Linear Algebra

Loading LinearAlgebra

J := JordanBlockMatrix([[2, 3], [2, 2], [2, 1]])

Matrix([[2, 1, 0, 0, 0, 0], [0, 2, 1, 0, 0, 0], [0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 1, 0], [0, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 2]])



The eigenvalue lambda = 2 has algebraic multiplicity 6. There are sub-blocks of size 3×3, 2×2, and 1×1. Consequently, there will be three eigenvectors, supporting chains of generalized eigenvectors having total lengths 3, 2, and 1. Before delving further into structural theory, we next find a transition matrix P with which to fabricate A = P*J*(1/P).


The following code generates random 6×6 matrices of determinant 1, and with integer entries in the interval [-2, 2]. For each, the matrix A = P*J*(1/P) is computed. From these candidates, one A is then chosen.


L := NULL:



After several such trials, the matrix A was chosen as


A := Matrix(6, 6, {(1, 1) = -8, (1, 2) = -8, (1, 3) = 4, (1, 4) = -8, (1, 5) = -1, (1, 6) = 5, (2, 1) = -1, (2, 2) = 3, (2, 3) = 1, (2, 4) = -2, (2, 5) = 2, (2, 6) = -1, (3, 1) = -13, (3, 2) = -9, (3, 3) = 8, (3, 4) = -11, (3, 5) = 1, (3, 6) = 5, (4, 1) = 3, (4, 2) = 3, (4, 3) = -1, (4, 4) = 4, (4, 5) = 1, (4, 6) = -2, (5, 1) = 7, (5, 2) = 5, (5, 3) = -3, (5, 4) = 6, (5, 5) = 2, (5, 6) = -3, (6, 1) = -6, (6, 2) = -2, (6, 3) = 3, (6, 4) = -7, (6, 5) = 2, (6, 6) = 3})



for which the characteristic and minimal polynomials are


factor(CharacteristicPolynomial(A, lambda))


factor(MinimalPolynomial(A, lambda))




So, if we had started with just A, we'd now know that the algebraic multiplicity of its one eigenvalue lambda = 2 is 6, and there is at least one 3×3 sub-block in the Jordan form. We would not know if the other sub-blocks were all 1×1, or a 1×1 and a 2×2, or another 3×3. Here is where some additional theory must be invoked.


The null spaces M[k] of the matrices (A-2*I)^k are nested: `⊂`(`⊂`(M[1], M[2]), M[3]) .. (), as depicted in Figure 1, where the vectors a[k], k = 1, () .. (), 6, are basis vectors.


Figure 1   The nesting of the null spaces M[k] 



The vectors a[1], a[2], a[3] are eigenvectors, and form a basis for the eigenspace M[1]. The vectors a[k], k = 1, () .. (), 5, form a basis for the subspace M[2], and the vectors a[k], k = 1, () .. (), 6, for a basis for the space M[3], but the vectors a[4], a[5], a[6] are not yet the generalized eigenvectors. The vector a[6] must be replaced with a vector b[6] that lies in M[3] but is not in M[2]. Once such a vector is found, then a[4] can be replaced with the generalized eigenvector `≡`(b[4], (A-2*I)^2)*b[6], and a[1] can be replaced with `≡`(b[1], A-2*I)*b[4]. The vectors b[1], b[4], b[6] are then said to form a chain, with b[1] being the eigenvector, and b[4] and b[6] being the generalized eigenvectors.


If we could carry out these steps, we'd be in the state depicted in Figure 2.


Figure 2   The null spaces M[k] with the longest chain determined



Next, basis vector a[5] is to be replaced with b[5], a vector in M[2] but not in M[1], and linearly independent of b[4]. If such a b[5] is found, then a[2] is replaced with the generalized eigenvector `≡`(b[2], A-2*I)*b[5]. The vectors b[2] and b[5] would form a second chain, with b[2] as the eigenvector, and b[5] as the generalized eigenvector.


Define the matrix C = A-2*I by the Maple calculation


C := A-2

Matrix([[-10, -8, 4, -8, -1, 5], [-1, 1, 1, -2, 2, -1], [-13, -9, 6, -11, 1, 5], [3, 3, -1, 2, 1, -2], [7, 5, -3, 6, 0, -3], [-6, -2, 3, -7, 2, 1]])



and note


N := convert(NullSpace(C), list)

[Vector(6, {(1) = 1/2, (2) = 1/2, (3) = 1, (4) = 0, (5) = 0, (6) = 1}), Vector(6, {(1) = -1/2, (2) = -1/2, (3) = -2, (4) = 0, (5) = 1, (6) = 0}), Vector(6, {(1) = -2, (2) = 1, (3) = -1, (4) = 1, (5) = 0, (6) = 0})]

NN := convert(LinearAlgebra:-NullSpace(C^2), list)

[Vector(6, {(1) = 2/5, (2) = 0, (3) = 0, (4) = 0, (5) = 0, (6) = 1}), Vector(6, {(1) = 0, (2) = 0, (3) = 0, (4) = 0, (5) = 1, (6) = 0}), Vector(6, {(1) = -1, (2) = 0, (3) = 0, (4) = 1, (5) = 0, (6) = 0}), Vector(6, {(1) = 2/5, (2) = 0, (3) = 1, (4) = 0, (5) = 0, (6) = 0}), Vector(6, {(1) = -3/5, (2) = 1, (3) = 0, (4) = 0, (5) = 0, (6) = 0})]



The dimension of M[1] is 3, and of M[2], 5. However, the basis vectors Maple has chosen for M[2] do not include the exact basis vectors chosen for M[1].


We now come to the crucial step, finding b[6], a vector in M[3] that is not in M[2] (and consequently, not in M[1] either). The examples in [1, 2] are simple enough that the authors can "guess" at the vector to be taken as b[6]. What we will do is take an arbitrary vector in M[3] and project it onto the 5-dimensional subspace M[2], and take the orthogonal complement as b[6].


A general vector in M[3] is


Z := `<,>`(u || (1 .. 6))

Vector[column]([[u1], [u2], [u3], [u4], [u5], [u6]])



A matrix that projects onto M[2] is


P := ProjectionMatrix(NN)

Matrix([[42/67, -15/67, 10/67, -25/67, 0, 10/67], [-15/67, 58/67, 6/67, -15/67, 0, 6/67], [10/67, 6/67, 63/67, 10/67, 0, -4/67], [-25/67, -15/67, 10/67, 42/67, 0, 10/67], [0, 0, 0, 0, 1, 0], [10/67, 6/67, -4/67, 10/67, 0, 63/67]])



The orthogonal complement of the projection of Z onto M[2] is then -P*Z+Z. This vector can be simplified by choosing the parameters in Z appropriately. The result is taken as b[6].


b[6] := 67*(eval(Z-Typesetting:-delayDotProduct(P, Z), Equate(Z, UnitVector(1, 6))))*(1/5)

Vector[column]([[5], [3], [-2], [5], [0], [-2]])




The other two members of this chain are then


b[4] := Typesetting:-delayDotProduct(C, b[6])

Vector[column]([[-132], [-12], [-169], [40], [92], [-79]])

b[1] := Typesetting:-delayDotProduct(C, b[4])

Vector[column]([[-67], [134], [67], [67], [0], [134]])



A general vector in M[2] is a linear combination of the five vectors that span the null space of C^2, namely, the vectors in the list NN. We obtain this vector as


ZZ := add(u || k*NN[k], k = 1 .. 5)

Vector[column]([[(2/5)*u1-u3+(2/5)*u4-(3/5)*u5], [u5], [u4], [u3], [u2], [u1]])



A vector in M[2] that is not in M[1] is the orthogonal complement of the projection of ZZ onto the space spanned by the eigenvectors spanning M[1] and the vector b[4]. This projection matrix is


PP := LinearAlgebra:-ProjectionMatrix(convert(`union`(LinearAlgebra:-NullSpace(C), {b[4]}), list))

Matrix([[69/112, -33/112, 19/112, -17/56, 0, 19/112], [-33/112, 45/112, 25/112, 13/56, 0, 25/112], [19/112, 25/112, 101/112, 1/56, 0, -11/112], [-17/56, 13/56, 1/56, 5/28, 0, 1/56], [0, 0, 0, 0, 1, 0], [19/112, 25/112, -11/112, 1/56, 0, 101/112]])



The orthogonal complement of ZZ, taken as b[5], is then


b[5] := 560*(eval(ZZ-Typesetting:-delayDotProduct(PP, ZZ), Equate(`<,>`(u || (1 .. 5)), LinearAlgebra:-UnitVector(4, 5))))

Vector[column]([[-9], [-59], [17], [58], [0], [17]])



Replace the vector a[2] with b[2], obtained as


b[2] := Typesetting:-delayDotProduct(C, b[5])

Vector[column]([[251], [-166], [197], [-139], [-112], [-166]])



The columns of the transition matrix Q can be taken as the vectors b[1], b[4], b[6], b[2], b[5], and the eigenvector a[3]. Hence, Q is the matrix


Q := `<|>`(b[1], b[4], b[6], b[2], b[5], N[3])

Matrix([[-67, -132, 5, 251, -9, -2], [134, -12, 3, -166, -59, 1], [67, -169, -2, 197, 17, -1], [67, 40, 5, -139, 58, 1], [0, 92, 0, -112, 0, 0], [134, -79, -2, -166, 17, 0]])



Proof that this matrix Q indeed sends A to its Jordan form consists in the calculation


1/Q.A.Q = Matrix([[2, 1, 0, 0, 0, 0], [0, 2, 1, 0, 0, 0], [0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 1, 0], [0, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 2]])``



The bases for M[k], k = 1, 2, 3, are not unique. The columns of the matrix Q provide one set of basis vectors, but the columns of the transition matrix generated by Maple, shown below, provide another.


JordanForm(A, output = 'Q')

Matrix([[-5, -43/5, -9/5, 7/5, -14/5, -3/5], [10, -4/5, -6/25, 1/5, -6/25, -3/25], [5, -52/5, -78/25, 13/5, -78/25, -39/25], [5, 13/5, 38/25, -2/5, 38/25, 4/25], [0, 6, 42/25, -1, 42/25, 21/25], [10, -29/5, -11/25, 1/5, -11/25, 7/25]])



I've therefore added to my to-do list the investigation into Maple's algorithm for determining an appropriate set of basis vectors that will support the Jordan form of a matrix.





[1] Linear Algebra and Matrix Theory, Evar Nering, John Wiley and Sons, Inc., 1963

[2] Matrix Methods: An Introduction, Richard Bronson, Academic Press, 1969





Like most companies today, Maplesoft monitors its website traffic, including the traffic coming to MaplePrimes. This allows us to view statistical data such as how many total visits MaplePrimes gets, how many unique visitors it gets, what countries these visitors come from, how many questions are asked and answered, how many people read but never respond to posts, etc. 

Recently one of our regular MaplePrimes users made the comment that MaplePrimes does not reach new Maple users. We found this comment interesting because our data and traffic numbers show a different trend. MaplePrimes gets unique visitors in the hundreds of thousands each year, and since its inception, it has welcomed unique visitors in the many millions. Based on these unique visitor numbers and the thousands of common searches specifically about Maple that people are doing, we can see that many of these unique visitors are in fact new Maple users looking for resources and support as they begin using Maple. Other visitors to MaplePrimes include people who use Google (or other search engines) to find an answer to a particular mathematics or engineering question, regardless of what mathematics software they choose to use, and Google points them to MaplePrimes. There are some popular posts that were written months, even years ago, that are still getting high visitor views today, showing the longevity of the information on MaplePrimes. 

MaplePrimes gets the majority of its visible activity from a small number of extremely active members. In public user forums around the world, these types of members are given many names – power users, friendlies, evangelists. Every active public user forum has them. On MaplePrimes, it’s this small number of active members that are highly visible. But, what our traffic data reveals is the silent majority. These people, many of them repeat visitors, are quietly reviewing the questions and answers that our evangelists are posting. The silent majority of MaplePrimes visitors are the readers; they are the quiet consumers of information. For every person that writes, comments on, or likes a post, there are thousands more that read it. 

Here are a few more MaplePrimes traffic data points for your reference:

  • MaplePrimes is very international and draws people from all around the world. Here are the top 10 countries where the most MaplePrimes visitors come from:
    1. USA
    2. India
    3. Canada
    4. Germany
    5. China
    6. United Kingdom
    7. Brazil
    8. Australia
    9. France
    10. Denmark
  • Here are the top 5 keywords people are using in their searches on MaplePrimes:
    1. Data from plot
    2. Physics
    3. Sprintf
    4. Size of plot
    5. Fractal
  • MaplePrimes is growing at a very fast rate: Traffic (visitors to the site) and membership size is growing at nearly double the pace it was last year. The total number of posts and questions this year is also much higher compared to the same timeframe last year. 
  • Our top 5 MaplePrimes members have each visited MaplePrimes more than 1200 times and viewed a combined total of more than 10,000 pages (that is total page views, not unique page views). Our top 25 MaplePrimes members have visited at least 250 times each (many of them nearly 1000 times each) and our top 50 MaplePrimes members have visited a combined total of over 23,000 times, visiting nearly 200,000 pages. Thank you! We’re glad you like it. :-)


The engineering design process involves numerous steps that allow the engineer to reach his/her final design objectives to the best of his/her ability. This process is akin to creating a fine sculpture or a great painting where different approaches are explored and tested, then either adopted or abandoned in favor of better or more developed and fine-tuned ones. Consider the x-ray of an oil painting. X-rays of the works of master artists reveal the thought and creative processes of their minds as they complete the work. I am sure that some colleagues may disagree with the comparison of our modern engineering designs to art masterpieces, but let me ask you to explore the innovations and their brilliant forms, and maybe you will agree with me even a little bit.

Design Process

Successful design engineers must have the very best craft, knowledge and experience to generate work that is truly worthy of being incorporated in products that sell in the tens, or even hundreds, of millions. This is presently achieved by having cross-functional teams of engineers work on a design, allowing cross checking and several rounds of reviews, followed by multiple prototypes and exhaustive preproduction testing until the team reaches a collective conclusion that “we have a design.” This is then followed by the final design review and release of the product. This necessary and vital approach is clearly a time consuming and costly process. Over the years I have asked myself several times, “Did I explore every single detail of the design fully”? “Am I sure that this is the very best I can do?” And more importantly, “Does every component have the most fine-tuned value to render the best performance possible?” And invariably I am left with a bit of doubt. That brings me to a tool that has helped me in this regard.

A Great New Tool

I have used Maple for over 25 years to dig deeply into my designs and understand the interplay between a given set of parameters and the performance of the particular circuit I am working on. This has always given me a complete view of the problem at hand and solidly pointed me in the direction of the best possible solutions.

In recent years, a new feature called “Explore” has been added to Maple. This amazing feature allows the engineer/researcher to peer very deeply into any formula and explore the interaction of EVERY variable in the formula. 

Take for example the losses in the control MOSFET in a synchronous buck converter. In order to minimize these losses and maximize the power conversion efficiency, the most suitable MOSFET must be selected. With thousands of these devices being available in the market, a dozen of them are considered very close to the best at any given time. The real question then is, which one is really the very best amongst all of them? 

There are two possible approaches - one, build an application prototype, test a random sample of each and choose the one that gives you the best efficiency.  Or, use an accurate mathematical model to calculate the losses of each and chose the best. The first approach lacks the variability of each parameter due to the six sigma statistical distribution where it is next to impossible to get a device laying on the outer limits of the distribution. That leaves the mathematical model approach. If you take this route, you can have built-in tolerances in the equations to accommodate all the variabilities and use a simplified equation for the control MOSFET losses (clearly you can use a very detailed model should you chose to) to explore these losses. Luckily you can explore the losses using the Explore function in Maple.

The figure below shows a three dimensional plot, plus five other variables in the formula that the user can change using sliders that cover the range of values of interest including Minima and Maxima, while observing in real time the effects of the change on the power loss.

This means that by changing the values of any set of variables, you can observe their effect on the function. To put it simply, this single feature helps you replace dozens of plots with just one, saving you precious time and cost in fine-tuning your design. In my opinion, this is equivalent to an eight-dimensional/axes plot.

I used this amazing feature in the last few weeks and I was delighted at how simple it is to use and how much it simplifies the study of my approach and my components selection, in record times!

This October 21st, Maplesoft will be hosting a full-production, live streaming webinar featuring Dr. Robert Lopez, Emeritus Professor and Maple Fellow. You might have caught Dr. Lopez's Clickable Calculus webinar series before, but this webinar is your chance to meet the man behind the voice and watch him use Clickable Math techniques live!

In this webinar, Dr. Lopez will present examples of what "resequencing concepts and skills" looks like when implemented with Maple's point-and-click syntax-free paradigm. He will demonstrate how Maple can not only be used to elucidate the concept, but also, how it can be used to illustrate and implement the manipulations that ultimately the student must master.

Click here for more information and registration.

A wealth of knowledge is on display in MaplePrimes as our contributors share their expertise and step up to answer others’ queries. This post picks out one such response and further elucidates the answers to the posted question. I hope these explanations appeal to those of our readers who might not be familiar with the techniques embedded in the original responses.

Before I begin, a quick note that the content below was primarily created by one of our summer interns, Pia, with guidance and advice from me.

The Question: Rearranging the expression of equations

SY G wanted to be able to re-write an equation in terms of different variables.  SY G presented this example: 

I have the following two equations:

x1 = a-y1-d*y2;
x2 = a-y2-d*y1;

I wish to express the first equation in terms of y1 and x2, so that

x1 = c - b*y1+d*x2;

where c=a-a*d and b=1-d^2. How can I get Maple to rearrange the original equation x1 in term of y1, x2, c and b?

This question was answered by nm who provided code with a systematic approach:


On the other hand, Carl Love answered this enquiry using a more direct and simple code:

simplify(x1=a-y1-d*y2, {a-y2-d*y1= x2, 1-d^2= b, a-a*d= c});

Let’s talk more about the expand, algsubs, subs, and simplify commands

First let’s take a look at the method nm used to solve the problem using the commands expand, subs, solve and algsubs.

The expand command, expand(expr, expr1, expr2, ..., exprn), distributes products over sums. This is done for all polynomials. For quotients of polynomials, only sums in the numerator are expanded; products and powers are left alone.

The solve command, solve(equations, variables), solves one or more equations or inequalities for their unknowns.

The subs command, subs(x=a,expr), substitutes a for x in the expression expr.

The function algsubs, algsubs(a = b, f),performs an algebraic substitution, replacing occurrences of a with b in the expression f.  It is a generalization of the subs command, which only handles syntactic substitution.

Let’s tackle the Maple code written by nm step by step:

1) restart;
The restart command is used to clear Maple’s internal memory

2)  eq1:=x1=a-y1-d*y2:
The names eq1 and eq2 were assigned to the equations SY G provided.

3) z:=expand(subs(y2=solve(eq2,y2),eq1)):
A new variable, z, was created, which will end up being x1 written in the terms SY G wanted.

  • solve(eq2,y2)
    • the solve command was used to solve the expression eq2 for the variable y2.

  • subs(y2=solve(eq2,y2),eq1)
    • The subs command was used to replace in expression eq1, y2 as determined by the solve step. 

  • expand(subs(y2=solve(eq2,y2),eq1))
    • The expand command was used to distribute products over sums. Note: this step served to ensure that the final output looked exactly how SY G wanted.

4) z:=algsubs((a-a*d)=c,z):
First, nm equated a-a*d to c, so later the algsubs command could be applied to substitute the new variable c into the expression z.

5) algsubs((1-d^2)=b,z);
Again, nm equated 1-d^2 to b, so later the algsubs command could be applied to substitute the new variable b into the expression z.

An alternate approach

Now let us check out Carl Love’s approach. Carl Love uses the simplify command in conjunction with side relations.

The simplify command has many calling sequences and one of them is the simplify(expr,eqns), that is known as simplify/siderels. A simplification of expr with respect to the side relations eqns is performed. The result is an expression which is mathematically equivalent toexpr but which is in normal form with respect to the specified side relations. Basically you are telling Maple to simplify the expression (expr) using the parameters (eqns) you gave to it.


I hope that you find this useful. If there is a particular question on MaplePrimes that you would like further explained, please let me know. 

We are happy to announce that Maple T.A. now supports the Learning Tools Interoperability® (LTI) standard, which means that Maple T.A. can be easily integrated with course management systems that support LTI. Maplesoft officially supports LTI connectivity with Canvas, Blackboard Learn™, Brightspace™, Moodle™, and Sakai.

Using the LTI standard, you can integrate Maple T.A. directly into your existing course management or learning management platforms. This allows for single-sign on in one central location and Maple T.A. assignment delivery and grade pushing right inside of your existing solutions.

If you would like to use the LTI connectivity feature, please contact Maplesoft Technical Support at They will provide the instructions and files you need to set up your connection, and answer any questions you may have about how the integration works on your platform.

Maplesoft Product Manager, Maple T.A.

A wealth of knowledge is on display in MaplePrimes as our contributors share their expertise and step up to answer others’ queries. This post picks out one such response and further elucidates the answers to the posted question. I hope these explanations appeal to those of our readers who might not be familiar with the techniques embedded in the original responses.

Before I begin, a quick note that the content below was primarily created by one of our summer interns, Pia, with guidance and advice from me.

The Question: Source Code of Math Apps

Eberch, a new Maple user, was interested in learning how to build his own Math Apps by looking at the source code of some of the already existing Math Apps that Maple offers.

Acer helpfully suggested that he look into the Startup Code of a Math App, in order to see definitions of procedures, modules, etc. He also recommended Eberch take a look at the “action code” that most of the Math Apps have which consist of function calls to procedures or modules defined in the Startup Code. The Startup Code can be accessed from the Edit menu. The function calls can be seen by right-clicking on the relevant component and selecting Edit Click Action.

Acer’s answer is correct and helpful. But for those just learning Maple, I wanted to provide some additional explanation.

Let’s talk more about building your own Math Apps

Building your own Math Apps can seem like something that involves complicated code and rare commands, but Daniel Skoog perfectly portrays an easy and straightforward method to do this in his latest webinar. He provides a clear definition of a Math App, a step-by-step approach to creating a Math App using the explore and quiz commands, and ways to share your applications with the Maple community. It is highly recommended that you watch the entire webinar if you would like to learn more about the core concepts of working with Maple, but you can find the Math App information starting at the 33:00 mark.

I hope that you find this useful. If there is a particular question on MaplePrimes that you would like further explained, please let me know. 

A wealth of knowledge is on display in MaplePrimes as our contributors share their expertise and step up to answer others’ queries. This post picks out one such response and further elucidates the answers to the posted question. I hope these explanations appeal to those of our readers who might not be familiar with the techniques embedded in the original responses.

Before I begin, a quick note that the content below was primarily created by one of our summer interns, Pia, with guidance and advice from me.

MaplePrimes member Thomas Dean wanted 1/2*x^(1/2) + 1/13*x^(1/3) + 1/26*x^(45/37)  to become  0.5*x^0.500000 + 0.07692307692*x^0.333333 + 0.03846153846*x^1.216216216  using the evalf command.

Here you can see the piece of code that Thomas Dean wrote in Maple:

eq:=1/2*x^(1/2) + 1/13*x^(1/3) + 1/26*x^(45/37);

Carl Love replied simply and effectively with a piece of code, using the evalindets command instead:

evalindets(eq, fraction, evalf);

As always, Love provided an accurate response, and it is absolutely correct. But for those just learning Maple, I wanted to provide some additional explanation.

The evalindets command, evalindets( expr, atype, transformer, rest ), is a particular combination of calls to eval and indets that allows you to efficiently transform all subexpressions of a given type by some algorithm. It encapsulates a common "pattern" used in expression manipulation and transformation.

Each subexpression of type atype is transformed by the supplied transformer procedure. Then, each subexpression is replaced in the original expression, using eval, with the corresponding transformed expression.


Note: the parameter restis an optional expression sequence of extra arguments to be passed to transformer. In this example it was not used.

I hope that you find this useful. If there is a particular question on MaplePrimes that you would like further explained, please let me know. 

Here are some tips and tricks - ranging from keyboard shortcuts to the newest features - that will help you get the most out of MapleSim 2015.

  1. Quickly run your simulation by pressing F5. Similarly, toggle between the Main Window and Visualization Window by press F6.

  2. Maintaining an organized and clean model layout is made easier by using the Reroute Connections tool. Select the connection lines or components and press CTRL+D (or using the Edit menu, Reroute Connections) to have MapleSim automatically reroute the connections.

  3. While creating your MapleSim model, components and connections can be enabled or disabled by selecting the desired item(s) and using the disable/enable button (  ) or the keyboard shortcut CTRL+E.

  4. Use the Model Tree palette in MapleSim to help manage, navigate, and search a model quickly. Items within the model tree include: components, probes, parameters, and attachments. Simply select the desired view using the drop-down menu. The Model Tree palette is found under the Project tab.

  5. Automatically remove any unreferenced subsystems or custom components using the Prune Model tool. Especially useful for large models or models with multiple modifications, this tool will automatically identify and removes unused shared subsystems or custom components that appear within the Definitions tab, Components palette. The Prune Model function can be performed by clicking the Edit menu, and selecting Prune Model.

  6. Set the MapleSim’s Visualization Window to always on top by toggling the anchor button (  ) in the upper left corner of the Visualization Window.

  7. Automatically scale the model diagram to fit in the viewable area by pressing CTRL+T to gain a complete look at the model. Then return to a default zoom by pressing CTRL+0 (zero). This is also accessible using the View menu.

  8. To group components into a subsystem, select the desired components, right-click and select Create Subsystem or press CTRL+G.

  9. For quick access to get help on a particular component, right-click on it and select help. Similarly, selecting a component within the workspace and pressing F2 will bring up the help page for that component.

  10. View the Modelica code behind the visible system/subsystem/component, click Code View (  ) in the Navigation Tool bar. Then, to switch back to Diagram Mode click the icon (  ) in the Navigation Tool bar.

  11. Automatically compare two models by using the compare tool, found under the Tools menu Compare Models.

  12. Attach important files to a MapleSim model to keep content in one place. Attachments can be Maple worksheets or others such as pdfs, Excel, Word, STL files, etc. These files are found under the Project Tab, Attachments palette. Attach a file by, right-clicking the category and selecting Attach File or clicking the Edit menu Attach File.

I hope you find these useful! Do you have any tips that you would add to this list?

The first instalment in the Hollywood Math webinar series will be returning live this September 17th! It will be presented by Daniel Skoog, our Maple Product Manager.

Over its storied and intriguing history, Hollywood has entertained us with many mathematical moments in film. John Nash in “A Beautiful Mind,” the brilliant janitor in “Good Will Hunting,” the number theory genius in “Pi,” and even Abbott and Costello are just a few of the Hollywood “mathematicians” that come to mind.

During this webinar we will present a number of examples of mathematics in film, including those done capably, as well as questionable and downright “creative” treatments. See relevant, exciting examples that you can use to engage your students, or attend this webinar simply for its entertainment value. Have you ever wondered if the bus could really have jumped the gap in “Speed?” We’ve got the answer! Anyone with an interest in mathematics, especially high school and early college math educators, will be both entertained and informed by attending this webinar.

To join us for the live presentation, click here to register.

A wealth of knowledge is on display in MaplePrimes as our contributors share their expertise and step up to answer others’ queries. This post picks out one such response and further elucidates the answers to the posted question. I hope these explanations appeal to those of our readers who might not be familiar with the techniques embedded in the original responses.

Before I begin, a quick note that the content below was primarily created by one of our summer interns, Pia, with guidance and advice from me.

The Question: why is 2*cos(x)^2-1 simpler than 1-2*sin(x)^2

The author, nm, asked why 2*cos(x)^2-1  was simpler than 1-2*sin(x)^2 according to Maple. nm wrote:

I looked at help trying to understand why Maple thinks 2*cos(x)^2-1 is simpler than 1-2*sin(x)^2 but did not see it. I was expecting to see cos(2*x) as a result.

Preben Alsholm answered nm’s question by recommending the use of the combine command to obtain the result he was expecting to see, as well as a further explanation on how the simplify command works. Alsholm wrote:

Use combine to obtain what you want:

simplify has a general preference for cos over sin. That doesn't mean however, that it turns sin into cos at all costs:

##Try also

simplify doesn't necessarily get you the simplest result in the common sense of the word 'simplify'. Try as another example


As always, Alsholm provided an accurate, thoughtful response. But for those just learning Maple, I thought some additional explanation could be helpful.

Let’s talk more about the simplify command and combine function

The simplify command applies simplification rules to an expression. Its parameters can be any expression.

The combine function applies transformations which combine terms in sums, products, and powers into a single term. For many functions, the transformations applied by combine are the inverse of the transformations that are applied by expand. For example, consider the well-known identity:

sin(a + b) = sin(a) cos(b) + cos(a) sin(b)

The combine function applies the identity from right to left, whereas the expand function does the reverse.


I hope that you find this useful. If there is a particular question on MaplePrimes that you would like further explained, please feel free to contact me.


My desk was covered with papers, a glass of water, and a big shipping container. Even though my chair was there, I was sitting on the floor with my laptop, having a bad hair day, and a robot was seated next to me.  This was a typical day at Maplesoft for an engineering co-op student.

For this project, at the request of my manager, I left my duties as Spanish translator and marketing assistant and I started to work with the robot NAO from Aldebaran Robotics. The purpose of this project was to program NAO using Aldebaran’s Choreographe software to make new movements and dances that I would later use to create new MapleSim models for Maplesoft’s Model Gallery. Maplesoft’s marketing team would then use these models in some of their promotional activities.

Given that NAO was going to travel to Taiwan in a short period of time, I wanted to focus on doing one elaborate dance and a couple of simple movements.Thanks to F.U.N. lab from the University of Notre Dame, I was able to focus on the detailed dance because they had an amazing Choreographe database of behaviour/movement code.   

I started this project with zero knowledge about Choreographe, but with a good understanding of NAO´s MapleSim model that the Maplesoft engineers had previously created. After a few weeks with NAO and some YouTube tutorials, I discovered that programming NAO was really easy. I would move NAO’s joints to the positions I wanted to, and then I would tap its head to record and save them. I did this for a couple of weeks making sure that the sequence of movements wouldn’t make NAO fall or break a finger. At this point I was already a NAO expert.

After finishing up all the movements and dances it was time to move on to the next phase of the project: obtaining the data for the MapleSim model. The MapleSim model was created using the Denavit-Hartenber (DH) convention; therefore, I needed the values of the degrees of rotation of each joint while the robot performed a dance. These numbers were easily obtained using the “record” button in Choreographe and exporting them into a CSV file. This file was later attached to the MapleSim model, so it could be used in a time look up table. The input of NAO´s joints were then specified by using the values within this table.

I started by recording the simplest movements: NAO blowing kisses and doing the sprinkler. These were the best ones to start working on because in these examples, the robot only needs to move its upper body, meaning that the lower body didn’t need any flexibility. This gave me and Abtin Athari, Application Engineer at Maplesoft, the freedom to simplify the original model by removing unnecessary degrees of freedom on the lower body. Abtin and I also realized that at the beginning of some of the new movements the robot would have too much torque, so we extended some of the recorded position of the rotational joints so the robot could stay in the same position for a longer time. These modifications ensured that the model wouldn´t have any problems during any of the simulations.

To finish the project, I worked with the Marketing team to create some videos where we could display the real robot next to the MapleSim model doing the same movements. The purpose of these videos was to showcase the essence of the high-fidelity models that MapleSim allowed us to create. It was amazing to see how the MapleSim model corresponded so closely to the physical robot.

After three weeks of intense work and meetings, my days as a robot whisperer ended. I learned new things about robots, how to build models with MapleSim, and the processes behind developing videos. It was a project that allowed me to wear both an engineer’s and a marketer’s shoes.  I was able to put into practice my technical knowledge and problem solving skills; and at the same time I was able to enhance my creative and analytical skills by evaluating the quality and impact of my work.

Philip Yasskin, a long-time Maple user and professor at Texas A&M University is passionate about getting young people engaged in mathematics. One of his programs is SEE-Math: a two-week summer day camp for gifted middle school children interested in math. Maplesoft has been a long-standing supporter of SEE-Math, providing software and prizes for the campers.

A major project in SEE-Math is developing computer animations using Maple. Students spend their time creating various animations, in hopes of taking the top prize at the end of the workshop. A slew of animations are submitted, some with pop-culture references, elaborate plot lines, and incredible detail. The top animations take home prizes, while all animations from that year are featured on the SEE-Math website.

Maplesoft proudly sponsors this event, and many like it, to promote interest in STEM education. To see all of the animations from this year’s SEE-Math camp, please visit: You can find the animations listed under “Euler,” “Godel,” “Noether,” and “Ramanujan,” found halfway down the page.

1 2 3 4 5 6 7 Last Page 1 of 16