General MEX Implementation of Thomas' Algorithm
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
引用格式
oreoman (2024). General MEX Implementation of Thomas' Algorithm (https://github.com/michael-nix/MATLAB-MEX-Thomas-Algorithm), GitHub. 检索时间: .
MATLAB 版本兼容性
平台兼容性
Windows macOS Linux类别
- Image Processing and Computer Vision > Computer Vision Toolbox > Code Generation, GPU, and Third-Party Support >
标签
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!无法下载基于 GitHub 默认分支的版本
版本 | 已发布 | 发行说明 | |
---|---|---|---|
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. |