Linear Algebra
Linear algebra module for internal usage: ezdxf.math.linalg
Functions
- ezdxf.math.linalg.tridiagonal_vector_solver(A: List[List[float]], B: Iterable[float]) list[float]
Solves the linear equation system given by a tri-diagonal nxn Matrix A . x = B, right-hand side quantities as vector B. Matrix A is diagonal matrix defined by 3 diagonals [-1 (a), 0 (b), +1 (c)].
Note: a0 is not used but has to be present, cn-1 is also not used and must not be present.
If an
ZeroDivisionErrorexception occurs, the equation system can possibly be solved byBandedMatrixLU(A, 1, 1).solve_vector(B)- Parameters:
A –
diagonal matrix [[a0..an-1], [b0..bn-1], [c0..cn-1]]
[[b0, c0, 0, 0, ...], [a1, b1, c1, 0, ...], [0, a2, b2, c2, ...], ... ]
B – iterable of floats [[b1, b1, …, bn]
- Returns:
list of floats
- Raises:
ZeroDivisionError – singular matrix
- ezdxf.math.linalg.tridiagonal_matrix_solver(A: List[List[float]] | ndarray[tuple[Any, ...], dtype[float64]], B: List[List[float]] | ndarray[tuple[Any, ...], dtype[float64]]) Matrix
Solves the linear equation system given by a tri-diagonal nxn Matrix A . x = B, right-hand side quantities as nxm Matrix B. Matrix A is diagonal matrix defined by 3 diagonals [-1 (a), 0 (b), +1 (c)].
Note: a0 is not used but has to be present, cn-1 is also not used and must not be present.
If an
ZeroDivisionErrorexception occurs, the equation system can possibly be solved byBandedMatrixLU(A, 1, 1).solve_vector(B)- Parameters:
A –
diagonal matrix [[a0..an-1], [b0..bn-1], [c0..cn-1]]
[[b0, c0, 0, 0, ...], [a1, b1, c1, 0, ...], [0, a2, b2, c2, ...], ... ]
B – matrix [[b11, b12, …, b1m], [b21, b22, …, b2m], … [bn1, bn2, …, bnm]]
- Returns:
matrix as
Matrixobject- Raises:
ZeroDivisionError – singular matrix
- ezdxf.math.linalg.banded_matrix(A: Matrix, check_all=True) tuple[Matrix, int, int]
Transform matrix A into a compact banded matrix representation. Returns compact representation as
Matrixobject and lower- and upper band count m1 and m2.- Parameters:
A – input
Matrixcheck_all – check all diagonals if
Trueor abort testing after first all zero diagonal ifFalse.
Matrix Class
- class ezdxf.math.linalg.Matrix(items: Any = None, shape: Tuple[int, int] | None = None, matrix: List[List[float]] | ndarray[tuple[Any, ...], dtype[float64]] | None = None)
Basic matrix implementation based
numpy.ndarray. Matrix data is stored in row major order, this means in a list of rows, where each row is a list of floats.Initialization:
Matrix(shape=(rows, cols)) … new matrix filled with zeros
Matrix(matrix[, shape=(rows, cols)]) … from copy of matrix and optional reshape
Matrix([[row_0], [row_1], …, [row_n]]) … from Iterable[Iterable[float]]
Matrix([a1, a2, …, an], shape=(rows, cols)) … from Iterable[float] and shape
Changed in version 1.2: Implementation based on
numpy.ndarray.- matrix
matrix data as
numpy.ndarray
- nrows
Count of matrix rows.
- ncols
Count of matrix columns.
- shape
Shape of matrix as (n, m) tuple for n rows and m columns.
- append_col(items: Sequence[float]) None
Append a column to the matrix.
- append_row(items: Sequence[float]) None
Append a row to the matrix.
- col(index: int) list[float]
Return column index as list of floats.
- cols() list[list[float]]
Return a list of all columns.
- determinant() float
Returns determinant of matrix, raises
ZeroDivisionErrorif matrix is singular.
- diag(index: int) list[float]
Returns diagonal index as list of floats.
An index of 0 specifies the main diagonal, negative values specifies diagonals below the main diagonal and positive values specifies diagonals above the main diagonal.
e.g. given a 4x4 matrix:
index 0 is [00, 11, 22, 33],
index -1 is [10, 21, 32] and
index +1 is [01, 12, 23]
- classmethod identity(shape: Tuple[int, int]) Matrix
Returns the identity matrix for configuration shape.
- isclose(other: object) bool
Returns
Trueif matrices are close to equal, tolerance value for comparison is adjustable by the attributeMatrix.abs_tol.
- static reshape(items: Iterable[float], shape: Tuple[int, int]) Matrix
Returns a new matrix for iterable items in the configuration of shape.
- row(index: int) list[float]
Returns row index as list of floats.
- rows() list[list[float]]
Return a list of all rows.
- set_col(index: int, items: float | Iterable[float] = 1.0) None
Set column values to a fixed value or from an iterable of floats.
- set_diag(index: int = 0, items: float | Iterable[float] = 1.0) None
Set diagonal values to a fixed value or from an iterable of floats.
An index of
0specifies the main diagonal, negative values specifies diagonals below the main diagonal and positive values specifies diagonals above the main diagonal.e.g. given a 4x4 matrix: index
0is [00, 11, 22, 33], index-1is [10, 21, 32] and index+1is [01, 12, 23]
- set_row(index: int, items: float | Iterable[float] = 1.0) None
Set row values to a fixed value or from an iterable of floats.
- __getitem__(item: tuple[int, int]) float
Get value by (row, col) index tuple, fancy slicing as known from numpy is not supported.
- __setitem__(item: tuple[int, int], value: float)
Set value by (row, col) index tuple, fancy slicing as known from numpy is not supported.
- __eq__(other: object) bool
Returns
Trueif matrices are equal.
- __add__(other: Matrix | float) Matrix
Matrix addition by another matrix or a float, returns a new matrix.
NumpySolver
- class ezdxf.math.linalg.NumpySolver(A: List[List[float]] | ndarray[tuple[Any, ...], dtype[float64]])
Replaces in v1.2 the
LUDecompositionsolver.- solve_vector(B: Iterable[float]) list[float]
Solves the linear equation system given by the nxn Matrix A . x = B, right-hand side quantities as vector B with n elements.
- Parameters:
B – vector [b1, b2, …, bn]
- Raises:
numpy.linalg.LinAlgError – singular matrix
- solve_matrix(B: List[List[float]] | ndarray[tuple[Any, ...], dtype[float64]]) Matrix
Solves the linear equation system given by the nxn Matrix A . x = B, right-hand side quantities as nxm Matrix B.
- Parameters:
B – matrix [[b11, b12, …, b1m], [b21, b22, …, b2m], … [bn1, bn2, …, bnm]]
- Raises:
numpy.linalg.LinAlgError – singular matrix
BandedMatrixLU Class
- class ezdxf.math.linalg.BandedMatrixLU(A: Matrix, m1: int, m2: int)
Represents a LU decomposition of a compact banded matrix.
- upper
Upper triangle
- lower
Lower triangle
- m1
Lower band count, excluding main matrix diagonal
- m2
Upper band count, excluding main matrix diagonal
- index
Swapped indices
- nrows
Count of matrix rows.
- solve_vector(B: Iterable[float]) list[float]
Solves the linear equation system given by the banded nxn Matrix A . x = B, right-hand side quantities as vector B with n elements.
- Parameters:
B – vector [b1, b2, …, bn]
- Returns:
vector as list of floats
- solve_matrix(B: List[List[float]] | ndarray[tuple[Any, ...], dtype[float64]]) Matrix
Solves the linear equation system given by the banded nxn Matrix A . x = B, right-hand side quantities as nxm Matrix B.
- Parameters:
B – matrix [[b11, b12, …, b1m], [b21, b22, …, b2m], … [bn1, bn2, …, bnm]]
- Returns:
matrix as
Matrixobject