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)
                              ));
        }
示例#4
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)
                                  ));
            }
        }