2015-03-03 32 views
1

我想從我的代碼中的C++標準庫更新對數正態隨機發生器的參數(mu,sigma)。對數正態隨機發生器中的參數更新

#include <random> 
int main() 
{ 
double mu = 1.0; 
double sigma = 0.1; 
unsigned seed=(int)(time(NULL)); 
std::default_random_engine generator (seed); 
std::lognormal_distribution<double> LN_dist(mu,sigma) 
double h = LN_dist(generator); 
cout << h << endl; 

第一部分運行良好。現在我想更新相同的功能(LN_dist)mu和西格瑪,生成一個新的隨機數:

mu = 10.0; 
sigma = 0.2; 
std::lognormal_distribution<double> LN_dist(mu,sigma) 
h = LN_dist(generator); 
cout << h << endl; 
} 

,但它使一個錯誤LN_dist功能的重新聲明。如果我不申報,輸出將在第一部分中使用最初的mu和sigma。另外我無法定義一個新的功能,因爲我必須做100次以上。 請問我可以如何解決這個問題?

+0

如何像'LN_dist =的std :: lognormal_distribution (MU,SIGMA); '? – 2015-03-03 14:09:36

+0

for循環正在工作。但是我仍然無法更新每個循環中的mu和sigma參數。我的問題是更新每個循環中的mu和sigma。 – nimamin 2015-03-03 14:15:15

+0

如果我添加這部分: 「畝= 10.0; 標準差= 0.2; 的std :: lognormal_distribution LN_dist(畝,SIGMA)」 它使一個錯誤關於「的std :: lognormal_distribution L_dist」的redecleration。 如果我僅添加這一部分: 「mu = 10.0; sigma = 0.2;」 它會使用最初的畝和西格瑪 – nimamin 2015-03-03 14:16:01

回答

2

您可以使用內部param_typeparam方法更改參數分配。在這種情況下,它看起來像:

LN_dist.param(std::lognormal_distribution<double>::param_type(10, 0.2)); 
+0

是的,它工作正常。謝謝。 – nimamin 2015-03-03 14:39:08

0

也有可能改變給定對象的值:

std::lognormal_distribution<double> LN_dist(mu,sigma) 
double h = LN_dist(generator); 
LN_dist.m = 10.0; 
LN_dist.s = 0.2; 
h = LN_dist(generator); 

// and so on 

    LN_dist.m = 4.0; 
    LN_dist.s = 0.6; 
    h = LN_dist(generator); 
+0

這不會編譯。 'm'和's'都是訪問函數,所以它需要是'm()'和's()',但它們都是'const'並且返回一個值,而不是引用。 – Yuushi 2015-03-03 14:27:35