我想计算e^(-landax)cosx
从零到正无穷大的积分。精确解是landa/((landa^2)+1)
。我试图解决的例子迫使我有0.01的最大误差。这里,我采用的方法是,首先从均匀分布函数[0,1]
生成一个随机数,然后通过(-1/landa ln(x))
对其进行变换,这样,现在每个变量将具有(landa*e^(-landa x))
的概率。我不明白的是,当我把N从100万增加到1亿时,误差以以下方式变化,当然这不符合问题的标准,奇怪的是,从1000000
的N增加到10000000
的N,误差在增加。与N相对应的错误为:
N=1000000 0.0997496
N=100000000 0.0999462
N=100000000 0.0999341
下面是我的代码:
#include <iostream>
#include <random>
#include <fstream>
#include <iomanip>
using namespace std;
double landa = 1;
double function(double x) {
return (exp(-landa * x) * cos(x));
}
int main()
{
unsigned seed = 0;
srand(seed);
double exact_solution = landa / (pow(landa, 2) + 1);
const int N = 100000000;
default_random_engine g(seed);
uniform_real_distribution<double> distribution(0.0f, nextafter(1.0f, DBL_MAX));
double sum = 0.0;
double app;
double error;
for (int i = 0; i < N; i++) {
double x = distribution(g);
// transform xs
x = (-1.0 / landa) * log(x);
sum = sum + function(x);
}
app = sum / static_cast<double> (N);
error = exact_solution - app;
cout << N << "\t" << error << endl;
}
您产生了一个混乱:一旦您生成了具有适当分布的x
,那么您必须简单地集成cos(x)
。
sum = sum + cos(x);
输出:
1000000 -0.0010428
10000000 0.000105266
100000000 -2.08618e-05
从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC)。要弄懂MCMC的原理我们首先得搞清楚蒙特卡罗方法和马尔科夫链的原理。我们将用三篇来完整学习MCMC。在本篇,我们关注于蒙特卡罗方法。 2. 蒙特卡罗方法引入 蒙特卡罗原来是一个赌场的名称,用它作为名字大概是因为蒙特卡罗方法是一种
我正在写一个蒙特卡罗模拟来检查有多少次y不是紧挨着另一个y。我变出了一个40 x和10 y的向量,放置在向量中的随机位置。我的目标是计算向量中没有任何相邻y的概率。以下是我尝试过的: 结果是一个非常小的数字,这对我来说似乎没有意义。
我试图模拟来自rho=0.7的AR(1)模型的数据(Y)。然后我将使用这些数据在截距上运行Y的回归(通过这样做,参数估计成为Y的平均值),然后使用鲁棒的标准错误。我想对这个假设运行一个蒙特卡罗模拟,使用2000次重复不同的滞后值。目的是显示当滞后变化时Newey West估计器的有限样本性能 我的问题是:上面的代码是进行这种模拟的正确方法吗?如果是,我如何得到一个代码来重复这个过程在HAC测试中的
我有以下型号 在此处输入图像描述 我需要使用蒙特卡洛实验并获得统计数据。一个例子应该是。 在此处输入图像描述 但在运行时,图形上不会显示任何内容。如何将此统计数据链接到模型?
1 前言 在上一篇文章中,我们介绍了基于Bellman方程而得到的Policy Iteration和Value Iteration两种基本的算法,但是这两种算法实际上很难直接应用,原因在于依然是偏于理想化的两个算法,需要知道状态转移概率,也需要遍历所有的状态。对于遍历状态这个事,我们当然可以不用做到完全遍历,而只需要尽可能的通过探索来遍及各种状态即可。而对于状态转移概率,也就是依赖于模型Model
蒙特卡罗方法也称为统计模拟方法(或称统计实验法),是一种基于概率与统计的数值计算方法。该计算方法的主要核心是通过对建立的数学模型进行大量随机试验,利用概率论求得原始问题的近似解,与它对应的是确定性算法。