Exemple #1
0
        public double FindArgument(FunctionD function, double eps, double funcTarget)
        {
            double funcfirst, funcsec, funcmid, mid;             //Значение функции в левой границе, правой,функция от середины интервала, середина интервала

            funcfirst = function(LeftBorder);
            funcsec   = function(RightBorder);
            if (funcfirst * funcsec < 0)             //Если границы имеют разные знаки, выполняем следующее: *
            {
                do
                {
                    mid     = (LeftBorder + RightBorder) / 2;    //Находим середину интервала
                    funcmid = function(mid);                     //Функция от середины интервала
                    if (funcfirst * funcmid < 0)                 //Если левая граница и середина интервала имеют разные знаки, то берём середину интервала за правую границу **
                    {
                        RightBorder = mid;
                        funcsec     = funcmid;
                    }
                    else                     //иначе, берём середину интервала за левую границу **
                    {
                        LeftBorder = mid; funcfirst = funcmid;
                    }
                }while (RightBorder - LeftBorder > eps); // Пока длина интервала превышает значение точности, выполняем цикл
            }
            else                                         //Иначе говорим, что границы взяли неверно *
            {
                Console.WriteLine("Неверные границы ");
                return(Double.NaN);
            }
            return((LeftBorder + RightBorder) / 2);            //Уменьшаем интервал
        }
        public double FindArgument(FunctionD function, double eps, double funcTarget)
        {
            double delta = 0.2 * eps;                   //Точность
            double currX, nextX, currFunc, defcurrFunc; //Текущее приближение, следующее приближение, текущая функция, производная текущей функции
            double h;                                   //Длина интервала

            currX = StartX;                             //Задаём текущий Х
            do
            {
                currFunc    = function(currX);                              // Подставляем аргумент в заданное уравнение
                defcurrFunc = (function(currX + delta) - currFunc) / delta; //Подставляем аргумент в производную функции
                nextX       = currX - (currFunc / defcurrFunc);             //Вычисляем следующее приближение
                h           = nextX - currX;                                //Длина интервала
                currX       = nextX;                                        //Выбираем следующее приближение за текущее
            } while (Math.Abs(h) > eps);
            return(nextX);                                                  //Возвращаем следующее приближение
        }
Exemple #3
0
        public double FindArgument(FunctionD function, double eps, double funcTarget)
        {
            double currX     = StartX;          //Выбираем текущий Х
            double FuncX     = function(currX); //Подставляем в уравнение
            long   iteration = 0;               //Задаём номер итерации

            var t = Math.Abs(FuncX - currX);    //Модуль разницы между F(x) и х

            do
            {
                currX = FuncX;                          // Х+1 = F(x)
                FuncX = function(currX);                // обновляем значение функции от текущего Х
                var currentT = Math.Abs(FuncX - currX); // обновляем модуль разницы между F(x) и х
                if (currentT > t)                       // если обновленное значение больше предыдущего, то выполняем следующее:
                {
                    return(double.NaN);
                }

                ++iteration;         // увеличиваем номер итерации
                t = currentT;        // приравниваем обновленное значение t
            }while (t >= eps);       //цикл выполняется, пока не добьемся нужной точности

            return(FuncX);           //возвращаем полученное значение функции
        }