pentapy Quickstart¶

pentapy is a toolbox to deal with pentadiagonal matrices in Python and solve the corresponding linear equation systems.
Installation¶
The package can be installed via pip. On Windows you can install WinPython to get Python and pip running.
pip install pentapy
There are pre-built wheels for Linux, MacOS and Windows for most Python versions (2.7, 3.4-3.7).
If your system is not supported and you want to have the Cython routines of pentapy installed, you have to provide a c-compiler and run:
pip install numpy cython
pip install pentapy
To get the scipy solvers running, you have to install scipy or you can use the extra argument:
pip install pentapy[all]
Instead of “all” you can also typ “scipy” or “umfpack”.
References¶
The solver is based on the algorithms PTRANS-I
and PTRANS-II
presented by Askar et al. 2015.
Examples¶
Solving a pentadiagonal linear equation system¶
This is an example of how to solve a LES with a pentadiagonal matrix.
import numpy as np
import pentapy as pp
size = 1000
# create a flattened pentadiagonal matrix
M_flat = (np.random.random((5, size)) - 0.5) * 1e-5
V = np.random.random(size) * 1e5
# solve the LES with M_flat as row-wise flattened matrix
X = pp.solve(M_flat, V, is_flat=True)
# create the corresponding matrix for checking
M = pp.create_full(M_flat, col_wise=False)
# calculate the error
print(np.max(np.abs(np.dot(M, X) - V)))
This should give something like:
4.257890395820141e-08
Performance¶
In the following, a couple of solvers for pentadiagonal systems are compared:
Solver 1: Standard linear algebra solver of Numpy
np.linalg.solve
(link)Solver 2:
scipy.sparse.linalg.spsolve
(link)Solver 3: Scipy banded solver [
scipy.linalg.solve_banded
](scipy.github.io/devdocs/generated/scipy.linalg.solve_banded.html)Solver 4: pentapy.solve with
solver=1
Solver 5: pentapy.solve with
solver=2

The performance plot was created with perfplot
(link).