示例#1
0
 /// <summary>Initializes a new instance of the <see cref="LapackEigenvalues"/> class.
 /// </summary>
 /// <param name="generalizedNonsymmetricEigenvalueProblems">The generalized nonsymmetric eigenvalue problems.</param>
 /// <param name="generalizedSymmetricEigenvalueProblems">The generalized symmetric eigenvalue problems.</param>
 /// <param name="nonSymmetricEigenvalueProblems">The non symmetric eigenvalue problems.</param>
 /// <param name="symmetricEigenvalueProblems">The symmetric eigenvalue problems.</param>
 /// <param name="singularValueDecomposition">The singular value decomposition.</param>
 /// <param name="generalizedSingularValueDecomposition">The generalized singular value decomposition.</param>
 /// <param name="linearLeastSquaresProblems">The linear least squares problems.</param>
 public LapackEigenvalues(
     IGeneralizedNonsymmetricEigenvalueProblems generalizedNonsymmetricEigenvalueProblems,
     IGeneralizedSymmetricEigenvalueProblems generalizedSymmetricEigenvalueProblems,
     INonSymmetricEigenvalueProblems nonSymmetricEigenvalueProblems,
     ISymmetricEigenvalueProblems symmetricEigenvalueProblems,
     ISingularValueDecomposition singularValueDecomposition,
     IGeneralizedSingularValueDecomposition generalizedSingularValueDecomposition,
     ILinearLeastSquaresProblems linearLeastSquaresProblems)
 {
     GeneralizedNonSymmetric = generalizedNonsymmetricEigenvalueProblems;
     GeneralizedSymmetric    = generalizedSymmetricEigenvalueProblems;
     NonSymmetric            = nonSymmetricEigenvalueProblems;
     Symmetric = symmetricEigenvalueProblems;
     SingularValueDecomposition            = singularValueDecomposition;
     GeneralizedSingularValueDecomposition = generalizedSingularValueDecomposition;
     LinearLeastSquaresProblem             = linearLeastSquaresProblems;
 }
示例#2
0
    public static void Main(String[] args)
    {
        IMatrix A = new Matrix(3, 3);

        A[0, 0] = 2.0; A[0, 1] = 1.0; A[0, 2] = 2.0;
        A[1, 0] = 1.0; A[1, 1] = 4.0; A[1, 2] = 0.0;
        A[2, 0] = 2.0; A[2, 1] = 0.0; A[2, 2] = 8.0;

        Console.WriteLine("A = ");
        Console.WriteLine(A.ToString());

        Console.WriteLine("A.Determinant = " + A.Determinant);
        Console.WriteLine("A.Trace = " + A.Trace);
        Console.WriteLine("A.Norm1 = " + A.Norm1);
        Console.WriteLine("A.NormInfinite = " + A.InfinityNorm);
        Console.WriteLine("A.NormFrobenius = " + A.FrobeniusNorm);

        ISingularValueDecomposition svg = A.GetSingularValueDecomposition();

        Console.WriteLine("A.Norm2 = " + svg.Norm2);
        Console.WriteLine("A.Condition = " + svg.Condition);
        Console.WriteLine("A.Rank = " + svg.Rank);
        Console.WriteLine();

        Console.WriteLine("A.Transpose = ");
        Console.WriteLine(A.Transpose().ToString());

        Console.WriteLine("A.Inverse = ");
        Console.WriteLine(A.Inverse.ToString());

        IMatrix I = A.Multiply(A.Inverse);

        Console.WriteLine("I = A * A.Inverse = ");
        Console.WriteLine(I.ToString());

        IMatrix B = new Matrix(3, 3);

        Console.WriteLine("B = ");
        B[0, 0] = 2.0; B[0, 1] = 0.0; B[0, 2] = 0.0;
        B[1, 0] = 1.0; B[1, 1] = 0.0; B[1, 2] = 0.0;
        B[2, 0] = 2.0; B[2, 1] = 0.0; B[2, 2] = 0.0;

        Console.WriteLine(B.ToString());

        IMatrix X = A.Solve(B);

        Console.WriteLine("A.Solve(B)");
        Console.WriteLine(X.ToString());

        IMatrix T = A.Multiply(X);

        Console.WriteLine("A * A.Solve(B) = B = ");
        Console.WriteLine(T.ToString());

        Console.WriteLine("A = V * D * V");

        IEigenvalueDecomposition eigen = A.GetEigenvalueDecomposition();

        Console.WriteLine("D = ");
        Console.WriteLine(eigen.DiagonalMatrix.ToString());

        Console.WriteLine("lambda = ");
        foreach (double eigenvalue in eigen.RealEigenvalues)
        {
            Console.WriteLine(eigenvalue);
        }
        Console.WriteLine();

        Console.WriteLine("V = ");
        Console.WriteLine(eigen.EigenvectorMatrix);

        Console.WriteLine("V * D * V' = ");
        Console.WriteLine(eigen.EigenvectorMatrix.Multiply(eigen.DiagonalMatrix).Multiply(eigen.EigenvectorMatrix.Transpose()));

        Console.WriteLine("A * V = ");
        Console.WriteLine(A.Multiply(eigen.EigenvectorMatrix));

        Console.WriteLine("V * D = ");
        Console.WriteLine(eigen.EigenvectorMatrix.Multiply(eigen.DiagonalMatrix));
    }