public static CellArray Multiply(CellArray A, CellArray B) { if (!CellArray.IsMatrix(A) || !CellArray.IsMatrix(B)) { throw new Exception("Both A and B must be matrixes"); } int A_Rows = A.Count, B_Rows = B.Count; int A_Cols = CellArray.ColumnCount(A), B_Cols = CellArray.ColumnCount(B); if (A_Cols != B_Rows) { throw new Exception(string.Format("Dimension mismatch A {0}:{1} B {2}:{3}", A_Rows, A_Cols, B_Rows, B_Cols)); } CellArray C = CellArray.Matrix(A_Rows, B_Cols); // Main Loop // for (int i = 0; i < A_Rows; i++) { // Sub Loop One // for (int j = 0; j < B_Cols; j++) { // Sub Loop Two // for (int k = 0; k < A_Cols; k++) { C[i].valueARRAY[j] = (C[i].valueARRAY[j].IsNull ? A[i].valueARRAY[k] * B[k].valueARRAY[j] : A[i].valueARRAY[k] * B[k].valueARRAY[j] + C[i].valueARRAY[j]); } } } // Return C // return(C); }
public CellArray getMatrix(CellArray A, int[] r, int j0, int j1) { CellArray X = CellArray.Matrix(r.Length, j1 - j0 + 1); for (int i = 0; i < r.Length; i++) { for (int j = j0; j <= j1; j++) { X[i].ARRAY[j - j0] = A[r[i]].ARRAY[j]; } } return(X); }
public CellArray getU() { CellArray X = CellArray.Matrix(n, n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i <= j) { X[i].ARRAY[j] = LU[i].ARRAY[j]; } else { X[i].ARRAY[j] = CellValues.Zero(CellAffinity.DOUBLE); } } } return(X); }
public static CellArray Transpose(CellArray A) { int Rows = A.Count; int Columns = 0; if (!CellArray.IsMatrix(A, out Columns)) { throw new Exception("Cannot transpose a non-matrix"); } CellArray B = CellArray.Matrix(Columns, Rows); for (int i = 0; i < Rows; i++) { for (int j = 0; j < Columns; j++) { B[j].ARRAY[i] = A[i].ARRAY[j]; } } return(B); }
public static CellArray Identity(int Dimension, CellAffinity Type) { if (!CellAffinityHelper.IsNumeric(Type)) { return(new CellArray()); } Cell zero = CellValues.Zero(Type); Cell one = CellValues.One(Type); CellArray x = CellArray.Matrix(Dimension, Dimension); for (int i = 0; i < Dimension; i++) { for (int j = 0; j < Dimension; j++) { x[i].ARRAY[j] = (i == j ? one : zero); } } return(x); }
public CellArray getL() { CellArray L = CellArray.Matrix(m, n); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (i > j) { L[i].ARRAY[j] = LU[i].ARRAY[j]; } else if (i == j) { L[i].ARRAY[j] = CellValues.One(CellAffinity.DOUBLE); } else { L[i].ARRAY[j] = CellValues.Zero(CellAffinity.DOUBLE); } } } return(L); }
public static CellArray Matrix(int RowLength, int ColumnLength) { return(CellArray.Matrix(RowLength, ColumnLength, CellAffinity.DOUBLE)); }
public static CellArray Matrix(int RowLength, int ColumnLength, CellAffinity Affinity) { return(CellArray.Matrix(RowLength, ColumnLength, new Cell(Affinity))); }