private void GetMeasurements(object sender, RoutedEventArgs e)
        {
            sde0 = new SDE(
                double.Parse(textBoxAlpha.Text),
                double.Parse(textBoxBeta.Text),
                double.Parse(textBoxGamma.Text),
                double.Parse(textBoxDelta.Text),
                double.Parse(textBoxX0.Text),
                double.Parse(textBoxY0.Text)
                );

            int    n      = int.Parse(textBoxN.Text);
            double stdDev = double.Parse(textBoxStdDev.Text);

            bool   myWay = (bool)checkBoxMyWay.IsChecked;
            string wayName;

            if (myWay)
            {
                wayName = "Rays";
                sde0.Rays(dt);
            }
            else
            {
                wayName = "OLSO";
                sde0.OSLO(dt);
            }

            textBlockrRes.Text = wayName + " squared error: " + sde0.GetAverageSquaredError() + Environment.NewLine;

            var exactSol = sde0.getSolution;

            plot.drawLine(wayName + " exact sol", exactSol, Brushes.Green);

            plot.drawPoints("Exact eq", sde0.GetEquilibriumPoint(), Brushes.Green);

            plot.drawPoints("Initial point", new double[] { sde0.x0, sde0.y0 }, Brushes.Green);

            measurements = Generator.getMeasurements(exactSol, stdDev, n);
            plot.drawPoints("Meas", measurements, Brushes.LightGreen);
        }
Exemple #2
0
        static void Main(string[] args)
        {
            int    experimentsNum = ReadInt("number of experiments");
            int    sampleSize     = ReadInt("size of sample");
            double stdDev         = ReadDouble("stdDev");
            bool   myWay          = ReadInt("myWay") == 1;
            int    medianIndex    = (int)Math.Floor((double)((experimentsNum - 1) / 2));

            string report;

            int      total = 5 * 5 * 5 * 5 * experimentsNum;
            int      cnt   = 0;
            DateTime t0    = DateTime.Now;

            for (double alpha = 0.5; alpha <= 2.5; alpha += 0.5)
            {
                for (double beta = 0.5; beta <= 2.5; beta += 0.5)
                {
                    for (double gamma = 0.5; gamma <= 2.5; gamma += 0.5)
                    {
                        for (double delta = 0.5; delta <= 2.5; delta += 0.5)
                        {
                            List <double> results = new List <double>();
                            for (int k = 0; k < experimentsNum; k++)
                            {
                                report = sampleSize + ";";
                                double[] parameters = Generator.getRandomInitPoint(alpha, beta, gamma, delta);

                                SDE sde1, sde0 = new SDE(
                                    alpha,
                                    beta,
                                    gamma,
                                    delta,
                                    parameters[0],
                                    parameters[1]
                                    );

                                report +=
                                    alpha + ";" +
                                    beta + ";" +
                                    gamma + ";" +
                                    delta + ";" +
                                    parameters[0] + ";" +
                                    parameters[1];

                                if (myWay)
                                {
                                    sde0.Rays(dt);
                                }
                                else
                                {
                                    sde0.OSLO(dt);
                                }

                                var exactSol     = sde0.getSolution;
                                var measurements = Generator.getMeasurements(exactSol, stdDev, sampleSize);

                                try
                                {
                                    double[] inferedParams;

                                    if (myWay)
                                    {
                                        inferedParams = Model.FirstIntegralInfer(measurements);
                                        sde1          = new SDE(inferedParams[0], inferedParams[1], inferedParams[2], inferedParams[3], inferedParams[4]);
                                    }
                                    else
                                    {
                                        inferedParams = Model.numericalMethodInfer(measurements);
                                        sde1          = new SDE(inferedParams[0], inferedParams[1], inferedParams[2], inferedParams[3], sde0.x0, sde0.y0);
                                    }

                                    double alpha0 = sde0.alpha, beta0 = sde0.beta, gamma0 = sde0.gamma, delta0 = sde0.delta;
                                    double alpha1 = sde1.alpha, beta1 = sde1.beta, gamma1 = sde1.gamma, delta1 = sde1.delta;
                                    if (myWay)
                                    {
                                        beta1  *= alpha0 / alpha1;
                                        gamma1 *= alpha0 / alpha1;
                                        delta1 *= alpha0 / alpha1;
                                        alpha1 *= alpha0 / alpha1;
                                    }

                                    double sqerror = Math.Sqrt((
                                                                   Math.Pow(alpha1 - alpha0, 2) +
                                                                   Math.Pow(beta1 - beta0, 2) +
                                                                   Math.Pow(gamma1 - gamma0, 2) +
                                                                   Math.Pow(delta1 - delta0, 2)
                                                                   ) / 4);

                                    report += ";" + sqerror;
                                    results.Add(sqerror);
                                }
                                catch (Exception)
                                {
                                    report += ";failed";
                                }
                                WriteToFile(report, "Report.csv");
                                cnt++;
                                Console.Clear();
                                Console.WriteLine(Math.Round(((double)cnt / total * 100), 2) + "%");
                                DateTime t1          = DateTime.Now;
                                int      fullSeconds = (int)(t1.Subtract(t0).TotalMilliseconds / cnt * (total - cnt) / 1000);
                                int      fullMinutes = fullSeconds / 60;
                                int      seconds     = fullSeconds % 60;
                                int      hours       = fullMinutes / 60;
                                int      minutes     = fullMinutes % 60;
                                Console.WriteLine((hours < 10 ? "0" : "") + hours + ":" + (minutes < 10 ? "0" : "") + minutes + ":" + (seconds < 10 ? "0" : "") + seconds);
                            }
                            results.Sort();
                            double median;
                            if (results.Count >= medianIndex + 1)
                            {
                                median = results[medianIndex];
                            }
                            else
                            {
                                median = -1;
                            }
                            WriteToFile(median.ToString(), "HeatMap.txt");
                        }
                    }
                }
            }

            Console.Write("Finished!!");
            Console.ReadKey();
        }