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)); }