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); }
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); }
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))); }
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); }
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); }
/// <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); }
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); }
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); }
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); }
public Fraction Shall_the_returning_fraction_be_positive(Fraction fraction) { return(fraction.Abs()); }