for n = 1, 10 do
-- prepare matrix of zeroes
local P = {}
for i = 0, n do
P[i] = {}
for j = 0, n do
P[i][j] = 0
end
end
-- set matrix element at (0,0) = 1
P[0][0] = 1
local E = 0 -- expected value of number of steps
for move = 1, 1000000 do -- emulate one million steps
for x = n, 1, -1 do
for y = n, 1, -1 do
-- calculate probabilities after next move
P[x][y] = (
P[x][y] *x *y +
P[x-1][y] *(n+1-x)*y +
P[x][y-1] *x *(n+1-y) +
P[x-1][y-1]*(n+1-x)*(n+1-y)
)/(n*n)
end
end
E = E + P[n][n]*move
P[0][0] = 0
P[n][n] = 0
end
print(n, E)
end
결과 (N, E)
1 1
2 3.6666666666667
3 6.8178571428571
4 10.301098901099
5 14.039464751085
6 17.982832900812
7 22.096912050614
8 26.357063600653
9 30.744803580639
10 35.245774455244
E의
정확한 값을 산출 할 수 있지만, 행렬 N * N, N = N 반전을 필요 * N
이것은 숙제 문제처럼 들리지만 전혀 프로그래밍과 관련이 없습니다. – Krease
이 질문은 [math.se]와 (과) 관련이 있기 때문에 오프 주제로 보입니다. – Dukeling
@Chris 이것은 프로그래밍과 관련이 있습니다. rand() 또는 srand() C++의 사용하여 시뮬레이션에 의해 답변을 확인하기위한 임의의 값을 생성하려면 노력하고있어. 어떤 방법을 알고 계시다면 알려주십시오. – ABcDexter