//выполнение операции над вектором и числом, операция задается строкой и должна быть задана в operations для элементов типа double
        public static MultiDimensionalVector MathOperationMultiDimensionalVectorWithNumber(MultiDimensionalVector mdVector, double number, String operation)
        {
            MultiDimensionalVector rezultMdVector = new MultiDimensionalVector();

            if (operations.ContainsKey(operation) && mdVector.Count >= 0)
            {
                int countElements = mdVector.Count;
                for (int i = 0; i < countElements; ++i)
                {
                    rezultMdVector.Add(operations[operation](mdVector.ElementAt(i), number));
                }
            }
            else
            {
                throw new ArgumentException("Невозможно выполнить операцию");
            }
            return(rezultMdVector);
        }
        //выполнение операции над двумя векторми поэлементно, операция задается строкой и должна быть задана в operations для элементов типа double
        public static MultiDimensionalVector MathOperationMultiDimensionalVectorElementWise(MultiDimensionalVector mdVector1, MultiDimensionalVector mdVector2, String operation)
        {
            MultiDimensionalVector rezultMdVector = new MultiDimensionalVector();

            if (operations.ContainsKey(operation) && mdVector1.Count == mdVector2.Count && mdVector1.Count > 0)
            {
                int countElements = mdVector1.Count;
                // MathOperation mathOper = operations[operation];
                for (int i = 0; i < countElements; ++i)
                {
                    rezultMdVector.Add(operations[operation](mdVector1.ElementAt(i), mdVector2.ElementAt(i)));
                }
            }
            else
            {
                throw new ArgumentException("Невозможно выполнить операцию");
            }
            return(rezultMdVector);
        }
        public double EuclideanDistance(MultiDimensionalVector mdVector)
        {
            double distance = 0;

            if (this.Count == mdVector.Count && this.Count > 0)
            {
                int countElements = this.Count();

                for (int i = 0; i < countElements; ++i)
                {
                    distance += Math.Pow(this.ElementAt(i) - mdVector.ElementAt(i), 2);
                }

                distance = Math.Sqrt(distance);
            }
            else
            {
                throw new ArgumentException("Невозможно вычислить расстояние между векторами");
            }

            return(distance);
        }