大家好
我想徵求程式語言強者
能將24行 FORTRAN寫的程式 轉譯成 EXCEL 函數用的 Visual Basic
程式是 馬爾可夫鍊計算的
酬勞 2000P幣 或更多(或者我匯款給您
酬勞我不太清楚行情(哪位大大願意告知我?
程式如下
PARAMETER (NSAMP=84)
PARAMETER (NWINE=7)
PARAMETER (NSTAT=49)
PARAMETER (NSTEP=5)
INTEGER NHIST(1: NSAMP,1: NWINE)
INTEGER MI(1: NSTEP,1: NSTAT)
INTEGER MIJ(1: NSTEP,1: NSTAT,1: NSTAT)
REAL P(1: NSTEP,1: NSTAT,1: NSTAT)
DO 100, I=1,NSTEP
DO 100, J=1, NSAMP-I
DO 100, K=1, NSTAT
DO 100, L=1, NSTAT
MIJ(I,NHIST(J,K), NHIST(J+I,L)) =
MIJ(I,NHIST(J,K), NHIST(J+I,L)) + 1
100 CONTINUE
DO 110, I=1,NSTEP
DO 110, J=1, NSTAT
DO 110, K=1, NSTAT
MI(I,J) = MI(I,J)+MIJ(I,J,K)
程式說明如下
行號 指述 說明
1 PARAMETER (NSAMP=84)
共有 84 個歷史數據組
2 PARAMETER (NWINE=7)
每組有 7 個號碼
3 PARAMETER (NSTAT=49)
劃分成 49 個狀態
4 PARAMETER (NSTEP=5)
僅計算到 5 步轉移
5 INTEGER NHIST(1: NSAMP,1: NWINE)
NHIST 存歷史數據
6 INTEGER MI(1: NSTEP,1: NSTAT)
MI 存(1)式中的 M i(m)
7 INTEGER MIJ(1: NSTEP,1: NSTAT,1: NSTAT)
MIJ 存(1)式中的 M ij(m)
8 REAL P(1: NSTEP,1: NSTAT,1: NSTAT)
P 存(1)式中的 P(m)
9 DO 100, I=1,NSTEP
10 DO 100, J=1, NSAMP-I
11 DO 100, K=1, NSTAT
12 DO 100, L=1, NSTAT
13 MIJ(I,NHIST(J,K), NHIST(J+I,L)) =
MIJ(I,NHIST(J,K), NHIST(J+I,L)) + 1
14 100 CONTINUE
由 9~14 行可求出(1)式中的 M ij(m) ,
只對開出的號碼進行搜尋計數,
計數原來在第 NHIST(J,K)狀態,
經 I 步轉移至第NHIST(J+I,L) 狀態之數量,
應該會是非常有效率的算法
15 DO 110, I=1,NSTEP
16 DO 110, J=1, NSTAT
17 DO 110, K=1, NSTAT
18 MI(I,J) = MI(I,J)+MIJ(I,J,K)
19 110 CONTINUE
14~19行
先 求 出 (1) 式 中 的M ij(m) ,
再加總求出(1)式中的 M i(m)
應是最簡潔的算法
20 DO 120, I=1,NSTEP
21 DO 120, J=1, NSTAT
22 DO 120, K=1, NSTAT
23 P(I,J,K) = MIJ(I,J,K) / MI(I,J)
24 120 CONTINUE
20~24行 求(1)式中的 P(m)
歷史數據如下
19 14 37 23 47 35 42
34 35 13 47 11 49 20
7 12 20 11 14 10 41
20 32 39 16 17 45 46
15 40 42 38 47 46 17
39 32 43 36 37 2 3
12 39 21 31 13 17 20
18 3 42 24 13 4 47
6 17 25 42 40 1 15
10 49 47 42 41 33 3
31 39 5 6 23 41 16
36 3 45 34 7 4 24
9 15 24 35 33 12 18
20 23 38 37 14 26 33
32 35 20 15 13 39 11
2 28 44 36 20 3 21
3 14 27 8 48 31 23
23 27 22 16 12 18 41
47 25 24 6 1 32 38
11 42 13 21 22 5 25
41 19 28 30 29 4 10
3 15 37 30 23 36 28
20 24 47 36 6 8 27
43 48 18 39 1 35 2
10 18 12 22 4 40 24
32 35 30 20 14 43 33
20 29 24 28 8 10 32
9 38 10 23 37 29 44
24 6 29 33 4 14 45
47 37 42 28 38 15 33
22 35 37 41 46 47 2
46 26 22 4 36 21 41
37 41 39 40 45 20 8
17 7 22 23 1 16 19
18 15 24 28 10 43 35
22 24 36 44 23 6 3
25 38 5 12 42 35 28
19 29 42 36 16 21 10
1 3 48 11 26 15 28
42 33 34 2 47 44 10
24 16 25 19 1 26 21
48 10 43 5 32 24 4
43 32 38 5 9 15 12
12 8 15 13 46 35 30
39 3 31 22 27 8 14
29 6 37 10 41 19 9
33 21 31 17 48 5 25
1 2 31 19 47 48 36
46 10 1 13 40 42 41
38 11 27 21 19 39 24
33 27 13 11 15 23 4
9 49 23 44 31 25 2
15 2 28 1 32 18 26
43 37 47 16 18 35 7
24 41 8 31 35 37 19
43 49 23 30 27 17 31
17 37 20 47 49 2 36
8 22 6 4 5 38 42
2 8 29 36 35 13 14
19 38 46 28 6 37 42
27 17 45 24 42 28 31
3 28 25 49 24 22 30
49 25 27 33 38 40 12
12 22 45 2 40 14 4
43 42 26 38 30 37 32
32 41 18 30 13 48 45
42 29 23 32 5 36 14
10 31 45 33 32 43 30
48 26 36 37 10 12 34
30 5 35 22 24 2 42
41 29 38 23 9 2 8
12 8 15 36 1 47 10
11 48 2 41 8 38 18
48 28 23 36 30 15 45
28 25 27 34 2 37 42
27 23 16 14 44 28 40
9 42 23 3 26 31 41
10 44 11 34 48 24 31
8 49 29 26 15 2 3
1 30 16 6 13 33 3
6 34 18 43 2 33 28
7 26 23 39 8 21 28
46 19 44 32 8 4 21
20 35 33 43 41 34 4
2 5 33 28 44 24 4