loki.analyse.util_linear_algebra
Functions
|
Solve a linear system of equations using back substitution for an upper triangular square matrix. |
|
Calculate the Row Echelon Form (REF) of a matrix. |
|
Check if a linear system of equations can be split into independent one-dimensional problems. |
|
Split a linear system of equations (<=, >=, or ==) into independent one-dimensional problems. |
- back_substitution(upper_triangular_square_matrix, right_hand_side, divison_operation=<function <lambda>>)
Solve a linear system of equations using back substitution for an upper triangular square matrix.
- Parameters:
upper_triangular_square_matrix (numpy.ndarray) – An upper triangular square matrix (R).
right_hand_side (numpy.ndarray) – A vector (y) on the right-hand side of the equation Rx = y.
division_operation (function, optional) – A custom division operation function. Default is standard division (/).
- Returns:
The solution vector (x) to the system of equations Rx = y.
- Return type:
numpy.ndarray
Notes
The function performs back substitution to find the solution vector x for the equation Rx = y, where R is an upper triangular square matrix and y is a vector. The division_operation function is used for division (e.g., for custom division operations).
The function assumes that the upper right element of the upper_triangular_square_matrix (R) is nonzero for proper back substitution.
- generate_row_echelon_form(A, conditional_check=<function <lambda>>, division_operator=<function <lambda>>)
Calculate the Row Echelon Form (REF) of a matrix.
- Parameters:
A (numpy.ndarray) – The input matrix for which the REF is to be calculated.
conditional_check (function, optional) – A custom function to check conditions during the computation.
division_operation (function, optional) – A custom division operation function. Default is standard division (/).
- Returns:
The REF of the input matrix A.
- Return type:
numpy.ndarray
Notes
If the input matrix has no rows or columns, it is already in REF, and the function returns itself.
The function utilizes the specified division operation (default is standard division) for division.
Reference
https://math.stackexchange.com/a/3073117 for question: https://math.stackexchange.com/questions/3073083/how-to-reduce-matrix-into-row-echelon-form-in-numpy
- is_independent_system(matrix)
Check if a linear system of equations can be split into independent one-dimensional problems.
- Parameters:
matrix (numpy.ndarray) – A rectangular matrix representing coefficients.
- Returns:
True if the system can be split into independent one-dimensional problems, False otherwise.
- Return type:
Notes
This function checks whether a linear system of equations in the form of matrix [operator] right_hand_side can be split into independent one-dimensional problems. The number of problems is determined by the number of variables (the row number of the matrix).
Each problem consists of a coefficient vector and a right-hand side. The system can be considered independent if each row of the matrix has exactly one non-zero coefficient or no non-zero coefficients.
- yield_one_d_systems(matrix, right_hand_side)
Split a linear system of equations (<=, >=, or ==) into independent one-dimensional problems.
- Parameters:
matrix (numpy.ndarray) – A rectangular matrix representing coefficients.
right_hand_side (numpy.ndarray) – The right-hand side vector.
- Yields:
tuple[numpy.ndarray, numpy.ndarray] – A tuple containing a coefficient vector and the corresponding right-hand side.
Notes
The independence of the problems is NOT explicitly checked; call is_independent_system before using this function if unsure.
This function takes a linear system of equations in the form of matrix [operator] right_hand_side, where “matrix” is a rectangular matrix, “x” is a vector of variables, and “right_hand_side” is the right-hand side vector. It splits the system into assumed independent one-dimensional problems.
Each problem consists of a coefficient vector and a right-hand side. The number of problems is equal to the number of variables (the row number of the matrix).
Example
for A, b in yield_one_d_systems(matrix, right_hand_side): # Solve the one-dimensional problem A * x = b solution = solve_one_d_system(A, b)