/// <summary> /// Computes the eigenvalues and eigenvectors of a matrix. /// </summary> /// <param name="isSymmetric">Wether the matrix is symmetric or not.</param> /// <param name="order">The order of the matrix.</param> /// <param name="matrix">The matrix to decompose. The lenth of the array must be order * order.</param> /// <param name="matrixEv">On output, the matrix contains the eigen vectors. The lenth of the array must be order * order.</param> /// <param name="vectorEv">On output, the eigen values (λ) of matrix in ascending value. The length of the arry must <paramref name="order"/>.</param> /// <param name="matrixD">On output, the block diagonal eigenvalue matrix. The lenth of the array must be order * order.</param> public override void EigenDecomp(bool isSymmetric, int order, float[] matrix, float[] matrixEv, Complex[] vectorEv, float[] matrixD) { if (matrix == null) { throw new ArgumentNullException("matrix"); } if (matrix.Length != order * order) { throw new ArgumentException(String.Format(Resources.ArgumentArrayWrongLength, order * order), "matrix"); } if (matrixEv == null) { throw new ArgumentNullException("matrixEv"); } if (matrixEv.Length != order * order) { throw new ArgumentException(String.Format(Resources.ArgumentArrayWrongLength, order * order), "matrixEv"); } if (vectorEv == null) { throw new ArgumentNullException("vectorEv"); } if (vectorEv.Length != order) { throw new ArgumentException(String.Format(Resources.ArgumentArrayWrongLength, order), "vectorEv"); } if (matrixD == null) { throw new ArgumentNullException("matrixD"); } if (matrixD.Length != order * order) { throw new ArgumentException(String.Format(Resources.ArgumentArrayWrongLength, order * order), "matrixD"); } SafeNativeMethods.s_eigen(isSymmetric, order, matrix, matrixEv, vectorEv, matrixD); }