|
methods for MIP matrix data structure
- Author
- Dieter Weninger
-
Gerald Gamrath
The MIP matrix is organized as sparse data structure in row and and column major format.
Definition in file matrix.c.
Go to the source code of this file.
|
static SCIP_RETCODE | getActiveVariables (SCIP *scip, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant) |
|
static SCIP_RETCODE | addRow (SCIP *scip, SCIP_MATRIX *matrix, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real lhs, SCIP_Real rhs, int maxnnonzsmem, SCIP_Bool *rowadded) |
|
static SCIP_RETCODE | addConstraint (SCIP *scip, SCIP_MATRIX *matrix, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real lhs, SCIP_Real rhs, int maxnnonzsmem, SCIP_Bool *rowadded) |
|
static SCIP_RETCODE | setColumnMajorFormat (SCIP *scip, SCIP_MATRIX *matrix) |
|
static SCIP_RETCODE | calcActivityBounds (SCIP *scip, SCIP_MATRIX *matrix) |
|
SCIP_RETCODE | SCIPmatrixCreate (SCIP *scip, SCIP_MATRIX **matrixptr, SCIP_Bool *initialized, SCIP_Bool *complete) |
|
void | SCIPmatrixFree (SCIP *scip, SCIP_MATRIX **matrix) |
|
void | SCIPmatrixPrintRow (SCIP *scip, SCIP_MATRIX *matrix, int row) |
|
SCIP_RETCODE | SCIPmatrixGetParallelRows (SCIP *scip, SCIP_MATRIX *matrix, SCIP_Real *scale, int *pclass) |
|
SCIP_RETCODE | SCIPmatrixGetParallelCols (SCIP *scip, SCIP_MATRIX *matrix, SCIP_Real *scale, int *pclass, SCIP_Bool *varineq) |
|
SCIP_Real * | SCIPmatrixGetColValPtr (SCIP_MATRIX *matrix, int col) |
|
int * | SCIPmatrixGetColIdxPtr (SCIP_MATRIX *matrix, int col) |
|
int | SCIPmatrixGetColNNonzs (SCIP_MATRIX *matrix, int col) |
|
int | SCIPmatrixGetNColumns (SCIP_MATRIX *matrix) |
|
SCIP_Real | SCIPmatrixGetColUb (SCIP_MATRIX *matrix, int col) |
|
SCIP_Real | SCIPmatrixGetColLb (SCIP_MATRIX *matrix, int col) |
|
int | SCIPmatrixGetColNUplocks (SCIP_MATRIX *matrix, int col) |
|
int | SCIPmatrixGetColNDownlocks (SCIP_MATRIX *matrix, int col) |
|
SCIP_VAR * | SCIPmatrixGetVar (SCIP_MATRIX *matrix, int col) |
|
const char * | SCIPmatrixGetColName (SCIP_MATRIX *matrix, int col) |
|
SCIP_Real * | SCIPmatrixGetRowValPtr (SCIP_MATRIX *matrix, int row) |
|
int * | SCIPmatrixGetRowIdxPtr (SCIP_MATRIX *matrix, int row) |
|
int | SCIPmatrixGetRowNNonzs (SCIP_MATRIX *matrix, int row) |
|
const char * | SCIPmatrixGetRowName (SCIP_MATRIX *matrix, int row) |
|
int | SCIPmatrixGetNRows (SCIP_MATRIX *matrix) |
|
SCIP_Real | SCIPmatrixGetRowLhs (SCIP_MATRIX *matrix, int row) |
|
SCIP_Real | SCIPmatrixGetRowRhs (SCIP_MATRIX *matrix, int row) |
|
SCIP_Bool | SCIPmatrixIsRowRhsInfinity (SCIP_MATRIX *matrix, int row) |
|
int | SCIPmatrixGetNNonzs (SCIP_MATRIX *matrix) |
|
SCIP_Real | SCIPmatrixGetRowMinActivity (SCIP_MATRIX *matrix, int row) |
|
SCIP_Real | SCIPmatrixGetRowMaxActivity (SCIP_MATRIX *matrix, int row) |
|
int | SCIPmatrixGetRowNMinActNegInf (SCIP_MATRIX *matrix, int row) |
|
int | SCIPmatrixGetRowNMinActPosInf (SCIP_MATRIX *matrix, int row) |
|
int | SCIPmatrixGetRowNMaxActNegInf (SCIP_MATRIX *matrix, int row) |
|
int | SCIPmatrixGetRowNMaxActPosInf (SCIP_MATRIX *matrix, int row) |
|
SCIP_CONS * | SCIPmatrixGetCons (SCIP_MATRIX *matrix, int row) |
|
SCIP_Bool | SCIPmatrixUplockConflict (SCIP_MATRIX *matrix, int col) |
|
SCIP_Bool | SCIPmatrixDownlockConflict (SCIP_MATRIX *matrix, int col) |
|
transforms given variables, scalars and constant to the corresponding active variables, scalars and constant
- Parameters
-
scip | SCIP instance |
vars | vars array to get active variables for |
scalars | scalars a_1, ..., a_n in linear sum a_1*x_1 + ... + a_n*x_n + c |
nvars | pointer to number of variables and values in vars and vals array |
constant | pointer to constant c in linear sum a_1*x_1 + ... + a_n*x_n + c |
Definition at line 46 of file matrix.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPgetProbvarLinearSum(), SCIPreallocBufferArray, and TRUE.
Referenced by addConstraint().
add one row to the constraint matrix
- Parameters
-
scip | SCIP data structure |
matrix | constraint matrix |
vars | variables of this row |
vals | coefficients of this row |
nvars | number of variables of this row |
lhs | left hand side |
rhs | right hand side |
maxnnonzsmem | maximal number of fillable elements |
rowadded | flag indicating if constraint was added to matrix |
Definition at line 81 of file matrix.c.
References FALSE, SCIP_Matrix::isrhsinfinite, SCIP_Matrix::lhs, SCIP_Matrix::ndownlocks, SCIP_Matrix::nnonzs, SCIP_Matrix::nrows, NULL, SCIP_Matrix::nuplocks, SCIP_Matrix::rhs, SCIP_Matrix::rowmatbeg, SCIP_Matrix::rowmatcnt, SCIP_Matrix::rowmatind, SCIP_Matrix::rowmatval, SCIP_Bool, SCIP_OKAY, SCIP_Real, SCIPinfinity(), SCIPisInfinity(), SCIPisZero(), SCIPvarGetProbindex(), TRUE, and SCIP_Matrix::vars.
Referenced by addConstraint().
add one constraint to matrix
- Parameters
-
scip | current scip instance |
matrix | constraint matrix |
vars | variables of this constraint |
vals | variable coefficients of this constraint |
nvars | number of variables |
lhs | left hand side |
rhs | right hand side |
maxnnonzsmem | maximal number of fillable elements |
rowadded | flag indicating of row was added to matrix |
Definition at line 199 of file matrix.c.
References addRow(), FALSE, getActiveVariables(), NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPduplicateBufferArray, SCIPfreeBufferArray, SCIPisInfinity(), and SCIPisLE().
Referenced by SCIPmatrixCreate().
transform row major format into column major format
- Parameters
-
scip | current scip instance |
matrix | constraint matrix |
Definition at line 276 of file matrix.c.
References BMSclearMemoryArray, SCIP_Matrix::colmatbeg, SCIP_Matrix::colmatcnt, SCIP_Matrix::colmatind, SCIP_Matrix::colmatval, SCIP_Matrix::ncols, SCIP_Matrix::nrows, NULL, SCIP_Matrix::rowmatbeg, SCIP_Matrix::rowmatcnt, SCIP_Matrix::rowmatind, SCIP_Matrix::rowmatval, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, and SCIPfreeBufferArray.
Referenced by SCIPmatrixCreate().
calculate min/max activity per row
- Parameters
-
scip | current scip instance |
matrix | constraint matrix |
Definition at line 343 of file matrix.c.
References SCIP_Matrix::lb, SCIP_Matrix::maxactivity, SCIP_Matrix::maxactivityneginf, SCIP_Matrix::maxactivityposinf, SCIP_Matrix::minactivity, SCIP_Matrix::minactivityneginf, SCIP_Matrix::minactivityposinf, SCIP_Matrix::ncols, SCIP_Matrix::nrows, NULL, SCIP_Matrix::rowmatbeg, SCIP_Matrix::rowmatcnt, SCIP_Matrix::rowmatind, SCIP_Matrix::rowmatval, SCIP_OKAY, SCIP_Real, SCIPinfinity(), SCIPisInfinity(), SCIPisZero(), and SCIP_Matrix::ub.
Referenced by SCIPmatrixCreate().
initialize matrix
- Parameters
-
scip | current scip instance |
matrixptr | pointer to constraint matrix object to be initialized |
initialized | was the initialization successful? |
complete | are all constraint represented within the matrix? |
Definition at line 430 of file matrix.c.
References addConstraint(), BMSclearMemoryArray, calcActivityBounds(), SCIP_Matrix::colmatbeg, SCIP_Matrix::colmatcnt, SCIP_Matrix::colmatind, SCIP_Matrix::colmatval, SCIP_Matrix::cons, FALSE, SCIP_Matrix::isrhsinfinite, SCIP_Matrix::lb, SCIP_Matrix::lhs, SCIP_Matrix::maxactivity, SCIP_Matrix::maxactivityneginf, SCIP_Matrix::maxactivityposinf, SCIP_Matrix::minactivity, SCIP_Matrix::minactivityneginf, SCIP_Matrix::minactivityposinf, SCIP_Matrix::ncols, SCIP_Matrix::ndownlocks, SCIP_Matrix::nnonzs, SCIP_Matrix::nrows, NULL, SCIP_Matrix::nuplocks, SCIP_Matrix::rhs, SCIP_Matrix::rowmatbeg, SCIP_Matrix::rowmatcnt, SCIP_Matrix::rowmatind, SCIP_Matrix::rowmatval, SCIP_Bool, SCIP_CALL, SCIP_ERROR, SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIP_SETPPCTYPE_COVERING, SCIP_SETPPCTYPE_PACKING, SCIP_SETPPCTYPE_PARTITIONING, SCIPallocBuffer, SCIPallocBufferArray, SCIPallocClearMemoryArray, SCIPconshdlrGetCheckConss(), SCIPconshdlrGetName(), SCIPconshdlrGetNCheckConss(), SCIPconsIsTransformed(), SCIPdebugMessage, SCIPduplicateBufferArray, SCIPfreeBufferArray, SCIPgetCapacityKnapsack(), SCIPgetConshdlrs(), SCIPgetLhsLinear(), SCIPgetLhsVarbound(), SCIPgetNConshdlrs(), SCIPgetNConss(), SCIPgetNVars(), SCIPgetNVarsKnapsack(), SCIPgetNVarsLinear(), SCIPgetNVarsLogicor(), SCIPgetNVarsSetppc(), SCIPgetRhsLinear(), SCIPgetRhsVarbound(), SCIPgetTypeSetppc(), SCIPgetValsLinear(), SCIPgetVars(), SCIPgetVarsKnapsack(), SCIPgetVarsLinear(), SCIPgetVarsLogicor(), SCIPgetVarsSetppc(), SCIPgetVarVarbound(), SCIPgetVbdcoefVarbound(), SCIPgetVbdvarVarbound(), SCIPgetWeightsKnapsack(), SCIPinfinity(), SCIPisStopped(), SCIPreallocBufferArray, SCIPvarGetLbGlobal(), SCIPvarGetNLocksDown(), SCIPvarGetNLocksUp(), SCIPvarGetUbGlobal(), setColumnMajorFormat(), TRUE, SCIP_Matrix::ub, and SCIP_Matrix::vars.
Referenced by SCIP_DECL_PRESOLEXEC().
print one row of the matrix
- Parameters
-
scip | current SCIP instance |
matrix | constraint matrix object |
row | row index |
Definition at line 845 of file matrix.c.
References SCIP_Matrix::cons, SCIP_Matrix::lhs, SCIP_Matrix::rhs, SCIP_Matrix::rowmatbeg, SCIP_Matrix::rowmatcnt, SCIP_Matrix::rowmatind, SCIP_Matrix::rowmatval, SCIP_Real, SCIPconsGetName(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), and SCIP_Matrix::vars.
Referenced by getActivities().
detect parallel rows of matrix. rhs/lhs are ignored.
- Parameters
-
scip | SCIP instance |
matrix | matrix containing the constraints |
scale | scale factors of rows |
pclass | parallel row classes |
Definition at line 877 of file matrix.c.
References BMSclearMemoryArray, SCIP_Matrix::colmatbeg, SCIP_Matrix::colmatcnt, SCIP_Matrix::colmatind, SCIP_Matrix::colmatval, SCIP_Matrix::ncols, SCIP_Matrix::nrows, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPfreeBufferArray, SCIPisEQ(), SCIPsortIntIntReal(), SCIPsortRealInt(), and TRUE.
detect parallel rows of matrix. obj coefficients are ignored.
- Parameters
-
scip | SCIP instance |
matrix | matrix containing the constraints |
scale | scale factors of cols |
pclass | parallel column classes |
varineq | indicating if variable is within an equation |
Definition at line 1033 of file matrix.c.
References BMSclearMemoryArray, SCIP_Matrix::isrhsinfinite, SCIP_Matrix::ncols, SCIP_Matrix::nrows, NULL, SCIP_Matrix::rowmatbeg, SCIP_Matrix::rowmatcnt, SCIP_Matrix::rowmatind, SCIP_Matrix::rowmatval, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPfreeBufferArray, SCIPisEQ(), SCIPsortIntIntReal(), SCIPsortRealInt(), and TRUE.
get column based start pointer of values
- Parameters
-
matrix | matrix instance |
col | column index |
Definition at line 1233 of file matrix.c.
References SCIP_Matrix::colmatbeg, SCIP_Matrix::colmatval, and NULL.
Referenced by calcColActivity(), dualBoundStrengthening(), findDominancePairs(), getDownlockRowIdx(), getMinColActWithoutBound(), getMinColActWithoutRow(), getUplockRowIdx(), isVarImpliedFree(), and numericalStable().
int* SCIPmatrixGetColIdxPtr |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
col |
|
) |
| |
get column based start pointer of row indices
- Parameters
-
matrix | matrix instance |
col | column index |
Definition at line 1245 of file matrix.c.
References SCIP_Matrix::colmatbeg, SCIP_Matrix::colmatind, and NULL.
Referenced by calcColActivity(), calcTwoRowBnds(), dualBoundStrengthening(), findDominancePairs(), findFixings(), findVarAggrRedVbcons(), getDownlockRowIdx(), getMinColActWithoutBound(), getMinColActWithoutRow(), getUplockRowIdx(), isVarImpliedFree(), numericalStable(), and singletonColumnStuffing().
int SCIPmatrixGetColNNonzs |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
col |
|
) |
| |
get the number of non-zero entries of this column
- Parameters
-
matrix | matrix instance |
col | column index |
Definition at line 1257 of file matrix.c.
References SCIP_Matrix::colmatcnt, and NULL.
Referenced by calcColActivity(), calcTwoRowBnds(), dualBoundStrengthening(), findDominancePairs(), findFixings(), findVarAggrRedVbcons(), getDownlockRowIdx(), getFillIn(), getMinColActWithoutBound(), getMinColActWithoutRow(), getUplockRowIdx(), isVarImpliedFree(), numericalStable(), and singletonColumnStuffing().
get number of columns of the matrix
- Parameters
-
Definition at line 1269 of file matrix.c.
References SCIP_Matrix::ncols, and NULL.
Referenced by calcTwoRowBnds(), calcVarBoundsDominated(), calcVarBoundsDominating(), detectParallelCols(), dualBoundStrengthening(), findDownlockAggregations(), findUplockAggregations(), findVarAggrRedVbcons(), getBounds(), getCoefficients(), getMultiaggVars(), SCIP_DECL_PRESOLEXEC(), and singletonColumnStuffing().
get upper bound of column
- Parameters
-
matrix | matrix instance |
col | column index |
Definition at line 1279 of file matrix.c.
References NULL, and SCIP_Matrix::ub.
Referenced by calcNewSidesAfterAggregation(), findDownlockAggregations(), findUplockAggregations(), getActivityRelax(), getActivityResiduals(), getBinVarIdxInDownlockRow(), getBinVarIdxInUplockRow(), getMaxActSingleRowWithoutCol(), getMinActSingleRowWithoutCol(), getNumHugeActivities(), isVarImpliedFree(), and SCIP_DECL_PRESOLEXEC().
get lower bound of column
- Parameters
-
matrix | matrix instance |
col | column index |
Definition at line 1290 of file matrix.c.
References SCIP_Matrix::lb, and NULL.
Referenced by calcNewSidesAfterAggregation(), findDownlockAggregations(), findUplockAggregations(), getActivityRelax(), getActivityResiduals(), getBinVarIdxInDownlockRow(), getBinVarIdxInUplockRow(), getMaxActSingleRowWithoutCol(), getMinActSingleRowWithoutCol(), getNumHugeActivities(), isVarImpliedFree(), and SCIP_DECL_PRESOLEXEC().
int SCIPmatrixGetColNUplocks |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
col |
|
) |
| |
int SCIPmatrixGetColNDownlocks |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
col |
|
) |
| |
get variable pointer of column
- Parameters
-
matrix | matrix instance |
col | column index |
Definition at line 1325 of file matrix.c.
References NULL, and SCIP_Matrix::vars.
Referenced by calcColActivity(), calcColActResidualCommon(), calcColActResidualExplicitBound(), calcVarBoundsDominated(), calcVarBoundsDominating(), detectDominatingVlbs(), detectDominatingVubs(), dualBoundStrengthening(), findDominancePairs(), findDownlockAggregations(), findUplockAggregations(), findVarAggrRedVbcons(), getActivityResidualsLowerBound(), getActivityResidualsUpperBound(), getBinVarIdxInDownlockRow(), getBinVarIdxInUplockRow(), getBounds(), getMinColActWithoutBound(), getMinColActWithoutRow(), getMultiaggVars(), infCntUpdateExplicit(), isVlb(), isVub(), SCIP_DECL_PRESOLEXEC(), singletonColumnStuffing(), and updateDualBoundsExplicit().
const char* SCIPmatrixGetColName |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
col |
|
) |
| |
get row based start pointer of values
- Parameters
-
matrix | matrix instance |
row | row index |
Definition at line 1349 of file matrix.c.
References NULL, SCIP_Matrix::rowmatbeg, and SCIP_Matrix::rowmatval.
Referenced by detectParallelCols(), getBinVarIdxInDownlockRow(), getBinVarIdxInUplockRow(), getCoefficients(), getMaxActSingleRowWithoutCol(), getMinActSingleRowWithoutCol(), getMultiaggVars(), getNumHugeActivities(), infCntUpdate(), isVlb(), isVub(), numericalStable(), SCIP_DECL_PRESOLEXEC(), and singletonColumnStuffing().
int* SCIPmatrixGetRowIdxPtr |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
row |
|
) |
| |
get row based start pointer of column indices
- Parameters
-
matrix | matrix instance |
row | row index |
Definition at line 1361 of file matrix.c.
References NULL, SCIP_Matrix::rowmatbeg, and SCIP_Matrix::rowmatind.
Referenced by calcTwoRowBnds(), detectParallelCols(), getBinVarIdxInDownlockRow(), getBinVarIdxInUplockRow(), getCoefficients(), getMaxActSingleRowWithoutCol(), getMinActSingleRowWithoutCol(), getMultiaggVars(), getNumHugeActivities(), getNumOverlap(), getOverlapBaseOrdered(), infCntUpdate(), isVlb(), isVub(), numericalStable(), SCIP_DECL_PRESOLEXEC(), and singletonColumnStuffing().
int SCIPmatrixGetRowNNonzs |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
row |
|
) |
| |
get number of non-zeros of this row
- Parameters
-
matrix | matrix instance |
row | row index |
Definition at line 1373 of file matrix.c.
References NULL, and SCIP_Matrix::rowmatcnt.
Referenced by applyTightening(), calcTwoRowBnds(), detectParallelCols(), getActivities(), getBinVarIdxInDownlockRow(), getBinVarIdxInUplockRow(), getCoefficients(), getFillIn(), getMaxActSingleRowWithoutCol(), getMinActSingleRowWithoutCol(), getMultiaggVars(), getNumHugeActivities(), getNumOverlap(), getOverlapBaseOrdered(), infCntUpdate(), isVlb(), isVub(), numericalStable(), SCIP_DECL_PRESOLEXEC(), and singletonColumnStuffing().
const char* SCIPmatrixGetRowName |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
row |
|
) |
| |
get number of rows of the matrix
- Parameters
-
Definition at line 1397 of file matrix.c.
References SCIP_Matrix::nrows, and NULL.
Referenced by calcTwoRowBnds(), calcVarBoundsDominated(), calcVarBoundsDominating(), detectParallelCols(), dualBoundStrengthening(), findVarAggrRedVbcons(), getActivityResidualsLowerBound(), getActivityResidualsUpperBound(), getBaseRows(), getMultiaggVars(), getNumHugeActivities(), isVlb(), isVub(), SCIP_DECL_PRESOLEXEC(), and singletonColumnStuffing().
get left-hand-side of row
- Parameters
-
matrix | matrix instance |
row | row index |
Definition at line 1407 of file matrix.c.
References SCIP_Matrix::lhs, and NULL.
Referenced by applyTightening(), calcNewSidesAfterAggregation(), calcVarBoundsDominated(), calcVarBoundsDominating(), dualBoundStrengthening(), findDominancePairs(), findFixings(), getActivities(), getBinVarIdxInDownlockRow(), getBinVarIdxInUplockRow(), getMultiaggVars(), getVarBoundsOfRow(), isVlb(), isVub(), numericalStable(), SCIP_DECL_PRESOLEXEC(), and singletonColumnStuffing().
get right-hand-side of row
- Parameters
-
matrix | matrix instance |
row | row index |
Definition at line 1419 of file matrix.c.
References NULL, and SCIP_Matrix::rhs.
Referenced by calcNewSidesAfterAggregation(), calcVarBoundsDominated(), calcVarBoundsDominating(), dualBoundStrengthening(), findDominancePairs(), findFixings(), getMultiaggVars(), getVarBoundsOfRow(), numericalStable(), and SCIP_DECL_PRESOLEXEC().
flag indicating if right-hand-side of row is infinity
- Parameters
-
matrix | matrix instance |
row | row index |
Definition at line 1431 of file matrix.c.
References SCIP_Matrix::isrhsinfinite, and NULL.
Referenced by calcColActivity(), calcColActResidualCommon(), calcTwoRowBnds(), calcVarBoundsDominated(), calcVarBoundsDominating(), detectParallelCols(), dualBoundStrengthening(), findDominancePairs(), getBaseRows(), getDownlockRowIdx(), getMinColActWithoutBound(), getMinColActWithoutRow(), getUplockRowIdx(), infCntUpdate(), isVlb(), isVub(), singletonColumnStuffing(), and updateDualBounds().
int SCIPmatrixGetRowNMinActNegInf |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
row |
|
) |
| |
int SCIPmatrixGetRowNMinActPosInf |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
row |
|
) |
| |
int SCIPmatrixGetRowNMaxActNegInf |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
row |
|
) |
| |
int SCIPmatrixGetRowNMaxActPosInf |
( |
SCIP_MATRIX * |
matrix, |
|
|
int |
row |
|
) |
| |
|