예제 #1
0
        public static double Iteration(Func polynom, Func dx, Math.Interval interval, double accuracy)
        {
            double xk = interval.A;
            double x;
            double dxMin, dxMax;
            double lyambda;

            dxMin = dxMax = dx(interval.A);
            for (double i = interval.A; i < interval.B; i += accuracy)
            {
                if (dxMin > dx(i))
                {
                    dxMin = dx(i);
                }

                if (dxMax < dx(i))
                {
                    dxMax = dx(i);
                }
            }
            if (dxMax <= 3 * dxMin)
            {
                lyambda = 1.25 / dxMax;
            }
            else
            {
                lyambda = 1 / dxMax;
            }
            do
            {
                x  = xk;
                xk = x - lyambda * polynom(x);
            }while (Math.Abs(x - xk) >= accuracy);
            return(xk);
        }
예제 #2
0
        public static double Dichotomy(Func polynom, Math.Interval interval, double accuracy)
        {
            double root, funcVal;

            do
            {
                root    = (interval.A + interval.B) / 2;
                funcVal = polynom(root);
                if (funcVal == 0)
                {
                    break;
                }
                if (polynom(interval.A) * funcVal < 0)
                {
                    interval.B = root;
                }
                else
                {
                    interval.A = root;
                }
            } while (Math.Abs(interval.A - interval.B) >= accuracy);

            return(root);
        }
예제 #3
0
        public static double Tangent(Func polynom, Func dx, Func d2x, Math.Interval interval, double accuracy)
        {
            double point, root;

            if (polynom(interval.A) * d2x(interval.A) > 0)
            {
                do
                {
                    point      = interval.A;
                    interval.A = point - polynom(point) / dx(point);
                    root       = interval.A;
                }while (Math.Abs(interval.A - point) >= accuracy);
            }
            else
            {
                do
                {
                    point      = interval.B;
                    interval.B = point - polynom(point) / dx(point);
                    root       = interval.B;
                }while (Math.Abs(interval.B - point) >= accuracy);
            }
            return(root);
        }
예제 #4
0
        public static double Hords(Func polynom, Func d2x, Math.Interval interval, double accuracy)
        {
            double border, root;

            if (d2x(interval.A) * polynom(interval.A) > 0)
            {
                do
                {
                    border     = interval.B;
                    interval.B = interval.B - ((interval.B - interval.A) * polynom(interval.B)) / (polynom(interval.B) - polynom(interval.A));
                    root       = interval.B;
                } while (Math.Abs(interval.B - border) >= accuracy);
            }
            else
            {
                do
                {
                    border     = interval.A;
                    interval.A = interval.A - ((interval.B - interval.A) * polynom(interval.A)) / (polynom(interval.B) - polynom(interval.A));
                    root       = interval.A;
                } while (Math.Abs(interval.A - border) >= accuracy);
            }
            return(root);
        }
예제 #5
0
 public static double Pol_Dx(double x)
 {
     return(6 * Math.Pow(x, 2) + 2 * x - 15);
 }
예제 #6
0
 public static double Polindrome(double x)
 {
     return(2 * Math.Pow(x, 3) + Math.Pow(x, 2) - 15 * x + 10);
 }