Matrix: CEDAR DEFINITIONS = BEGIN Real0: TYPE = REAL _ 0; InvalidMatrix, InvalidOperation: SIGNAL; VecSeq: TYPE = RECORD[SEQUENCE ncols: INTEGER OF Real0]; RowN: TYPE = REF VecSeq; MatrixSeq: TYPE = RECORD[SEQUENCE nrows: INTEGER OF RowN]; MatrixN: TYPE = REF MatrixSeq; ColumnN: TYPE = REF VecSeq; Invert: PROCEDURE [a: MatrixN] RETURNS [ai: MatrixN]; Determinant: PROC[a: MatrixN] RETURNS [det: REAL]; Transpose: PROCEDURE [a: MatrixN] RETURNS [transpose: MatrixN]; Multiply: PROCEDURE [a: MatrixN, b: MatrixN] RETURNS [c: MatrixN]; MultiplyVec: PROC[a: MatrixN, v: ColumnN] RETURNS [c: RowN]; Create: PROC [nrows, ncols: INTEGER] RETURNS [a: MatrixN]; END. <Matrix.mesa --Written by Maureen Stone August 15, 1983 2:29 pm --TYPEs identical to Linear System types Catch the signal Real.RealException to detect singular or unstable systems, e.g., singular: BOOLEAN _ FALSE; x _ Matrix.Invert[A! Real.RealException => {singular_TRUE; CONTINUE}]; IF NOT singular THEN ... Κn– "cedar" style˜Jšœg™gJ˜šœΟkœ œ˜!J˜Jšœœœ˜J˜JšœQ™QJšœ™šœ™Jšœ1™1—Jšœ™J˜Jšœ!œ˜(J˜Jš œœœœœœ ˜9Jšœœœ˜Jš œ œœœœœ˜:Jšœ œœ ˜Jšœ œœ˜JšΟnœ œœ˜5Jšž œœ œœ˜2Jšž œ œœ˜?Jšžœ œœ˜BJšž œœœ ˜