Changeset 185
- Timestamp:
- 05/19/08 15:06:13 (7 months ago)
- Files:
-
- projects/AsynCluster/trunk/svpmc/model.c (modified) (3 diffs)
- projects/AsynCluster/trunk/svpmc/test/test_model.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
projects/AsynCluster/trunk/svpmc/model.c
r184 r185 156 156 double normLogDensity(double x) 157 157 { 158 static double logC = -log(2 * 3.1415926535897931);158 static double logC = -log(2 * M_PI); 159 159 return -0.5*x*x + logC; 160 160 } … … 251 251 int k; 252 252 double L; 253 double Lmin = + 1E20; // Anything will be less positive254 double Lmax = - 1E20; // Anything will be more positive253 double Lmin = +HUGE_VAL; // Anything will be less positive 254 double Lmax = -HUGE_VAL; // Anything will be more positive 255 255 for(k=0; k<n; k++) { 256 256 L = sp[k][1]->Lx; … … 271 271 // the log-probability of the proposal's having been selected. 272 272 struct selection \ 273 importanceSample(struct sample *sp[][2], double Lz[], double Dp[],int n)274 { 275 int k 0, kpMax;273 importanceSample(struct sample *sp[][2], double Lz[], int n) 274 { 275 int k, kpMax; 276 276 double val; 277 277 double pSum = 0; 278 double pMax = -1E20; // Anything will be more positive 278 double pMax = -HUGE_VAL; // Anything will be more positive 279 double Dp[n]; 279 280 struct selection result; 280 281 281 282 // Compute linear probability density for each proposal 282 for(k 0=0; k0<n; k0++) {283 val = exp(sp[k 0][1]->Lx + Lz[k0]);284 Dp[k 0] = val;283 for(k=0; k<n; k++) { 284 val = exp(sp[k][1]->Lx + Lz[k]); 285 Dp[k] = val; 285 286 pSum += val; 286 287 if(val > pMax) { 287 288 pMax = val; 288 kpMax = k 0;289 kpMax = k; 289 290 } 290 291 } projects/AsynCluster/trunk/svpmc/test/test_model.py
r184 r185 376 376 H2(k1, k0) = PA1(S.h, k1); 377 377 } 378 free(S.z); 379 free(S.h); 380 free(S.x0); 381 free(S.x1); 378 382 """ 379 383 … … 455 459 456 460 class Test_Model_logLikelihood(BaseCase): 457 N = 100458 459 461 code = """ 460 462 int k0, k1; … … 470 472 S.x0 = (double *) malloc(sizeof(double) * Nx[0]); 471 473 S.x1 = (double *) malloc(sizeof(double) * Nx[0]); 474 475 for(k1=0; k1<Nx[0]; k1++) { 476 PA1(S.z, k1) = Z1(k1); 477 PA1(S.h, k1) = H1(k1); 478 } 472 479 473 480 for(k0=0; k0<Nx[1]; k0++) { 474 for(k1=0; k1<Nx[0]; k1++) {481 for(k1=0; k1<Nx[0]; k1++) 475 482 xk[k1] = X2(k1, k0); 476 PA1(S.z, k1) = Z2(k1, k0);477 PA1(S.h, k1) = H2(k1, k0);478 }479 483 // This is what's being tested 480 484 logLikelihood(&S, &P, xk); 481 485 } 486 free(S.z); 487 free(S.h); 488 free(S.x0); 489 free(S.x1); 482 490 return_val = S.Lx; 483 491 """ … … 501 509 502 510 def test_Lx_accumulates(self): 503 # TODO 504 Ns = 2 511 Ns = 100 505 512 Lx = self._logLikelihood(s.ones((1,Ns)), 0) 506 513 distObj = stats.norm(0, 1) 507 self.failUnlessAlmostEqual(Lx, s.log(Ns*distObj.pdf(1)))514 self.failUnlessAlmostEqual(Lx, Ns*s.log(distObj.pdf(1))) 508 515 516 def test_Lx_multivariate(self): 517 Nt = 8 518 Ns = 100 519 Lx = self._logLikelihood(s.ones((Nt,Ns)), 0) 520 distObj = stats.norm(0, 1) 521 self.failUnlessAlmostEqual(Lx, Nt*Ns*s.log(distObj.pdf(1))) 522 523 524 class Test_Model_spArray(BaseCase): 525 code = """ 526 int k; 527 const int n = NL[0]; 528 struct selection spSelection; 529 struct sample sp[n][2]; 530 double Lz[n]; 531 py::tuple result(2); 532 533 for(k=0; k<n; k++) { 534 Lz[k] = Z1(k); 535 sp[k][1].Lx = L1(k); 536 } 537 538 return_val = S.Lx; 539 """ 540 509 541 510 542 class Test_Model_likelihood(BaseCase):
