Exemplo n.º 1
0
        public static void Main()
        {
            Console.WriteLine("Классические ортогональные многочлены");

            Console.Write("Введите степень многочлена: ");
            int n = int.Parse(Console.ReadLine());

            Console.WriteLine("Корни многочлена Лежандра: ");
            WriteAllRoots((double x) => LegendrePolynom(x, n), -1, 1);
            PlotFunction(x => LegendrePolynom(x, n), -1, 1, "legendre.png");

            Console.WriteLine("Корни многочлена Чебышева 1 рода:");
            WriteAllRoots(x => ChebyshevPolynom(x, n), -1, 1);
            PlotFunction(function: x => ChebyshevPolynom(x, n), -1, 1, "chebyshev.png");
            PlotFunction(function: x => ChebyshevPolynom(x, n) / Math.Pow(2, n - 1),
                         -1, 1, "chebyshev-reduced.png");
            WriteChebyshevExtremas(n);

            Console.WriteLine("Корни многочлена Чебышёва-Эрмита:");
            WriteAllRoots((double x) => ChebyshevHermitePolynom(x, n), -5, 5);
            PlotFunction(x => ChebyshevHermitePolynom(x, n), -2, 2, "hermite.png");

            Console.WriteLine("Корни многочлена Чебышева-Легерра:");
            WriteAllRoots((double x) => ChebyshevLegarrPolynom(x, n), 0, 20);
            PlotFunction(x => ChebyshevLegarrPolynom(x, n), 0, 20, "legerre.png");

            // TODO: убрать этот костыль
            GnuPlot.Replot();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Строит график заданной фукнции в указанных границах. График записывается в файл по заданному пути.
        /// </summary>
        /// <param name="function">Функция, график которой строим</param>
        /// <param name="leftBorder">Левая граница промежутка</param>
        /// <param name="rightBorder">Правая граница промежутка</param>
        /// <param name="outputFileName">Путь итогового графика</param>
        private static void PlotFunction(
            Func <double, double> function, double leftBorder, double rightBorder, String outputFileName)
        {
            const double step = 0.01;

            GnuPlot.Set("terminal png size 400,400", $"output '{outputFileName}'");

            var pointsCount = (int)((rightBorder - leftBorder) / step) + 1;
            var x           = new double[pointsCount];
            var y           = new double[pointsCount];
            int i           = 0;

            for (double point = leftBorder; point <= rightBorder; point += step)
            {
                x[i] = point;
                y[i] = function(point);

                ++i;
            }

            GnuPlot.Plot(x, y);
        }