Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace Метод_ввода_данных
- {
- class Program
- {
- public static double Input(string jn, out double vd)
- {
- Console.Write(jn);
- string buf = Console.ReadLine();
- vd = Double.Parse(buf);
- return vd;
- }
- static double[] Function(double x, double a, double b, double c, double leftBorder, double rightBorder, double step)//Метод вычисления функции
- {
- int length = (int)((rightBorder - leftBorder) / step + 1); //Вычисляем сколько шагов сможем сделать по введенным границам
- double[] arrayF = new double[length]; //Задаем массив, где будут храниться наши значения на каждом шаге
- for (int i = 0; i < length; i++) //В цикле заполняем массив значениями функции
- {
- arrayF[i] = Math.Log(a * x) - b * x + c;//Формула вычисления функции от каждого Х
- x = x + step; //Добавляем к x шаг
- }
- return arrayF; // Возвращаем наш заполненый массив фукции
- }
- static double[] FunctionP(double x, double b, double leftBorder, double rightBorder, double step)//Метод вычисления производной функции
- {
- int length = (int)((rightBorder - leftBorder) / step + 1); //Вычисляем сколько шагов сможем сделать по введенным границам
- double[] arrayP = new double[length]; //Задаем массив, где будут храниться наши значения на каждом шаге
- for (int i = 0; i < length; i++) //В цикле заполняем массив значениями производной функции
- {
- arrayP[i] = 1 / x - b;//Формула вычисления производной от каждого Х
- x = x + step; //Добавляем к x шаг
- }
- return arrayP; // Возвращаем наш заполненый массив производной
- }
- public static bool Root_separation(double function1, double function2, double derivative1, double derivative2)
- {
- if (function1 * function2 < 0 && derivative1 * derivative2> 0)
- return true;
- else return false;
- }
- public static void Main()
- {
- string Input1 = "\tВведите значение левой границы интервала = ";
- Input(Input1, out double ap); //Вызываем метод input, который выводит на консоль строку и введенное число
- Console.WriteLine($"\t{ap:f2}"); //повторно выводим введенное число
- string Input2 = "\tВведите значение правой границы интервала = ";
- Input(Input2, out double bt); //Вызываем метод input, который выводит на консоль строку и введенное число
- Console.WriteLine($"\t{bt:f2}"); //повторно выводим введенное число
- string Input3 = "\tВведите значение шага = ";
- Input(Input3, out double hx); //Вызываем метод input, который выводит на консоль строку и введенное число
- Console.WriteLine($"\t{hx:f2}"); //повторно выводим введенное число
- Console.ReadLine();
- double a = 0.3049; //Вводим значения коэффициентов нелинейного уравнения
- double b = 0.3436;
- double c = 1.5;
- double leftBorder = Convert.ToDouble(ap); //Конвертируем к double значение левой границы
- double rightBorder = Convert.ToDouble(bt);//Конвертируем к double значение правой границы
- double step = Convert.ToDouble(hx); //Конвертируем к double значение шага
- double x = leftBorder;
- double[] fc = Function(x, a, b, c, leftBorder, rightBorder, step); //Вызываем метод Function, который вернет массив значений F(X)
- double[] f1c = FunctionP(x, b, leftBorder, rightBorder, step); //Вызываем метод FunctionP, который вернет массив значений F'(X)
- int length = (int)((rightBorder - leftBorder) / step + 1); //Вычисляем сколько шагов сможем сделать по введенным границам
- double[] arrayX = new double[length];
- for (int i = 0; i < length; i++)//Массив, рассчитывающий Х
- {
- arrayX[i] = x;
- x = x + step;
- }
- for (int i = 0; i < length; i++)//Массив Х, F(X), F'(X)
- {
- Console.WriteLine("Х[{0}] = {1}\t F[{0}]= {2} \t F'[{0}]= {3}", i, arrayX[i], fc[i], f1c[i]);//Вывод методов вычисления Х, F(X), F'(X)
- }
- for (int i = 0; i < length - 1; i++)//Массив для проверки существования корня
- {
- if (Root_separation(fc[i], fc[i + 1], f1c[i], f1c[i + 1]) is true)//Цикл с истинностью условия
- Console.WriteLine( " Корень существует на промежутке [{0};{1}]", arrayX[i], arrayX[i + 1]);//Вывод корней промежутков с корнем, удовлетворяющих условию существования
- else
- Console.WriteLine(" Корней на промежутке [{0};{1}] нет", arrayX[i], arrayX[i + 1]);
- }
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement