예제 #1
0
        /// <summary>
        /// Генерирует функцию с учётом погрешности
        /// </summary>
        /// <param name="minX">Минимальное значение X</param>
        /// <param name="maxX">Максимальное значение X</param>
        /// <param name="step">Разница между двумя соседними значениями X</param>
        /// <param name="generator">Генератор</param>
        /// <param name="generatorParameters">Список параметров генератора</param>
        /// <param name="noise">Погрешность</param>
        /// <param name="noiseParameters">Список параметров погрешности</param>
        /// <returns>Функцию заданного вида с заданной погрешностью</returns>
        public virtual Function generate(double minX, double maxX, double step
                                         , IGenerator generator, IList <Object> generatorParameters
                                         , INoise noise, IList <Object> noiseParameters, double k, bool isRelative)
        {
            if (generator == null)
            {
                logger.Error("generator is null");
                throw new ArgumentNullException("generator is null");
            }

            if (generator.checkParametersList(generatorParameters).Count > 0)
            {
                logger.Error("Wrong generator arguments");
                throw new ArgumentException("Wrong generator arguments");
            }

            generator.setup(generatorParameters);

            Function f = generator.Generate(minX, maxX, step);

            if (noise != null)
            {
                if (noise.checkParametersList(noiseParameters).Count > 0)
                {
                    logger.Error("Wrong noise arguments");
                    throw new ArgumentException("Wrong noise arguments");
                }

                noise.setup(noiseParameters);

                Noiser noiser = new Noiser();
                f = noiser.addNoise(f, noise, k, isRelative);
            }

            return(f);
        }