コード例 #1
0
 public void ComplexErfFresnel () {
     // don't let x get too big or we run into problem of accruacy for arguments of large trig-like functions
     foreach (double x in TestUtilities.GenerateRealValues(1.0E-1, 1.0E2, 16)) {
         Complex z = Math.Sqrt(Math.PI) * (1.0 - ComplexMath.I) * x / 2.0;
         Complex w = (1.0 + ComplexMath.I) * AdvancedComplexMath.Erf(z) / 2.0;
         Assert.IsTrue(TestUtilities.IsNearlyEqual(w.Re, AdvancedMath.FresnelC(x)));
         Assert.IsTrue(TestUtilities.IsNearlyEqual(w.Im, AdvancedMath.FresnelS(x)));
     }
 }
コード例 #2
0
 public void ComplexErfSymmetries () {
     foreach (Complex z in TestUtilities.GenerateComplexValues(1.0E-1, 1.0E3, 16)) {
         // for large imaginary parts, erf overflows, so don't try them
         if (z.Im * z.Im > 500.0) continue;
         //Console.WriteLine("{0} {1} {2} {3}", z, AdvancedComplexMath.Erf(z), AdvancedComplexMath.Erf(-z), AdvancedComplexMath.Erf(z.Conjugate));
         Assert.IsTrue(TestUtilities.IsNearlyEqual(
             AdvancedComplexMath.Erf(-z), -AdvancedComplexMath.Erf(z)
         ));
         Assert.IsTrue(TestUtilities.IsNearlyEqual(
             AdvancedComplexMath.Erf(z.Conjugate), AdvancedComplexMath.Erf(z).Conjugate
         ));
     }
 }
コード例 #3
0
 public void ComplexErfFaddevaAgreement () {
     foreach (Complex z in TestUtilities.GenerateComplexValues(1.0E-1, 1.0E2, 16)) {
         Complex w = AdvancedComplexMath.Faddeeva(z);
         Complex erf = AdvancedComplexMath.Erf(-ComplexMath.I * z);
         Complex erfc = 1.0 - erf;
         Complex f = ComplexMath.Exp(z * z);
         Console.WriteLine("z={0} w={1} erf={2} erfc={3} f={4} w'={5} erf'={6}", z, w, erf, erfc, f, erfc / f, 1.0 - f * w);
         if (Double.IsInfinity(f.Re) || Double.IsInfinity(f.Im) || f == 0.0) continue;
         //Console.WriteLine("{0} {1}", TestUtilities.IsNearlyEqual(w, erfc / f), TestUtilities.IsNearlyEqual(erf, 1.0 - f * w));
         Assert.IsTrue(TestUtilities.IsNearlyEqual(
             erf, 1.0 - f * w
         ));
     }
 }
コード例 #4
0
 public void ComplexErfSpecialCase()
 {
     Assert.IsTrue(AdvancedComplexMath.Erf(0.0) == 0.0);
 }