mirror of
https://github.com/aportelli/LatAnalyze.git
synced 2025-06-17 23:07:05 +01:00
internal random generator entirely removed, use C++11 generators
This commit is contained in:
@ -20,11 +20,13 @@ const double dx2 = 5.0/static_cast<double>(nPoint2);
|
||||
int main(void)
|
||||
{
|
||||
// generate fake data
|
||||
XYStatData data;
|
||||
RandGen rg;
|
||||
double xBuf[2];
|
||||
DoubleModel f([](const double *x, const double *p)
|
||||
{return p[1]*exp(-x[0]*p[0])+x[1];}, 2, 2);
|
||||
XYStatData data;
|
||||
random_device rd;
|
||||
mt19937 gen(rd());
|
||||
normal_distribution<> dis;
|
||||
double xBuf[2];
|
||||
DoubleModel f([](const double *x, const double *p)
|
||||
{return p[1]*exp(-x[0]*p[0])+x[1];}, 2, 2);
|
||||
|
||||
cout << "-- generating fake data..." << endl;
|
||||
data.addXDim(nPoint1);
|
||||
@ -33,13 +35,13 @@ int main(void)
|
||||
for (Index i1 = 0; i1 < nPoint1; ++i1)
|
||||
{
|
||||
xBuf[0] = i1*dx1;
|
||||
data.x(i1, 0) = rg.gaussian(xBuf[0], xErr);
|
||||
data.x(i1, 0) = xErr*dis(gen) + xBuf[0];
|
||||
for (Index i2 = 0; i2 < nPoint2; ++i2)
|
||||
{
|
||||
xBuf[1] = i2*dx2;
|
||||
data.x(i2, 1) = xBuf[1];
|
||||
data.y(data.dataIndex(i1, i2), 0) = rg.gaussian(f(xBuf, exactPar),
|
||||
yErr);
|
||||
data.y(data.dataIndex(i1, i2), 0) = yErr*dis(gen)
|
||||
+ f(xBuf, exactPar);
|
||||
}
|
||||
}
|
||||
data.setXError(0, DVec::Constant(data.getXSize(0), xErr));
|
||||
|
@ -20,11 +20,13 @@ const double dx2 = 5.0/static_cast<double>(nPoint2);
|
||||
int main(void)
|
||||
{
|
||||
// generate fake data
|
||||
XYSampleData data(nSample);
|
||||
RandGen rg;
|
||||
double xBuf[2];
|
||||
DoubleModel f([](const double *x, const double *p)
|
||||
{return p[1]*exp(-x[0]*p[0])+x[1];}, 2, 2);
|
||||
XYSampleData data(nSample);
|
||||
double xBuf[2];
|
||||
random_device rd;
|
||||
mt19937 gen(rd());
|
||||
normal_distribution<> dis;
|
||||
DoubleModel f([](const double *x, const double *p)
|
||||
{return p[1]*exp(-x[0]*p[0])+x[1];}, 2, 2);
|
||||
|
||||
cout << "-- generating fake data..." << endl;
|
||||
data.addXDim(nPoint1);
|
||||
@ -35,13 +37,13 @@ int main(void)
|
||||
for (Index i1 = 0; i1 < nPoint1; ++i1)
|
||||
{
|
||||
xBuf[0] = i1*dx1;
|
||||
data.x(i1, 0)[s] = rg.gaussian(xBuf[0], xErr);
|
||||
data.x(i1, 0)[s] = xErr*dis(gen) + xBuf[0];
|
||||
for (Index i2 = 0; i2 < nPoint2; ++i2)
|
||||
{
|
||||
xBuf[1] = i2*dx2;
|
||||
data.x(i2, 1)[s] = xBuf[1];
|
||||
data.y(data.dataIndex(i1, i2), 0)[s] =
|
||||
rg.gaussian(f(xBuf, exactPar), yErr);
|
||||
data.y(data.dataIndex(i1, i2), 0)[s] = yErr*dis(gen)
|
||||
+ f(xBuf, exactPar);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,52 +2,26 @@
|
||||
#include <LatAnalyze/Io.hpp>
|
||||
#include <LatAnalyze/CompiledFunction.hpp>
|
||||
#include <LatAnalyze/Plot.hpp>
|
||||
#include <LatAnalyze/RandGen.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace Latan;
|
||||
|
||||
constexpr int seqLength = 25;
|
||||
constexpr int saveStep = 9;
|
||||
constexpr Index nDraw = 20000;
|
||||
const string stateFileName = "exRand.seed";
|
||||
|
||||
int main(void)
|
||||
{
|
||||
RandGenState state;
|
||||
RandGen gen[2];
|
||||
AsciiFile stateFile(stateFileName, File::Mode::write|File::Mode::read);
|
||||
DVec gauss(nDraw);
|
||||
Plot p;
|
||||
Histogram h;
|
||||
random_device rd;
|
||||
mt19937 gen(rd());
|
||||
normal_distribution<> dis;
|
||||
DVec gauss(nDraw);
|
||||
Plot p;
|
||||
Histogram h;
|
||||
|
||||
cout << "- GENERATOR STATE I/O TESTS" << endl;
|
||||
cout << "-- generating a " << seqLength << " steps random sequence..."
|
||||
<< endl;
|
||||
for (int i = 0; i < seqLength; ++i)
|
||||
{
|
||||
if (i == saveStep)
|
||||
{
|
||||
state = gen[0].getState();
|
||||
stateFile.save(state, "exRand");
|
||||
cout << "generator state after step " << saveStep - 1
|
||||
<< " saved in '" << stateFileName << "'" << endl;
|
||||
}
|
||||
cout << "step " << i << "\t: " << gen[0].uniform() <<endl;
|
||||
}
|
||||
cout << "-- setting up another generator from '" << stateFileName << "'..."
|
||||
<< endl;
|
||||
gen[1].setState(stateFile.read<RandGenState>("exRand"));
|
||||
cout << "-- generating a " << seqLength << " steps random sequence..."
|
||||
<< endl;
|
||||
for (int i = 0; i < seqLength; ++i)
|
||||
{
|
||||
cout << "step " << i << "\t: " << gen[1].uniform() <<endl;
|
||||
}
|
||||
cout << "-- generating " << nDraw << " Gaussian random numbers..." << endl;
|
||||
FOR_VEC(gauss, i)
|
||||
{
|
||||
gauss(i) = gen[0].gaussian();
|
||||
gauss(i) = dis(gen);
|
||||
}
|
||||
h.setFromData(gauss, -5., 5., 40);
|
||||
h.normalize();
|
||||
|
Reference in New Issue
Block a user