Namespaces
Variants

std:: student_t_distribution

From cppreference.net
Definiert im Header <random>
template < class RealType = double >
class student_t_distribution ;
(seit C++11)

Erzeugt zufällige Gleitkommawerte x , verteilt gemäß der Wahrscheinlichkeitsdichtefunktion:

p(x|n) =
1
·
Γ(
n+1
2
)
Γ(
n
2
)
·

1+
x 2
n


-
n+1
2

wobei n als Anzahl der Freiheitsgrade bezeichnet wird. Diese Verteilung wird verwendet, wenn der Mittelwert eines unbekannten normalverteilten Wertes geschätzt werden soll, basierend auf n + 1 unabhängigen Messungen, die jeweils additive Fehler mit unbekannter Standardabweichung aufweisen, wie bei physikalischen Messungen. Alternativ wird sie verwendet, wenn der unbekannte Mittelwert einer Normalverteilung mit unbekannter Standardabweichung geschätzt werden soll, basierend auf n + 1 Stichproben.

std::student_t_distribution erfüllt alle Anforderungen von RandomNumberDistribution .

Inhaltsverzeichnis

Template-Parameter

RealType - Der vom Generator erzeugte Ergebnistyp. Das Verhalten ist undefiniert, falls dies nicht einer der Typen float , double , oder long double ist.

Mitgliedertypen

Mitgliedertyp Definition
result_type (C++11) RealType
param_type (C++11) der Typ des Parametersatzes, siehe RandomNumberDistribution .

Memberfunktionen

Konstruiert eine neue Verteilung
(öffentliche Elementfunktion)
(C++11)
Setzt den internen Zustand der Verteilung zurück
(öffentliche Elementfunktion)
Erzeugung
(C++11)
Erzeugt die nächste Zufallszahl in der Verteilung
(öffentliche Elementfunktion)
Eigenschaften
Gibt den n -Verteilungsparameter zurück (Freiheitsgrade)
(öffentliche Elementfunktion)
(C++11)
Ruft das Verteilungsparameterobjekt ab oder legt es fest
(öffentliche Elementfunktion)
(C++11)
Gibt den minimal möglicherweise generierten Wert zurück
(öffentliche Elementfunktion)
(C++11)
Gibt den maximal möglicherweise generierten Wert zurück
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

(C++11) (C++11) (removed in C++20)
vergleicht zwei Verteilungs-Objekte
(Funktion)
führt Stream-Eingabe und -Ausgabe auf Pseudo-Zufallszahlenverteilung durch
(Funktions-Template)

Beispiel

#include <algorithm>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <vector>
template<int Height = 5, int BarWidth = 1, int Padding = 1, int Offset = 0, class Seq>
void draw_vbars(Seq&& s, const bool DrawMinMax = true)
{
    static_assert(0 < Height and 0 < BarWidth and 0 <= Padding and 0 <= Offset);
    auto cout_n = [](auto&& v, int n = 1)
    {
        while (n-- > 0)
            std::cout << v;
    };
    const auto [min, max] = std::minmax_element(std::cbegin(s), std::cend(s));
    std::vector<std::div_t> qr;
    for (typedef decltype(*std::cbegin(s)) V; V e : s)
        qr.push_back(std::div(std::lerp(V(0), 8 * Height,
                                        (e - *min) / (*max - *min)), 8));
    for (auto h{Height}; h-- > 0; cout_n('\n'))
    {
        cout_n(' ', Offset);
        for (auto dv : qr)
        {
            const auto q{dv.quot}, r{dv.rem};
            unsigned char d[]{0xe2, 0x96, 0x88, 0}; // Vollständiger Block: '█'
            q < h ? d[0] = ' ', d[1] = 0 : q == h ? d[2] -= (7 - r) : 0;
            cout_n(d, BarWidth), cout_n(' ', Padding);
        }
        if (DrawMinMax && Height > 1)
            Height - 1 == h ? std::cout << "┬ " << *max:
                          h ? std::cout << "│ "
                            : std::cout << "┴ " << *min;
    }
}
int main()
{
    std::random_device rd{};
    std::mt19937 gen{rd()};
    std::student_t_distribution<> d{10.0f};
    const int norm = 10'000;
    const float cutoff = 0.000'3f;
    std::map<int, int> hist{};
    for (int n = 0; n != norm; ++n)
        ++hist[std::round(d(gen))];
    std::vector<float> bars;
    std::vector<int> indices;
    for (const auto& [n, p] : hist)
        if (float x = p * (1.0f / norm); cutoff < x)
        {
            bars.push_back(x);
            indices.push_back(n);
        }
    for (draw_vbars<8, 5>(bars); const int n : indices)
        std::cout << " " << std::setw(2) << n << "   ";
    std::cout << '\n';
}

Mögliche Ausgabe:

                        █████                               ┬ 0.3753
                        █████                               │
                  ▁▁▁▁▁ █████                               │
                  █████ █████ ▆▆▆▆▆                         │
                  █████ █████ █████                         │
                  █████ █████ █████                         │
            ▄▄▄▄▄ █████ █████ █████ ▄▄▄▄▄                   │
▁▁▁▁▁ ▃▃▃▃▃ █████ █████ █████ █████ █████ ▃▃▃▃▃ ▁▁▁▁▁ ▁▁▁▁▁ ┴ 0.0049
 -4    -3    -2    -1     0     1     2     3     4     5

Externe Links

Weisstein, Eric W. "Student's t-Distribution." Von MathWorld — Eine Wolfram Web Resource.