Java中的随机游动
随机游走是一个随机过程,粒子在结构化空间中从一个状态移动一个状态到一个状态。对于我们来说,状态空间是Z,整数集合。粒子以初始状态S [0]∈Z开始。如果i≥0步后粒子处于状态S [i],那么在步骤i + 1中,它移动到状态S [i] +1概率p,并以概率q表示状态S [i] - 1;它不能静止不动。当然,p + q = 1。如果S [0] = 5并且0,则序列5,4,3,4,3,2,3,2,3,4是可能的序列如果粒子移动9次,则为粒子声明状态。Java中的随机游动
编写一个程序,该程序将模拟随机游走给定数量的步骤,并将计算随机游走的某些统计数据。模拟参数来自标准输入作为单行参数,包括(1)初始状态S [0]; (2)p的值;和(3)模拟的步骤数。
注:我正在用Java编写它。 到目前为止,我有:
public static void main(String[] args) {
Random rand = new Random();
int iState = rand.nextInt();
int particle = iState;
double pValue = 0.60;
int numSteps = rand.nextInt() + 1;
int nSteps = 0;
if (numSteps>=0) {
System.out.println(particle);
while (nSteps<numSteps); {
if (rand.nextDouble() < pValue)
particle++;
else
particle--;
System.out.println(particle);
nSteps++;
}
}
有些东西似乎不过是想错了,所以我坚持。
编辑:谢谢你们,不知何故,我没有看到那个分号。
// ------------------------------------------- ---------------------------------------------
编辑2:好吧,所以我的代码正常工作;但是,最终我应该列出最大值,最小值和平均值。这可能不会为每个iState值创建一个新变量吗?我的新代码是
public static void main(String[] args) {
Random rand = new Random();
int iState = rand.nextInt();
double pValue = 0.60;
int numSteps = rand.nextInt(100) + 1;
int nSteps = 0;
if (numSteps>=0) {
System.out.println(iState);
while (nSteps<numSteps) {
if (rand.nextDouble() < pValue)
iState++;
else
iState--;
System.out.println(iState);
nSteps++;
我认为您的问题是,你需要删除分号该行
while (nSteps<numSteps); {
此外,您几乎肯定不想重复了rand.nextInt() + 1
步骤,因为rand.nextInt()
可能是负面的。您可能的意思是rand.nextInt(n)
,其中n
是一些上限,或者您可能只是将其设置为n
。
更新:如果您需要跟踪的最小值,最大值和平均值,你可能做这样的事情
int min = iState; // initial value
int max = iState; // initial value
long total = iState; // initial value
然后,每次迭代之后,你说
min = Math.min(min, iState);
max = Math.max(max, iState);
total += iState;
,然后在迭代结束时,您的最小值为min
,最大值为max
,平均值为(double) total/numSteps
。
我对你的意思有点困惑。程序只在(numSteps> = 0)时运行? – helloimbarbara 2012-02-07 04:00:51
正确...因为否则,您会试图以小于零的步骤运行您的程序,最终会导致“完全没有运行”。 – 2012-02-07 04:02:25
谢谢你!!!!! – helloimbarbara 2012-02-07 04:26:48
在为while循环声明条件后,您有一个分号。简单地删除它,它应该工作。
while (nSteps<numSteps);
看你的分号!
while (nSteps<numSteps); {
应该是while (nSteps<numSteps) {
。
呃,愚蠢的分号。 – helloimbarbara 2012-02-07 02:40:53
执行bernoulli函数来确定对于给定的p和q哪个状态要移动。例如)因为p = 0.6 =。 Q = 0.4。使用10个球,6个红色,4个蓝色并挑选一个球,看看它是什么颜色。如果它的红色,去状态+ 1,如果它的蓝色,去状态-1。
因此,您可以随机生成1-10,1-6代表红色,7-10代表蓝色。使用rand.nextInt(10)+1表示1到10.
另外,如果不打算在别处使用它(istate和particle),则不必使用2个变量来表示相同的事物。
究竟是什么问题? – 2012-02-07 02:27:08
它只打印出一个值。我需要它打印出粒子的所有值,直到nSteps等于numSteps! – helloimbarbara 2012-02-07 02:28:44