MaplePrimes Posts

Latest Posts Latest Posts Feed

Partial rectification for the Physics:-Simplify and Physics:-Library:-SortProducts procedures dealing with Fermi annihilation/creation operators

This post will be useful for physicists dealing with Fermi annihilation/creation operators. Physics Package provides plenty of powerful tools for quantum operators handling, however some of them often fail to render correct result.  In particular incorrect behaviour with respect to Fermi annihilation/creation operators is observed for routines Simplify and SortProducts.  In this post I present my procedures S*implifyFermionicOperators and SortProductsFermi which partially solve these issues.

Problems with Physics Package routines


Short explanation of custom routines SimplifyFermionicOperators and SortProductsFermi


"Details for SimplifyFermionicOperators(z,prefix)"


"Details for SortProductsFermi(x,L,prefix)"


Weak points


Final notes



I'd like to pay attention to the article of David Austin "How to Grow and Prune a Classification Tree"

Here is its introduction:


It's easy to collect data these days; making sense of it is more work. This article explains a construction in machine learning and data mining called a classification tree. Let's consider an example.

In the late 1970's, researchers at the University of California, San Diego Medical Center performed a study in which they monitored 215 patients following a heart attack. For each patient, 19 variables, such as age and blood pressure, were recorded. Patients were then grouped into two classes, depending on whether or not they survived more than 30 days following the heart attack.

Assuming the patients studied were representative of the more general population of heart attack patients, the researchers aimed to distill all this data into a simple test to identify new patients at risk of dying within 30 days of a heart attack.

By applying the algorithm described here, Breiman, Freidman, Olshen, and Stone, created a test consisting of only three questions---what is the patient's minimum systolic blood pressure within 24 hours of being admitted to the hospital, what is the patient's age, does the patient exhibit sinus tachycardia---to identify patients at risk. In spite of its simplicity, this test proved to be more accurate than any other known test. In addition, the importance of these three questions indicate that, among all 19 variables, these three factors play an important role in determining a patient's chance of surviving.

Besides medicine, these ideas are applicable to a wide range of problems, such as identifying which loan applicants are likely to default and which voters are likely to vote for a particular political party.

In what follows, we will describe the work of Breiman and his colleagues as set out in their seminal book Classification and Regression Trees. Theirs is a very rich story, and we will concentrate on only the essential ideas"

It would be interesting to compare this approach with discriminant analysis. Hope somebody of  the Maple developers will give a concrete example on this theme with Maple.

The procedure  NumbersGame  generalizes the well-known 24 game  (implementation in Maple see here), as well as related issues (see here and here).


Required parameters of the procedure:

Result is an integer or a fraction of any sign.

Numbers is a list of positive integers.


Optional parameters:

Operators is a list of permitted arithmetic operations. By default  Operators is  ["+","-","*","/"]

NumbersOrder is a string. It is equal to "strict order" or "arbitrary order" . By default  NumbersOrder is "strict order"

Parentheses is a symbol  no  or  yes . By default  Parentheses is  no 


The procedure puts the signs of operations from the list  Operators  between the numbers from  Numbers  so that the result is equal to Result. The procedure finds all possible solutions. The global  M  saves the list of the all solutions.


Code the procedure:


NumbersGame:=proc(Result::{integer,fraction}, Numbers::list(posint), Operators::list:=["+","-","*","/"], NumbersOrder::string:="strict order", Parentheses::symbol:=no)

local MyHandler, It, K, i, P, S, n, s, L, c;

global M;

uses StringTools, ListTools, combinat; 

 MyHandler := proc(operator,operands,default_value)

      NumericStatus( division_by_zero = false );

      return infinity;

   end proc;


if Parentheses=yes then 


local i, j, L;

for i in L1 do

for j in L2 do

L[i,j]:=seq(Substitute(Substitute(Substitute("( i Op j )","i",convert(i,string)),"j",convert(j,string)),"Op",Operators[k]), k=1..nops(Operators));

od; od;

L:=convert(L, list);

end proc; 


local n, K, i, M1, M2, S;


if n=1 then return L else

for i to n-1 do

M1:=P(L[1..i]); M2:=P(L[i+1..n]);

