public double MinimizationValue(IMatrix <double> matrix)
        {
            var queryString = string.Format(MathematicalConstants.OptimizationQueryTemplate, matrix, matrix.Size, MathematicalConstants.MinimumValue, MathematicalConstants.X2TargetFunction);

            var queryResult = _kernel.EvaluateToInputForm(queryString, 0);

            return(double.Parse(queryResult));
        }
Example #2
0
        public EigenSystem GetEigenSystem(IMatrix <double> matrix)
        {
            var queryString = "R = {{1, 5, 0.1429, 6}, {0.2, 1, 1, 0.3333}, {7, 1, 1, 0.3333}, {0.1667, 3, 3, 1}}; Max[Re[Eigenvalues[R]]]; Max[Re[Eigenvalues[R]]] // N";

            var queryResult = _kernel.EvaluateToInputForm(queryString, 0);

            var match = Regex.Match(queryResult, MathematicalConstants.EigenSystemResultFormat);

            var eigenValues = match.Groups["values"].Value.Split(',').Select(n => new ComplexNumber(n).Real).ToArray();

            var eigenVectors = (from v in match.Groups["vectors"].Value.Split('{', '}')
                                let eigenVector = v.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                                  where eigenVector.Length == eigenValues.Length
                                                  select new EigenVector(eigenVector.Select(e => new ComplexNumber(e).Real).ToArray())).ToArray();

            return(new EigenSystem(eigenValues, eigenVectors));
        }