# What’s New in MATLAB R2021b?

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` and `ode89` may be more efficient than `ode45` on non-stiff problems that are smooth except possibly for a few isolated discontinuities.
• `ode89` may be more efficient than `ode78` on very smooth problems, when integrating over long time intervals, or when tolerances are tight.
• `ode78` and `ode89` may not be as fast or as accurate as `ode45` 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.