K[i]:=seq(seq(It(M1[j], M2[k]), k=1..nops(M2)), j=1..nops(M1))

od; fi;


end proc;

if NumbersOrder="arbitrary order" then S:=permute(Numbers); K:=[seq(op(Flatten([op(P(s))])), s=S)] else  K:=[op(Flatten([op(P(Numbers))]))] fi; 


if NumbersOrder="strict order" then


for i in Numbers[2..-1] do

K:=[seq(seq(cat(k, Substitute(Substitute(" j i","j",convert(j,string)),"i",convert(i,string))), k in K), j in Operators)]

od;   else 


for s in S do


for i in s[2..-1] do

L:=[seq(seq(cat(k, Substitute(Substitute(" j i","j",convert(j,string)),"i",convert(i,string))), k in L), j in Operators)]

od; K[s]:=op(L) od; K:=convert(K,list) fi;  


M:='M'; c:=0;

for i in K do

if parse(i)=Result then c:=c+1; if Parentheses=yes then M[i]:= convert(SubString(i,2..length(i)-1),symbol)=convert(Result,symbol) else M[i]:=convert(i,symbol)=convert(Result,symbol) fi; fi;


if c=0 then M:=[]; return `No solutions` else M:=convert(M,list);  op(M) fi; 

end proc:


Examples of use.


Example 1:

NumbersGame(1/20, [$ 1..9]);

     1 * 2 - 3 + 4 / 5 / 6 * 7 / 8 * 9 = 1/20


Example 2. Numbers in the list  Numbers  may be repeated and permitted operations can be reduced:

NumbersGame(15, [3,3,5,5,5], ["+","-"]);

         3 - 3 + 5 + 5 + 5 = 15


Example 3. 

NumbersGame(10, [1,2,3,4,5]);

         1 + 2 + 3 * 4 - 5 = 10

If the order of the number in Numbers is arbitrary, then the number of solutions is greatly increased (10 solutions displayed):

NumbersGame(10, [1,2,3,4,5], "arbitrary order"):


for i to 10 do

M[1+50*(i-1)] od;

If you use the parentheses, the number of solutions will increase significantly more (10 solutions displayed):

NumbersGame(10, [1,2,3,4,5], "arbitrary order", yes):


for i to 10 do

M[1+600*(i-1)] od;





For those who have the Clickable Calculus Study Guide for Maple 18, please note that we have released an update to this ebook, which provides corrections and improvements to the text and examples. 

This update is available through the automatic updates system (Tools>Check for Updates) and from the download section of our website.


Earlier this morning, we published an update to MaplePrimes that includes two new features as well as some significant efficiency improvements. Highlights of this update include:

Best Answer

Of all the feature requests that we receive, this has been the most popular, and we're excited to see how it is used! Simply, this new capability allows a member to select the 'best answer' from a list of many. This best answer, selected by clicking on a new trophy icon, will always always appear at the top of the list of answers.

Having your answer selected as 'best' will reward you with 7 reputation points, as well as make you eligible to receive one of two new badges to show off your question-answering prowess!

Tag Management

Improving how tags are managed within MaplePrimes has been another long time request from members, and we have made some significant improvements. The first thing that many will notice is that the interface for adding tags to a post or question is now easier to use and (hopefully) faster.

More importantly, however, are the new management features. For starters, only members with a reputation of at least 100 can add brand new tags. If your reputation is less than 100, you can only select from the extensive list of pre-existing keywords. In addition, members with a reputation of at least 50 can now manage tags for existing content by clicking on the new 'Manage Tags' button. It is our hope that this feature will help increase the value of tagging within MaplePrimes by optimizing the commonly-used keywords, and we encourage everyone to take advantage of this new capability!

Efficiency and Stability Improvements

You should notice significant speed increases across all pages within MaplePrimes. On average, page load times have sped up by a factor of 2x, and many times higher in some cases. In addition, interface changes and optimizations have dramatically reduced the file size of many pages, which will make them more responsive in general.


As always, thank you for making MaplePrimes the amazing community that it is! We are hopeful that you will enjoy these improvements, and we look forward to your comments and suggestions.

