Exemple #1
0
        public Fraction Argument()
        {
            Fraction arg = new Fraction(_imaginary / _real);
            var      x   = _imaginary / _real;
            Fraction ptr = new Fraction(-1);
            Fraction sum = new Fraction(0);

            //невозможно разложить в ряд тангенс значение = 1
            if (x.Abs() == new Fraction(1))
            {
                throw new ArithmeticException("There is no tg(x)");
            }

            if (x.Abs() > new Fraction(1))
            {
                x   = x.Flip();
                arg = x;

                for (int i = 3; i < Int32.MaxValue - 2; i += 2)
                {
                    arg += ptr * x.Pow(i) / i;
                    if ((arg.Abs() - sum.Abs()).Abs() < EPS)
                    {
                        break;
                    }
                    sum = arg;
                    ptr = ptr * (-1);
                }

                return(new Fraction((PI / 2 - arg)));
            }

            for (int i = 3; i < Int32.MaxValue - 2; i += 2)
            {
                arg += ptr * x.Pow(i) / i;
                if ((arg.Abs() - sum.Abs()).Abs() < EPS)
                {
                    break;
                }
                sum = arg;
                ptr = ptr * (-1);
            }

            return(arg);
        }
Exemple #2
0
        static public Fraction CosFraction(Fraction x, Fraction eps)
        {
            var sum          = new Fraction(0, 1);
            var currentValue = new Fraction(0, 1);
            var n            = 1;

            do
            {
                currentValue = Fraction.PowFraction(new Fraction(-1, 1), n) * (Fraction.PowFraction(x, 2 * n) / Fact(2 * n));
                sum         += currentValue;
                n++;
            } while (currentValue.Abs() > eps);
            return(sum);
        }
Exemple #3
0
        private static string FormatMixed(Fraction fraction)
        {
            if (BigInteger.Abs(fraction.Numerator) < BigInteger.Abs(fraction.Denominator))
            {
                return(FormatGeneral(fraction));
            }

            var integer   = fraction.Numerator / fraction.Denominator;
            var remainder = Fraction.Abs(fraction - integer);

            return(remainder.IsZero
                ? integer.ToString(CultureInfo.InvariantCulture)
                : string.Concat(
                       integer.ToString(CultureInfo.InvariantCulture),
                       " ",
                       FormatGeneral(remainder)));
        }
Exemple #4
0
        static public Fraction CountPi(Fraction eps)
        {
            var      pi = new Fraction(0, 1);
            int      j  = 1;
            Fraction curValue;

            do
            {
                curValue = new Fraction(4, j);
                pi      += new Fraction(4, j);
                j       += 2;
                curValue = new Fraction(4, j);
                pi      -= curValue;
                j       += 2;
            } while (curValue.Abs() > eps);
            return(pi);
        }
Exemple #5
0
        static public Fraction AtanFraction(Fraction x, Fraction eps)
        {
            if (x.Abs() > new Fraction(1, 1))
            {
                throw new Exception("Invalid Argument");
            }
            var sum          = new Fraction(0, 1);
            var currentValue = new Fraction(0, 1);
            var n            = 1;

            do
            {
                currentValue = Fraction.PowFraction(new Fraction(-1, 1), n - 1) * (Fraction.PowFraction(x, 2 * n - 1) / (2 * n - 1));
                sum         += currentValue;
                n++;
            } while (currentValue.Abs() > eps);
            return(sum);
        }
Exemple #6
0
        /// <summary>
        /// находим оптимальный вариант (выбираем максимальный элемент по модулю снизу)
        /// </summary>
        /// <returns></returns>
        public int FindOptimalBearingElement()
        {
            if (bearingEls.Count == 0)
            {
                return(-1); //Нету элементов для поиска.
            }
            int      optimalIndex = 0;
            Fraction MaxEl        = Fraction.Abs(ObjFunction[bearingEls[0][1]]); //Кладём максимальный по модулю элемент в опорном столбце из целевой функции

            for (int i = 1; i < bearingEls.Count; i++)
            {
                if (MaxEl < Fraction.Abs(ObjFunction[bearingEls[i][1]]))
                {
                    optimalIndex = i;
                    MaxEl        = Fraction.Abs(ObjFunction[bearingEls[i][1]]);
                }
            }
            return(optimalIndex);
        }
Exemple #7
0
        public Fraction Integrate(IIntegrable.Function func, Fraction left, Fraction right, Fraction eps, out BigInteger n)
        {
            BigInteger N     = 1;
            Fraction   prevY = Integrate(func, left, right, N);
            Fraction   Y;

            while (true)
            {
                N++;
                Y = Integrate(func, left, right, N);
                if (Fraction.Abs(Y - prevY) < eps)
                {
                    break;
                }
                prevY = Y;
            }

            n = N;
            return(Y);
        }
Exemple #8
0
        private static Fraction FindRoot(Fraction a, Fraction b, Function f, Fraction eps)
        {
            Fraction left  = (Fraction)a.Clone();
            Fraction right = (Fraction)b.Clone();
            Fraction zero  = new Fraction(0);

            while (Fraction.Abs(left - right) > eps)
            {
                Fraction c = (left + right) / 2;
                if (f(right) * f(c) < zero)
                {
                    left = c;
                }
                else
                {
                    right = c;
                }
            }

            return((left + right) / 2);
        }
Exemple #9
0
        private int SortRows(int SortIndex)// Метод, который поднимает строку с наибольшим числом выше. (конкртено тут используется для выноса ненулевого элемента вверх)
        {
            if (Matrix[SortIndex][IndexListBasisElements[SortIndex]] != 0)
            {
                return(0);
            }
            int MaxElementIndex = SortIndex;

            for (int i = SortIndex + 1; i < RowCount; i++)
            {
                if (Fraction.Abs(Matrix[i][IndexListBasisElements[SortIndex]]) != 0)
                {
                    MaxElementIndex = i;
                    break;
                }
            }

            //теперь найден максимальный элемент ставим его на верхнее место
            if (MaxElementIndex > SortIndex)//если это не первый элемент
            {
                Fraction Temp;

                // Меняем местами элементы из правой части матрицы
                Temp = RightPart[MaxElementIndex];
                RightPart[MaxElementIndex] = RightPart[SortIndex];
                RightPart[SortIndex]       = Temp;

                for (int i = 0; i < ColumCount; i++) // Меняем местами элементы строчки в которой самый большой элемент
                {                                    // и строчки, номер которой был передан как аргумент.
                    Temp = Matrix[MaxElementIndex][i];
                    Matrix[MaxElementIndex][i] = Matrix[SortIndex][i];
                    Matrix[SortIndex][i]       = Temp;
                }
                return(0);
            }
            return(1);
        }
Exemple #10
0
 public Fraction Shall_the_returning_fraction_be_positive(Fraction fraction)
 {
     return(fraction.Abs());
 }