/usr/include/m4ri/solve.h is in libm4ri-dev 20130416-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | /**
* \file solve.h
*
* \brief System solving with matrix routines.
*
* \author Jean-Guillaume Dumas <Jean-Guillaume.Dumas@imag.fr>
*
*/
#ifndef M4RI_SOLVE_H
#define M4RI_SOLVE_H
/*******************************************************************
*
* M4RI: Linear Algebra over GF(2)
*
* Copyright (C) 2008 Jean-Guillaume.Dumas@imag.fr
*
* Distributed under the terms of the GNU General Public License (GPL)
*
* This code is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* The full text of the GPL is available at:
*
* http://www.gnu.org/licenses/
*
********************************************************************/
#include <m4ri/mzp.h>
#include <m4ri/mzd.h>
/**
* \brief Solves A X = B with A and B matrices.
*
* The solution X is stored inplace on B.
*
* \param A Input matrix (overwritten).
* \param B Input matrix, being overwritten by the solution matrix X
* \param cutoff Minimal dimension for Strassen recursion (default: 0).
* \param inconsistency_check decide wether or not to perform a check
* for incosistency (faster without but output not defined if
* system is not consistent).
* \return 0 if a solution was found, -1 otherwise
*/
int mzd_solve_left(mzd_t *A, mzd_t *B, int const cutoff, int const inconsistency_check);
/**
* \brief Solves (P L U Q) X = B
*
* A is an input matrix supposed to store both:
* \li an upper right triangular matrix U
* \li a lower left unitary triangular matrix L.
*
* The solution X is stored inplace on B
*
* This version assumes that the matrices are at an even position on
* the m4ri_radix grid and that their dimension is a multiple of m4ri_radix.
*
* \param A Input upper/lower triangular matrices.
* \param rank is rank of A.
* \param P Input row permutation matrix.
* \param Q Input column permutation matrix.
* \param B Input matrix, being overwritten by the solution matrix X.
* \param cutoff Minimal dimension for Strassen recursion (default: 0).
* \param inconsistency_check decide whether or not to perform a check
* for incosistency (faster without but output not defined if
* system is not consistent). \return 0 if a solution was
* found, -1 otherwise
* \return 0 if a solution was found, -1 otherwise
*/
int mzd_pluq_solve_left (mzd_t const *A, rci_t rank,
mzp_t const *P, mzp_t const *Q,
mzd_t *B, int const cutoff, int const inconsistency_check);
/**
* \brief Solves (P L U Q) X = B
*
* A is an input matrix supposed to store both:
* \li an upper right triangular matrix U
* \li a lower left unitary triangular matrix L.
* The solution X is stored inplace on B.
*
* This version assumes that the matrices are at an even position on
* the m4ri_radix grid and that their dimension is a multiple of m4ri_radix.
*
* \param A Input upper/lower triangular matrices.
* \param rank is rank of A.
* \param P Input row permutation matrix.
* \param Q Input column permutation matrix.
* \param B Input matrix, being overwritten by the solution matrix X.
* \param cutoff Minimal dimension for Strassen recursion (default: 0).
* \param inconsistency_check decide whether or not to perform a check
* for incosistency (faster without but output not defined if
* system is not consistent). \return 0 if a solution was
* found, -1 otherwise
* \return 0 if a solution was found, -1 otherwise
*/
int _mzd_pluq_solve_left(mzd_t const *A, rci_t rank,
mzp_t const *P, mzp_t const *Q,
mzd_t *B, int const cutoff, int const inconsistency_check);
/**
* \brief Solves A X = B with A and B matrices.
*
* The solution X is stored inplace on B.
*
* This version assumes that the matrices are at an even position on
* the m4ri_radix grid and that their dimension is a multiple of m4ri_radix.
*
* \param A Input matrix (overwritten).
* \param B Input matrix, being overwritten by the solution matrix X.
* \param cutoff Minimal dimension for Strassen recursion (default: 0).
* \param inconsistency_check decide whether or not to perform a check
* for incosistency (faster without but output not defined if
* system is not consistent). \return 0 if a solution was
* found, -1 otherwise
* \return 0 if a solution was found, -1 otherwise
*/
int _mzd_solve_left(mzd_t *A, mzd_t *B, int const cutoff, int const inconsistency_check);
/**
* \brief Solve X for A X = 0.
*
* If r is the rank of the nr x nc matrix A, return the nc x (nc-r)
* matrix X such that A*X == 0 and that the columns of X are linearly
* independent.
*
* \param A Input matrix (overwritten).
* \param cutoff Minimal dimension for Strassen recursion (default: 0).
*
* \wordoffset
*
* \sa mzd_pluq()
*
* \return X, NULL if kernel is empty
*/
mzd_t *mzd_kernel_left_pluq(mzd_t *A, int const cutoff);
#endif // M4RI_SOLVE_H
|