一个很简单的程序。但觉得有问题。
写了一个模拟一个粒子的布朗运动的程序。加速度,速度,位置之间有相关的公式。(代码里)
然后对时间,做统计模拟。得到的结果应该是类似与随机行走。
但是运行这个程序,结果是粒子逐渐远离远点,而且输出的数有时候是整数。
问题在哪?
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <ctime>
#define DT 2
#define STEP 9900
#define CON 0.5
using namespace std;
double random()
{
static bool isFirst = true;
if (isFirst)
{
isFirst = false;
srand((unsigned)time(NULL));
}
double result;
result = rand() / 10000;
return result;
}
void initial_Array(double other[STEP])
{
for (int i = 0; i < STEP; i++)
other[i] = 0;
}
void calculate()
{
int i;
double rX[STEP], rY[STEP], rZ[STEP], vX[STEP], vY[STEP], vZ[STEP], aX[STEP], aY[STEP], aZ[STEP];
initial_Array(rX);
initial_Array(rY);
initial_Array(rZ);
initial_Array(vX);
initial_Array(vY);
initial_Array(vZ);
initial_Array(aX);
initial_Array(aY);
initial_Array(aZ);
for (i = 2; i < STEP / 2 * DT - 4; i += DT)
{
aX[i] = -CON * vX[i - (DT / 2)] + random();
aY[i] = -CON * vY[i - (DT / 2)] + random();
aZ[i] = -CON * vZ[i - (DT / 2)] + random();
vX[i + DT / 2] = vX[i - DT / 2] + aX[i] * DT;
vY[i + DT / 2] = vY[i - DT / 2] + aY[i] * DT;
vZ[i + DT / 2] = vZ[i - DT / 2] + aZ[i] * DT;
rX[i+DT]=rX[i]+vX[i+DT/2]*DT;
rY[i+DT]=rY[i]+vY[i+DT/2]*DT;
rZ[i+DT]=rZ[i]+vZ[i+DT/2]*DT;
}
for (i = 2; i < STEP * DT-2; i += (DT/2))
cout << "Location:" << rX[i] << " " << rY[i] << " " << rZ[i] << " " << endl;
}
int main()
{
calculate();
return 0;
}