Looks like mapleprimes was just updated.  I'm finding links broken and pictures missing.

I am very happy to announce the addition of 36 new videos to the Maple T.A. Tutorial section on the Maplesoft website. These videos demonstrate how to create questions using each of the different question types in Maple T.A. You’ll find videos for multiple choice, true and false, maple-graded, mathematical formula, and much more, including the new graph sketching and free-body diagram questions introduced in Maple T.A. 10.

Maplesoft Product Manager, Maple T.A.

A new release of the Maple T.A. MAA Placement Test Suite  is now available.

The latest release takes advantage of the streamlined interface, accessibility from tablets, and other new features of Maple T.A. 10. It also includes new testing content to determine if your students understand the concepts needed for success in their algebra and precalculus courses; new parallel versions of the calculus concepts readiness test; and improved searching and browsing of testing content.

To learn more, visit What’s New in Maple T.A. MAA Placement Test Suite 10.



We received an interesting and timely submission to the Maple Application Center this morning that I think people might be interested in.  It's called:

The Comet 67P/Churyumov-Gerasimenko, Rosetta & Philae, by Dr. Ahmed Baroudy. From the abstract:

Our plan is rather a modest one since all we want is to get , by calculations, specific data concerning the comet and its lander.
We shall take a simplified model and consider the comet as a perfect solid sphere to which we can apply Newton's laws.

We want to find:

I- the acceleration on the comet surface ,
II- its radius,
III- its density,
IV- the velocity of Philae just after the 1st bounce off the comet (it has bounced twice),
V- the time for Philae to reach altitude of 1000 m above the comet .

We shall compare our findings with the already known data to see how close our simplified mathematical model findings are to the duck-shaped comet already known results.
It turned out that our calculations for a sphere shaped comet are very close to the already known data.

Click on the link above if you want to take a look.



What is Groebner? That was asked in different forms several times in MaplePrimes and MathStackExchange (for example, see ). In view of this I think the presented post on Groebner basis will be useful. This post consists of two parts: its mathematical background and examples of solutions of polynomial systems by hand and with Maple.

