/// <summary> /// Perform one iteration of searching for a root with Newton-Raphson method /// </summary> /// <param name="f"></param> /// <param name="df"></param> /// <param name="value"></param> /// <param name="precision"></param> /// <returns></returns> private static ComplexNumber NewtonIter(FastExpression f, FastExpression df, ComplexNumber value, int precision) { ComplexNumber prev = value; int minCheckIters = (int)Math.Sqrt(precision); for (int i = 0; i < precision; i++) { if (i == precision - 1) { prev = value.Copy(); } try // TODO: remove try catch in for { value -= (f.Substitute(value) / df.Substitute(value)) as ComplexNumber; } catch (MathSException) { throw new MathSException("Two or more variables in SolveNt is forbidden"); } if (i > minCheckIters && prev == value) { return(value); } } if (Number.Abs(prev - value) > MathS.Settings.PrecisionErrorCommon) { return(RealNumber.NaN()); } else { return(value); } }
public void TestWithUndefined4() { var a = RealNumber.NegativeInfinity(); var b = RealNumber.NaN(); Assert.IsTrue(a * b == RealNumber.NaN()); }
public void TestWithUndefined5() { var a = new RealNumber(4); var b = new RealNumber(0.0m); Assert.IsTrue(a / b == RealNumber.NaN(), (a / b).ToString()); }
public void TestWithUndefined13() { Assert.IsTrue(RealNumber.PositiveInfinity() / RealNumber.NegativeInfinity() == RealNumber.NaN()); }
public void TestWithUndefined8() { var x = new RationalNumber(Number.Create(-1), Number.Create(2)); Assert.IsTrue(x / 0 == RealNumber.NaN(), (x / 0).ToString()); }