/ pentapy Public

A Python toolbox for pentadiagonal linear systems

You must be signed in to change notification settings

# GeoStat-Framework/pentapy

## Folders and files

NameName
Last commit message
Last commit date

# Welcome to pentapy

## Purpose

pentapy is a toolbox to deal with pentadiagonal matrices in Python.

Pentadiagonal linear equation systems arise in many areas of science and engineering: e.g. when solving differential equations, in interpolation problems, or in numerical schemes like finite difference.

## 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.

To get the scipy solvers running, you have to install scipy or you can use the following extra argument:

``````pip install pentapy[all]
``````

Instead of "all" you can also typ "scipy" or "umfpack" to get one of these specific packages.

## Citation

If you use `pentapy` in your publication, please cite it:

Müller, (2019). pentapy: A Python toolbox for pentadiagonal linear systems. Journal of Open Source Software, 4(42), 1759, https://doi.org/10.21105/joss.01759

To cite a certain release, have a look at the Zenodo site: https://doi.org/10.5281/zenodo.2587158

## References

The solver is based on the algorithms PTRANS-I and PTRANS-II presented by Askar et al. 2015.

## Documentation and Examples

You can find the documentation under https://pentapy.readthedocs.org.

### 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:

The implementations of pentapy are almost one order of magnitude faster than the scipy algorithms for banded or sparse matrices.

The performance plot was created with `perfplot`. Have a look at the script: `examples/03_perform_simple.py`.

## Contact

A Python toolbox for pentadiagonal linear systems

v1.3.0 Latest
Apr 10, 2024

•
•
•