| 1 | Matrix m = Col(0,0); |
|---|
| 2 | Matrix S = ((1, .9), |
|---|
| 3 | (.9, 1)); |
|---|
| 4 | Matrix S_1 = GaussInverse(S); |
|---|
| 5 | Matrix Lt = Choleski(S); |
|---|
| 6 | |
|---|
| 7 | Matrix BiNormal(Matrix mu) |
|---|
| 8 | { |
|---|
| 9 | Matrix mu + Lt * (Matrix Gaussian(Rows(mu), 1, 0, 1)) |
|---|
| 10 | }; |
|---|
| 11 | |
|---|
| 12 | Real d1 = 0.75; |
|---|
| 13 | Real d2 = 1.0; |
|---|
| 14 | |
|---|
| 15 | Real target_density(Matrix x, Matrix cx, Matrix join, Set data) |
|---|
| 16 | { |
|---|
| 17 | //Text WriteLn("----- target_density -----"); |
|---|
| 18 | Matrix xm = x - m; |
|---|
| 19 | Real den = -0.5*MatDat(Tra(xm)*S_1*xm,1,1); |
|---|
| 20 | //Set View([[x, den]], "Std"); |
|---|
| 21 | //Text WriteLn(""); |
|---|
| 22 | Real den |
|---|
| 23 | }; |
|---|
| 24 | |
|---|
| 25 | Matrix kernel_drawer1(Matrix x, Matrix cx, Matrix join, Set data) |
|---|
| 26 | { |
|---|
| 27 | Matrix x + Col(Real Rand(-d1, d1), Real Rand(-d2, d2)) |
|---|
| 28 | }; |
|---|
| 29 | |
|---|
| 30 | Set MH_def = [[ |
|---|
| 31 | [[2, /* dimension */ |
|---|
| 32 | 2, /* generic MH */ |
|---|
| 33 | m, /* initial state */ |
|---|
| 34 | Copy(Empty), /* block data */ |
|---|
| 35 | kernel_drawer1, /* kernel generator */ |
|---|
| 36 | target_density, /* log density evaluator */ |
|---|
| 37 | 1 /* q is symmetric */ |
|---|
| 38 | ]] |
|---|
| 39 | ]]; |
|---|
| 40 | |
|---|
| 41 | Set samples = For(1, 1000, Matrix (Real i) { |
|---|
| 42 | BiNormal(m) |
|---|
| 43 | }); |
|---|
| 44 | |
|---|
| 45 | //Matrix join = BinGroup("|", samples); |
|---|
| 46 | //Matrix join_t = Tra(join); |
|---|
| 47 | |
|---|
| 48 | // Real target_density(Col(0,0), Col(0,0), Col(0,0), Empty); |
|---|
| 49 | |
|---|
| 50 | Matrix chain = MetropolisHastings(MH_def, 10, 10); |
|---|
| 51 | Matrix chain_t = Tra(chain); |
|---|