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.

We’re kicking off 2018 right, with another Meet Your Developers interview! This edition comes from Erik Postma, Manager of the Mathematical Software Group.

To catch up on previous interviews, search the “meet-your-developers” tag.

Without further ado…

 

  1. What do you do at Maplesoft?
    I’m the manager of the mathematical software group, a team of 7 mathematicians and computer scientists working on the mathematical algorithms in Maple (including myself). So my work comes in two flavours: I do the typical managerial things, involving meetings to plan new features and solve my team’s day to day problems, and in the remaining time I do my own development work.
     
  2. What did you study in school?
    I studied at Eindhoven University of Technology in the Netherlands. The first year, I took a combined program of mathematics and computer science; then for the rest of my undergrad, I studied mathematics. The program was called Applied Mathematics, but with the specialization I took it really wasn’t all that applied at all. Afterwards I continued in the PhD program at the same university, where my thesis was on a subject in abstract algebra (Lie algebras over finite fields).
     
  3. What area(s) of Maple are you currently focusing on in your development?
    I’ve spent quite a bit of time over the past two years making the facilities for working with units of measurement in Maple easier to use. There is a very powerful package for doing this that has been part of Maple for many years, but we keep hearing from our users it’s difficult to use. So I’ve worked on keeping the power of the package but making it easier to use.
     
  4. What’s the coolest feature of Maple that you’ve had a hand in developing?
    This was actually working on a problem in a part of the code that existed long before I started with Maplesoft. We have a very clever algorithm for drawing random numbers according to a custom, user-specified probability distribution. I wrote about it on MaplePrimes in a series of four blog posts, here. I’ve talked at various workshops and the like about this algorithm and how it is implemented in Maple.
     
  5. What do you like most about working at Maplesoft? How long have you worked here?
    I love working at the crossroads of mathematics and computer science; there aren’t many places in the world where you can do that as much as at Maplesoft. But the best thing is the people I work with: us mathematicians are all crazy in slightly different ways, and that makes for a very interesting working environment.
     
  6. Favourite hobby?
    Ultimate frisbee. I captain a mixed (i.e., coed) team called The Clockwork. (We play in orange jerseys – it references the book/movie A Clockwork Orange.) We play in a couple of local leagues, and some of the other members also work here. We don’t win much – but we work hard and have fun!
     
  7. What do you like on your pizza?
    Mushrooms. Mushrooms on everything!
     
  8. What’s your favourite movie?
    Probably Black Book, a dark movie about the Dutch resistance in the second world war from 2006, directed by Paul Verhoeven. I think what I like best about it is that it highlights the moral shades of grey in even so morally elevated a group as the resistance.
     
  9. What skill would you love to learn? Why?
    I’d love to learn to speak Russian! I’m trying, but I have a very hard time with it. It would allow me to communicate with my in-laws more easily; they speak Russian.
     
  10. Who’s your favourite mathematician?
    Oh, so many to choose from! I’m torn between:
  • Ada Lovelace (1815-1852), known as the first programmer.
  • Felix Klein (1849-1925), driving force behind a lot of research into geometries and their underlying symmetry groups.
  • Wilhelm Killing (1847-1923), a secondary school teacher who made big contributions to the theory of Lie algebras.

Or wait, can I choose my wife?

My September 9, 2016, blog post ("Next Number" Puzzles) pointed out the meaninglessness of the typical "next-number" puzzle. It did this by showing that two such puzzles in the STICKELERS column by Terry Stickels had more than one solution. In addition to the solution proposed in the column, another was found in a polynomial that interpolated the given members of the sequence. Of course, the very nature of the question "What is the next number?" is absurd because the next number could be anything. At best, such puzzles should require finding a pattern for the given sequence, admitting that there need not be a unique pattern.

The STICKELERS column continued to publish additional "next-number" puzzles, now no longer of interest. However, the remarkable puzzle of December 30, 2017, caused me to pull from the debris on my retirement desk the puzzle of July 15, 2017, a puzzle I had relegated to the accumulating dust thereon.

The members of the given sequence appear across the top of the following table that reproduces the graphic used to provide the solution.

It turns out that the pattern in the graphic can be expressed as 100 – (-1)k k(k+1)/2, k=0,…, a pattern Maple helped find. By the techniques in my earlier blog, an alternate pattern is expressed by the polynomial

which interpolates the nodes (1, 100), (2, 101) ... so that f(8) = -992.

The most recent puzzle consists of the sequence members 0, 1, 8, 11, 69, 88; the next number is given as 96 because these are strobogrammatic numbers, numbers that read the same upside down. Wow! A sequence with apparently no mathematical structure! Is the pattern unique? Well, it yields to the polynomial

which can also be expressed as

