public void EllipticPiZeroModulus()
 {
     // DLMF 19.6.3
     foreach (double n in TestUtilities.GenerateUniformRealValues(-4.0, 1.0, 8))
     {
         Assert.IsTrue(TestUtilities.IsNearlyEqual(AdvancedMath.EllipticPi(n, 0.0), Math.PI / 2.0 / Math.Sqrt(1.0 - n)));
     }
 }
 public void EllipticPiSpecialCharacteristic()
 {
     foreach (double k in TestUtilities.GenerateRealValues(1.0E-4, 1.0, 4))
     {
         // DLMF 19.6.1
         Assert.IsTrue(TestUtilities.IsNearlyEqual(AdvancedMath.EllipticPi(k * k, k), AdvancedMath.EllipticE(k) / (1.0 - k * k)));
         // DLMF 19.6.2
         Assert.IsTrue(TestUtilities.IsNearlyEqual(AdvancedMath.EllipticPi(-k, k), Math.PI / 4.0 / (1.0 + k) + AdvancedMath.EllipticK(k) / 2.0));
         // DLMF 19.6.3
         Assert.IsTrue(TestUtilities.IsNearlyEqual(AdvancedMath.EllipticPi(0.0, k), AdvancedMath.EllipticK(k)));
         Assert.IsTrue(Double.IsPositiveInfinity(AdvancedMath.EllipticPi(1.0, k)));
     }
 }
        public void EllipticPiIntegration()
        {
            Interval i = Interval.FromEndpoints(0.0, Math.PI / 2.0);

            foreach (double k in TestUtilities.GenerateRealValues(1.0E-2, 1.0, 4))
            {
                double m = k * k;
                foreach (double n in TestUtilities.GenerateUniformRealValues(-2.0, 1.0, 4))
                {
                    Func <double, double> f = delegate(double t) {
                        double s2 = MoreMath.Sqr(Math.Sin(t));
                        return(1.0 / (1.0 - n * s2) / Math.Sqrt(1.0 - m * s2));
                    };

                    Assert.IsTrue(TestUtilities.IsNearlyEqual(
                                      FunctionMath.Integrate(f, i), AdvancedMath.EllipticPi(n, k)
                                      ));
                }
            }
        }
 public void EllipticPiSpecialCases()
 {
     Assert.IsTrue(TestUtilities.IsNearlyEqual(AdvancedMath.EllipticPi(0.0, 0.0), Math.PI / 2.0));
 }