7 public abstract class Matrix
\r
9 public abstract double this[int row, int col]
\r
16 public abstract Internal.MatrixExpression this[Interval row, Interval col]
\r
24 public static Matrix operator +(Matrix m, double d)
\r
26 return new Internal.MatrixExpression();
\r
30 public abstract int rows { get; }
\r
31 public abstract int cols { get; }
\r
32 public int getRows() { return rows; }
\r
33 public int getCols() { return cols; }
\r
41 public class MatrixImplementation : Matrix
\r
43 internal double[,] elements;
\r
45 public MatrixImplementation(int dnrow, int dncol)
\r
47 elements = new double[dnrow, dncol];
\r
50 public override double this[int row, int col]
\r
54 return elements[row - 1, col - 1];
\r
58 elements[row - 1, col - 1] = value;
\r
62 public override MatrixExpression this[Interval row, Interval col]
\r
66 return new MatrixExpression(this, row.int_floor(), col.int_floor(), row.int_ceil(), col.int_ceil());
\r
71 elements[row - 1, col - 1] = value;
\r
76 public override int rows { get { return elements.GetLength(0); } }
\r
77 public override int cols { get { return elements.GetLength(1); } }
\r
81 public class MatrixExpression : Matrix
\r
83 MatrixImplementation imp;
\r
84 readonly int brow, bcol;
\r
85 readonly int erow, ecol;
\r
87 internal MatrixExpression(MatrixImplementation target, int dbrow, int dbcol, int derow, int decol)
\r
96 public override double this[int row, int col]
\r
100 return imp.elements[(row - 1 - brow), (col - 1 - bcol)];
\r
104 imp.elements[(row - 1 - brow), (col - 1 - bcol)] = value;
\r
108 public override int rows { get { return erow - brow + 1; } }
\r
109 public override int cols { get { return ecol - bcol + 1; } }
\r