public static DoubleDenseMatrix Mul(DoubleDenseMatrix left, DoubleDenseMatrix right) { // <preconditions> if (left == (DoubleDenseMatrix)null) { throw new ArgumentNullException("left"); } if (right == (DoubleDenseMatrix)null) { throw new ArgumentNullException("right"); } // </preconditions> if (left.ColumnCount != right.RowCount) { throw new MatrixSizeMistmatchException(); } DoubleDenseMatrix m = new DoubleDenseMatrix(left.RowCount, right.ColumnCount); for (int i = 0; i < left.RowCount; ++i) { for (int j = 0; j < left.ColumnCount; ++j) { for (int k = 0; k < right.ColumnCount; ++k) { m[i, k] += left[i, j] * right[j, k]; } } } return(m); }
public MatrixSizeMistmatchException( DoubleDenseMatrix left, DoubleDenseMatrix right) : this(String.Format("Matrix size ({0}x{1}) does not match ({2}x{3})", left.RowCount,left.ColumnCount,right.RowCount, right.ColumnCount)) { }
public static DoubleDenseMatrix Identity(int count) { DoubleDenseMatrix m = new DoubleDenseMatrix(count, count); for (int i = 0; i < count; ++i) { m[i, i] = 1; } return(m); }
public DoubleDenseMatrix Sub(DoubleDenseMatrix matrix) { VerifySize(matrix); for (int i = 0; i < data.Length; ++i) { this.data[i] -= matrix.data[i]; } return(this); }
private void VerifySize(DoubleDenseMatrix matrix) { if (this.RowCount != matrix.RowCount) { throw new MatrixSizeMistmatchException(); } if (this.ColumnCount != matrix.ColumnCount) { throw new MatrixSizeMistmatchException(); } }
public static DoubleDenseMatrix Add(DoubleDenseMatrix left, DoubleDenseMatrix right) { // <preconditions> if (left == (DoubleDenseMatrix)null) { throw new ArgumentNullException("left"); } // </preconditions> DoubleDenseMatrix m = Create(left); return(m.Add(right)); }
public DoubleDenseMatrix Transpose() { DoubleDenseMatrix m = new DoubleDenseMatrix(this.ColumnCount, this.RowCount); for (int i = 0; i < this.RowCount; ++i) { for (int j = 0; j < this.ColumnCount; ++j) { m[j, i] = this[i, j]; } } return(m); }
public DoubleDenseMatrix Trace() { if (this.RowCount != this.ColumnCount) { throw new MatrixSizeMistmatchException(); } DoubleDenseMatrix m = new DoubleDenseMatrix(this.RowCount, 1); for (int i = 0; i < this.RowCount; ++i) { m.data[i] = this[i, i]; } return(m); }
public static DoubleDenseMatrix Similarity( DoubleDenseMatrix A, DoubleDenseMatrix B, double tolerance ) { // <preconditions> if (A == (DoubleDenseMatrix)null) { throw new ArgumentNullException("A"); } if (B == (DoubleDenseMatrix)null) { throw new ArgumentNullException("B"); } // </preconditions> DoubleDenseMatrix AT = A.Transpose(); DoubleDenseMatrix BT = B.Transpose(); DoubleDenseMatrix Zk = DoubleDenseMatrix.Create(B.RowCount, A.RowCount, 1.0 / (A.RowCount * B.RowCount)); DoubleDenseMatrix Zk1 = null; DoubleDenseMatrix ZkOld = null; int iteration = 0; do { Zk1 = B * Zk * AT + BT * Zk * A; Zk1.Div(Zk1.GetNorm2()); ZkOld = Zk; Zk = B * Zk1 * AT + BT * Zk1 * A; Zk.Div(Zk.GetNorm2()); Console.WriteLine(iteration); Zk.WriteMatrix(Console.Out); Console.WriteLine((Zk - ZkOld).GetNorm2()); if (iteration++ > 100) { throw new InvalidOperationException(); } } while ((Zk - ZkOld).GetNorm2() > tolerance); return(Zk); }
private void VerifySize(DoubleDenseMatrix matrix) { if (this.RowCount != matrix.RowCount) throw new MatrixSizeMistmatchException(); if (this.ColumnCount != matrix.ColumnCount) throw new MatrixSizeMistmatchException(); }
public static DoubleDenseMatrix Mul(DoubleDenseMatrix left, double factor) { DoubleDenseMatrix m = Create(left); return m.Mul(factor); }
public static DoubleDenseMatrix Identity(int count) { DoubleDenseMatrix m = new DoubleDenseMatrix(count, count); for (int i = 0; i < count; ++i) m[i, i] = 1; return m; }
public static DoubleDenseMatrix Mul(DoubleDenseMatrix left, DoubleDenseMatrix right) { // <preconditions> if (left == (DoubleDenseMatrix)null) throw new ArgumentNullException("left"); if (right == (DoubleDenseMatrix)null) throw new ArgumentNullException("right"); // </preconditions> if (left.ColumnCount != right.RowCount) throw new MatrixSizeMistmatchException(); DoubleDenseMatrix m = new DoubleDenseMatrix(left.RowCount, right.ColumnCount); for (int i = 0; i < left.RowCount; ++i) { for (int j = 0; j < left.ColumnCount; ++j) { for (int k = 0; k < right.ColumnCount; ++k) { m[i,k] += left[i,j] * right[j,k]; } } } return m; }
public static DoubleDenseMatrix Mul(double factor, DoubleDenseMatrix right) { DoubleDenseMatrix m = Create(right); return m.Mul(factor); }
public static DoubleDenseMatrix Mul(DoubleDenseMatrix left, double factor) { DoubleDenseMatrix m = Create(left); return(m.Mul(factor)); }
public static DoubleDenseMatrix Mul(double factor, DoubleDenseMatrix right) { DoubleDenseMatrix m = Create(right); return(m.Mul(factor)); }
public static DoubleDenseMatrix Similarity( DoubleDenseMatrix A, DoubleDenseMatrix B, double tolerance ) { // <preconditions> if (A == (DoubleDenseMatrix)null) throw new ArgumentNullException("A"); if (B == (DoubleDenseMatrix)null) throw new ArgumentNullException("B"); // </preconditions> DoubleDenseMatrix AT = A.Transpose(); DoubleDenseMatrix BT = B.Transpose(); DoubleDenseMatrix Zk = DoubleDenseMatrix.Create(B.RowCount, A.RowCount, 1.0/(A.RowCount*B.RowCount)); DoubleDenseMatrix Zk1 = null; DoubleDenseMatrix ZkOld = null; int iteration = 0; do { Zk1 = B * Zk * AT + BT * Zk * A; Zk1.Div(Zk1.GetNorm2()); ZkOld = Zk; Zk = B * Zk1 * AT + BT * Zk1 * A; Zk.Div(Zk.GetNorm2()); Console.WriteLine(iteration); Zk.WriteMatrix(Console.Out); Console.WriteLine((Zk - ZkOld).GetNorm2()); if (iteration++ > 100) throw new InvalidOperationException(); } while ((Zk - ZkOld).GetNorm2() > tolerance); return Zk; }
public static DoubleDenseMatrix Sub(DoubleDenseMatrix left, DoubleDenseMatrix right) { DoubleDenseMatrix m = Create(left); return(m.Sub(right)); }
public static DoubleDenseMatrix Sub(DoubleDenseMatrix left, DoubleDenseMatrix right) { DoubleDenseMatrix m = Create(left); return m.Sub(right); }
public static DoubleDenseMatrix Create(DoubleDenseMatrix matrix) { return new DoubleDenseMatrix(matrix.RowCount, matrix.ColumnCount, matrix.GetData()); }
public DoubleDenseMatrix Sub(DoubleDenseMatrix matrix) { VerifySize(matrix); for (int i = 0; i < data.Length; ++i) this.data[i] -= matrix.data[i]; return this; }
public DoubleDenseMatrix Transpose() { DoubleDenseMatrix m = new DoubleDenseMatrix(this.ColumnCount, this.RowCount); for (int i = 0; i < this.RowCount; ++i) for (int j = 0; j < this.ColumnCount; ++j) m[j, i] = this[i, j]; return m; }
public DoubleDenseMatrix Trace() { if (this.RowCount != this.ColumnCount) throw new MatrixSizeMistmatchException(); DoubleDenseMatrix m = new DoubleDenseMatrix(this.RowCount,1); for (int i = 0; i < this.RowCount; ++i) m.data[i] = this[i, i]; return m; }
public static DoubleDenseMatrix Create(DoubleDenseMatrix matrix) { return(new DoubleDenseMatrix(matrix.RowCount, matrix.ColumnCount, matrix.GetData())); }
public static DoubleDenseMatrix Add(DoubleDenseMatrix left, DoubleDenseMatrix right) { // <preconditions> if (left == (DoubleDenseMatrix)null) throw new ArgumentNullException("left"); // </preconditions> DoubleDenseMatrix m = Create(left); return m.Add(right); }