Hence, g(x) is an integer for any nonnegative integer x, and g(6) = -401, definitely not a strobogrammatic number. However, I do have a faint recollection that one of Terry's "next-number" puzzles had a pattern that did not yield to interpolation. Unfortunately, the dust on my desk has not yielded it up.
 

In the beginning, Maple had indexed names, entered as x[abc]; as early as Maple V Release 4 (mid 1990s), this would display as xabc. So, x[1] could be used as x1, a subscripted variable; but assigning a value to x1 created a table whose name was x. This had, and still has, undesirable side effects. See Table 0 for an illustration in which an indexed variable is assigned a value, and then the name of the concomitant table is also assigned a value. The original indexed name is destroyed by these steps.
 

 

At one time this quirk could break commands such as dsolve. I don't know if it still does, but it's a usage that those "in the know" avoid. For other users, this was a problem that cried out for a solution. And Maplesoft did provide such a solution by going nuclear - it invented the Atomic Variable, which subsumed the subscript issue by solving a larger problem.

The larger problem is this: Arbitrary collections of symbols are not necessarily valid Maple names. For example, the expression  is not a valid name, and cannot appear on the left of an assignment operator. Values cannot be assigned to it. The Atomic solution locks such symbols together into a valid name originally called an Atomic Identifier but now called an Atomic Variable. Ah, so then xcan be either an indexed name (table entry) or a non-indexed literal name (Atomic Variable). By solving the bigger problem of creating assignable names, Maplesoft solved the smaller problem of subscripts by allowing literal subscripts to be Atomic Variables.

It is only in Maple 2017 that all vestiges of "Identifier" have disappeared, replaced by "Variable" throughout. The earliest appearance I can trace for the Atomic Identifier is in Maple 11, but it might have existed in Maple 10. Since Maple 11, help for the Atomic Identifier is found on the page 

 

In Maple 17 this help could be obtained by executing help("AtomicIdentifier"). In Maple 2017, a help page for AtomicVariables exists.

In Maple 17, construction of these Atomic things changed, and a setting was introduced to make writing literal subscripts "simpler." With two settings and two outcomes for a "subscripted variable" (either indexed or non-indexed), it might be useful to see the meaning of "simpler," as detailed in the worksheet AfterMath.mw.

Many of you enjoyed our profile on one of our developers, Paulina Chin, so we’re happy to bring you another one!

