91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中如何使用normal_distribution高斯正態分布函數

發布時間:2021-07-21 09:00:17 來源:億速云 閱讀:708 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關C++中如何使用normal_distribution高斯正態分布函數,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

圖 1 顯示的是正態(或高斯)分布。它是一條連續的貝爾曲線,期望兩邊的值是相等的,可以理解為期望就是平均值。它是一個概率分布,因此曲線下方的面積是1。正態分布是由兩個參數完全定義的:期望和標準差,它們是衡量期望兩邊的值如何分布的一種方式。

C++中如何使用normal_distribution高斯正態分布函數
圖 1 正態分布

期望和標準差分別是用希臘字母 μ 和 σ 來表示的,變量 x 有 n 個樣本,這些是由下面的公式定義的:

C++中如何使用normal_distribution高斯正態分布函數

因此,期望就是值的和除以值的個數一換句話說,也就是平均值。可以通過值和期望的差值的平方子和除以 n-1,然后對結果開方來得到標準差。對于不同的期望和標準差的值,正態分布的相對寬度和高度分布曲線的變化是相當大的。但是,分布值總是如圖 1 所示。這意味著,如果知道一個符合正態分布的變量的期望和標準差,例如在大量人口中個體的身高,就可以知道 95% 的人身高不超過期望的 2σ。標準正態分布的期望為 0,標準差為 1。

uniform_distribution 模板定義了可以產生隨機浮點值的分布對象類型,默認是 double 類型。默認構造函數創建的是標準正態分布,因此期望是 0,方差是 1.0:

std::normal_distribution<> dist; // mu: 0 sigma: 1

下面展示了如何創建一個有特定值和標準差的正態分布:

double mu {50.0}, sigma {10.0};
std::normal_distribution<> norm {mu, sigma};

這里定義了一個生成 double 值的分布對象,期望為 50.0,標準差是 10.0。為了生成值,可以將一個隨機數生成器傳給 norm 函數對象。例如:

std::random_device rd;
std::default_random_engine rng {rd()};
std::cout << "Normally distributed values: "<< norm (rng) << " " << norm (rng) << std::endl; // 39.6153 45.5608

可以通過調用對象的成員函數 mean() 和 stddev() 來獲取它的期望值和標準差:

std::cout<<"mu: "<< norm.mean () << " sigma: " << norm.stddev ()<< std::endl; // mu: 50 sigma: 10

通過調用無參數的成員函數 param(),可以得到一個封裝了這兩個值的 param_type 對象。為了設置期望或標準差,需要將一個 param_type 對象傳給成員函數 Pamm()。分布類有用來獲取期望和標準差的成員,param_type 對象擁有和它們的名字相同的成員函數。下 面是一個示例:

using Params = std::normal_distribution<>::param_type; // Type alias for readability
double mu {50.0}, sigma {10.0};
std::normal_distribution<> norm {mu, sigma};// Create distribution
auto params = norm.param(); // Get mean and standard deviation
norm.param(Params {params.mean(),params.stddev() + 5.0}); // Modify params
std::cout << "mu: "<< norm.mean() << " sigma: " << norm.stddev ()<< std::endl; // mu: 50 sigma: 15

這里調用無參數的 param() 來獲取包含期望和方差的 param_type 對象。在第二個 param() 調用中,通過傳入一個 Pams 對象將標準差增加了 5.0。

可以通過傳入一個 param_type 對象作為一個分布對象調用的第二個參數來臨時設置期望和標準差:

using Params = std::normal_distribution<>::param_type; // Type alias for readability
std::random_device rd;
std::default_random_engine rng {rd()};
std::normal_distribution<> norm {50.0, 10.0}; // Create distribution
Params new_p {100.0, 30.0};// mu=100 sigma=30
std::cout << norm(rng, new_p) << std::endl; // Generate value with new_p: 100.925
std::cout << norm,mean() << " " << norm.stddev()<< std::endl;// 50 10

new_p 定義的期望和標準差只會被應用到它被作為第二個參數傳入的 norm 的執行中。原始的期望和標準差會被應用到隨后的沒有第二個參數的 norm 調用中。

成員函數 min() 和 max() 返回的是分布可以產生的最小值和最大值。對于分布來說,這并不是特別有用。因為返回值的類型可以這樣表示最大值和最小值:

std::cout << "min: " << norm.min () << " max: " << norm.max ()<< std::endl; // min:4.94066e-324 max: 1.7 9769e+308

關于C++中如何使用normal_distribution高斯正態分布函數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

垫江县| 泰兴市| 会同县| 白山市| 永康市| 响水县| 中山市| 含山县| 景洪市| 鹤岗市| 井冈山市| 介休市| 肇庆市| 都匀市| 湾仔区| 石景山区| 农安县| 郑州市| 射阳县| 资讯| 商丘市| 灵璧县| 本溪市| 巴彦淖尔市| 张家口市| 东丽区| 靖远县| 冀州市| 屏山县| 东阿县| 师宗县| 孟州市| 左贡县| 包头市| 西华县| 剑河县| 农安县| 进贤县| 洪雅县| 囊谦县| 葵青区|