Armadillo 中 chol 函数的错误处理

Error handling for the chol function in Armadillo

在长时间模拟中使用 Armadillo 从多变量正态采样时,我得到了 error: chol() failed to converge。所以我决定稍微扰乱 sigma 以避免我的模拟经常被以下代码停止:

try {
        R = chol(sigma);
} catch ( ... ) {
        sigma += eye(sigma.n_rows,sigma.n_rows) * 1e-6;
        R = chol(sigma);
}

但是,这段代码似乎正在减慢速度,我想避免返回错误消息。

我该如何解决这个问题?

犰狳有两种形式chol()。第一个 returns 一个矩阵,而第二个将输出存储在指定为参数的矩阵中。要避免使用 try {} catch (...),请使用第二种形式:

bool success = false;

while(success == false)
  {
  success = chol(R, sigma);

  if(success == false)
    {
    sigma += eye(sigma.n_rows,sigma.n_rows) * 1e-6;
    }
  }

以上是否收敛(以及收敛速度)很大程度上取决于sigma的起点。