C#, calcul numérique - calcul et programme source de la fonction d'erreur et des distributions associées

 

utiliser le système ;

namespace Legalsoft.Truffer
{     /// <summary>     /// Fonction d'erreur et distributions associées     /// </summary>     public class Erf     {         public const int ncof = 28;         public double[] cof { obtenir ; } = nouveau double[28] {             -1.3026537197817094, 6.4196979235649026e-1, 1.9476473204185836e-2, -9.561514786808631e-3             , -9.46595344482036e-4, 3. 66839497852761e-4, 4.2523324806907e-5,             -2.0278578112534e-5, - 1.624290004647e-6,             1.303655835580e-6, 1.5626441722e-8, -8.5238095915e-8, 6.529054439e-9, 5.059343495e-             9, -9.91364156e-10, -2 .27365122e-10, 9.6467911e             -11, 2.394038e -12,













            -6.886027e-12, 8.94487e-13, 3.13092e-13,
            -1.12708e-13, 3.81e-16, 7.106e-15, -1.523e
            -15, -9.4e-17, 1.21e-16, - 2.8e-17
        } ;

        public double erf(double x)
        {             if (x >= 0.0)             {                 return 1.0 - erfccheb(x);             }             else             {                 return erfccheb(-x) - 1.0;             }         }








        public double erfc(double x)
        {             if (x >= 0.0)             {                 return erfccheb(x);             }             else             {                 return 2.0 - erfccheb(-x);             }         }








        public double erfccheb(double z)
        {             double d = 0.0;             double dd = 0,0 ;             if (z < 0.0)             {                 throw new Exception("erfccheb requiert un argument non négatif");             }             double t = 2,0 / (2,0 + z);             double ty = 4,0 * t - 2,0 ;             for (int j = ncof - 1; j > 0; j--)             {                 double tmp = d;                 d = ty * d - dd + cof[j] ;                 jj = tmp ;             }             return t * Math.Exp(-z * z + 0.5 * (cof[0] + ty * d) - dd);         }















        public double inverfc(double p)
        {             if (p >= 2.0)             {                 return -100.0;             }             si (p <= 0.0)             {                 renvoie 100.0 ;             }             pp double = (p < 1.0) ? p : 2,0 - p;             double t = Math.Sqrt(-2.0 * Math.Log(pp / 2.0));             double x = -0,70711 * ((2,30753 + t * 0,27061) / (1,0 + t * (0,99229 + t * 0,04481)) - t);             for (int j = 0; j < 2; j++)             {                 double err = erfc(x) - pp;                 x += erreur / (1.12837916709551257 * Math.Exp(-Globals.SQR(x)) - x * erreur);















            }
            retour (p < 1.0 ? x : -x);
        }

        public double inverf(double p)
        {             return inverfc(1.0 - p);         }

        public static double erfcc(double x)
        {             double z = Math.Abs(x);             t double = 2,0 / (2,0 + z);             double ans = t * Math.Exp(-z * z - 1.26551223 + t * (1.00002368 + t * (0.37409196 + t * (0.09678418 + t * (-0.18628806 + t * (0.27886807 + t * (-1.13520398 + t * (1,48851587 + t * (-0,82215223 + t * 0,17087277)))))))));             retour (x >= 0.0 ? ans : 2.0 - ans);         }     } }







 

Je suppose que tu aimes

Origine blog.csdn.net/beijinghorn/article/details/131745173
conseillé
Classement