Tôi đang gặp vấn đề với khoảng cách trung bình trong bài tập này. Nó phải gần với sqrt của N bước, nhưng nó thấp hơn. Bạn có thể giúp tôi tìm ra đâu là sai lầm của tôi?Simple 2D Random walk
Đi bộ ngẫu nhiên 2D. Một bước đi ngẫu nhiên hai chiều mô phỏng hành vi của một hạt chuyển động trong một mạng lưới các điểm. Ở mỗi bước, người đi bộ ngẫu nhiên di chuyển về phía bắc, nam, đông hoặc tây với xác suất 1/4, độc lập với các động thái trước đó. Xác định khoảng cách trung bình (trung bình) người đi bộ ngẫu nhiên là từ điểm khởi đầu sau N bước. (câu trả lời lý thuyết:. Vào thứ tự của sqrt (N))
public class RandomWalk{
public static void main(String[] args){
int N = Integer.parseInt(args[0]);
double nextStep = 0;
double averageDistance = 0;
int COUNT = 1000;
for (int j = 0; j < COUNT; j++){
int moveWest = 0;
int moveEast = 0;
int moveSouth = 0;
int moveNorth = 0;
double distance = 0;
for (int i = 0; i < N; i++){
nextStep = Math.random()*4;
if (nextStep <= 1) ++moveWest;
else if (nextStep <= 2) ++moveEast;
else if (nextStep <= 3) ++moveSouth;
else if (nextStep <= 4)++moveNorth;
}
moveEast = moveEast - moveWest;
moveNorth = moveNorth - moveSouth;
distance = Math.sqrt((moveEast * moveEast) + (moveNorth * moveNorth));
averageDistance += distance;
System.out.println("Walker is " + distance + "\t steps away of from the starting point");
//System.out.println("Sqrt of N is " + Math.sqrt(N));
}
System.out.println("Average distance is " + averageDistance/COUNT + " steps away of from the starting point");
}
}
Phạm vi từ <0,1> lớn hơn (3,4> vì vậy tôi sẽ bắt đầu bằng cách tạo chúng ngay cả khi sử dụng ít hơn so với mọi nơi. Tôi đã thử nghiệm nhưng không thực hiện thay đổi đáng kể, vẫn ... bắt đầu từ đây. – zubergu
Tôi không nghĩ rằng nó được coi là hội tụ để sqrt (N) hoặc bất cứ điều gì như thế. Nó được cho là theo thứ tự độ lớn của sqrt (N) hoặc một số như vậy. Hoặc mb O (sqrt (N)). Math ... –
Sau đó, tôi đoán giải pháp của tôi là đúng? –