예제 #1
0
        public void JacobiArcsnComplexArgTest()
        {
            var z = new[]
            {
                new Complex(0.0115779438837883, 0.00215513498962569),
                new Complex(0.0251305156397967, -0.0159972042786677),
                new Complex(1.4511560737138, -0.480192562215063),
                new Complex(-1.8128943757431, 0.175402508876567),
                new Complex(0.974889810203627, 0.317370944403016),
            };

            var m = new[]
            {
                .82872474670,
                .95465479750,
                .41588039490,
                .79913716820,
                .22263345920,
            };

            var ans = new[] {
                "0.011577520035845973+0.002154873907338315 i",
                "0.02513162775967239-0.01598866500104887 i",
                "1.0366906460437097-0.0928117050540744 i",
                "-0.9833652385779392+0.0168760678403997 i",
                "0.8497782949947773+0.1722870976144199 i",
            };

            for (int i = 0; i < z.Length; i++)
            {
                var sn    = Parse(ans[i]);
                var arcsn = Jacobi.arcsn(sn, m[i]);
                var ex    = z[i];
                Assert.IsTrue(Complex.Abs(arcsn - ex) < 1e-14);
                var f  = Jacobi.arcsnComplex(m[i]);
                var a2 = f(sn);
                Assert.AreEqual(arcsn, a2);
            }
        }