コード例 #1
0
        public static void ConvolveU01_U01(int N)
        {
            double[]  x    = new double[N];
            Complex[] data = new Complex[N];

            double min = U01.min();
            double max = 2.0 * U01.max();

            double step = (max - min) / (double)(N - 1);

            for (int k = 0; k != N; ++k)
            {
                x[k]    = 0.0 + (double)k * step;
                data[k] = new Complex(U01.PDF(x[k]), 0.0);
            }

            Fourier.Forward(data, FourierOptions.Default);

            // var invN = 1.0 / Math.Sqrt(N);
            var invN = 1.0;

            // FT of convolution of the same PDSs is just a multiplication
            for (int k = 0; k != N; ++k)
            {
                var v = data[k];
                data[k] = v * v * invN;
            }

            Fourier.Inverse(data, FourierOptions.Default);

            // something is wrong with normalization
            for (int k = 0; k != N; ++k)
            {
                Console.WriteLine($"  {x[k]}  {data[k].Real}");
            }
        }