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(); }
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(); }