Ejemplo n.º 1
0
 static void Main(string[] args)
 {
     ConditionNumberProblem();
     FormatExtensions.PrintDivider();
     GaussEliminationProblem();
     FormatExtensions.PrintDivider();
     JordanEliminationProblem();
     FormatExtensions.PrintDivider();
     LuDecompositionProblem();
 }
Ejemplo n.º 2
0
        public async Task <IActionResult> GetById(int id)
        {
            var entity = await _db.Set <T>().FindAsync(id);

            // if (entity == null || FormatExtensions.IsPlaylistAndOnlyLocalization(entity, _userService.Culture))
            // {
            //     return NotFound();
            // }

            if (FormatExtensions.IsTranslatableEntityHasTranslation(entity))
            {
                return(Ok(entity.OfFormat(_userService)));
            }
            return(NoContent());
        }
Ejemplo n.º 3
0
        public override TelegramUserMessage GetResponseTo(Message inputMessage, Wbcl.Core.Models.Database.User user)
        {
            var sb = new StringBuilder();

            foreach (var dbUser in _db.Users)
            {
                sb.AppendLine(FormatExtensions.ToShortString(dbUser));
            }

            return(new TelegramUserMessage()
            {
                ChatId = inputMessage.Chat.Id,
                Text = $"Список пользователей: {Environment.NewLine} {sb}",
                ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup()
            });
        }
