std:: student_t_distribution
|
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π
· ⎛Γ(
)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
|
(C++11)
|
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) |
|
(C++11)
|
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. |