IMP_Eigen::MatrixXd GaussianProcessInterpolation::get_d2cov_dOm_dOm(
    Floats q, unsigned m, unsigned n) const {
  IMP_Eigen::VectorXd wq(get_wx_vector(q));
  IMP_Eigen::VectorXd L(get_ldlt().solve(wq));
  IMP_Eigen::MatrixXd Omi(get_Omi());
  IMP_Eigen::MatrixXd tmp(Omi.col(m) * L.transpose());
  return -L(n) * (tmp + tmp.transpose());
}
IMP_Eigen::MatrixXd GaussianProcessInterpolation::get_d2cov_dwq_dOm(
    Floats q, unsigned m) const {
  IMP_Eigen::VectorXd wq(get_wx_vector(q));
  IMP_Eigen::VectorXd L(get_ldlt().solve(wq));
  IMP_Eigen::MatrixXd Omi(get_Omi());
  IMP_Eigen::MatrixXd ret(L * Omi.col(m).transpose());
  return ret + ret.transpose();
}
Exemplo n.º 3
0
int main(int argc, char **argv)
{
  int count = 10;
    
  thisprog = argv[0];
  argc--; argv++;

  while (argc > 0 && **argv == '-') {
    (*argv)++;
    if (!(**argv))
      /* Cas du "adb - core" */
      Usage();
    while (**argv)
      switch (*(*argv)++) {
      case 's':	op_flags |= OPT_s; break;
      case 'b':	op_flags |= OPT_b; if (argc < 2)  Usage();
	if ((sscanf(*(++argv), "%d", &count)) != 1) 
	  Usage(); 
	argc--; 
	goto b1;
      default: Usage();	break;
      }
  b1: argc--; argv++;
  }

  if (argc != 0)
    Usage();

  WorkQueue<Task> wq(10);

  if (!wq.start(&worker, &wq)) {
      fprintf(stderr, "Start failed\n");
      exit(1);
  }

  for (;;) {
      Task tsk;
      fprintf(stderr, "BOSS: put task %d\n", tsk.m_id);
      if (!wq.put(tsk)) {
	  fprintf(stderr, "Boss: put failed\n");
	  exit(1);
      }
      if ((tsk.m_id % 10) == 0)
	  sleep(1);
  }
  exit(0);
}
IMP_Eigen::MatrixXd GaussianProcessInterpolation::get_dcov_dOm(Floats q) const {
  IMP_Eigen::VectorXd wq(get_wx_vector(q));
  IMP_Eigen::LDLT<IMP_Eigen::MatrixXd, IMP_Eigen::Upper> ldlt(get_ldlt());
  IMP_Eigen::VectorXd ret(ldlt.solve(wq));
  return ret * ret.transpose();
}