public void BesselJZeros() { foreach (double nu in new double[] { 0.0, 0.5, 1.0, 4.25, 16.0, 124.0 }) { foreach (int k in new int[] { 1, 2, 4, 64, 256 }) { double j = AdvancedMath.BesselJZero(nu, k); double J = AdvancedMath.BesselJ(nu, j); Assert.IsTrue(TestUtilities.IsNearlyEqual(J, 0.0, 4.0E-16 * 3 * k)); } } }
private static double RayleighSum(double nu, int r) { double s = 0.0; for (int k = 1; k < 1024; k++) { double s_old = s; double ds = 1.0 / MoreMath.Pow(AdvancedMath.BesselJZero(nu, k), 2 * r); s += ds; if (ds < 1.0E-5 * s) { return(s); } } throw new NonconvergenceException(); }