deferred class MATRIX [T->NUMERIC] feature -- Attributes nrow: INTEGER -- Number of rows ncolumn: INTEGER -- Number of columns feature -- Accessors item (i, j: INTEGER): T is -- Return current value of item(i, j) require valid_i: (i > 0) and (i <= nrow) valid_j: (j > 0) and (j <= ncolumn) deferred end -- item put (v: T; i, j: INTEGER) is -- Put value v into item(i, j) require valid_i: (i > 0) and (i <= nrow) valid_j: (j > 0) and (j <= ncolumn) deferred ensure item (i, j) = v end -- put row (i: INTEGER): VECTOR [T] is -- Returns i-th row of matrix require valid_i: (i > 0) and (i <= nrow) do -- ... ensure Result_not_void: (Result /= Void) end -- row column (j: INTEGER): VECTOR [T] is -- Returns j-th column of matrix require valid_j: (j > 0) and (j <= ncolumn) do -- ... ensure Result_not_void: (Result /= Void) end -- column diagonal (k: INTEGER): VECTOR [T] is -- Returns k-th diagonal of matrix require valid_k: (k > -nrow ) and (k < ncolumn) do -- ... ensure Result_not_void: (Result /= Void) end -- diagonal submatrix (i, j, k, l: INTEGER): SUB_MATRIX [T] is -- Returns submatrix as defined by arguments do -- ... ensure Result_not_void: (Result /= Void) end -- submatrix feature -- Operators trace: T is do ... end random (min, max: T) is do ... end add (B: MATRIX [T]) is do ... end mult (A, B: MATRIX [T]) is do ... end LU is do ... end LDLt is do ... end Cholesky is do ... end -- ... end -- class MATRIX