Bagikan melalui


Kelas piecewise_linear_distribution

Menghasilkan distribusi linier sepotong yang memiliki interval lebar yang bervariasi dengan probabilitas yang bervariasi secara linier dalam setiap interval.

Sintaks

template<class RealType = double>
class piecewise_linear_distribution
   {
public:
   // types
   typedef RealType result_type;
   struct param_type;

   // constructor and reset functions
   piecewise_linear_distribution();
   template <class InputIteratorI, class InputIteratorW>
   piecewise_linear_distribution(
      InputIteratorI firstI, InputIteratorI lastI, InputIteratorW firstW);
   template <class UnaryOperation>
   piecewise_linear_distribution(
      initializer_list<result_type> intervals, UnaryOperation weightfunc);
   template <class UnaryOperation>
   piecewise_linear_distribution(
      size_t count, result_type xmin, result_type xmax, UnaryOperation weightfunc);
   explicit piecewise_linear_distribution(const param_type& parm);
   void reset();

   // generating functions
   template <class URNG>
   result_type operator()(URNG& gen);
   template <class URNG>
   result_type operator()(URNG& gen, const param_type& parm);

   // property functions
   vector<result_type> intervals() const;
   vector<result_type> densities() const;
   param_type param() const;
   void param(const param_type& parm);
   result_type min() const;
   result_type max() const;
   };

Parameter

RealType
Jenis hasil titik mengambang, default ke double. Untuk jenis yang mungkin, lihat acak>.<

Keterangan

Distribusi pengambilan sampel ini memiliki interval lebar yang bervariasi dengan probabilitas yang bervariasi secara linier dalam setiap interval. Untuk informasi tentang distribusi pengambilan sampel lainnya, lihat piecewise_linear_distribution dan discrete_distribution.

Tabel berikut ini menautkan ke artikel tentang masing-masing anggota:

piecewise_linear_distribution
param_type

Fungsi intervals() properti mengembalikan vector<result_type> dengan sekumpulan interval distribusi yang disimpan.

Fungsi densities() properti mengembalikan vector<result_type> dengan kepadatan tersimpan untuk setiap set interval, yang dihitung sesuai dengan bobot yang disediakan dalam parameter konstruktor.

Anggota param() properti menetapkan atau mengembalikan paket parameter distribusi tersimpan param_type .

Fungsi min() anggota dan max() mengembalikan hasil sekecil mungkin dan hasil terbesar yang mungkin, masing-masing.

Fungsi reset() anggota membuang nilai cache apa pun, sehingga hasil panggilan operator() berikutnya tidak bergantung pada nilai apa pun yang diperoleh dari mesin sebelum panggilan.

Fungsi operator() anggota mengembalikan nilai yang dihasilkan berikutnya berdasarkan mesin URNG, baik dari paket parameter saat ini, atau paket parameter yang ditentukan.

Untuk informasi selengkapnya tentang kelas distribusi dan anggotanya, lihat acak>.<

Contoh

// compile with: /EHsc /W4
#include <random>
#include <iostream>
#include <iomanip>
#include <string>
#include <map>

using namespace std;

void test(const int s) {

    // uncomment to use a non-deterministic generator
    // random_device rd;
    // mt19937 gen(rd());
    mt19937 gen(1701);

    // Three intervals, non-uniform: 0 to 1, 1 to 6, and 6 to 15
    vector<double> intervals{ 0, 1, 6, 15 };
    // weights determine the densities used by the distribution
    vector<double> weights{ 1, 5, 5, 10 };

    piecewise_linear_distribution<double> distr(intervals.begin(), intervals.end(), weights.begin());

    cout << endl;
    cout << "min() == " << distr.min() << endl;
    cout << "max() == " << distr.max() << endl;
    cout << "intervals (index: interval):" << endl;
    vector<double> i = distr.intervals();
    int counter = 0;
    for (const auto& n : i) {
        cout << fixed << setw(11) << counter << ": " << setw(14) << setprecision(10) << n << endl;
        ++counter;
    }
    cout << endl;
    cout << "densities (index: density):" << endl;
    vector<double> d = distr.densities();
    counter = 0;
    for (const auto& n : d) {
        cout << fixed << setw(11) << counter << ": " << setw(14) << setprecision(10) << n << endl;
        ++counter;
    }
    cout << endl;

    // generate the distribution as a histogram
    map<int, int> histogram;
    for (int i = 0; i < s; ++i) {
        ++histogram[distr(gen)];
    }

    // print results
    cout << "Distribution for " << s << " samples:" << endl;
    for (const auto& elem : histogram) {
        cout << setw(5) << elem.first << '-' << elem.first + 1 << ' ' << string(elem.second, ':') << endl;
    }
    cout << endl;
}

int main()
{
    int samples = 100;

    cout << "Use CTRL-Z to bypass data entry and run using default values." << endl;
    cout << "Enter an integer value for the sample count: ";
    cin >> samples;

    test(samples);
}
Use CTRL-Z to bypass data entry and run using default values.
Enter an integer value for the sample count: 100
min() == 0
max() == 15
intervals (index: interval):
          0:   0.0000000000
          1:   1.0000000000
          2:   6.0000000000
          3:  15.0000000000
