diff --git a/src/Numerics.Tests/SpecialFunctionsTests/BesselTests.cs b/src/Numerics.Tests/SpecialFunctionsTests/BesselTests.cs index e919bf09..3a6ef3c1 100644 --- a/src/Numerics.Tests/SpecialFunctionsTests/BesselTests.cs +++ b/src/Numerics.Tests/SpecialFunctionsTests/BesselTests.cs @@ -1,6 +1,5 @@ -using MathNet.Numerics.UnitTests; +using System; using NUnit.Framework; -using System; using Complex = System.Numerics.Complex; namespace MathNet.Numerics.UnitTests.SpecialFunctionsTests @@ -251,7 +250,7 @@ namespace MathNet.Numerics.UnitTests.SpecialFunctionsTests public void BesselIRatioExact(int n, double zr, double zi, double cyr, double cyi, int decimalPlaces) { var z = new Complex(zr, zi); - var actual = SpecialFunctions.BesselI(n + 1, z, SpecialFunctions.Scale.Exponential) / SpecialFunctions.BesselI(n, z, SpecialFunctions.Scale.Exponential); + var actual = SpecialFunctions.BesselIScaled(n + 1, z) / SpecialFunctions.BesselIScaled(n, z); AssertHelpers.AlmostEqualRelative(new Complex(cyr, cyi), actual, decimalPlaces); } @@ -267,7 +266,7 @@ namespace MathNet.Numerics.UnitTests.SpecialFunctionsTests public void BesselKRatioExact(int n, double zr, double zi, double cyr, double cyi, int decimalPlaces) { var z = new Complex(zr, zi); - var actual = SpecialFunctions.BesselK(n + 1, z, SpecialFunctions.Scale.Exponential) / SpecialFunctions.BesselK(n, z, SpecialFunctions.Scale.Exponential); + var actual = SpecialFunctions.BesselKScaled(n + 1, z) / SpecialFunctions.BesselKScaled(n, z); AssertHelpers.AlmostEqualRelative(new Complex(cyr, cyi), actual, decimalPlaces); } diff --git a/src/Numerics/SpecialFunctions/Airy.cs b/src/Numerics/SpecialFunctions/Airy.cs index 37cd7f46..84d717ae 100644 --- a/src/Numerics/SpecialFunctions/Airy.cs +++ b/src/Numerics/SpecialFunctions/Airy.cs @@ -10,14 +10,12 @@ namespace MathNet.Numerics /// /// Returns the Airy function Ai. /// AiryAi(z) is a solution to the Airy equation, y'' - y * z = 0. - /// AiryAi(z, Scale.Exponential) returns Exp(zta) * AiryAi(z), where zta = (2/3) * z * Sqrt(z). /// /// The value to compute the Airy function of. - /// The option to set the scaling factor. /// The Airy function Ai. - public static Complex AiryAi(Complex z, Scale scale = Scale.Unity) + public static Complex AiryAi(Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCairy(z) : Amos.Cairy(z); + return Amos.Cairy(z); } /// @@ -26,7 +24,7 @@ namespace MathNet.Numerics /// /// The value to compute the Airy function of. /// The exponentially scaled Airy function Ai. - public static Complex ScaledAiryAi(Complex z) + public static Complex AiryAiScaled(Complex z) { return Amos.ScaledCairy(z); } @@ -34,14 +32,12 @@ namespace MathNet.Numerics /// /// Returns the Airy function Ai. /// AiryAi(z) is a solution to the Airy equation, y'' - y * z = 0. - /// AiryAi(z, Scale.Exponential) returns Exp(zta) * AiryAi(z), where zta = (2/3) * z * Sqrt(z). /// /// The value to compute the Airy function of. - /// The option to set the scaling factor. /// The Airy function Ai. - public static double AiryAi(double z, Scale scale = Scale.Unity) + public static double AiryAi(double z) { - return (scale == Scale.Exponential) ? Amos.ScaledCairy(z) : AiryAi(new Complex(z, 0), scale).Real; + return AiryAi(new Complex(z, 0)).Real; } /// @@ -50,7 +46,7 @@ namespace MathNet.Numerics /// /// The value to compute the Airy function of. /// The exponentially scaled Airy function Ai. - public static double ScaledAiryAi(double z) + public static double AiryAiScaled(double z) { return Amos.ScaledCairy(z); } @@ -58,14 +54,12 @@ namespace MathNet.Numerics /// /// Returns the derivative of the Airy function Ai. /// AiryAiPrime(z) is defined as d/dz AiryAi(z). - /// AiryAiPrime(z, Scale.Exponential) returns Exp(zta) * AiryAiPrime(z), where zta = (2/3) * z * Sqrt(z). /// /// The value to compute the derivative of the Airy function of. - /// The option to set the scaling factor. /// The derivative of the Airy function Ai. - public static Complex AiryAiPrime(Complex z, Scale scale = Scale.Unity) + public static Complex AiryAiPrime(Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCairyPrime(z) : Amos.CairyPrime(z); + return Amos.CairyPrime(z); } /// @@ -74,7 +68,7 @@ namespace MathNet.Numerics /// /// The value to compute the derivative of the Airy function of. /// The exponentially scaled derivative of Airy function Ai. - public static Complex ScaledAiryAiPrime(Complex z) + public static Complex AiryAiPrimeScaled(Complex z) { return Amos.ScaledCairyPrime(z); } @@ -82,23 +76,21 @@ namespace MathNet.Numerics /// /// Returns the derivative of the Airy function Ai. /// AiryAiPrime(z) is defined as d/dz AiryAi(z). - /// AiryAiPrime(z, Scale.Exponential) returns Exp(zta) * AiryAiPrime(z), where zta = (2/3) * z * Sqrt(z). /// /// The value to compute the derivative of the Airy function of. - /// The option to set the scaling factor. /// The derivative of the Airy function Ai. - public static double AiryAiPrime(double z, Scale scale = Scale.Unity) + public static double AiryAiPrime(double z) { - return (scale == Scale.Exponential) ? Amos.ScaledCairyPrime(z) : AiryAiPrime(new Complex(z, 0), scale).Real; + return AiryAiPrime(new Complex(z, 0)).Real; } /// - /// Returns the expoenntially scaled derivative of the Airy function Ai. + /// Returns the exponentially scaled derivative of the Airy function Ai. /// ScaledAiryAiPrime(z) is given by Exp(zta) * AiryAiPrime(z), where zta = (2/3) * z * Sqrt(z). /// /// The value to compute the derivative of the Airy function of. - /// The expoenntially scaled derivative of the Airy function Ai. - public static double ScaledAiryAiPrime(double z) + /// The exponentially scaled derivative of the Airy function Ai. + public static double AiryAiPrimeScaled(double z) { return Amos.ScaledCairyPrime(z); } @@ -106,14 +98,12 @@ namespace MathNet.Numerics /// /// Returns the Airy function Bi. /// AiryBi(z) is a solution to the Airy equation, y'' - y * z = 0. - /// AiryBi(z, Scale.Exponential) returns Exp(-Abs(zta.Real)) * AiryBi(z) where zta = (2 / 3) * z * Sqrt(z). /// /// The value to compute the Airy function of. - /// The option to set the scaling factor. /// The Airy function Bi. - public static Complex AiryBi(Complex z, Scale scale = Scale.Unity) + public static Complex AiryBi(Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbiry(z) : Amos.Cbiry(z); + return Amos.Cbiry(z); } /// @@ -122,7 +112,7 @@ namespace MathNet.Numerics /// /// The value to compute the Airy function of. /// The exponentially scaled Airy function Bi(z). - public static Complex ScaledAiryBi(Complex z) + public static Complex AiryBiScaled(Complex z) { return Amos.ScaledCbiry(z); } @@ -130,14 +120,12 @@ namespace MathNet.Numerics /// /// Returns the Airy function Bi. /// AiryBi(z) is a solution to the Airy equation, y'' - y * z = 0. - /// AiryBi(z, Scale.Exponential) returns Exp(-Abs(zta.Real)) * AiryBi(z) where zta = (2 / 3) * z * Sqrt(z). /// /// The value to compute the Airy function of. - /// The option to set the scaling factor. /// The Airy function Bi. - public static double AiryBi(double z, Scale scale = Scale.Unity) + public static double AiryBi(double z) { - return AiryBi(new Complex(z, 0), scale).Real; + return AiryBi(new Complex(z, 0)).Real; } /// @@ -146,22 +134,20 @@ namespace MathNet.Numerics /// /// The value to compute the Airy function of. /// The exponentially scaled Airy function Bi. - public static double ScaledAiryBi(double z) + public static double AiryBiScaled(double z) { - return AiryBi(new Complex(z, 0), Scale.Exponential).Real; + return AiryBiScaled(new Complex(z, 0)).Real; } /// /// Returns the derivative of the Airy function Bi. /// AiryBiPrime(z) is defined as d/dz AiryBi(z). - /// AiryBiPrime(z, Scale.Exponential) returns Exp(-Abs(zta.Real)) * AiryBiPrime(z) where zta = (2 / 3) * z * Sqrt(z). /// /// The value to compute the derivative of the Airy function of. - /// The option to set the scaling factor. /// The derivative of the Airy function Bi. - public static Complex AiryBiPrime(Complex z, Scale scale = Scale.Unity) + public static Complex AiryBiPrime(Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbiryPrime(z) : Amos.CbiryPrime(z); + return Amos.CbiryPrime(z); } /// @@ -170,7 +156,7 @@ namespace MathNet.Numerics /// /// The value to compute the derivative of the Airy function of. /// The exponentially scaled derivative of the Airy function Bi. - public static Complex ScaledAiryBiPrime(Complex z) + public static Complex AiryBiPrimeScaled(Complex z) { return Amos.ScaledCbiryPrime(z); } @@ -178,14 +164,12 @@ namespace MathNet.Numerics /// /// Returns the derivative of the Airy function Bi. /// AiryBiPrime(z) is defined as d/dz AiryBi(z). - /// AiryBiPrime(z, Scale.Exponential) returns Exp(-Abs(zta.Real)) * AiryBiPrime(z) where zta = (2 / 3) * z * Sqrt(z). /// /// The value to compute the derivative of the Airy function of. - /// The option to set the scaling factor. /// The derivative of the Airy function Bi. - public static double AiryBiPrime(double z, Scale scale = Scale.Unity) + public static double AiryBiPrime(double z) { - return AiryBiPrime(new Complex(z, 0), scale).Real; + return AiryBiPrime(new Complex(z, 0)).Real; } /// @@ -194,9 +178,9 @@ namespace MathNet.Numerics /// /// The value to compute the derivative of the Airy function of. /// The exponentially scaled derivative of the Airy function Bi. - public static double ScaledAiryBiPrime(double z) + public static double AiryBiPrimeScaled(double z) { - return AiryBiPrime(new Complex(z, 0), Scale.Exponential).Real; + return AiryBiPrimeScaled(new Complex(z, 0)).Real; } } } diff --git a/src/Numerics/SpecialFunctions/Bessel.cs b/src/Numerics/SpecialFunctions/Bessel.cs index c80eaed5..73145796 100644 --- a/src/Numerics/SpecialFunctions/Bessel.cs +++ b/src/Numerics/SpecialFunctions/Bessel.cs @@ -10,15 +10,13 @@ namespace MathNet.Numerics /// /// Returns the Bessel function of the first kind. /// BesselJ(n, z) is a solution to the Bessel differential equation. - /// BesselJ(n, z, Scale.Exponential) returns Exp(-Abs(z.Imaginary)) * BesselJ(n, z). /// /// The order of the Bessel function. /// The value to compute the Bessel function of. - /// The option to set the scaling factor. /// The Bessel function of the first kind. - public static Complex BesselJ(double n, Complex z, Scale scale = Scale.Unity) + public static Complex BesselJ(double n, Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesj(n, z) : Amos.Cbesj(n, z); + return Amos.Cbesj(n, z); } /// @@ -28,7 +26,7 @@ namespace MathNet.Numerics /// The order of the Bessel function. /// The value to compute the Bessel function of. /// The exponentially scaled Bessel function of the first kind. - public static Complex ScaledBesselJ(double n, Complex z) + public static Complex BesselJScaled(double n, Complex z) { return Amos.ScaledCbesj(n, z); } @@ -36,15 +34,13 @@ namespace MathNet.Numerics /// /// Returns the Bessel function of the first kind. /// BesselJ(n, z) is a solution to the Bessel differential equation. - /// BesselJ(n, z, Scale.Exponential) returns Exp(-Abs(z.Imaginary)) * J(n, z). /// /// The order of the Bessel function. /// The value to compute the Bessel function of. - /// The option to set the scaling factor. /// The Bessel function of the first kind. - public static double BesselJ(double n, double z, Scale scale = Scale.Unity) + public static double BesselJ(double n, double z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesj(n, z) : Amos.Cbesj(n, z); + return Amos.Cbesj(n, z); } /// @@ -54,7 +50,7 @@ namespace MathNet.Numerics /// The order of the Bessel function. /// The value to compute the Bessel function of. /// The exponentially scaled Bessel function of the first kind. - public static double ScaledBesselJ(double n, double z) + public static double BesselJScaled(double n, double z) { return Amos.ScaledCbesj(n, z); } @@ -62,15 +58,13 @@ namespace MathNet.Numerics /// /// Returns the Bessel function of the second kind. /// BesselY(n, z) is a solution to the Bessel differential equation. - /// BesselY(n, z, Scale.Exponential) returns Exp(-Abs(z.Imaginary)) * BesselY(n, z). /// /// The order of the Bessel function. /// The value to compute the Bessel function of. - /// The option to set the scaling factor. /// The Bessel function of the second kind. - public static Complex BesselY(double n, Complex z, Scale scale = Scale.Unity) + public static Complex BesselY(double n, Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesy(n, z) : Amos.Cbesy(n, z); + return Amos.Cbesy(n, z); } /// @@ -80,7 +74,7 @@ namespace MathNet.Numerics /// The order of the Bessel function. /// The value to compute the Bessel function of. /// The exponentially scaled Bessel function of the second kind. - public static Complex ScaledBesselY(double n, Complex z) + public static Complex BesselYScaled(double n, Complex z) { return Amos.ScaledCbesy(n, z); } @@ -88,15 +82,13 @@ namespace MathNet.Numerics /// /// Returns the Bessel function of the second kind. /// BesselY(n, z) is a solution to the Bessel differential equation. - /// BesselY(n, z, Scale.Exponential) returns Exp(-Abs(z.Imaginary)) * BesselY(n, z). /// /// The order of the Bessel function. /// The value to compute the Bessel function of. - /// The option to set the scaling factor. /// The Bessel function of the second kind. - public static double BesselY(double n, double z, Scale scale = Scale.Unity) + public static double BesselY(double n, double z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesy(n, z) : Amos.Cbesy(n, z); + return Amos.Cbesy(n, z); } /// @@ -106,7 +98,7 @@ namespace MathNet.Numerics /// The order of the Bessel function. /// The value to compute the Bessel function of. /// The exponentially scaled Bessel function of the second kind. - public static double ScaledBesselY(double n, double z) + public static double BesselYScaled(double n, double z) { return Amos.ScaledCbesy(n, z); } @@ -114,15 +106,13 @@ namespace MathNet.Numerics /// /// Returns the modified Bessel function of the first kind. /// BesselI(n, z) is a solution to the modified Bessel differential equation. - /// BesselI(n, z, Scale.Exponential) returns Exp(-Abs(z.Real)) * BesselI(n, z). /// /// The order of the modified Bessel function. /// The value to compute the modified Bessel function of. - /// The option to set the scaling factor. /// The modified Bessel function of the first kind. - public static Complex BesselI(double n, Complex z, Scale scale = Scale.Unity) + public static Complex BesselI(double n, Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesi(n, z) : Amos.Cbesi(n, z); + return Amos.Cbesi(n, z); } /// @@ -132,7 +122,7 @@ namespace MathNet.Numerics /// The order of the modified Bessel function. /// The value to compute the modified Bessel function of. /// The exponentially scaled modified Bessel function of the first kind. - public static Complex ScaledBesselI(double n, Complex z) + public static Complex BesselIScaled(double n, Complex z) { return Amos.ScaledCbesi(n, z); } @@ -140,15 +130,13 @@ namespace MathNet.Numerics /// /// Returns the modified Bessel function of the first kind. /// BesselI(n, z) is a solution to the modified Bessel differential equation. - /// BesselI(n, z, Scale.Exponential) returns Exp(-Abs(z.Real)) * BesselI(n, z). /// /// The order of the modified Bessel function. /// The value to compute the modified Bessel function of. - /// The option to set the scaling factor. /// The modified Bessel function of the first kind. - public static double BesselI(double n, double z, Scale scale = Scale.Unity) + public static double BesselI(double n, double z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesi(n, z) : BesselI(n, new Complex(z, 0), scale).Real; + return BesselI(n, new Complex(z, 0)).Real; } /// @@ -158,7 +146,7 @@ namespace MathNet.Numerics /// The order of the modified Bessel function. /// The value to compute the modified Bessel function of. /// The exponentially scaled modified Bessel function of the first kind. - public static double ScaledBesselI(double n, double z) + public static double BesselIScaled(double n, double z) { return Amos.ScaledCbesi(n, z); } @@ -166,15 +154,13 @@ namespace MathNet.Numerics /// /// Returns the modified Bessel function of the second kind. /// BesselK(n, z) is a solution to the modified Bessel differential equation. - /// BesselK(n, z, Scale.Exponential) returns Exp(z) * BesselK(n, z). /// /// The order of the modified Bessel function. /// The value to compute the modified Bessel function of. - /// The option to set the scaling factor. /// The modified Bessel function of the second kind. - public static Complex BesselK(double n, Complex z, Scale scale = Scale.Unity) + public static Complex BesselK(double n, Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesk(n, z) : Amos.Cbesk(n, z); + return Amos.Cbesk(n, z); } /// @@ -184,7 +170,7 @@ namespace MathNet.Numerics /// The order of the modified Bessel function. /// The value to compute the modified Bessel function of. /// The exponentially scaled modified Bessel function of the second kind. - public static Complex ScaledBesselK(double n, Complex z) + public static Complex BesselKScaled(double n, Complex z) { return Amos.ScaledCbesk(n, z); } @@ -192,15 +178,13 @@ namespace MathNet.Numerics /// /// Returns the modified Bessel function of the second kind. /// BesselK(n, z) is a solution to the modified Bessel differential equation. - /// BesselK(n, z, Scale.Exponential) returns Exp(z) * BesselK(n, z). /// /// The order of the modified Bessel function. /// The value to compute the modified Bessel function of. - /// The option to set the scaling factor. /// The modified Bessel function of the second kind. - public static double BesselK(double n, double z, Scale scale = Scale.Unity) + public static double BesselK(double n, double z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesk(n, z) : Amos.Cbesk(n, z); + return Amos.Cbesk(n, z); } /// @@ -210,7 +194,7 @@ namespace MathNet.Numerics /// The order of the modified Bessel function. /// The value to compute the modified Bessel function of. /// The exponentially scaled modified Bessel function of the second kind. - public static double ScaledBesselK(double n, double z) + public static double BesselKScaled(double n, double z) { return Amos.ScaledCbesk(n, z); } diff --git a/src/Numerics/SpecialFunctions/Hankel.cs b/src/Numerics/SpecialFunctions/Hankel.cs index 1f820c33..a0b5127a 100644 --- a/src/Numerics/SpecialFunctions/Hankel.cs +++ b/src/Numerics/SpecialFunctions/Hankel.cs @@ -10,15 +10,13 @@ namespace MathNet.Numerics /// /// Returns the Hankel function of the first kind. /// HankelH1(n, z) is defined as BesselJ(n, z) + j * BesselY(n, z). - /// HankelH1(n, z, Scale.Exponential) returns Exp(-z * j) * HankelH1(n, z) where j = Sqrt(-1). /// /// The order of the Hankel function. /// The value to compute the Hankel function of. - /// The option to set the scaling factor. /// The Hankel function of the first kind. - public static Complex HankelH1(double n, Complex z, Scale scale = Scale.Unity) + public static Complex HankelH1(double n, Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesh1(n, z) : Amos.Cbesh1(n, z); + return Amos.Cbesh1(n, z); } /// @@ -28,7 +26,7 @@ namespace MathNet.Numerics /// The order of the Hankel function. /// The value to compute the Hankel function of. /// The exponentially scaled Hankel function of the first kind. - public static Complex ScaledHankelH1(double n, Complex z) + public static Complex HankelH1Scaled(double n, Complex z) { return Amos.ScaledCbesh1(n, z); } @@ -36,15 +34,13 @@ namespace MathNet.Numerics /// /// Returns the Hankel function of the second kind. /// HankelH2(n, z) is defined as BesselJ(n, z) - j * BesselY(n, z). - /// HankelH2(n, z, Scale.Exponential) returns Exp(z * j) * HankelH2(n, z) where j = Sqrt(-1). /// /// The order of the Hankel function. /// The value to compute the Hankel function of. - /// The option to set the scaling factor. /// The Hankel function of the second kind. - public static Complex HankelH2(double n, Complex z, Scale scale = Scale.Unity) + public static Complex HankelH2(double n, Complex z) { - return (scale == Scale.Exponential) ? Amos.ScaledCbesh2(n, z) : Amos.Cbesh2(n, z); + return Amos.Cbesh2(n, z); } /// @@ -54,7 +50,7 @@ namespace MathNet.Numerics /// The order of the Hankel function. /// The value to compute the Hankel function of. /// The exponentially scaled Hankel function of the second kind. - public static Complex ScaledHankelH2(double n, Complex z) + public static Complex HankelH2Scaled(double n, Complex z) { return Amos.ScaledCbesh2(n, z); } diff --git a/src/Numerics/SpecialFunctions/Options.cs b/src/Numerics/SpecialFunctions/Options.cs deleted file mode 100644 index 6342f0c7..00000000 --- a/src/Numerics/SpecialFunctions/Options.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace MathNet.Numerics -{ - public static partial class SpecialFunctions - { - public enum Scale - { - /// - /// For Bessel-related functions, no scaling factor is applied. - /// - Unity = 0, - - /// - /// For Bessel-related functions, exponential scaling is applied. - /// - Exponential = 1 - } - } -} diff --git a/src/Numerics/SpecialFunctions/SphericalBessel.cs b/src/Numerics/SpecialFunctions/SphericalBessel.cs index 160cfa5c..da3021a6 100644 --- a/src/Numerics/SpecialFunctions/SphericalBessel.cs +++ b/src/Numerics/SpecialFunctions/SphericalBessel.cs @@ -32,7 +32,7 @@ namespace MathNet.Numerics return (n == 0) ? 1 : 0; } - return Constants.SqrtPiOver2 * BesselJ(n + 0.5, z, Scale.Unity) / Complex.Sqrt(z); + return Constants.SqrtPiOver2 * BesselJ(n + 0.5, z) / Complex.Sqrt(z); } /// @@ -64,7 +64,7 @@ namespace MathNet.Numerics return (n == 0) ? 1 : 0; } - return Constants.SqrtPiOver2 * BesselJ(n + 0.5, z, Scale.Unity) / Math.Sqrt(z); + return Constants.SqrtPiOver2 * BesselJ(n + 0.5, z) / Math.Sqrt(z); } /// @@ -91,7 +91,7 @@ namespace MathNet.Numerics return new Complex(double.NaN, double.NaN); } - return Constants.SqrtPiOver2 * BesselY(n + 0.5, z, Scale.Unity) / Complex.Sqrt(z); + return Constants.SqrtPiOver2 * BesselY(n + 0.5, z) / Complex.Sqrt(z); } /// @@ -123,7 +123,7 @@ namespace MathNet.Numerics return double.NegativeInfinity; } - return Constants.SqrtPiOver2 * BesselY(n + 0.5, z, Scale.Unity) / Math.Sqrt(z); + return Constants.SqrtPiOver2 * BesselY(n + 0.5, z) / Math.Sqrt(z); } } }