diff --git a/src/Numerics/SpecialFunctions/Airy.cs b/src/Numerics/SpecialFunctions/Airy.cs index 5a4bd191..1e69093c 100644 --- a/src/Numerics/SpecialFunctions/Airy.cs +++ b/src/Numerics/SpecialFunctions/Airy.cs @@ -17,8 +17,7 @@ namespace MathNet.Numerics /// public static Complex AiryAi(Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCairy(z) : amos.Cairy(z); + return (expScaled) ? Amos.ScaledCairy(z) : Amos.Cairy(z); } /// @@ -33,8 +32,7 @@ namespace MathNet.Numerics { if (expScaled) { - var amos = new AmosWrapper(); - return amos.ScaledCairy(z); + return Amos.ScaledCairy(z); } else { @@ -52,8 +50,7 @@ namespace MathNet.Numerics /// public static Complex AiryAiPrime(Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCairyPrime(z) : amos.CairyPrime(z); + return (expScaled) ? Amos.ScaledCairyPrime(z) : Amos.CairyPrime(z); } /// @@ -68,8 +65,7 @@ namespace MathNet.Numerics { if (expScaled) { - var amos = new AmosWrapper(); - return amos.ScaledCairyPrime(z); + return Amos.ScaledCairyPrime(z); } else { @@ -87,8 +83,7 @@ namespace MathNet.Numerics /// public static Complex AiryBi(Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbiry(z) : amos.Cbiry(z); + return (expScaled) ? Amos.ScaledCbiry(z) : Amos.Cbiry(z); } /// @@ -114,8 +109,7 @@ namespace MathNet.Numerics /// public static Complex AiryBiPrime(Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbiryPrime(z) : amos.CbiryPrime(z); + return (expScaled) ? Amos.ScaledCbiryPrime(z) : Amos.CbiryPrime(z); } /// diff --git a/src/Numerics/SpecialFunctions/Amos/AmosWrapper.cs b/src/Numerics/SpecialFunctions/Amos/Amos.cs similarity index 82% rename from src/Numerics/SpecialFunctions/Amos/AmosWrapper.cs rename to src/Numerics/SpecialFunctions/Amos/Amos.cs index 7ce7ae58..9e4b90ec 100644 --- a/src/Numerics/SpecialFunctions/Amos/AmosWrapper.cs +++ b/src/Numerics/SpecialFunctions/Amos/Amos.cs @@ -7,12 +7,12 @@ namespace MathNet.Numerics // [1] https://github.com/scipy/scipy/blob/master/scipy/special/amos_wrappers.c public static partial class SpecialFunctions { - private class AmosWrapper + private static class Amos { #region AiryAi // Returns Ai(z) - public Complex Cairy(Complex z) + public static Complex Cairy(Complex z) { int id = 0; int kode = 1; @@ -22,13 +22,12 @@ namespace MathNet.Numerics double air = double.NaN; double aii = double.NaN; - var amos = new AmosHelper(); - amos.zairy(z.Real, z.Imaginary, id, kode, ref air, ref aii, ref nz, ref ierr); + AmosHelper.zairy(z.Real, z.Imaginary, id, kode, ref air, ref aii, ref nz, ref ierr); return new Complex(air, aii); } // Returns Exp(zta) * Ai(z) where zta = (2/3) * z * Sqrt(z) - public Complex ScaledCairy(Complex z) + public static Complex ScaledCairy(Complex z) { int id = 0; int kode = 2; @@ -38,13 +37,12 @@ namespace MathNet.Numerics double air = double.NaN; double aii = double.NaN; - var amos = new AmosHelper(); - amos.zairy(z.Real, z.Imaginary, id, kode, ref air, ref aii, ref nz, ref ierr); + AmosHelper.zairy(z.Real, z.Imaginary, id, kode, ref air, ref aii, ref nz, ref ierr); return new Complex(air, aii); } // Returns Exp(zta) * Ai(z) where zta = (2/3) * z * Sqrt(z) - public double ScaledCairy(double z) + public static double ScaledCairy(double z) { if (z < 0) { @@ -59,13 +57,12 @@ namespace MathNet.Numerics double air = double.NaN; double aii = double.NaN; - var amos = new AmosHelper(); - amos.zairy(z, 0.0, id, kode, ref air, ref aii, ref nz, ref ierr); + AmosHelper.zairy(z, 0.0, id, kode, ref air, ref aii, ref nz, ref ierr); return air; } // Returns d/dz Ai(z) - public Complex CairyPrime(Complex z) + public static Complex CairyPrime(Complex z) { int id = 1; int kode = 1; @@ -75,13 +72,12 @@ namespace MathNet.Numerics double air = double.NaN; double aii = double.NaN; - var amos = new AmosHelper(); - amos.zairy(z.Real, z.Imaginary, id, kode, ref air, ref aii, ref nz, ref ierr); + AmosHelper.zairy(z.Real, z.Imaginary, id, kode, ref air, ref aii, ref nz, ref ierr); return new Complex(air, aii); } // Returns Exp(zta) * d/dz Ai(z) where zta = (2/3) * z * Sqrt(z) - public Complex ScaledCairyPrime(Complex z) + public static Complex ScaledCairyPrime(Complex z) { int id = 1; int kode = 2; @@ -91,13 +87,12 @@ namespace MathNet.Numerics double air = double.NaN; double aii = double.NaN; - var amos = new AmosHelper(); - amos.zairy(z.Real, z.Imaginary, id, kode, ref air, ref aii, ref nz, ref ierr); + AmosHelper.zairy(z.Real, z.Imaginary, id, kode, ref air, ref aii, ref nz, ref ierr); return new Complex(air, aii); } // Returns Exp(zta) * d/dz Ai(z) where zta = (2/3) * z * Sqrt(z) - public double ScaledCairyPrime(double z) + public static double ScaledCairyPrime(double z) { if (z < 0) { @@ -112,8 +107,7 @@ namespace MathNet.Numerics double air = double.NaN; double aii = double.NaN; - var amos = new AmosHelper(); - amos.zairy(z, 0.0, id, kode, ref air, ref aii, ref nz, ref ierr); + AmosHelper.zairy(z, 0.0, id, kode, ref air, ref aii, ref nz, ref ierr); return air; } @@ -122,7 +116,7 @@ namespace MathNet.Numerics #region AiryBi // Returns Bi(z) - public Complex Cbiry(Complex z) + public static Complex Cbiry(Complex z) { int id = 0; int kode = 1; @@ -132,13 +126,12 @@ namespace MathNet.Numerics double bir = double.NaN; double bii = double.NaN; - var amos = new AmosHelper(); - amos.zbiry(z.Real, z.Imaginary, id, kode, ref bir, ref bii, ref nz, ref ierr); + AmosHelper.zbiry(z.Real, z.Imaginary, id, kode, ref bir, ref bii, ref nz, ref ierr); return new Complex(bir, bii); } // Returns Exp(-axzta) * Bi(z) where zta = (2 / 3) * z * Sqrt(z) and axzta = Abs(zta.Real) - public Complex ScaledCbiry(Complex z) + public static Complex ScaledCbiry(Complex z) { int id = 0; int kode = 2; @@ -148,13 +141,12 @@ namespace MathNet.Numerics double bir = double.NaN; double bii = double.NaN; - var amos = new AmosHelper(); - amos.zbiry(z.Real, z.Imaginary, id, kode, ref bir, ref bii, ref nz, ref ierr); + AmosHelper.zbiry(z.Real, z.Imaginary, id, kode, ref bir, ref bii, ref nz, ref ierr); return new Complex(bir, bii); } // Returns d/dz Bi(z) - public Complex CbiryPrime(Complex z) + public static Complex CbiryPrime(Complex z) { int id = 1; int kode = 1; @@ -164,13 +156,12 @@ namespace MathNet.Numerics double bipr = double.NaN; double bipi = double.NaN; - var amos = new AmosHelper(); - amos.zbiry(z.Real, z.Imaginary, id, kode, ref bipr, ref bipi, ref nz, ref ierr); + AmosHelper.zbiry(z.Real, z.Imaginary, id, kode, ref bipr, ref bipi, ref nz, ref ierr); return new Complex(bipr, bipi); } // Returns Exp(-axzta) * d/dz Bi(z) where zta = (2 / 3) * z * Sqrt(z) and axzta = Abs(zta.Real) - public Complex ScaledCbiryPrime(Complex z) + public static Complex ScaledCbiryPrime(Complex z) { int id = 1; int kode = 2; @@ -180,8 +171,7 @@ namespace MathNet.Numerics double bipr = double.NaN; double bipi = double.NaN; - var amos = new AmosHelper(); - amos.zbiry(z.Real, z.Imaginary, id, kode, ref bipr, ref bipi, ref nz, ref ierr); + AmosHelper.zbiry(z.Real, z.Imaginary, id, kode, ref bipr, ref bipi, ref nz, ref ierr); return new Complex(bipr, bipi); } @@ -190,7 +180,7 @@ namespace MathNet.Numerics #region BesselJ // Return J(v, z) - public Complex Cbesj(double v, Complex z) + public static Complex Cbesj(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -216,8 +206,7 @@ namespace MathNet.Numerics cyji[i] = double.NaN; } - var amos = new AmosHelper(); - amos.zbesj(z.Real, z.Imaginary, v, kode, n, cyjr, cyji, ref nz, ref ierr); + AmosHelper.zbesj(z.Real, z.Imaginary, v, kode, n, cyjr, cyji, ref nz, ref ierr); Complex cyj = new Complex(cyjr[0], cyji[0]); if (ierr == 2) @@ -244,7 +233,7 @@ namespace MathNet.Numerics cwrki[i] = double.NaN; } - amos.zbesy(z.Real, z.Imaginary, v, kode, n, cyyr, cyyi, ref nz, cwrkr, cwrki, ref ierr); + AmosHelper.zbesy(z.Real, z.Imaginary, v, kode, n, cyyr, cyyi, ref nz, cwrkr, cwrki, ref ierr); Complex cyy = new Complex(cyyr[0], cyyi[0]); cyj = RotateJY(cyj, cyy, v); @@ -254,7 +243,7 @@ namespace MathNet.Numerics } // Return J(v, z) - public double Cbesj(double v, double z) + public static double Cbesj(double v, double z) { if (z < 0 && v != (int)v) { @@ -265,7 +254,7 @@ namespace MathNet.Numerics } // Return Exp(-Abs(y)) * J(v, z) where y = z.Imaginary - public Complex ScaledCbesj(double v, Complex z) + public static Complex ScaledCbesj(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -292,8 +281,7 @@ namespace MathNet.Numerics cyji[i] = double.NaN; } - var amos = new AmosHelper(); - amos.zbesj(z.Real, z.Imaginary, v, kode, n, cyjr, cyji, ref nz, ref ierr); + AmosHelper.zbesj(z.Real, z.Imaginary, v, kode, n, cyjr, cyji, ref nz, ref ierr); Complex cyj = new Complex(cyjr[0], cyji[0]); if (sign == -1) @@ -312,7 +300,7 @@ namespace MathNet.Numerics cworki[i] = double.NaN; } - amos.zbesy(z.Real, z.Imaginary, v, kode, n, cyyr, cyyi, ref nz, cworkr, cworki, ref ierr); + AmosHelper.zbesy(z.Real, z.Imaginary, v, kode, n, cyyr, cyyi, ref nz, cworkr, cworki, ref ierr); Complex cyy = new Complex(cyyr[0], cyyi[0]); cyj = RotateJY(cyj, cyy, v); @@ -322,7 +310,7 @@ namespace MathNet.Numerics } // Return Exp(-Abs(y)) * J(v, z) where y = z.Imaginary - public double ScaledCbesj(double v, double z) + public static double ScaledCbesj(double v, double z) { if (z < 0 && v != (int)v) { @@ -337,7 +325,7 @@ namespace MathNet.Numerics #region BesselY // Return Y(v, z) - public Complex Cbesy(double v, Complex z) + public static Complex Cbesy(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -357,7 +345,6 @@ namespace MathNet.Numerics int ierr = 0; Complex cyy; - var amos = new AmosHelper(); if (z.Real == 0 && z.Imaginary == 0) { //overflow @@ -377,7 +364,7 @@ namespace MathNet.Numerics cworki[i] = double.NaN; } - amos.zbesy(z.Real, z.Imaginary, v, kode, n, cyyr, cyyi, ref nz, cworkr, cworki, ref ierr); + AmosHelper.zbesy(z.Real, z.Imaginary, v, kode, n, cyyr, cyyi, ref nz, cworkr, cworki, ref ierr); cyy = new Complex(cyyr[0], cyyi[0]); if (ierr == 2) @@ -402,7 +389,7 @@ namespace MathNet.Numerics cyji[i] = double.NaN; } - amos.zbesj(z.Real, z.Imaginary, v, kode, n, cyjr, cyji, ref nz, ref ierr); + AmosHelper.zbesj(z.Real, z.Imaginary, v, kode, n, cyjr, cyji, ref nz, ref ierr); Complex cyj = new Complex(cyjr[0], cyji[0]); cyy = RotateJY(cyy, cyj, -v); @@ -412,7 +399,7 @@ namespace MathNet.Numerics } // Return Y(v, z) - public double Cbesy(double v, double x) + public static double Cbesy(double v, double x) { if (x < 0.0) { @@ -424,7 +411,7 @@ namespace MathNet.Numerics } // Return Exp(-Abs(y)) * Y(v, z) where y = z.Imaginary - public Complex ScaledCbesy(double v, Complex z) + public static Complex ScaledCbesy(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -455,8 +442,7 @@ namespace MathNet.Numerics cwrki[i] = double.NaN; } - var amos = new AmosHelper(); - amos.zbesy(z.Real, z.Imaginary, v, kode, n, cyyr, cyyi, ref nz, cwrkr, cwrki, ref ierr); + AmosHelper.zbesy(z.Real, z.Imaginary, v, kode, n, cyyr, cyyi, ref nz, cwrkr, cwrki, ref ierr); Complex cyy = new Complex(cyyr[0], cyyi[0]); if (ierr == 2) @@ -480,7 +466,7 @@ namespace MathNet.Numerics cyji[i] = double.NaN; } - amos.zbesj(z.Real, z.Imaginary, v, kode, n, cyjr, cyji, ref nz, ref ierr); + AmosHelper.zbesj(z.Real, z.Imaginary, v, kode, n, cyjr, cyji, ref nz, ref ierr); Complex cyj = new Complex(cyjr[0], cyji[0]); cyy = RotateJY(cyy, cyj, -v); } @@ -489,7 +475,7 @@ namespace MathNet.Numerics } // Return Exp(-Abs(y)) * Y(v, z) where y = z.Imaginary - public double ScaledCbesy(double v, double x) + public static double ScaledCbesy(double v, double x) { if (x < 0) { @@ -504,7 +490,7 @@ namespace MathNet.Numerics #region BesselI // Returns I(v, z) - public Complex Cbesi(double v, Complex z) + public static Complex Cbesi(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -531,8 +517,7 @@ namespace MathNet.Numerics cyii[i] = double.NaN; } - var amos = new AmosHelper(); - amos.zbesi(z.Real, z.Imaginary, v, kode, n, cyir, cyii, ref nz, ref ierr); + AmosHelper.zbesi(z.Real, z.Imaginary, v, kode, n, cyir, cyii, ref nz, ref ierr); Complex cyi = new Complex(cyir[0], cyii[0]); if (ierr == 2) @@ -558,7 +543,7 @@ namespace MathNet.Numerics { double[] cykr = new double[n]; double[] cyki = new double[n]; - amos.zbesk(z.Real, z.Imaginary, v, kode, n, cykr, cyki, ref nz, ref ierr); + AmosHelper.zbesk(z.Real, z.Imaginary, v, kode, n, cykr, cyki, ref nz, ref ierr); Complex cyk = new Complex(cykr[0], cyki[0]); cyi = RotateI(cyi, cyk, v); @@ -569,7 +554,7 @@ namespace MathNet.Numerics } // Return Exp(-Abs(x)) * I(v, z) where x = z.Real - public Complex ScaledCbesi(double v, Complex z) + public static Complex ScaledCbesi(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -596,8 +581,7 @@ namespace MathNet.Numerics cyii[i] = double.NaN; } - var amos = new AmosHelper(); - amos.zbesi(z.Real, z.Imaginary, v, kode, n, cyir, cyii, ref nz, ref ierr); + AmosHelper.zbesi(z.Real, z.Imaginary, v, kode, n, cyir, cyii, ref nz, ref ierr); Complex cyi = new Complex(cyir[0], cyii[0]); if (sign == -1) @@ -606,7 +590,7 @@ namespace MathNet.Numerics { double[] cykr = new double[n]; double[] cyki = new double[n]; - amos.zbesk(z.Real, z.Imaginary, v, kode, n, cykr, cyki, ref nz, ref ierr); + AmosHelper.zbesk(z.Real, z.Imaginary, v, kode, n, cykr, cyki, ref nz, ref ierr); Complex cyk = new Complex(cykr[0], cyki[0]); //adjust scaling to match zbesi @@ -624,7 +608,7 @@ namespace MathNet.Numerics } // Return Exp(-Abs(x)) * I(v, z) where x = z.Real - public double ScaledCbesi(double v, double x) + public static double ScaledCbesi(double v, double x) { if (v != Math.Floor(v) && x < 0) { @@ -639,7 +623,7 @@ namespace MathNet.Numerics #region BesselK // Returns K(v, z) - public Complex Cbesk(double v, Complex z) + public static Complex Cbesk(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -664,8 +648,7 @@ namespace MathNet.Numerics cyki[i] = double.NaN; } - var amos = new AmosHelper(); - amos.zbesk(z.Real, z.Imaginary, v, kode, n, cykr, cyki, ref nz, ref ierr); + AmosHelper.zbesk(z.Real, z.Imaginary, v, kode, n, cykr, cyki, ref nz, ref ierr); Complex cyk = new Complex(cykr[0], cyki[0]); if (ierr == 1) @@ -688,7 +671,7 @@ namespace MathNet.Numerics } // Returns K(v, z) - public double Cbesk(double v, double z) + public static double Cbesk(double v, double z) { if (z < 0) { @@ -714,7 +697,7 @@ namespace MathNet.Numerics } // returns Exp(z) * K(v, z) - public Complex ScaledCbesk(double v, Complex z) + public static Complex ScaledCbesk(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -740,9 +723,7 @@ namespace MathNet.Numerics cyki[i] = double.NaN; } - var amos = new AmosHelper(); - - amos.zbesk(z.Real, z.Imaginary, v, kode, n, cykr, cyki, ref nz, ref ierr); + AmosHelper.zbesk(z.Real, z.Imaginary, v, kode, n, cykr, cyki, ref nz, ref ierr); Complex cyk = new Complex(cykr[0], cyki[0]); if (ierr == 2) @@ -758,7 +739,7 @@ namespace MathNet.Numerics } // returns Exp(z) * K(v, z) - public double ScaledCbesk(double v, double z) + public static double ScaledCbesk(double v, double z) { if (z < 0) { @@ -780,7 +761,7 @@ namespace MathNet.Numerics #region HankelH1 // Returns H1(v, z) - public Complex Cbesh1(double v, Complex z) + public static Complex Cbesh1(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -808,8 +789,7 @@ namespace MathNet.Numerics sign = -1; } - var amos = new AmosHelper(); - amos.zbesh(z.Real, z.Imaginary, v, kode, m, n, cyhr, cyhi, ref nz, ref ierr); + AmosHelper.zbesh(z.Real, z.Imaginary, v, kode, m, n, cyhr, cyhi, ref nz, ref ierr); Complex cyh = new Complex(cyhr[0], cyhi[0]); if (sign == -1) @@ -821,7 +801,7 @@ namespace MathNet.Numerics } // Returns Exp(-z * j) * H1(n, z) where j = Sqrt(-1) - public Complex ScaledCbesh1(double v, Complex z) + public static Complex ScaledCbesh1(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -849,8 +829,7 @@ namespace MathNet.Numerics sign = -1; } - var amos = new AmosHelper(); - amos.zbesh(z.Real, z.Imaginary, v, kode, m, n, cyhr, cyhi, ref nz, ref ierr); + AmosHelper.zbesh(z.Real, z.Imaginary, v, kode, m, n, cyhr, cyhi, ref nz, ref ierr); Complex cyh = new Complex(cyhr[0], cyhi[0]); if (sign == -1) @@ -866,7 +845,7 @@ namespace MathNet.Numerics #region HankelH2 // Returns H2(v, z) - public Complex Cbesh2(double v, Complex z) + public static Complex Cbesh2(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -899,8 +878,7 @@ namespace MathNet.Numerics sign = -1; } - var amos = new AmosHelper(); - amos.zbesh(z.Real, z.Imaginary, v, kode, m, n, cyhr, cyhi, ref nz, ref ierr); + AmosHelper.zbesh(z.Real, z.Imaginary, v, kode, m, n, cyhr, cyhi, ref nz, ref ierr); Complex cyh = new Complex(cyhr[0], cyhi[0]); if (sign == -1) @@ -911,7 +889,7 @@ namespace MathNet.Numerics } // Returns Exp(z * j) * H2(n, z) where j = Sqrt(-1) - public Complex ScaledCbesh2(double v, Complex z) + public static Complex ScaledCbesh2(double v, Complex z) { if (double.IsNaN(v) || double.IsNaN(z.Real) || double.IsNaN(z.Imaginary)) { @@ -944,8 +922,7 @@ namespace MathNet.Numerics sign = -1; } - var amos = new AmosHelper(); - amos.zbesh(z.Real, z.Imaginary, v, kode, m, n, cyhr, cyhi, ref nz, ref ierr); + AmosHelper.zbesh(z.Real, z.Imaginary, v, kode, m, n, cyhr, cyhi, ref nz, ref ierr); Complex cyh = new Complex(cyhr[0], cyhi[0]); if (sign == -1) @@ -959,7 +936,7 @@ namespace MathNet.Numerics #region utilities - private double SinPi(double x) + private static double SinPi(double x) { if (Math.Floor(x) == x && Math.Abs(x) < 1.0e14) { @@ -971,7 +948,7 @@ namespace MathNet.Numerics return Math.Sin(Math.PI * x); } - private double CosPi(double x) + private static double CosPi(double x) { if (Math.Floor(x + 0.5) == x + 0.5 && Math.Abs(x) < 1.0E14) { @@ -983,21 +960,21 @@ namespace MathNet.Numerics return Math.Cos(Math.PI * x); } - private Complex Rotate(Complex z, double v) + private static Complex Rotate(Complex z, double v) { double c = CosPi(v); double s = SinPi(v); return new Complex(z.Real * c - z.Imaginary * s, z.Real * s + z.Imaginary * c); } - private Complex RotateJY(Complex j, Complex y, double v) + private static Complex RotateJY(Complex j, Complex y, double v) { double c = CosPi(v); double s = SinPi(v); return new Complex(j.Real * c - y.Real * s, j.Imaginary * c - y.Imaginary * s); } - private bool ReflectJY(ref Complex jy, double v) + private static bool ReflectJY(ref Complex jy, double v) { //NB: Y_v may be huge near negative integers -- so handle exact // integers carefully @@ -1016,7 +993,7 @@ namespace MathNet.Numerics return true; } - private bool ReflectI(Complex ik, double v) + private static bool ReflectI(Complex ik, double v) { if (v != Math.Floor(v)) { @@ -1026,7 +1003,7 @@ namespace MathNet.Numerics return true; //I is symmetric for integer v } - private Complex RotateI(Complex i, Complex k, double v) + private static Complex RotateI(Complex i, Complex k, double v) { double s = Math.Sin(v * Math.PI) * (2.0 / Math.PI); return new Complex(i.Real + s * k.Real, i.Imaginary + s * k.Imaginary); diff --git a/src/Numerics/SpecialFunctions/Amos/AmosHelper.cs b/src/Numerics/SpecialFunctions/Amos/AmosHelper.cs index b57618e9..453e0797 100644 --- a/src/Numerics/SpecialFunctions/Amos/AmosHelper.cs +++ b/src/Numerics/SpecialFunctions/Amos/AmosHelper.cs @@ -8,12 +8,12 @@ namespace MathNet.Numerics // // References: // [1] Amos package in netlib. http://www.netlib.org/amos - private class AmosHelper + private static class AmosHelper { #region Bessel- related functions // The Airy function Ai(z) and derivative - public int zairy(double zr, double zi, int id, int kode, ref double air, ref double aii, ref int nz, ref int ierr) + public static int zairy(double zr, double zi, int id, int kode, ref double air, ref double aii, ref int nz, ref int ierr) { #region Description @@ -421,7 +421,7 @@ namespace MathNet.Numerics } // The Airy function Bi(z) and derivative - public int zbiry(double zr, double zi, int id, int kode, ref double bir, ref double bii, ref int nz, ref int ierr) + public static int zbiry(double zr, double zi, int id, int kode, ref double bir, ref double bii, ref int nz, ref int ierr) { #region Description @@ -797,7 +797,7 @@ namespace MathNet.Numerics } // The Bessel function of the first kind and derivative - public int zbesj(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, ref int ierr) + public static int zbesj(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, ref int ierr) { #region Description @@ -1068,7 +1068,7 @@ namespace MathNet.Numerics } // The Bessel function of the second kind and derivative - public int zbesy(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, double[] cwrkr, double[] cwrki, ref int ierr) + public static int zbesy(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, double[] cwrkr, double[] cwrki, ref int ierr) { #region Description @@ -1317,7 +1317,7 @@ namespace MathNet.Numerics } // The modified Bessel function of the first kind and derivative - public int zbesi(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, ref int ierr) + public static int zbesi(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, ref int ierr) { #region Description @@ -1593,7 +1593,7 @@ namespace MathNet.Numerics } // The modified Bessel function of the second kind and derivative - public int zbesk(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, ref int ierr) + public static int zbesk(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, ref int ierr) { #region Description @@ -1876,7 +1876,7 @@ namespace MathNet.Numerics } // The Hankel functions or Bessel functions of third kind and derivative - public int zbesh(double zr, double zi, double fnu, int kode, int m, int n, double[] cyr, double[] cyi, ref int nz, ref int ierr) + public static int zbesh(double zr, double zi, double fnu, int kode, int m, int n, double[] cyr, double[] cyi, ref int nz, ref int ierr) { #region Description @@ -2229,7 +2229,7 @@ namespace MathNet.Numerics #region LnGamma functions // The logarithm of the gamma function - public double dgamln(double z, ref int ierr) + public static double dgamln(double z, ref int ierr) { #region Description @@ -2385,7 +2385,7 @@ namespace MathNet.Numerics #region Fortran utilities - private double d1mach(int i) + private static double d1mach(int i) { #region Description @@ -2463,7 +2463,7 @@ namespace MathNet.Numerics return 0; } - private int i1mach(int i) + private static int i1mach(int i) { #region Description @@ -2552,14 +2552,14 @@ namespace MathNet.Numerics return 0; } - private double dsign(double a, double b) + private static double dsign(double a, double b) { // Returns the absolute value of A times the sign of B double x = (a >= 0 ? a : -a); return (b >= 0 ? x : -x); } - private double zabs(double zr, double zi) + private static double zabs(double zr, double zi) { #region Description @@ -2595,7 +2595,7 @@ namespace MathNet.Numerics return 0.0; } - private int zdiv(double ar, double ai, double br, double bi, ref double cr, ref double ci) + private static int zdiv(double ar, double ai, double br, double bi, ref double cr, ref double ci) { #region Description @@ -2621,7 +2621,7 @@ namespace MathNet.Numerics return 0; } - private int zexp(double ar, double ai, ref double br, ref double bi) + private static int zexp(double ar, double ai, ref double br, ref double bi) { #region Description @@ -2645,7 +2645,7 @@ namespace MathNet.Numerics return 0; } - private int zlog(double ar, double ai, ref double br, ref double bi, ref int ierr) + private static int zlog(double ar, double ai, ref double br, ref double bi, ref int ierr) { #region Description @@ -2697,7 +2697,7 @@ namespace MathNet.Numerics return 0; } - private int zmlt(double ar, double ai, double br, double bi, ref double cr, ref double ci) + private static int zmlt(double ar, double ai, double br, double bi, ref double cr, ref double ci) { #region Description @@ -2720,7 +2720,7 @@ namespace MathNet.Numerics return 0; } - private int zsqrt(double ar, double ai, ref double br, ref double bi) + private static int zsqrt(double ar, double ai, ref double br, ref double bi) { #region Description @@ -2782,7 +2782,7 @@ namespace MathNet.Numerics #region Subroutines to calculate the Bessel functions - private int zacai(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double rl, double tol, double elim, double alim) + private static int zacai(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double rl, double tol, double elim, double alim) { #region Description @@ -2888,7 +2888,7 @@ namespace MathNet.Numerics return 0; } - private int zacon(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double rl, double fnul, double tol, double elim, double alim) + private static int zacon(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double rl, double fnul, double tol, double elim, double alim) { #region Description @@ -3105,7 +3105,7 @@ namespace MathNet.Numerics return 0; } - private int zasyi(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double rl, double tol, double elim, double alim) + private static int zasyi(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double rl, double tol, double elim, double alim) { #region Description @@ -3283,7 +3283,7 @@ namespace MathNet.Numerics return 0; } - private int zbinu(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, double rl, double fnul, double tol, double elim, double alim) + private static int zbinu(double zr, double zi, double fnu, int kode, int n, double[] cyr, double[] cyi, ref int nz, double rl, double fnul, double tol, double elim, double alim) { #region Description @@ -3398,7 +3398,7 @@ namespace MathNet.Numerics return 0; } - private int zbknu(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) + private static int zbknu(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) { #region Description @@ -3994,7 +3994,7 @@ namespace MathNet.Numerics return 0; } - private int zbuni(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, int nui, ref int nlast, double fnul, double tol, double elim, double alim) + private static int zbuni(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, int nui, ref int nlast, double fnul, double tol, double elim, double alim) { #region Description @@ -4178,7 +4178,7 @@ namespace MathNet.Numerics return 0; } - private int zbunk(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) + private static int zbunk(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) { #region Description @@ -4217,7 +4217,7 @@ namespace MathNet.Numerics return 0; } - private int zkscl(double zrr, double zri, double fnu, int n, double[] yr, double[] yi, ref int nz, double rzr, double rzi, double ascle, double tol, double elim) + private static int zkscl(double zrr, double zri, double fnu, int n, double[] yr, double[] yi, ref int nz, double rzr, double rzi, double ascle, double tol, double elim) { #region Description @@ -4355,7 +4355,7 @@ namespace MathNet.Numerics return 0; } - private int zmlri(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double tol) + private static int zmlri(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double tol) { #region Description @@ -4575,7 +4575,7 @@ namespace MathNet.Numerics return 0; } - private int zrati(double zr, double zi, double fnu, int n, double[] cyr, double[] cyi, double tol) + private static int zrati(double zr, double zi, double fnu, int n, double[] cyr, double[] cyi, double tol) { #region Description @@ -4719,7 +4719,7 @@ namespace MathNet.Numerics return 0; } - private int zs1s2(double zrr, double zri, ref double s1r, ref double s1i, ref double s2r, ref double s2i, ref int nz, double ascle, double alim, ref int iuf) + private static int zs1s2(double zrr, double zri, ref double s1r, ref double s1i, ref double s2r, ref double s2i, ref int nz, double ascle, double alim, ref int iuf) { #region Description @@ -4776,7 +4776,7 @@ namespace MathNet.Numerics return 0; } - private int zseri(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) + private static int zseri(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) { #region Description @@ -4982,7 +4982,7 @@ namespace MathNet.Numerics return 0; } - private int zshch(double zr, double zi, ref double cshr, ref double cshi, ref double cchr, ref double cchi) + private static int zshch(double zr, double zi, ref double cshr, ref double cshi, ref double cchr, ref double cchi) { #region Description @@ -5008,7 +5008,7 @@ namespace MathNet.Numerics return 0; } - private int zuchk(double yr, double yi, ref int nz, double ascle, double tol) + private static int zuchk(double yr, double yi, ref int nz, double ascle, double tol) { #region Description @@ -5041,7 +5041,7 @@ namespace MathNet.Numerics return 0; } - private int zunhj(double zr, double zi, double fnu, int ipmtr, double tol, ref double phir, ref double phii, ref double argr, ref double argi, ref double zeta1r, ref double zeta1i, ref double zeta2r, ref double zeta2i, ref double asumr, ref double asumi, ref double bsumr, ref double bsumi) + private static int zunhj(double zr, double zi, double fnu, int ipmtr, double tol, ref double phir, ref double phii, ref double argr, ref double argi, ref double zeta1r, ref double zeta1i, ref double zeta2r, ref double zeta2i, ref double asumr, ref double asumi, ref double bsumr, ref double bsumi) { #region Description @@ -5655,7 +5655,7 @@ namespace MathNet.Numerics goto L120; } - private int zuni1(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, ref int nlast, double fnul, double tol, double elim, double alim) + private static int zuni1(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, ref int nlast, double fnul, double tol, double elim, double alim) { #region Description @@ -5893,7 +5893,7 @@ namespace MathNet.Numerics return 0; } - private int zuni2(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, ref int nlast, double fnul, double tol, double elim, double alim) + private static int zuni2(double zr, double zi, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, ref int nlast, double fnul, double tol, double elim, double alim) { #region Description @@ -6174,7 +6174,7 @@ namespace MathNet.Numerics return 0; } - private int zunik(double zrr, double zri, double fnu, int ikflg, int ipmtr, double tol, ref int init, ref double phir, ref double phii, ref double zeta1r, ref double zeta1i, ref double zeta2r, ref double zeta2i, ref double sumr, ref double sumi, ref double[] cwrkr, ref double[] cwrki) + private static int zunik(double zrr, double zri, double fnu, int ikflg, int ipmtr, double tol, ref int init, ref double phir, ref double phii, ref double zeta1r, ref double zeta1i, ref double zeta2r, ref double zeta2i, ref double sumr, ref double sumi, ref double[] cwrkr, ref double[] cwrki) { #region Description @@ -6363,7 +6363,7 @@ namespace MathNet.Numerics return 0; } - private int zunk1(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) + private static int zunk1(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) { #region Description @@ -6836,7 +6836,7 @@ namespace MathNet.Numerics return 0; } - private int zunk2(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) + private static int zunk2(double zr, double zi, double fnu, int kode, int mr, int n, double[] yr, double[] yi, ref int nz, double tol, double elim, double alim) { #region Description @@ -7370,7 +7370,7 @@ namespace MathNet.Numerics return 0; } - private int zuoik(double zr, double zi, double fnu, int kode, int ikflg, int n, double[] yr, double[] yi, ref int nuf, double tol, double elim, double alim) + private static int zuoik(double zr, double zi, double fnu, int kode, int ikflg, int n, double[] yr, double[] yi, ref int nuf, double tol, double elim, double alim) { #region Description @@ -7570,7 +7570,7 @@ namespace MathNet.Numerics return 0; } - private int zwrsk(double zrr, double zri, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double[] cwr, double[] cwi, double tol, double elim, double alim) + private static int zwrsk(double zrr, double zri, double fnu, int kode, int n, double[] yr, double[] yi, ref int nz, double[] cwr, double[] cwi, double tol, double elim, double alim) { #region Description diff --git a/src/Numerics/SpecialFunctions/Bessel.cs b/src/Numerics/SpecialFunctions/Bessel.cs index 896282d8..d9c15f7f 100644 --- a/src/Numerics/SpecialFunctions/Bessel.cs +++ b/src/Numerics/SpecialFunctions/Bessel.cs @@ -18,8 +18,7 @@ namespace MathNet.Numerics /// public static Complex BesselJ(double v, Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesj(v, z) : amos.Cbesj(v, z); + return (expScaled) ? Amos.ScaledCbesj(v, z) : Amos.Cbesj(v, z); } /// @@ -33,8 +32,7 @@ namespace MathNet.Numerics /// public static double BesselJ(double v, double z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesj(v, z) : amos.Cbesj(v, z); + return (expScaled) ? Amos.ScaledCbesj(v, z) : Amos.Cbesj(v, z); } /// @@ -48,8 +46,7 @@ namespace MathNet.Numerics /// public static Complex BesselY(double v, Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesy(v, z) : amos.Cbesy(v, z); + return (expScaled) ? Amos.ScaledCbesy(v, z) : Amos.Cbesy(v, z); } /// @@ -63,8 +60,7 @@ namespace MathNet.Numerics /// public static double BesselY(double v, double z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesy(v, z) : amos.Cbesy(v, z); + return (expScaled) ? Amos.ScaledCbesy(v, z) : Amos.Cbesy(v, z); } /// @@ -78,8 +74,7 @@ namespace MathNet.Numerics /// public static Complex BesselI(double v, Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesi(v, z) : amos.Cbesi(v, z); + return (expScaled) ? Amos.ScaledCbesi(v, z) : Amos.Cbesi(v, z); } /// @@ -95,8 +90,7 @@ namespace MathNet.Numerics { if (expScaled) { - var amos = new AmosWrapper(); - return amos.ScaledCbesi(v, z); + return Amos.ScaledCbesi(v, z); } else { @@ -115,8 +109,7 @@ namespace MathNet.Numerics /// public static Complex BesselK(double v, Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesk(v, z) : amos.Cbesk(v, z); + return (expScaled) ? Amos.ScaledCbesk(v, z) : Amos.Cbesk(v, z); } /// @@ -130,8 +123,7 @@ namespace MathNet.Numerics /// public static double BesselK(double v, double z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesk(v, z) : amos.Cbesk(v, z); + return (expScaled) ? Amos.ScaledCbesk(v, z) : Amos.Cbesk(v, z); } } } diff --git a/src/Numerics/SpecialFunctions/Hankel.cs b/src/Numerics/SpecialFunctions/Hankel.cs index 92b3fa59..3ad42386 100644 --- a/src/Numerics/SpecialFunctions/Hankel.cs +++ b/src/Numerics/SpecialFunctions/Hankel.cs @@ -18,8 +18,7 @@ namespace MathNet.Numerics /// public static Complex HankelH1(double n, Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesh1(n, z) : amos.Cbesh1(n, z); + return (expScaled) ? Amos.ScaledCbesh1(n, z) : Amos.Cbesh1(n, z); } /// @@ -47,8 +46,7 @@ namespace MathNet.Numerics /// public static Complex HankelH2(double n, Complex z, bool expScaled = false) { - var amos = new AmosWrapper(); - return (expScaled) ? amos.ScaledCbesh2(n, z) :amos.Cbesh2(n, z); + return (expScaled) ? Amos.ScaledCbesh2(n, z) : Amos.Cbesh2(n, z); } ///