/** * @file src/tableau/sparse-matrix.ts * @description Compressed Sparse Column (CSC) matrix implementation * * Optimized for column operations which are frequent in the simplex algorithm. * Provides O(nnz) pivot operations instead of O(n*m) for dense matrices. * * CSC Storage Format: * - values: non-zero values stored column by column * - rowIndices: row index for each value * - colPointers: starting index in values/rowIndices for each column * * Column c's entries are at indices colPointers[c] to colPointers[c+1]-1 */ export interface SparseVector { indices: number[]; values: number[]; length: number; } export declare class SparseMatrix { values: number[]; rowIndices: number[]; colPointers: number[]; nRows: number; nCols: number; private precision; private workVector; private workIndices; constructor(nRows: number, nCols: number, precision?: number); /** * Create sparse matrix from dense Float64Array */ static fromDense(dense: Float64Array, width: number, height: number, precision?: number): SparseMatrix; /** * Convert to dense Float64Array */ toDense(): Float64Array; /** * Get value at (row, col) */ get(row: number, col: number): number; /** * Set value at (row, col) * Handles insertion and removal of entries */ set(row: number, col: number, value: number): void; /** * Get column as sparse vector */ getColumn(col: number): SparseVector; /** * Get row as sparse vector (less efficient - requires full scan) */ getRow(row: number): SparseVector; /** * Get row into pre-allocated dense array (more efficient for repeated access) * Returns array of non-zero column indices */ getRowDense(row: number, output: Float64Array): number[]; /** * Add a new row (expands matrix vertically) */ addRow(): void; /** * Add a new column (expands matrix horizontally) */ addColumn(): void; /** * Set entire column from sparse vector */ setColumn(col: number, sparseCol: SparseVector): void; /** * Number of non-zero entries */ get nnz(): number; /** * Density (fraction of non-zeros) */ get density(): number; /** * Scale a row by a factor */ scaleRow(row: number, factor: number): void; /** * Add scaled row to another row: targetRow += factor * sourceRow * This is the core operation in Gaussian elimination / pivot */ addScaledRow(targetRow: number, sourceRow: number, factor: number): void; /** * Perform pivot operation at (pivotRow, pivotCol) * This is optimized for sparse operations */ pivot(pivotRow: number, pivotCol: number): number[]; /** * Clone the matrix */ clone(): SparseMatrix; }