LinearSystem: DEFINITIONS = BEGIN Real0: TYPE = REAL _ 0; 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; SolveN: PROCEDURE [A:MatrixN, b:ColumnN, n: INTEGER] RETURNS [x:ColumnN] ; -- solves Ax=b Matrix2: TYPE = ARRAY [1..2] OF Row2; Row2: TYPE = ARRAY [1..2] OF REAL; Column2: TYPE = ARRAY [1..2] OF Real0; Solve2: PROCEDURE [A:Matrix2, b:Column2] RETURNS [x:Column2] ; -- solves Ax=b Matrix3: TYPE = ARRAY [1..3] OF Row3; Row3: TYPE = ARRAY [1..3] OF REAL; Column3: TYPE = ARRAY [1..3] OF Real0; Solve3: PROCEDURE [A:Matrix3, b:Column3] RETURNS [x:Column3] ; -- solves Ax=b Matrix4: TYPE = ARRAY [1..4] OF Row4; Row4: TYPE = ARRAY [1..4] OF REAL; Column4: TYPE = ARRAY [1..4] OF Real0; Solve4: PROCEDURE [A:Matrix4, b:Column4] RETURNS [x:Column4] ; -- solves Ax=b Matrix5: TYPE = ARRAY [1..5] OF Row5; Row5: TYPE = ARRAY [1..5] OF REAL; Column5: TYPE = ARRAY [1..5] OF Real0; Solve5: PROCEDURE [A:Matrix5, b:Column5] RETURNS [x:Column5] ; -- solves Ax=b Matrix6: TYPE = ARRAY [1..6] OF Row6; Row6: TYPE = ARRAY [1..6] OF REAL; Column6: TYPE = ARRAY [1..6] OF Real0; Solve6: PROCEDURE [A:Matrix6, b:Column6] RETURNS [x:Column6] ; -- solves Ax=b END. @LinearSystem.mesa Last edited by Maureen Stone 19-Oct-81 16:42:28 Written by Michael Plass, 8-Oct-81 Catch the signal Real.RealException to detect singular or unstable systems, e.g., singular:BOOLEAN _ FALSE; x _ LinearSystem.Solve3[A,b! Real.RealException => {singular_TRUE;CONTINUE}]; IF NOT singular THEN ... ÊÁ˜Jšœ™Jšœ/™/Jšœ#™#J˜JšœÏk œ˜Jš˜J˜Jšœœœ˜J˜JšœQ™QJšœ™Jšœ™Jšœ0™0Jšœ™J˜Jš œœœœœœ ˜9Jšœœœ˜Jš œ œœœœœ˜:Jšœ œœ ˜Jšœ œœ˜Jš Ïnœ œœœœÏc˜YJ˜J˜Jšœ œœœ˜%Jš œœœœœ˜"Jšœ œœœ˜&Jš žœ œœœŸ˜MJ˜Jšœ œœœ˜%Jš œœœœœ˜"Jšœ œœœ˜&Jš žœ œœœŸ˜MJ˜Jšœ œœœ˜%Jš œœœœœ˜"Jšœ œœœ˜&Jš žœ œœœŸ˜MJ˜Jšœ œœœ˜%Jš œœœœœ˜"Jšœ œœœ˜&Jš žœ œœœŸ˜MJ˜Jšœ œœœ˜%Jš œœœœœ˜"Jšœ œœœ˜&Jš žœ œœœŸ˜MJ˜Jšœ˜—…—$ %