gpt4 book ai didi

python - 一维随机游走期望值

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:37 24 4
gpt4 key购买 nike

我已经用 C++ 和 Python 实现了一维随机游走;然而,在这两个程序中,预期值都不是 sqrt(N)。我想知道我的代码中是否存在逻辑错误或某些隐藏因素导致我的结果一直很低。

对于那些不熟悉随机游走的人来说,预期的 RMS 值为 sqrt(N)。在此处找到更多信息:http://www.mit.edu/~kardar/teaching/projects/chemotaxis(AndreaSchmidt)/random.htm

我一直得到大约 80% 的 sqrt(N),例如:

N = 100,结果 = 80,79,81,78...

N = 25,结果 = 3.9、4.1、4.2、3.8...

代码如下:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <math.h>

float random_walk(int i);
float checkrand(int i);

using namespace std;
int main(int argc, char* argv[]){
srand(time(NULL));
float absolute = 0;
int trials = 1000;
for(int i=0; i<trials; i++){
absolute += sqrt(pow(random_walk(atoi(argv[1])),2));
}
cout<<absolute/trials<<endl;
}

float random_walk(int i){
float walk = 0;
for(int j=0; j<i; j++){
if(rand()%2 == 0){
walk--;
}
else{
walk++;
}
}
return walk;
}

我的 python 代码也得到了相同的输出。

import random

def rand_walk():
walk = 0
for i in range(9):
rand = random.randint(0,1)
if(rand == 0):
walk = walk + 1
else:
walk = walk - 1
return walk


absolute = 0.0
numtrial = 100

for j in range(numtrial):
walk = rand_walk()
absolute = absolute + (walk**2)**(1/2.0)

print "Average Absolute Distance ", absolute/numtrial

我期望得到 sqrt(n) 但总是得到的更少,这让我怀疑我是不是做错了什么或者想错了问题。

最佳答案

我主要使用Python,所以我会用Python来回答。

你用 absolute = absolute + (walk**2)**(1/2.0) 计算的是 sqrt(d^2) 的总和,但是你之前必须取平均值RMS 的 sqrt。

d2_list = []
for j in range(numtrial):
walk = rand_walk(N)
# absolute = absolute + (walk**2)**(1/2.0)
d2_list.append(walk**2)

result = (sum(d2_list) / len(d2_list))**(1/2.)

print "Average Absolute Distance ", result

关于python - 一维随机游走期望值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48255243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com