using System; namespace Science.Mathematics.LinearAlgebra { public class SymmetricMatrix : Matrix { public SymmetricMatrix(int numberOfRows, int numberOfColumns) : base(numberOfRows, numberOfColumns) { Check(); } public SymmetricMatrix(double[,] x) : base(x) { Check(); } public SymmetricMatrix(Vector[] columnVector) : base(columnVector) { Check(); } private void Check() { for (int j = 0; j < sr; j++) for (int i = 0; i < sc; i++) if (el[j, i] != el[i, j]) try { throw new Science.Error(); } catch (Science.Error e) { e.Write("Square matrix should be considered."); } } private double[] e; private Vector[] v; public override void Diagonalize() { FactorizationAeqQLQt obj = new FactorizationAeqQLQt(this); obj.Compute(); e = new double[sr]; v = new Vector[sr]; for (int i = 0; i < sr; i++) { e[i] = obj.Eigenvalues[i, i]; v[i] = new Vector(sr); for (int j = 0; j < sr; j++) v[i][j] = obj.Eigenvectors[j,i]; } } public double[] Eigenvalue { get { return e; } } public Vector[] Eigenvector { get { return v; } } } }