densities (index: density):
          0:   0.0645161290
          1:   0.3225806452
          2:   0.3225806452
          3:   0.6451612903
Distribution for 100 samples:
    0-1 :::::::::::::::::::::
    1-2 ::::::
    2-3 :::
    3-4 :::::::
    4-5 ::::::
    5-6 ::::::
    6-7 :::::
    7-8 ::::::::::
    8-9 ::::::::::
    9-10 ::::::
   10-11 ::::
   11-12 :::
   12-13 :::
   13-14 :::::
   14-15 :::::

Persyaratan

Header:<acak>

Namespace: std

piecewise_linear_distribution::p cewise_linear_distribution

Membangun distribusi.

// default constructor
piecewise_linear_distribution();

// constructs using a range of intervals, [firstI, lastI), with
// matching weights starting at firstW
template <class InputIteratorI, class InputIteratorW>
piecewise_linear_distribution(InputIteratorI firstI, InputIteratorI lastI, InputIteratorW firstW);

// constructs using an initializer list for range of intervals,
// with weights generated by function weightfunc
template <class UnaryOperation>
piecewise_linear_distribution(initializer_list<RealType>
intervals, UnaryOperation weightfunc);

// constructs using an initializer list for range of count intervals,
// distributed uniformly over [xmin,xmax] with weights generated by function weightfunc
template <class UnaryOperation>
piecewise_linear_distribution(size_t count, RealType xmin, RealType xmax, UnaryOperation weightfunc);

// constructs from an existing param_type structure
explicit piecewise_linear_distribution(const param_type& parm);

Parameter

firstI
Iterator input dari elemen pertama dalam rentang distribusi.

lastI
Iterator input dari elemen terakhir dalam rentang distribusi.

firstW
Iterator input elemen pertama dalam rentang bobot.

Interval
initializer_list dengan interval distribusi.

count
Jumlah elemen dalam rentang distribusi.

xmin
Nilai terendah dalam rentang distribusi.

xmax
Nilai tertinggi dalam rentang distribusi. Harus lebih besar dari xmin.

weightfunc
Objek yang mewakili fungsi probabilitas untuk distribusi. Parameter dan nilai pengembalian harus dapat dikonversi ke double.

parm
Struktur parameter yang digunakan untuk membangun distribusi.

Keterangan

Konstruktor default mengatur parameter tersimpan sehingga ada satu interval, 0 hingga 1, dengan kepadatan probabilitas 1.

Konstruktor rentang iterator

template <class InputIteratorI, class InputIteratorW>
piecewise_linear_distribution(
    InputIteratorI firstI,
    InputIteratorI lastI,
    InputIteratorW firstW);

membangun objek distribusi dengan itnerval dari iterator selama urutan [ firstI, ) lastIdan urutan berat yang cocok mulai dari firstW.

Konstruktor daftar penginisialisasi

template <class UnaryOperation>
piecewise_linear_distribution(
    initializer_list<result_type> intervals,
    UnaryOperation weightfunc);

membangun objek distribusi dengan interval dari interval dan bobot daftar inisialisasi yang dihasilkan dari weightfunc fungsi.

Konstruktor yang didefinisikan sebagai

template <class UnaryOperation>
piecewise_linear_distribution(
    size_t count,
    result_type xmin,
    result_type xmax,
    UnaryOperation weightfunc);

membangun objek distribusi dengan interval hitungan yang didistribusikan secara seragam melalui [ xmin,xmax], menetapkan setiap bobot interval sesuai dengan bobot fungsi, dan weightfunc harus menerima satu parameter dan memiliki nilai pengembalian, yang keduanya dapat dikonversi ke double. Prasyarat:xmin < xmax.

Konstruktor yang didefinisikan sebagai

explicit piecewise_linear_distribution(const param_type& parm);

membangun objek distribusi menggunakan parm sebagai struktur parameter yang disimpan.

piecewise_linear_distribution::p aram_type

Menyimpan semua parameter distribusi.

struct param_type {
   typedef piecewise_linear_distribution<result_type> distribution_type;
   param_type();
   template <class IterI, class IterW>
   param_type(
      IterI firstI, IterI lastI, IterW firstW);
   template <class UnaryOperation>
   param_type(
      size_t count, result_type xmin, result_type xmax, UnaryOperation weightfunc);
   std::vector<result_type> densities() const;
   std::vector<result_type> intervals() const;

   bool operator==(const param_type& right) const;
   bool operator!=(const param_type& right) const;
   };

Parameter

Lihat parameter konstruktor untuk piecewise_linear_distribution.

Keterangan

Prasyarat:xmin < xmax

Struktur ini dapat diteruskan ke konstruktor kelas distribusi saat instansiasi, ke param() fungsi anggota untuk mengatur parameter tersimpan dari distribusi yang ada, dan untuk operator() digunakan sebagai pengganti parameter tersimpan.

Baca juga

<random>