General MEX Implementation of Thomas' Algorithm

Version 2.7.0.2 (18.7 KB) by oreoman
MEX (C/C++) Implementation of Thomas Algorithm (or Tridiagonal Matrix Algorithm) for real and complex data.
96 Downloads
Updated 10 Mar 2020

MLDIVIDE has a great tridiagonal matrix solver for sparse matrices, and there are other implementations of Thomas' algorithm out there (see below), but I needed a faster way to solve tridiagonal systems for complex data; this seems to do the trick. On my system (and R2018b), this is about four times faster than MLDIVIDE or a straight up implementation in MATLAB.

This does use interleaved complex numbers with AVX instructions for complex operations, so to compile for use just put it on your path, type "mex -R2018a 'CFLAGS=-mavx' tdma.c" and it should work.

For a MEX implementation that works on REAL data, please see:
https://www.mathworks.com/matlabcentral/fileexchange/38640-implementation-of-thomas-algorithm--mex

For a MATLAB implementation that works on all data, please see:
https://www.mathworks.com/matlabcentral/fileexchange/40722-tridiag-m

Cite As

oreoman (2026). General MEX Implementation of Thomas' Algorithm (https://github.com/michael-nix/MATLAB-MEX-Thomas-Algorithm), GitHub. Retrieved .

MATLAB Release Compatibility
Created with R2018b
Compatible with R2018a and later releases
Platform Compatibility
Windows macOS Linux
Categories
Find more on Code Generation, GPU, and Third-Party Support in Help Center and MATLAB Answers
Acknowledgements

Inspired by: Implementation of Thomas algorithm, mex, tridiag.m

Versions that use the GitHub default branch cannot be downloaded

Version Published Release Notes
2.7.0.2

Connecting to GitHub...

2.7.0.1

Of course I forgot a few important comments on how to compile the MEX thread pool stuff so... fixed.

2.7.0

Added in a version that includes use of new persistent Thread Pool code for multi-threading, greatly speeding up smaller 2D and 3D problems.

2.6.5.0

Fixed a stupid logic error for 3D problems.

2.6.0.0

Added additional error checking, and updated some notes on multi-threading performance.

2.5.0.0

Added in limited multi-threading support, with underwhelming results.

2.0.0.0

Updated to include real data too, and to handle multi-dimensional problems without the need for permutation and reshaping of inputs / outputs.

1.0.0.0

Added in some error checks so things don't just crash MATLAB if you're off by a little bit.

To view or report issues in this GitHub add-on, visit the GitHub Repository.
To view or report issues in this GitHub add-on, visit the GitHub Repository.