}\r
\r
/*\r
+ public abstract Internal.MatrixExpression this[Interval row, Interval col]\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+\r
+ /*\r
public static Matrix operator +(Matrix m, double d)\r
{\r
return new Internal.MatrixExpression();\r
}\r
*/\r
+\r
+ public abstract int rows { get; }\r
+ public abstract int cols { get; }\r
+ public int getRows() { return rows; }\r
+ public int getCols() { return cols; }\r
+\r
}\r
\r
\r
\r
public class MatrixImplementation : Matrix\r
{\r
- internal double[] elements;\r
- readonly int nrow, ncol;\r
+ internal double[,] elements;\r
\r
public MatrixImplementation(int dnrow, int dncol)\r
{\r
- nrow = dnrow;\r
- ncol = dncol;\r
- elements = new double[nrow * ncol];\r
+ elements = new double[dnrow, dncol];\r
}\r
\r
public override double this[int row, int col]\r
{\r
get\r
{\r
- return elements[(row - 1) * ncol + (col - 1)];\r
+ return elements[row - 1, col - 1];\r
}\r
set\r
{\r
- elements[(row - 1) * ncol + (col - 1)] = value;\r
+ elements[row - 1, col - 1] = value;\r
}\r
}\r
+ /*\r
+ public override MatrixExpression this[Interval row, Interval col]\r
+ {\r
+ get\r
+ {\r
+ return new MatrixExpression(this, row.int_floor(), col.int_floor(), row.int_ceil(), col.int_ceil());\r
+ }\r
+ set\r
+ {\r
+ for(int r = 0, r<)\r
+ elements[row - 1, col - 1] = value;\r
+ }\r
+ }\r
+ * */\r
+\r
+ public override int rows { get { return elements.GetLength(0); } }\r
+ public override int cols { get { return elements.GetLength(1); } }\r
+\r
}\r
\r
public class MatrixExpression : Matrix\r
{\r
MatrixImplementation imp;\r
- readonly int nrow, ncol;\r
- readonly int drow, dcol;\r
- \r
- public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol)\r
+ readonly int brow, bcol;\r
+ readonly int erow, ecol;\r
+\r
+ internal MatrixExpression(MatrixImplementation target, int dbrow, int dbcol, int derow, int decol)\r
{\r
- nrow = dnrow;\r
- ncol = dncol;\r
- drow = ddrow;\r
- dcol = ddcol;\r
+ brow = dbrow;\r
+ bcol = dbcol;\r
+ erow = derow;\r
+ ecol = decol;\r
imp = target;\r
}\r
\r
{\r
get\r
{\r
- return imp.elements[(row - drow) * ncol + (col - dcol)];\r
+ return imp.elements[(row - 1 - brow), (col - 1 - bcol)];\r
}\r
set\r
{\r
- imp.elements[(row - drow) * ncol + (col - dcol)] = value;\r
+ imp.elements[(row - 1 - brow), (col - 1 - bcol)] = value;\r
}\r
}\r
+\r
+ public override int rows { get { return erow - brow + 1; } }\r
+ public override int cols { get { return ecol - bcol + 1; } }\r
}\r
}\r
\r