Student Projects in Maxima Vol 1, Num 1: Systems of ODEs and Chaos

Student Projects in Maxima is an online project to disseminate work by undergraduate students using Maxima to reproduce published results in the sciences and social sciences.

Volume 1, Number 1 (2017) is devoted to Chaotic Systems of Ordinary Differential Equations.

Contents:

Thornburg, Eric, Simple Pendulum and Chaos

Bhimani, Kevin, Chaos in a 3-Species Food Chain

York, Lily, A Lattice Model of Epilepsy

Andrews, Steven, 3D Chaotic Model

Rutledge, Tim,  A Model of Neuronal Bursting

 

 

Advertisements

Student Projects in Maxima Vol 1, Num 2: Systems of ODEs with Impulses and Switching Functions

Student Projects in Maxima is an online project to disseminate work by undergraduate students using Maxima to reproduce published results in the sciences and social sciences.

Volume 1, Number 2 (2017) is devoted to Systems of Ordinary Differential Equations with time-dependent forcing terms, non-continuous inputs, and forcing terms that require knowledge of a past state of the system.

Contents:

Chumley, Qynce, An Office Heating and Cooling Model

Williams, Nick, Baseball Pitch Dynamics

Rizzolo, Skylar, BAC Model for alcohol consumption

Barth, Eric, A model of bladder bacteria proliferation in prostate disease

Barth, Eric, A Model of Pulse Vaccination Strategyi

 

A pause() function for Maxima

In MATLAB, pause interrupts execution of a loop until the user strikes a key, and pause(<n>) pauses for <n> seconds before resuming execution.
Here’s my attempt at a pause() function for Maxima that works in a similar way to MATLAB.  It uses Maxima’s read() to stop everything and wait for user input, and it uses the lisp function sleep to stop for a fixed number of seconds.
**note that a lisp function
     (function-name argument)
can be called inside Maxima as
     ?function-name(argument)
I’m not happy that in order to resume after the pause, the user needs to enter a valid character (space or nothing results in an error) followed by CTRL-SHIFT.  I hope to either figure something else out or even better hear suggestions from other Maxima users!
pause([options]):=block([tsecs],
    tsecs:assoc('pausetime,options,0),
    if tsecs=0 then
       read("Execution Paused...enter any character then CTRL-ENTER")
    else(
        disp(sconcat("paused for ", tsecs," seconds")),
       ?sleep(tsecs)),
    return("")
);
call this either as
     pause();
or, for a three second pause
     pause(pausetime=3);

Multiple plots in a single Maxima figure

In MATLAB, I often use the subplot() command to make an array of multiple plots in a single figure.

In Maxima, we can achieve that by generating each of the subplots using gr2d(),  and then putting them all together with a call to draw() or wxdraw():

2scenes

There’s an optional columns argument — the subplots are drawn row-wise in an array with the specified number of columns:

3scenes

And of course all this works for 3d plots using gr3d():

3dscenes

My Two Favorite wxMaxima Keyboard Shortcuts

Alt Up to recall previous commands to the current input line

In Matlab and RStudio, I love the ability to recall a command I’ve already typed using the up arrow key.  Today I discovered alt up arrow to do the same in wxMaxima!

Ctrl Shift K  for autocompletion and function template

This is really the best implementation of function templates I’ve seen in an IDE:

In wxMaxima, if I type inte  and then ctrl shift k, I see a popup menu of possible completions.  Choosing integrate results in an input cell template that looks like:

integrate(<expr>,<x>)

Pressing Tab highlights <expr> and I simply type the expression to be integrated.   A second press of Tab key highlights <x> and I type the name of the independent variable.

But wait, there’s more:  this works for any currently defined function—including user defined functions.

**UPDATE**  In the newer versions  of wxMaxima (since v15.10)   Ctrl+Tab and Shift+Ctrl+Tab also trigger autocompletion.

Maxima Language Syntax Highlighting in Notepad++

notepad_plus_plus

Notepad++ is lots of people’s favorite text editor for Windows.  I use it every day.

A little googling around led me to a Notepad++ user-defined syntax highlighting  file for the Maxima language, written by David Scherfgen and shared at the Maxima-Discuss list.

I made a little change to the file that overcame a nagging difficulty —  I found that .mac file extensions weren’t automatically being recognized upon opening.

Here’s a link to my modifed file.

To include Maxima syntax highlighting in Notepad++ do this:

  1. unzip the downloaded file MaximaNotepadDS.zip
  2. in Notepad++, go to Language –> Define your language…
  3. Press Import and navigate to the file MaximaNotepadDS.xml
  4. Quit Notepad++ and then start the program again.
  5. Now in Language menu, you’ll see Maxima in the list of languages at the bottom of the drop-down menu
  6. A  .mac file already open won’t display with the new syntax highlighting, but any .mac file you open or save from new will automatically show with syntax highlighting.