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
的起点。
在长时间模拟中使用 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
的起点。