Ejemplo n.º 4
0
        private static bool CauchyLoop()
        {
            Console.Write("Введите длину шага между точками (h): ");

            var segmentLength = 0d;

            while (!double.TryParse(Console.ReadLine(), out segmentLength) || !segmentLength.IsNumber())
            {
                Console.Write("Некорректное значение: введите вещественное число: ");
            }

            Console.Write("Введите N: ");

            var enteredN = 0;

            while (!int.TryParse(Console.ReadLine(), out enteredN) || enteredN < 2)
            {
                Console.Write("Некорректное значение: введите целое число большее или равное 2: ");
            }

            FormatExtensions.PrintDivider();

            Console.WriteLine($"Длина шага (h): {segmentLength.Format()}");
            Console.WriteLine($"N: {enteredN}");

            FormatExtensions.PrintDivider();

            Console.WriteLine("Точное решение ОДУ: \n");

            var expectedValues = new double[2][];
            var nodes          = new double[enteredN + 3];

            expectedValues[1] = new double[enteredN + 3];
            expectedValues[0] = nodes;

            for (var i = -2; i <= enteredN; ++i)
            {
                nodes[i + 2]             = CauchyX + i * segmentLength;
                expectedValues[1][i + 2] = ExpectedSolution(nodes[i + 2]);
            }

            expectedValues.Format(Enumerable.Range(-2, enteredN + 3).Select(n => n.ToString()).ToArray(), new[] { "x", "y" });

            FormatExtensions.PrintDivider();

            var derivatives = new double[5];

            derivatives[0] = CauchyY;
            derivatives[1] = Derivative(CauchyX, CauchyY);
            derivatives[2] = SecondDerivative(CauchyX, CauchyY);
            derivatives[3] = ThirdDerivative(CauchyX, CauchyY);
            derivatives[4] = FourthDerivative(CauchyX, CauchyY);

            var solver = new CauchySolver(Derivative, CauchyX, CauchyY, segmentLength, enteredN + 2, derivatives);

            Console.WriteLine($"Найденные значения производных f(x, y) в точке {CauchyX.Format()}\n");

            for (var i = 0; i < derivatives.Length; ++i)
            {
                Console.WriteLine($"f^({i}) = {derivatives[i].Format()}");
            }

            Console.WriteLine();

            var taylor = new double[3][];

            taylor[0] = nodes;
            taylor[1] = solver.Taylor();
            taylor[2] = new double[enteredN + 3];

            for (var i = 0; i < expectedValues[1].Length; ++i)
            {
                taylor[2][i] = Math.Abs(taylor[1][i] - expectedValues[1][i]);
            }

            Console.WriteLine("Метод разложения в ряд Тейлора: \n");

            taylor.Format(Enumerable.Range(-2, enteredN + 3).Select(n => n.ToString()).ToArray(), new[] { "x", "y", "погрешность" });

            FormatExtensions.PrintDivider();

            var adams = new double[3][];

            adams[0] = nodes.TakeLast(enteredN - 2).ToArray();
            adams[1] = solver.Adams(expectedValues[1].Take(5).ToArray()).TakeLast(enteredN - 2).ToArray();
            adams[2] = new double[enteredN - 2];

            var expectedValuesTrimmed = expectedValues[1].TakeLast(enteredN - 2).ToArray();

            for (var i = 0; i < expectedValuesTrimmed.Length; ++i)
            {
                adams[2][i] = Math.Abs(expectedValuesTrimmed[i] - adams[1][i]);
            }

            Console.WriteLine("Экстраполяционный метод Адамса 4-го порядка: \n");

            adams.Format(Enumerable.Range(3, enteredN - 2).Select(n => n.ToString()).ToArray(), new[] { "x", "y", "погрешность" });

            FormatExtensions.PrintDivider();

            Console.WriteLine("Метод Рунге-Кутта 4-го порядка: \n");

            var rungeKutta = new double[3][];

            rungeKutta[0] = nodes.TakeLast(enteredN).ToArray();
            rungeKutta[1] = solver.RungeKutta().TakeLast(enteredN).ToArray();
            rungeKutta[2] = new double[enteredN];

            expectedValuesTrimmed = expectedValues[1].TakeLast(enteredN).ToArray();

            for (var i = 0; i < expectedValuesTrimmed.Length; ++i)
            {
                rungeKutta[2][i] = Math.Abs(expectedValuesTrimmed[i] - rungeKutta[1][i]);
            }

            rungeKutta.Format(Enumerable.Range(1, enteredN).Select(n => n.ToString()).ToArray(), new[] { "x", "y", "погрешность" });

            FormatExtensions.PrintDivider();

            Console.WriteLine("Метод Эйлера: \n");

            var euler = new double[3][];

            euler[0] = nodes.TakeLast(enteredN).ToArray();
            euler[1] = solver.Euler().TakeLast(enteredN).ToArray();
            euler[2] = new double[enteredN];

            for (var i = 0; i < expectedValuesTrimmed.Length; ++i)
            {
                euler[2][i] = Math.Abs(expectedValuesTrimmed[i] - euler[1][i]);
            }

            euler.Format(Enumerable.Range(1, enteredN).Select(n => n.ToString()).ToArray(), new[] { "x", "y", "погрешность" });

            FormatExtensions.PrintDivider();

            Console.WriteLine("Метод Эйлера I: \n");

            var euler1 = new double[3][];

            euler1[0] = nodes.TakeLast(enteredN).ToArray();
            euler1[1] = solver.EulerI().TakeLast(enteredN).ToArray();
            euler1[2] = new double[enteredN];

            for (var i = 0; i < expectedValuesTrimmed.Length; ++i)
            {
                euler1[2][i] = Math.Abs(expectedValuesTrimmed[i] - euler1[1][i]);
            }

            euler1.Format(Enumerable.Range(1, enteredN).Select(n => n.ToString()).ToArray(), new[] { "x", "y", "погрешность" });

            FormatExtensions.PrintDivider();

            Console.WriteLine("Метод Эйлера II: \n");

            var euler2 = new double[3][];

            euler2[0] = nodes.TakeLast(enteredN).ToArray();
            euler2[1] = solver.EulerII().TakeLast(enteredN).ToArray();
            euler2[2] = new double[enteredN];

            for (var i = 0; i < expectedValuesTrimmed.Length; ++i)
            {
                euler2[2][i] = Math.Abs(expectedValuesTrimmed[i] - euler2[1][i]);
            }

            euler2.Format(Enumerable.Range(1, enteredN).Select(n => n.ToString()).ToArray(), new[] { "x", "y", "погрешность" });

            FormatExtensions.PrintDivider();

            Console.WriteLine("Абслоютная фактическая погрешность для y_N: \n");

            Console.WriteLine($"Метод разложения в ряд Тейлора: {Math.Abs(expectedValues[1].Last() - taylor[1].Last()).Format()}");
            Console.WriteLine($"Экстраполяционный метод Адамса 4-го порядка: {Math.Abs(expectedValues[1].Last() - adams[1].Last()).Format()}");
            Console.WriteLine($"Метод Рунге-Кутта 4-го порядка: {Math.Abs(expectedValues[1].Last() - rungeKutta[1].Last()).Format()}");
            Console.WriteLine($"Метод Эйлера: {Math.Abs(expectedValues[1].Last() - euler[1].Last()).Format()}");
            Console.WriteLine($"Метод Эйлера I: {Math.Abs(expectedValues[1].Last() - euler1[1].Last()).Format()}");
            Console.WriteLine($"Метод Эйлера II: {Math.Abs(expectedValues[1].Last() - euler2[1].Last()).Format()}\n");

            Console.WriteLine($"Чтобы выйти, нажмите \'Esc\'\n");

            if (Console.ReadKey().Key == ConsoleKey.Escape)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 5
0
        private static bool Integration()
        {
            Console.Write("Введите левый конец отрезка интегрирования по составной КФ Гаусса и КФ типа Гаусса: ");

            var left = 0d;

            while (!double.TryParse(Console.ReadLine(), out left) || !left.IsNumber())
            {
                Console.Write("Некорректное значение: введите вещественное число: ");
            }

            Console.Write("Введите правый конец отрезка интегрирования по составной КФ Гаусса и КФ типа Гаусса: ");

            var right = 0d;

            while (!double.TryParse(Console.ReadLine(), out right) || !right.IsNumber() || right <= left)
            {
                Console.Write("Некорректное значение: введите вещественное число, большее левого конца отрезка интегрирования: ");
            }

            Console.Write("Введите число промежутков деления отрезка интегрирования по составной КФ Гаусса: ");

            var segmentNumber = 0;

            while (!int.TryParse(Console.ReadLine(), out segmentNumber) || segmentNumber <= 0)
            {
                Console.Write("Некорректное значение: введите положительное целое число: ");
            }

            Console.Write("Введите число узлов для интегрирования по КФ Мелера: ");

            var nodeNumber = 0;

            while (!int.TryParse(Console.ReadLine(), out nodeNumber) || nodeNumber <= 0)
            {
                Console.Write("Некорректное значение: введите положительное целое число: ");
            }

            FormatExtensions.PrintDivider();

            var segmentLength = (right - left) / segmentNumber;

            var gaussIntegral     = Integrator.GaussIntegrate(x => FunctionForGauss(x) * WeightForGauss(x), left, right, segmentNumber);
            var gaussLikeIntegral = Integrator.GaussLikeIntegrate(FunctionForGauss, WeightForGauss, left, right, new Logger());
            var melerIntegral     = Integrator.MelerIntegrate(FunctionForMeler, nodeNumber);

            var gaussExpectedIntegral = GaussLegendreRule.Integrate(x => FunctionForGauss(x) * WeightForGauss(x), left, right, MathNetIntegrationNodeNumber);

            FormatExtensions.PrintDivider();

            Console.WriteLine($"Функция: f(x) = sin(x) | Вес: 1 / (x + 0.1)");
            Console.WriteLine($"Отрезок интегрирования: [{left.Format(5)}, {right.Format(5)}]");
            Console.WriteLine($"Фактическое значение интеграла: {gaussExpectedIntegral.Format()}");
            Console.WriteLine($"Число отрезков деления для КФ Гаусса: {segmentNumber}");
            Console.WriteLine($"Длина отрезка для КФ Гаусса: {segmentLength.Format()}\n");

            Console.WriteLine(
                $"Формула Гаусса\n" +
                $"Вычисленное приближенное значение: {gaussIntegral.Format()}\n" +
                $"Абсолютная фактическая погрешность: {Math.Abs(gaussExpectedIntegral - gaussIntegral).Format()}\n\n" +
                $"Формула типа Гаусса\n" +
                $"Вычисленное приближенное значение: {gaussLikeIntegral.Format()}\n" +
                $"Абсолютная фактическая погрешность: {Math.Abs(gaussExpectedIntegral - gaussLikeIntegral).Format()}\n\n");

            FormatExtensions.PrintDivider();

            Console.WriteLine($"Функция: f(x) = 1 / (1 + x^2) | Вес: 1 / sqrt(1 - x^2)");
            Console.WriteLine($"Отрезок интегрирования: [-1, 1]");
            Console.WriteLine($"Фактическое значение интеграла: {MelerExpectedIntegral.Format()}");
            Console.WriteLine($"Число узлов для КФ Мелера: {nodeNumber}\n");

            Console.WriteLine(
                $"Формула Мелера\n" +
                $"Вычисленное приближенное значение: {melerIntegral.Format()}\n" +
                $"Абсолютная фактическая погрешность: {Math.Abs(MelerExpectedIntegral - melerIntegral).Format()}\n\n");

            Console.WriteLine($"Чтобы выйти, нажмите \'Esc\'\n");

            if (Console.ReadKey().Key == ConsoleKey.Escape)
            {
                return(false);
            }

            return(true);
        }