C#, numerische Berechnung – Berechnungsmethode und Quellprogramm der logarithmischen Normalverteilung

 

Die logarithmische Normalverteilung (logarithmische Normalverteilung) bedeutet, dass der Logarithmus einer Zufallsvariablen der Normalverteilung folgt und die Zufallsvariable dann der logarithmischen Normalverteilung folgt. Die logarithmische Normalverteilung kommt der Normalverteilung auf kurze Sicht sehr nahe. Aber auf lange Sicht verteilt die Lognormalverteilung mehr Werte nach oben.

Einige Größen sind von Natur aus asymmetrisch. Betrachten Sie beispielsweise die Zeit, die Menschen benötigen, um eine bestimmte Aufgabe zu erledigen: Da jeder anders ist, erhalten wir eine Verteilung. Alle Werte sind jedoch notwendigerweise positiv (da die Zeit nicht negativ sein kann). Darüber hinaus können wir auch die wahrscheinliche Form der Verteilung vorhersagen: Es gibt eine Mindestzeit, die niemand schlagen kann, dann ein paar sehr schnelle „Champions“, gefolgt von einem Höhepunkt der repräsentativsten Endzeiten gewöhnlicher Menschen und schließlich a lange Liste der „Nachzügler“ am Ende. Offensichtlich würde eine Gauß-Verteilung eine solche Verteilung nicht gut beschreiben, da x in einer Gauß-Verteilung als positiv oder negativ definiert werden kann, symmetrisch ist und sehr kurze Enden hat.
Bei vielen Anwendungen, insbesondere bei Zuverlässigkeit und Wartbarkeit, folgen die Daten möglicherweise keiner Normalverteilung. Der Logarithmus einer Zufallsvariablen kann jedoch eine Normalverteilung haben, die als Lognormalverteilung bezeichnet wird. Wenn eine Lognormalverteilung angewendet wird, ist die Darstellung der Daten in einem Lognormaldiagramm eine gerade Linie. Das Verfahren zum Plotten ist das gleiche wie bei anderen Verteilungen. Der Analyseprozess umfasst die Berechnung des Mittelwerts und der Standardabweichung der logarithmischen Werte sowie die Logarithmierung des Endergebnisses.
Die Lognormalverteilung ähnelt der Normalverteilung, außer dass ihre Wahrscheinlichkeitsverteilung nach rechts verschoben ist. Die logarithmische Normalverteilung kommt der Normalverteilung auf kurze Sicht sehr nahe. Aber auf lange Sicht verteilt die Lognormalverteilung mehr Werte nach oben. Genauer gesagt besteht bei der logarithmischen Normalverteilung eine größere Möglichkeit für Schwankungen nach oben und eine geringere Möglichkeit für Schwankungen nach unten.
Die Lognormalverteilung wird bei der Zuverlässigkeitsanalyse von Halbleiterbauelementen und der Ermüdungslebensdauer bestimmter Arten mechanischer Teile verwendet. Sein Haupteinsatzgebiet ist die exakte Analyse von Time-to-Repair-Daten in der Wartbarkeitsanalyse.
Wenn man die Dichtefunktion der Lognormalverteilung kennt, können die Ausdrücke der Zuverlässigkeitsfunktion und der Unzuverlässigkeitsfunktion der Verteilung gemäß der Definition der Zuverlässigkeitsfunktion und der Unzuverlässigkeitsfunktion berechnet werden.

Die Lognormalverteilung hat die folgenden Eigenschaften:
(1) Die Normalverteilung ist eine Lognormalverteilung nach der exponentiellen Transformation; die Lognormalverteilung ist eine Normalverteilung nach der logarithmischen Transformation.
(2) γ, t ist eine positive reelle Zahl, X ist eine logarithmische Normalverteilung mit Parametern (μ, σ), dann ist es immer noch eine logarithmische Normalverteilung mit Parametern.
(3) Das Lognormal ist immer rechtsschief.
(4) Mittelwert und Varianz der Lognormalverteilung sind steigende Funktionen ihrer Parameter (μ, σ).
(5) Wenn σ für einen gegebenen Parameter μ gegen Null tendiert, tendiert der Mittelwert der Lognormalverteilung zu exp(μ) und die Varianz tendiert gegen Null.
 

Verwenden des Systems;

Namespace Legalsoft.Truffer
{     public class Lognormaldist : Erf     {         private double mu { get; Satz; }         private double sig { get; Satz; }



        public Lognormaldist(double mmu = 0.0, double ssig = 1.0)
        {             this.mu = mmu;             this.sig = ssig;             if (sig <= 0.0)             {                 throw new Exception("bad sig in Lognormaldist");             }         }






        public double p(double x)
        {             if (x < 0.0)             {                 throw new Exception("bad x in Lognormaldist");             }             //if (x == 0.0)             if (Math.Abs(x) <= float.Epsilon)             {                 return 0.0;             }             return (0.398942280401432678 / (sig * x)) * Math.Exp(-0.5 * Globals.SQR((Math.Log(x) - mu) / sig));         }










        public double cdf(double x)
        {             if (x < 0.0)             {                 throw new Exception("bad x in Lognormaldist");             }             //if (x == 0.0)             if (Math.Abs(x) <= float.Epsilon)             {                 return 0.0;             }             return 0.5 * erfc(-0.707106781186547524 * (Math.Log(x) - mu) / sig);         }










        public double invcdf(double p)
        {             if (p <= 0.0 || p >= 1.0)             {                 throw new Exception("bad p in Lognormaldist");             }             return Math.Exp(-1.41421356237309505 * sig * inverfc(2.0 * p) + mu);         }     } }








 

Guess you like

Origin blog.csdn.net/beijinghorn/article/details/131894187