Today, we’ll be talking with John May, Senior Developer of Maple. Let’s get started.

  1. What do you do at Maplesoft?
    Until recently I was consulting on-site at the NASA Jet Propulsion Laboratory helping people there more effectively solve their engineering problems using Maplesoft products.  But my main job that I am back to full time now is the development and maintenance of various parts of the Maple library.
     
  2. What did you study in school?
    I studied both Pure and Applied Mathematics at the University of Oregon,  focusing a lot on Abstract Algebra.  In graduate school, I specialized more in computation mathematics like computer algebra and numerical analysis.  My Ph.D. work focused on effective numerical algorithms for problems in polynomial algebra – with implementations in Maple!
     
  3. What area(s) of Maple are you currently focusing on in your development?
    Right now I am focused on addressing complaints I’ve gotten from engineers about the usability of units with other parts of the math library.
     
  4. What’s the coolest feature of Maple that you’ve had a hand in developing?
    A lot of the cool things I’ve built live pretty deep in the internals of Maple.  I’ve done a lot of meta-heuristic tuning to seamlessly integrate high-performance libraries into top-level Maple commands.

    I had a lot of fun developing a lot of the stuff for manipulation and visualization of colors in the ColorTools package.
     
  5. What do you like most about working at Maplesoft? How long have you worked here?
    I started working at Maple in 2007, but I’ve been a Maple user since 1997.  I love being part of the magic that brings powerful algorithmic mathematics to everyone.  The R&D team is also full of eccentric nerds who are great fun to work with.
     
  6. Favourite hobby?
    It varies by the season, but right now it is prime for mountain biking in southern California.  I ride my local trails a couple times a week, and when I get I chance, I love to get away on epic bikepacking adventures (like this one: https://www.bikemag.com/features/two-wheeled-escape-one-hour-from-l-a/  this is me: https://cdn.bikemag.com/uploads/2016/05/16File.jpg ).
     
  7. What do you like on your pizza?
    Anything and everything. Something different every time. My all-time favorite pie my from grad school days is the “Rio Rancho” from the dearly departed That’s Amore Pizza (which was next to the comic book store and across the street from North Carolina State University).  It was an olive oil and mozzarella pizza with chopped bacon that was covered in sliced fresh roma tomatoes and drizzled with ranch dressing when it came out of the oven. 
     
  8. What’s your favourite movie?
    It’s really hard to pick just one.  So, I’ll go with the safe answer and say the greatest movie of all time, and “Weird Al” Yankovic’s only foray into movies, UHF, is my favorite.
    http://www.imdb.com/title/tt0098546/
     
  9. What skill would you love to learn? (That you haven’t already) Why?
    Another hard one.  I feel like I’ve dabbled in lots of things that I would like to get better at.  At the top of the list is probably unicycling.  I’d love to get good enough to play Unicyle Football or do Muni (mountain unicyling).
    https://en.wikipedia.org/wiki/Mountain_unicycling
    http://www.unicyclefootball.com/
     
  10. Who’s your favourite mathematician?
    Batman. https://youtu.be/AcMEckOyoaM

 

The Perimeter Institute for Theoretical Physics (PI) is a place where bold ideas flourish. It brings together great minds in a shared effort to achieve scientific breakthroughs that will transform our future. PI is an independent research center in foundational theoretical physics.

One of the key mission objectives of Perimeter is to provide scientific training and educational outreach activities to the general public. Maplesoft is proud to be part of this endeavor, as PI’s Educational Outreach Champion. Maplesoft’s contributions support Perimeter’s Teacher Network training activities, core educational resources, development of online course material, support of events such as the EinsteinPlus workshop for high school teachers, the International Summer School for Young Physicists (ISSYP), and other initiatives.
 

The annual International Summer School for Young Physicists (ISSYP) is a two-week camp that brings together 40 exceptional physics-minded students from high schools across the globe to PI. The program covers many different topics in physics such as quantum mechanics, special relativity, general relativity, and cosmology. Each year students receive a complimentary copy of Maple, and use the product to practice and strengthen their math skills. The program receives an average of three-hundred applications from students in grades eleven and twelve from around the world. Competition is intense, and students who are chosen for the program are extremely bright and advanced for their age; however there is some variation in their level of math and physics knowledge. . Students are asked to review a “math primer” document to prepare them with the background needed for the program.The ISSYP program now uses Möbius, Maplesoft’s online courseware platform to administer this primer. With Möbius, PI has moved from a pdf document primer to fully online material, which has motivated more students to complete the material and be more engaged in their courses. The interactivity and engagement that technology provides has made the summer program more productive and dynamic.

EinsteinPlus is a one-week intensive workshop for Canadian and international high school teachers that focuses on modern physics, including quantum physics, special relativity, and cosmology. EinsteinPlus also provides unique opportunities to learn some of the latest developments in physics from expert researchers at the forefront of their fields. Maplesoft proudly supports this workshop by giving teachers access to and training in Maple.

 

Perimeter Institute also organizes a lively program of seminars, regularly exposing researchers and students to current ideas in the wider theoretical physics community. The talks provide content outside of, but related to, core disciplines.  Recently Maplesoft’s own physics expert Dr. Edgardo Cheb-Terrab conducted a lecture and training session at PI on Computer Algebra for Theoretical Physics.

Dr. Edgardo Cheb-Terrab is the force behind the algorithms and Maple libraries of the ODE and PDE symbolic solvers, the MathematicalFunctions package (an expert system in special functions) and the Physics package, among other things.  

In his talk at PI, the Physics project at Maplesoft was presented and the resulting Physics package was illustrated through simple problems in classical field theory, quantum mechanics and general relativity, and through tackling the computations of some recent Physical Review papers in those areas.   In addition there was a hands-on workshop where attendees were offered four choices of activity:  follow the mini-course; explore items of the worksheet of the morning presentation; or bring their own problems so that Dr. Cheb-Terrab could guide them on how to tackle it using the Physics package and Maple in general.

As a company that strives to continuously improve student learning, and empower instructors and researchers with the tools necessary to compete in an ever changing and demanding educational environment, Maplesoft’s partnership with the Perimeter Institute allows us to do just that. We take great pride and joy in bringing our technology to outreach programs for students and teachers, making these opportunities a more productive and dynamic experience for all.

 

I write shell scripts that call Maple to automate frequent tasks. Because I prefer writing Maple code to shell code, I've created a Maple package, Bark, that generates a shell script from Maple source code. It provides a compact notation for defining both optional and positional command-line parameters, and a mechanism to print a help page, from the command-line, for the script. The optional parameters can be both traditional single letter Unix options, or the more expressive GNU-style long options.

As an example, here is the Maple code, using Bark, for a hello-world script.

hello := module()
export
    Parser := Bark:-ArgParser(NULL
                              , 'prologue' = ( "Print `Hello, World!'" )
                              , 'opts' = ['help' :: 'help' &c "Print this help page"]
                             );
export
    ModuleApply := proc(cmdline :: string := "")
        Bark:-ArgParser:-Parse(Parser, cmdline);
        Bark:-printf("Hello, World!\n");
        NULL;
    end proc;
end module:

The following command creates and installs the shell script in the user's bin directory.

Bark:-CreateScript("hello", hello
                   , 'add_libname' = Bark:-SaveLib(hello, 'mla' = "hello.mla")
                  ):

The hello script is executed from the command-line as

$ hello
Hello,  World!

Pass the -h (or --help) option to display the help.

$ hello -h
Usage: hello [-h|--help] [--]

Print `Hello, World!'

Optional parameters:
-h, --help Print this help page

CreateScript creates two files that are installed in the bin directory: the shell script and a Maple archive file that contains the Maple procedures. The shell script passes its argument in a call to the parser (a Maple procedure) saved in the archive file (.mla file). Here's the created shell script for the hello command:

#!/usr/bin/env sh
MAPLE='/home/joe/maplesoft/sandbox/main/bin/maple'
CMD_LINE=$(echo $0; for arg in "$@"; do printf '%s\n' "$arg"; done)
echo "hello(\"$CMD_LINE\");" | "$MAPLE" -q -w2 -B --historyfile=none -b '/home/joe/bin/hello.mla'

I've used Bark on Linux and Windows (with Cygwin tools). It should work on any unix-compatible OS with the Bash shell. If you use a different shell that does not work with it, let me know and I should be able to modify the CreateScript command to have options for specific shells.

Bark is available on the MapleCloud. To install it, open the MapleCloud palette in Maple, select packages in the drop-down menu and go to the New tab (or possibly the Popular tab). You will also need the TextTools package which is also on the MapleCloud. The intro page for Bark has a command that automatically installs TextTools. Alternatively, executing the following commands in Maple 2017 should install both TextTools and Bark.

PackageTools:-Install~([5741316844552192,6273820789833728],'overwrite'):
Bark:-InstallExamples('overwrite'):

The source for a few useful scripts are included in the examples directory of the installed Bark toolbox. Maple help pages are included with Bark, use "Bark" as the topic.

I am pleased to announce that a new release of Maple T.A., our online testing and assessment system, is now available. Maple T.A. 2017 includes significant enhancements to learning management system integration, as well as security, performance, and other improvements. These same improvements are also available in a new version of the  Maple T.A. MAA Placement Test Suite.  For more information, see What’s New in Maple T.A. 

 

As you know, the MapleCloud is a good way to share all sorts of interactive documents with others, in private groups or so they are accessible to everyone. We recently posted some new content that I thought people might be particularly interested in: a collection of Maple Assistants.

 

Up until now, Maple Assistants were only available from within Maple, but now you can take advantage of these powerful tools wherever you are, using your web browser.

 

Code Generation  - Translate Maple code to C, Java, Python, R, and more

Scientific Constants – Explore over 20000 values of physical constants and properties of chemical elements, including units and uncertainty values

Special Functions – Explore the properties of over 200 special functions, including the Hypergeometric, Bessel, Mathieu, Heun and Legendre families of functions.

Units Converter – Convert between over 500 units of measurement. (In addition to the standard stuff, you can find out how many fortnights old you are, or how long your commute is in furlongs!)

Since 2002, the Texas A&M Math Department has sponsored a Summer Educational Enrichment in Math (SEE-Math) Program for gifted middle school students entering the 6th, 7th or 8th grade under the direction of Philip Yasskin and David Manuel.  Students spend two weeks exploring ideas from algebra, geometry, graph theory, topology, and other mathematical topics. 

The program’s primary goal is to help students find excitement in the discovery of mathematics and science concepts, and to provide them with the knowledge and confidence to continue their studies in math and science related fields. “I love working with the bright young kids who come to SEE-Math, they keep me young,” said Yasskin, one of the programs directors.


Maplesoft has been a sponsor of SEE-Math for many years and are happy to see the students explore math at this young age. Research into the importance of early math skills shows that children who are taught math early and learn the basics at a young age are set up for a lifetime of achievement in all aspects of their academic performance.  Every year, Maplesoft commits time, funds and people to various organizations to enhance the quality of math-based learning and discovery and to encourage students to strengthen their math skills.

One of the major activities of the SEE-Math program, and something the students really enjoy doing, is creating computer animations in Maple. The kids are divided into 3 groups; the Euler group is mostly made up of 6th graders with a few younger, the Fibonacci group is mostly 6th and 7th graders, and the Gauss group is 7th and 8th graders.

 Here are the 2017 first place winners from each group and their animations:

Euler Group - Nigel M "Buckets"

Fibonacci Group - Gabriel M "Skillz"

Gauss Group - Michael C - "Newton's Castle"

 

 

To learn more about this program visit: http://see-math.math.tamu.edu/2017/

While many of us in North America were getting re-acquainted with the Fall routine, Maplesoft was involved in a major event, the Maple T.A. and Möbius User Summit. In the past, the Summit has alternated locations between Europe and North America, but following the success of last year’s Summit in Vienna, Austria, we recently broke new ground and expanded the reach of the event to include more countries around the world in order to localize the themes and to meet the growing demand from educators to take learning online.

The first event, organized by Cybernet, took place in China. The second of five events on the calendar took place in London, England. Held from September 7-8, this installment was a major stop in the tour, drawing many residents of the UK to hear talks from some of our strongest proponents of Möbius in Europe. The London Summit drew several delegates from the UK alone, many of whom were completely new contacts for us! Other attendees came from as far away as Russia, Pakistan, Sri Lanka, and Australia, as well as some from Sweden, Denmark, Italy and the Netherlands. The turnout was brilliant!

Make progress or make excuses

The bulk of the London Summit was divided into three driving themes: Showcasing the Successful Delivery of Online Education; Best Practices for Digital Testing and Assessment; and Creating Engaging and Interactive Online STEM Content. Each theme consisted of 3 user presentations delivered by representatives from renowned institutions like University of Manchester, University of Birmingham, London Imperial College, University of Waterloo, Chalmers University of Technology, and more.

Maplesoft Application Engineer Surak Perera may have inadvertently set the tone for the day when he kicked off theme 1 with a quote from Tony Robbins: Make progress, or make excuses. One thing’s for sure – excuses were nowhere to be found at One Moorgate Place. The audience was captivated and engaged, and wasted no time bouncing questions and ideas off of our presenters. In fact, they were so eager to learn from our Maple T.A. and Möbius users that Jonny Zivku, Maple T.A. Product Manager, had to interject several times in order to keep the schedule moving! Each presentation reinforced the ability of Maple T.A. and Möbius to be used for diverse purposes such as distance education or analyzing incoming students, and in a range of subjects including multidisciplinary engineering cohorts, or simply core mathematics. Each presenter demonstrated that these tools can take you as far as the user’s mind is willing to be stretched.




 

Evening Reception

As heads were getting full and bellies were getting empty, the group left the luxuries of modern day and stepped back into what must have felt like a scene from Downton Abbey in the Main Reception Room of the venue. On the menu was the most culturally appropriate dish: fish and chips! Oh, and don’t forget the tea and wine!

There was no better way to wrap up the Summit than with Steve Furino’s interactive presentation and open discussion “Collecting Data about Collecting Data.” Small group discussion enabled the attendees to reconcile their inspiration from Day 1 with the practicality of putting it into practice once they return to their schools.

Overall, the London Summit was a smashing hit. The centralized location drew attendees who had a lot of common experiences which made for optimal discussion. The final question posted was the most revealing of everyone’s experience: where will the Summit be next year?

While that’s not yet decided, the Toronto Summit – the next stop in the Summit Series – is just a fortnight away (November 2-3). So for now, we’re saying “Cheers” to jolly good times in London, and “Can I get a double-double, eh” to Toronto!

Until then, you can experience the London Summit as if you were there with the full presentation proceedings and videos. They’re now available on our website!

The Railway Challenge is a competition designed by the Institute of Mechanical Engineers (IMechE), aimed at engaging young engineers with the rail industry.  The challenge, now in its seventh successive year, brings together teams of university students, as well as apprentices and graduates working in industry across the world to test their business knowledge, design ability and technical skills in a live test environment.

The Railway Challenge at Sheffield (RCAS) is an extracurricular student-led activity within the Mechanical Engineering department at the university of Sheffield, that designs, codes and manufactures a 10 1/4 inch gauge miniature locomotive to compete in the IMechE’s  Railway Challenge.  The locomotive is assessed in accordance with a set of strict rules and a detailed technical specification, such as traction, ride comfort, and a business case. The locomotives are tested live at a competition, which takes place in June at the Stapleford Miniature Railway in Leicestershire, where several categories of winners and an overall Railway Challenge champion is crowned.

The team consists of around twenty members, and students studying Mechanical Engineering and even cross discipline can get involved as soon as they come to the University, getting into to the design of components within the suspension or braking systems for example, before proceeding to manufacture and test; allowing the students to experience all the stages of an engineering product as well as skills gained by working in the team such as effective communication, time management and financial planning.

Last year the team was granted a sponsorship from Maplesoft, and as a result, huge improvements were made within the team. Overall the team jumped from finishing in 7th place to in the summer winning the maintainability challenge and finishing in 4th place overall – mostly down to the electronics working for the first year ever!

 

Using Maplesoft’s donation the team switched form a central CRIO control system to a distributed network using I2C protocols and Arduino hardware. This did away with some of the electrical teething problems the team has suffered in previous years. It also introduced our Mechanical Engineers to coding that they would otherwise not do in their course.

This year Maplesoft have again sponsored RCAS. The team is hoping to use the licenses to perform their structures calculations in an easy way to keep track of them for use in the design report. They are also hoping to use MapleSim for dynamics modelling, to assist with suspension design, and designing any electronics or control elements, such as filter design and motor control.

We’re so excited to bring you guys #MapleOfficeHours! This is a program we’ve designed for students (but open to everyone) to connect via social media for help with Maple. Maple can play a really important part in your courses and can sometimes be intimidating for new users. We get it, there’s a lot of ground to cover. With #MapleOfficeHours, we will use social media as a live Q&A platform to help you figure out how to use Maple for your homework, assignments and more. Having trouble with a command or function? #MapleOfficeHours. Need help finding a specific resource or app? #MapleOfficeHours. You get the idea…

Just like the office hours your professors hold, #MapleOfficeHours is going to be available on a regular basis for support. More events will be scheduled soon, but look out for Twitter chats, mini-webinars, Facebook live events and more. Once we get going, we’d love to hear your feedback on what other types of events we can offer and what topics you’d like to see covered.

Our first #MapleOfficeHours event will be a live Twitter chat. On October 16th at 2PM EDT, I will be joined with Maple Product Manager, @DanielSkoog and Tech Support Team Lead, Dr. Matt Calder to answer as many questions about Maple that we can possibly fit into an hour’s time.

To join the Twitter chat, use the hashtag #MapleOfficeHours when posting your questions and/or mention us with @maplesoft.

Looking forward to seeing everyone at our first #MapleOfficeHours event on October 16th, 2PM EDT!

We’ve just released a major new version of MapleSim. The MapleSim 2017 family of products provides new and improved model development and analysis tools, expands modeling scope, introduces new deployment options, and strengthens toolchain connectivity.  Here are some highlights:

  • The new Initialization Diagnostics App further simplifies the initialization task by helping you determine how your initial values are computed and what you need to do to adjust them.
     
  • The new Modal Analysis App helps you explore and understand the natural vibration modes of your mechanism, so you can determine how to reduce the vibration in the final product. 
     
  • Over 100 new components include expansions to the Electrical and Magnetic libraries.
     
  • A new Modelica® code editor makes it easier to create Modelica-based custom components.
     
  • The MapleSim Heat Transfer Library from CYBERNET, a new add-on component library, provides a comprehensive view into heat transfer effects in your model, enabling you to refine your  design to improve performance and avoid overheating.
     
  • The new MapleSim Explorer product provides a cost-effective deployment solution that allows you to make MapleSim models available to more people in your organization.

 

There’s more, of course.  See What’s New in MapleSim for lots more details.

eithne

A project that I have been working on is adding some functionality for Cluster Analysis to Maple (a small part of a much bigger project to increase Maple’s toolkit for exploratory data mining and data analysis). The launch of the MapleCloud package manager gave me a way to share my code for the project as it evolves, providing others with some useful new tools and hopefully gathering feedback (and collaborators) along the way.

At this point, there aren’t a lot of commands in the ClusterAnalysis package, but I have already hit upon several interesting applications. For example, while working on a command for plotting clusters of points, one problem I encountered was how to draw the minimal volume enclosing ellipsoid around a group (or cluster) of points. After doing some research, I stumbled upon Khachiyan’s Algorithm, which related to solving linear programming problems with rational data. The math behind this is definitely interesting, but I’m not going to spend any time on it here. For further reading, you can explore the following:

Khachiyan’s Algorithm had previously been applied in some other languages, but to the best of my knowledge, did not have any Maple implementations. As such, the following code is an implementation of Khachiyan’s Algorithm in 2-D, which could be extended to N-dimensional space rather easily.

This routine accepts an Nx2 dataset and outputs either a plot of the minimum volume enclosing ellipsoid (MVEE) or a list of results as described in the details for the ‘output’ option below.

MVEE( X :: DataSet, optional arguments, additional arguments passed to the plotting command );

The optional arguments are as follows:

  • tolerance : realcons;  specifies the convergence criterion
  • maxiterations : posint; specifies the maximum number of iterations
  • output : {identical(data,plot),list(identical(data,plot))}; specifies the output. If output includes plot, then a plot of the enclosing ellipsoid is returned. If output includes data, then the return includes is a list containing the matrix A, which defines the ellipsoid, the center of the ellipse, and the eigenvalues and eigenvectors that can be used to find the semi-axis coordinates and the angle of rotation, alpha, for the ellipse.
  • filled : truefalse; specifies if the returned plot should be filled or not

Code:

#Minimum Volume Enclosing Ellipsoid
MVEE := proc(XY, 
              {tolerance::positive:= 1e-4}, #Convergence Criterion
              {maxiterations::posint := 100},
              {output::{identical(data,plot),list(identical(data,plot))} := data},
              {filled::truefalse := false} 
            )

    local alpha, evalues, evectors, i, l_error, ldata, ldataext, M, maxvalindex, n, ncols, nrows, p1, semiaxes, stepsize, U, U1, x, X, y;
    local A, center, l_output; #Output

    if hastype(output, 'list') then
        l_output := output;
    else
        l_output := [output];
    end if;

    kernelopts(opaquemodules=false):

    ldata := Statistics:-PreProcessData(XY, 2, 'copy');

    nrows, ncols := upperbound(ldata);
    ldataext := Matrix([ldata, Vector[column](nrows, ':-fill' = 1)], 'datatype = float');

    if ncols <> 2 then
        error "expected 2 columns of data, got %1", ncols;
    end if;

    l_error := 1;

    U := Vector[column](1..nrows, 'fill' = 1/nrows);

    ##Khachiyan Algorithm##
    for n to maxiterations while l_error >= tolerance do

        X := LinearAlgebra:-Transpose(ldataext) . LinearAlgebra:-DiagonalMatrix(U) . ldataext;
        M := LinearAlgebra:-Diagonal(ldataext . LinearAlgebra:-MatrixInverse(X) . LinearAlgebra:-Transpose(ldataext));
        maxvalindex := max[index](map['evalhf', 'inplace'](abs, M));
        stepsize := (M[maxvalindex] - ncols - 1)/((ncols + 1) * (M[maxvalindex] - 1));
        U1 := (1 - stepsize) * U;
        U1[maxvalindex] := U1[maxvalindex] + stepsize;
        l_error := LinearAlgebra:-Norm(LinearAlgebra:-DiagonalMatrix(U1 - U));
        U := U1;

    end do;

    A := (1/ncols) * LinearAlgebra:-MatrixInverse(LinearAlgebra:-Transpose(ldata) . LinearAlgebra:-DiagonalMatrix(U) . ldata - (LinearAlgebra:-Transpose(ldata) . U) . LinearAlgebra:-Transpose((LinearAlgebra:-Transpose(ldata) . U)));
    center := LinearAlgebra:-Transpose(ldata) . U;
    evalues, evectors := LinearAlgebra:-Eigenvectors(A);
    evectors := evectors(.., sort[index](1 /~ (sqrt~(Re~(evalues))), `>`, ':-output' = ':-permutation'));
    semiaxes := sort(1 /~ (sqrt~(Re~(evalues))), `>`);
    alpha := arctan(Re(evectors[2,1]) / Re(evectors[1,1]));

    if l_output = [':-data'] then
        return A, center, evectors, evalues;
    elif has( l_output, ':-plot' ) then
            x := t -> center[1] + semiaxes[1] * cos(t) * cos(alpha) - semiaxes[2] * sin(t) * sin(alpha);
            y := t -> center[2] + semiaxes[1] * cos(t) * sin(alpha) + semiaxes[2] * sin(t) * cos(alpha);
            if filled then
                p1 := plots:-display(subs(CURVES=POLYGONS, plot([x(t), y(t), t = 0..2*Pi], ':-transparency' = 0.95, _rest)));
            else
                p1 := plot([x(t), y(t), t = 0..2*Pi], _rest);
            end if;
        return p1, `if`( has(l_output, ':-data'), op([A, center, evectors, evalues]), NULL );
    end if;

end proc:

 

You can run this as follows:

M:=Matrix(10,2,rand(0..3)):

plots:-display([MVEE(M,output=plot,filled,transparency=.3),
                plots:-pointplot(M, symbol=solidcircle,symbolsize=15)],
size=[0.5,"golden"]);

 

 

As it stands, this is not an export from the “work in progress” ClusterAnalysis package – it’s actually just a local procedure used by the ClusterPlot command. However, it seemed like an interesting enough application that it deserved its own post (and potentially even some consideration for inclusion in some future more geometry-specific package). Here’s an example of how this routine is used from ClusterAnalysis:

with(ClusterAnalysis);

X := Import(FileTools:-JoinPath(["datasets/iris.csv"], base = datadir));

kmeans_results := KMeans(X[[`Sepal Length`, `Sepal Width`]],
    clusters = 3, epsilon = 1.*10^(-7), initializationmethod = Forgy);

ClusterPlot(kmeans_results, style = ellipse);

 

 

The source code for this is stored on GitHub, here:

https://github.com/dskoog/Maple-ClusterAnalysis/blob/master/src/MVEE.mm

Comments and suggestions are welcomed.

 

If you don’t have a copy of the ClusterAnalysis package, you can install it from the MapleCloud window, or by running:

PackageTools:-Install(5629844458045440);

 

This is Maple:

These are some primes:

22424170499, 106507053661, 193139816479, 210936428939, 329844591829, 386408307611,
395718860549, 396412723027, 412286285849, 427552056871, 454744396991, 694607189303,
730616292977, 736602622363, 750072072203, 773012980121, 800187484471, 842622684461

This is a Maple prime:


In plain text (so you can check it in Maple!) that number is:

111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111116000808880608061111111111111111111111111111111
111111111111111111111111111866880886008008088868888011111111111111111111111111
111111111111111111111116838888888801111111188006080011111111111111111111111111
111111111111111111110808080811111111111111111111111118860111111111111111111111
111111111111111110086688511111111111111111111111116688888108881111111111111111
111111111111111868338111111111111111111111111111880806086100808811111111111111
111111111111183880811111111111111111100111111888580808086111008881111111111111
111111111111888081111111111111111111885811188805860686088111118338011111111111
111111111188008111111111111111111111888888538888800806506111111158500111111111
111111111883061111111111111111111116580088863600880868583111111118588811111111
111111118688111111111001111111111116880850888608086855358611111111100381111111
111111160831111111110880111111111118080883885568063880505511111111118088111111
111111588811111111110668811111111180806800386888336868380511108011111006811111
111111111088600008888688861111111108888088058008068608083888386111111108301111
111116088088368860808880860311111885308508868888580808088088681111111118008111
111111388068066883685808808331111808088883060606800883665806811111111116800111
111581108058668300008500368880158086883888883888033038660608111111111111088811
111838110833680088080888568608808808555608388853680880658501111111111111108011
118008111186885080806603868808888008000008838085003008868011111111111111186801
110881111110686850800888888886883863508088688508088886800111111111111111118881
183081111111665080050688886656806600886800600858086008831111111111111111118881
186581111111868888655008680368006880363850808888880088811111111111111111110831
168881111118880838688806888806880885088808085888808086111111111111111111118831
188011111008888800380808588808068083868005888800368806111111111111111111118081
185311111111380883883650808658388860008086088088000868866808811111111111118881
168511111111111180088888686580088855665668308888880588888508880800888111118001
188081111111111111508888083688033588663803303686860808866088856886811111115061
180801111111111111006880868608688080668888380580080880880668850088611111110801
188301111111111110000608808088360888888308685380808868388008006088111111116851
118001111111111188080580686868000800008680805008830088080808868008011111105001
116800111111118888803380800830868365880080868666808680088685660038801111180881
111808111111100888880808808660883885083083688883808008888888386880005011168511
111688811111111188858888088808008608880856000805800838080080886088388801188811
111138031111111111111110006500656686688085088088088850860088888530008888811111
111106001111111111111111110606880688086888880306088008088806568000808508611111
111118000111111111111111111133888000508586680858883868000008801111111111111111
111111860311111111111111111108088888588688088036081111860803011111111863311111
111111188881111111111111111100881111160386085000611111111888811111108833111111
111111118888811111111111111608811111111188680866311111111111811111888861111111
111111111688031111111111118808111111111111188860111111111111111118868811111111
111111111118850811111111115861111111111111111888111111111111111080861111111111
111111111111880881111111108051111111111111111136111111111111188608811111111111
111111111111116830581111008011111111111111111118111111111116880601111111111111
111111111111111183508811088111111111111111111111111111111088880111111111111111
111111111111111111600010301111111111111111111111111111688685811111111111111111
111111111111111111111110811801111111111111111111158808806881111111111111111111
111111111111111111111181110888886886338888850880683580011111111111111111111111
111111111111111111111111111008000856888888600886680111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111

This is a 3900 digit prime number. It took me about 400 seconds of computation to find using Maple.  Inspired by the Corpus Christi College Prime, I wanted to make an application in Maple to make my own pictures from primes.

It turns out be be really easy to do because prime numbers are realy quite common.  If you have a piece of ascii art where all the characters are numerals, you could just call on it and get a prime number that is still ascii art with a couple digits in the corner messed up (for a number this size, I expect fewer than 10 of the least significant digits would be altered).  You may notice, however, that my Maple Prime has beautiful corners!  This is possible because I found the prime in a slightly different way.

To get the ascii art in Maple, I started out by using to import ( )  and process the original image.  First then and to get a nice 78 pixel wide image.  Then to make it a pure 1-bit black or white image.

Then, from the image, I create a new Array of the decimal digits of the ascii art and my prime number.  For each of the black pixels I randomly use one of the digits or and for the white pixels (the background) I use 's.  Now I convert the Array to a large integer and test if it is prime using (it probably isn't) so, I just randomly change one of the black pixels to a different digit (there are 4 other choices) and call again. For the Maple Prime I had to do this about 1000 times before I landed on a prime number. That was surprisingly fast to me! It is a great object lesson in how dense the prime numbers really are.

So that you can join the fun without having to replicate my work, here is a small interactive Maple document that you can use to find prime numbers that draw ascii art of your source images. It has a tool that lets you preview both the pixelated image and the initial ascii art before you launch the search for the prime version.

Prime_from_Picture.mw

First 12 13 14 15 16 17 18 Last Page 14 of 34