In this post I discuss some of the new features in MATLAB R2021b that captured my interest. See the release notes for a detailed list of the many changes in MATLAB and its toolboxes. For my articles about new features in earlier releases, see here.
High Order Runge–Kutta ODE Solvers
The MATLAB suite of solvers for ordinary differential equations previously contained 8 solvers, including 3 Runge-Kutta solvers: ode23
, ode23tb
, and ode45
. The suite has been augmented with two new high-order Runge-Kutta solvers: ode78
uses 7th and 8th order Runge-Kutta formulas and ode89
uses 8th and 9th order Runge-Kutta formulas.
The documentation says that
ode78
andode89
may be more efficient thanode45
on non-stiff problems that are smooth except possibly for a few isolated discontinuities.ode89
may be more efficient thanode78
on very smooth problems, when integrating over long time intervals, or when tolerances are tight.ode78
andode89
may not be as fast or as accurate asode45
in single precision.
Matrix to Scalar Power
The MATLAB mpower
function is called by an exponentiation A^z
when A
is a matrix and z
is a real or complex scalar. For the meaning of such arbitrary matrix powers see What Is a Fractional Matrix Power?
Previously, mpower
used a diagonalization of A
. For a matrix that is not diagonalizable, or is close to being not diagonalizaable, the results could be inaccurate. In R2021b a Schur–Padé algorithm, which employs a Schur decomposition in conjunction with Padé approximation, is used that works for all matrices. The difference in accuracy between the old and new versions of mpower
is clearly demonstrated by computing the square root of a 2-by-2 Jordan block (a difficult case because it is defective).
% R2021a >> A = [1 1; 0 1], X = A^(0.5), residual = A - X^2 A = 1 1 0 1 X = 1 0 0 1 residual = 0 1 0 0 % R2021b >> A = [1 1; 0 1], X = A^(0.5), residual = A - X^2 A = 1 1 0 1 X = 1.0000e+00 5.0000e-01 0 1.0000e+00 residual = 0 0 0 0
Functions on nD Arrays
The new function pagesvd
computes the singular value decomposition (SVD) of pages of nD arrays. A page is a 2D slice (i.e., a matrix) formed by taking all the elements in the first two dimensions and fixing the later subscripts. Related functions include pagemtimes
for matrix multiplication abd pagetranspose
for transposition, both introduced in R2020b. Better performance can be expected from these page functions than from explicit looping over the pages, especially for small-sized pages.
Improvements to Editor
Several improvements have been introduced to the MATLAB Editor. Ones that caught my eye are the ability to edit rectangular areas of text, automatic completion of block endings and delimiters, wrapping of comments, and changing the case of selected text. I do all my editing in Emacs, using the MATLAB major mode, and these sorts of things are either available or can be added by customization. However, these are great additions for MATLAB Editor users.