public void AiryBiExtremeValues() { Assert.IsTrue(Double.IsNaN(AdvancedMath.AiryBi(Double.NegativeInfinity))); Assert.IsTrue(AdvancedMath.AiryBi(Double.MaxValue) == Double.PositiveInfinity); Assert.IsTrue(AdvancedMath.AiryBi(Double.PositiveInfinity) == Double.PositiveInfinity); Assert.IsTrue(Double.IsNaN(AdvancedMath.AiryBi(Double.NaN))); }
public void AiryAgreement() { foreach (double x in TestUtilities.GenerateRealValues(1.0E-2, 1.0E2, 4)) { SolutionPair s = AdvancedMath.Airy(-x); Assert.IsTrue(TestUtilities.IsNearlyEqual(s.FirstSolutionValue, AdvancedMath.AiryAi(-x))); Assert.IsTrue(TestUtilities.IsNearlyEqual(s.SecondSolutionValue, AdvancedMath.AiryBi(-x))); } }
public void AiryZeroArgument() { Assert.IsTrue(TestUtilities.IsNearlyEqual( AdvancedMath.AiryAi(0.0), 1.0 / Math.Pow(3.0, 2.0 / 3.0) / AdvancedMath.Gamma(2.0 / 3.0) )); Assert.IsTrue(TestUtilities.IsNearlyEqual( AdvancedMath.AiryBi(0.0), 1.0 / Math.Pow(3.0, 1.0 / 6.0) / AdvancedMath.Gamma(2.0 / 3.0) )); }
public void AiryZeros() { foreach (int k in new int[] { 1, 10, 100, 1000 }) { double a = AdvancedMath.AiryAiZero(k); double ya = AdvancedMath.AiryAi(a); Assert.IsTrue(TestUtilities.IsNearlyEqual(ya, 0.0, 2.0E-16 * k)); double b = AdvancedMath.AiryBiZero(k); double yb = AdvancedMath.AiryBi(b); Assert.IsTrue(TestUtilities.IsNearlyEqual(yb, 0.0, 2.0E-16 * k)); } }
public void AiryBairyIntegral() { // for small x: the integral will not converse for x <~ 5 because of the 1/sqrt(t) divergence near 0 // for large x: Bi explodes exponentially // but in between, it is a decent test of Ai and Bi together foreach (double x in TestUtilities.GenerateRealValues(5.0, 50.0, 8)) { double I = FunctionMath.Integrate( t => { return(Math.Exp(x * t - t * t * t / 12.0) / Math.Sqrt(t)); }, Interval.FromEndpoints(0.0, Double.PositiveInfinity) ); Assert.IsTrue(TestUtilities.IsNearlyEqual( MoreMath.Pow(AdvancedMath.AiryAi(x), 2) + MoreMath.Pow(AdvancedMath.AiryBi(x), 2), I / Math.Pow(Math.PI, 3.0 / 2.0) )); } }