/// <summary>
        /// Возращает статистическую модель, содержащую коэффициенты аппроксимации и дисперсии на основе выбранного вейвлета для списка данных.
        /// </summary>
        /// <param name="data">Список данных для статистического анализа в виде вектора над полем рациональных чисел.</param>
        /// <param name="wavelet">Вейвлет, на основе которого вычисляются коэффициенты аппроксимации и дисперсии.</param>
        /// <returns>Cтатистическая модель для выбранных набора данных и вейвлета.</returns>
        public static IWaveletTransformationStatisticsModel GenerateStatisticsModel(IList <double> data, IWavelet wavelet)
        {
            var waveletStatistics = new WaveletStatistics
            {
                Wavelet = wavelet,
                ApproximationCoefficients = data,
                DetailingCoefficients     = data
            };

            var statisticsModel = new WaveletTransformationStatisticsModel();

            statisticsModel.WaveletStatistics.Add(waveletStatistics);

            while (true)
            {
                waveletStatistics = Decompose(waveletStatistics);
                if (waveletStatistics.ApproximationCoefficients.Count == 0)
                {
                    break;
                }

                statisticsModel.WaveletStatistics.Add(waveletStatistics);
            }

            return(statisticsModel);
        }
        /// <summary>
        /// Возвращает результат разложения посредством вычисления последующих коэффициентов аппроксимации и дисперсии на основе предыдущих. При каждом разложении количество коэффициентов сокращается вдвое.
        /// </summary>
        private static WaveletStatistics Decompose(WaveletStatistics waveletStatistics)
        {
            var nextLevelApproximationCoefficients = Filter(waveletStatistics.ApproximationCoefficients, waveletStatistics.Wavelet.ScalingCoefficients);
            var nextLevelDetailingCoefficients     = Filter(waveletStatistics.ApproximationCoefficients, waveletStatistics.Wavelet.Coefficients);

            return(new WaveletStatistics
            {
                Wavelet = waveletStatistics.Wavelet,
                ApproximationCoefficients = nextLevelApproximationCoefficients,
                DetailingCoefficients = nextLevelDetailingCoefficients
            });
        }