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}"); } }
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}"); } }
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}"); } }