Let us start. Up to Wiki ,Groebner basis computation can be seen as a multivariate, non-linear generalization of both Euclid's algorithm for computing polynomial greatest common divisors, and Gaussian elimination for linear systems. This is implemented in Maple trough the Groebner package.
The simplest introduction to the topic I know is a well-written book of Ivan Arzhantsev ( which includes the proofs of all the claimed theorems and the solutions of all the exercises. Here is its digest groebner.pdf done by me (The reader is assumed to be familiar with the ideal notion and ring notion (one may refresh her/his knowledge, looking in It should be noted that there is no easy reading about this serious matter.
Referring to the digest as appropriate, we solve the system
S:={a*b = c^2+c, a^2 =a+ b*c, a*c = b^2+b} by hand and with the Groebner package.
For the order a > b > c we construct its ideal
J(S):=<f1 = a*b-c^2-c,f2 = a^2-a-b*c, f3 = a*c-b^2-b>.
The link between f1 and f2 gives
f1*a-f2*b = (-c^2-c)*a + (a + b*c)*b = a*b -a*c + b^2*c -
a*c^2 =f4.
The reduction with f1 produces
f4 ->-a*c^2- a*c + b^2*c + c^2 +c =: f4.
Now the reduction with f3 produces
f4 -> -b^2- b - b*c +c^2 + c =:f4.
The link between f2 and f3 gives:
f2*c - f3*a = a*b +a*b^2 -a*c -b*c^2 = f5.
The reduction with f1 produces
f5 -> -a*c + c*b +c^2 +c =:f5.
The reduction with f3 produces
f5 -> -b^2 -b + c*b +c^2 +c =:f5.
The reduction with f4 produces
f5 -> 2b*c =: f5.
The link between f1 and f3
f1*c - f3*b = b^3 + b^2 -c^3 -c^2=:f6.
The reduction with f4 produces
f6 -> 2b*c + 2b*c^2 -2c^3 -2c^2=:f6.
At last, we reduce f6 by f5, obtaining f6:= -2c^3 -2c^2.
We see the minimal reduced Groebner basis of S consists of
a^2 -a -b*c, -b^2 -b- b*c +c^2 +c, -2c^3 - 2c^2.
Now we find the solution set of the system under consideration. The equation -2c^3 - 2c^2 = 0 implies
c=0, c=0, c=-1. The the equation -b^2 - b - b*c +c^2 + c = 0 gives
b = 0 , b = -1, b = 0, b = -1, b = 0, b = 0 respectively.
At last, knowing b and c, we find a from a^2 -a -b*c = 0.
[{a = 0, b = 0, c = 0}, {a = 1, b = 0, c = 0}, {a = 0, b = -1, c = 0}], [{a = 0, b = 0, c = 0}, {a = 1, b = 0, c = 0}, {a = 0, b = -1, c = 0}], [{a = 0, b = 0, c = -1}].
The solution of the system under consideration by the Groebner package is somewhat different because Maple does not find the minimal reduced Groebner basis directly.



[b*c, a*c-c^2-c, b^2-c^2+b-c, a*b-c^2-c, a^2-a, c^3+c^2]


GB2 := remove(has, GB1, a);

[b*c, b^2-c^2+b-c, c^3+c^2]


GB3 := Basis(GB2, lexdeg([b, c]))

[b*c, b^2-c^2+b-c, c^3+c^2]


op(remove(has, GB3, {b}))



solc := solve(c^3+c^2);

-1, 0, 0


solb := [seq(op(map(`union`, [solve(eval(GB3, c = i), {b})], {c = i})), i = solc)]

[{b = 0, c = -1}, {b = -1, c = 0}, {b = 0, c = 0}, {b = -1, c = 0}, {b = 0, c = 0}]


sol := seq(op(map(`union`, [solve(eval(GB1, i))], i)), i = solb)

{a = 0, b = 0, c = -1}, {a = 0, b = -1, c = 0}, {a = 0, b = 0, c = 0}, {a = 1, b = 0, c = 0}, {a = 0, b = -1, c = 0}, {a = 0, b = 0, c = 0}, {a = 1, b = 0, c = 0}



S2 := {a*c-b^2-b, a*b-c^2-c, a^2-b*c+a}:

GB1 := Basis(S2, lexdeg([a, b, c]))

[a*c+b*c+c^2+c, b^2+b*c+c^2+b+c, a*b-c^2-c, a^2-b*c+a]


GB2 := remove(has, GB1, a)



sol1 := solve(GB2, b)

{b = -(1/2)*c-1/2+(1/2)*(-3*c^2-2*c+1)^(1/2)}, {b = -(1/2)*c-1/2-(1/2)*(-3*c^2-2*c+1)^(1/2)}


map(proc (c) options operator, arrow; `union`(c, sol1[1]) end proc, map(proc (C) options operator, arrow; solve(C, {a}) end proc, eval(S2, sol1[1])))

{{a = 2*c*(c+1)/(-c-1+(-3*c^2-2*c+1)^(1/2)), b = -(1/2)*c-1/2+(1/2)*(-3*c^2-2*c+1)^(1/2)}, {a = -1/2-(1/2)*(1+2*c*(-3*c^2-2*c+1)^(1/2)-2*c^2-2*c)^(1/2), b = -(1/2)*c-1/2+(1/2)*(-3*c^2-2*c+1)^(1/2)}, {a = -1/2+(1/2)*(1+2*c*(-3*c^2-2*c+1)^(1/2)-2*c^2-2*c)^(1/2), b = -(1/2)*c-1/2+(1/2)*(-3*c^2-2*c+1)^(1/2)}, {a = -(1/2)*c-1/2-(1/2)*(-3*c^2-2*c+1)^(1/2), b = -(1/2)*c-1/2+(1/2)*(-3*c^2-2*c+1)^(1/2)}}





A customer on Twitter recently asked why Maple gives the following result:



The issue here is that the t in f(t) is the same as the integration variable. 140 characters is not a lot to work with for a reply, so here is a longer explanation.


First, note that the process of integration treats the integration variable differently than the other variables, so that replacing another variable by the integration variable has a different effect depending on whether the replacement is done before or after the integration is performed. Consider this simple example:


a := int(t, t)



eval(a, t = x)



a := int(x, t)




eval(a, t = x)




In other words, integration does not commute with substitution. This is a fundamental property of integration and in fact, Maple's eval has special rules to take this into account when you ask it to replace the integration variable.  For example, if you evaluate the inert form of the integral at x = y, the substitution is performed explicitly:



eval(Int(x-t, t = 0 .. x), x = y)

Int(y-t, t = 0 .. y)


value(Int(y-t, t = 0 .. y))




However, if you try to evaluate at x = t, the evaluation is delayed until after the integral is evaluated:


eval(Int(x-t, t = 0 .. x), x = t)

eval(Int(x-t, t = 0 .. x), {x = t})



value(eval(Int(x-t, t = 0 .. x), {x = t}))




The eval command knows it shouldn't substitute into an integral when the substitution involves the variable of integration.


However, in the user's example, asking Maple for f(t) is equivalent to substitution directly before the integration is performed, like this:


subs(x = t, Int(x-t, t = 0 .. x))

Int(0, t = 0 .. t)


which of course gives:






Another way to have the two t variables be considered distinct is to explicitly make the integration variable a dummy by declaring it local:


f := proc (x) local t; int(x-t, t = 0 .. x) end proc

Now the ts are treated differently:






Austin Roche

Senior Math Developer




Updates are now available for both Maple 18 and MapleSim 6.4. 

Maple 18.02 contains improvements to many areas, including:

  • Rendering of 2-D plots
  • Help pages and examples
  • Interactive components
  • MATLAB 2014a support
  • Math engine: Laplace transforms, complex floats, simplify
  • Matrix import
  • Context menus
  • Typesetting
  • Memory management
  • OpenMaple API
  • Physics (details in comments)

To get this update, you can use Tools>Check for Updates from within Maple, or visit Maple 18.02 Downloads. (But depending on when you read this, Check for Updates may not have kicked in yet. If it doesn't find anything, wait until tomorrow morning and try again.)

For those users who haven't upgraded to MapleSim 7 yet, MapleSim 6.4.01 includes:

  • Efficiency improvements to the simulation engine, taking advantage of enhancements in Maple 18.02
  • Improvements to C code generation for model export
  • Improved handling of indexed variables when generating Modelica code

In MapleSim, use  Help>Check for Updates or visit MapleSim 6.4.02 Update. Note that MapleSim 6.4.02 is compatible with Maple 18.02.  Upgrade your Maple 18 installation to Maple 18.02 before installing this MapleSim update.


Presentations of the first national congress of civil engineering developed at the University Cesar Vallejo. From 10 to 12 November 2014.



(in spanish)

Lenin Araujo Castillo

Physics Pure

Computer Science





Maplesoft regularly hosts live webinars on a variety of topics. Below you will find details on upcoming webinars we think may be of interest to the MaplePrimes community.  For the complete list of upcoming webinars, visit our website.

Creating Questions in Maple T.A. – Part #1

This webinar will demonstrate how to create questions in Maple T.A., Maplesoft’s testing and assessment solution for any course involving mathematics. The presentation will begin with an overview of the basic types of questions available, and then delve into how to create various types of questions in Maple T.A. Incorporating algorithms and feedback directly into questions will also be touched on. Finally, the session will wrap up with an explanation and several examples of how to create better questions using the question designer.

This first webinar in a two part series will cover true/false, multiple choice, numeric, mathematical formula, fill in the blank, sketch, and FBD questions. A second webinar that demonstrates more advanced question types will follow.

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

Clickable Calculus: Linear Algebra

In this webinar, Dr. Robert Lopez will apply the techniques of “Clickable Calculus” to standard calculations in Linear Algebra.

Clickable Calculus, the idea of powerful mathematics delivered using very visual, interactive point-and-click methods, offers educators a new generation of teaching and learning techniques. Clickable Calculus introduces a better way of engaging students so that they fully understand the materials they are being taught. It responds to the most common complaint of faculty who integrate software into the classroom – time is spent teaching the tool, not the concepts.

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

First 8 9 10 11 12 13 14 Last Page 10 of 234