Example #1
0
 public static void TestU01()
 {
     for (int k = 0; k != 512; ++k)
     {
         var x = -2.06 + (double)k * 0.01;
         var f = U01.PDF(x);
         Console.WriteLine($"   {x}   {f}");
     }
 }
Example #2
0
        public static void TestFourierU01()
        {
            Complex[] data = new Complex[512];

            for (int k = 0; k != 512; ++k)
            {
                var x = -2.06 + (double)k * 0.01;
                var f = U01.PDF(x);
                data[k] = new Complex(f, 0.0);
            }

            Fourier.Forward(data);
            Fourier.Inverse(data);

            for (int k = 0; k != 512; ++k)
            {
                Console.WriteLine($"   {data[k].Real}   {data[k].Imaginary}");
            }
        }
Example #3
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}");
            }
        }