double InterpolateResistance(double x, List <Data> data)
        {
            var logF = data.ConvertAll(d => Log10(d.freq));
            var mag  = data.ConvertAll(d => Log10(d.rho));

            return(MathApp.Interpolate(x, logF, mag));
        }// линейная интерполяция
        }// производная функции ln(rho(ln(freq)))

        public double DispersePhase(int N, double t, List <Data> points)
        {
            double sum  = 0;
            double sumB = 0;

            for (int x = -N; x <= N; x++)
            {
                if (x == 0)
                {
                    continue;
                }

                double shift = x / (double)N * 2;
                double ln    = Log(Pow(10, shift));

                sumB += MathApp.Bode(ln);
                sum  += MathApp.Bode(ln) * DerivativeResistance(t - shift, points);
            }// цикл конечной суммы для приближенного расчёта несобственного интеграла

            sumB = 1.0 / sumB; // поправочный коэффициент

            return((PI / 4) + sum * sumB * PI / 4);
        } // свёртка и линейное преобразование