繁体   English   中英

犰狳C ++ LU分解

[英]Armadillo C++ LU decomposition

我正在使用Armadillo C ++库来求解中/大尺寸(1000-5000个方程)的线性系统。

由于我必须解决不同的线性系统

AX = b的

在其中A始终相同而B发生变化的情况下,我只希望LU分解A一次,然后将LU分解重用不同的b。 不幸的是,我不知道如何在犰狳中执行这种操作。

我所做的只是A矩阵的LU分解:

arma::mat A;
// ... fill the A matrix ...
arma::mat P,L,U;
arma::lu(L, U, P, A);

但是现在我想使用矩阵P,L和U来求解具有不同b向量的几个线性系统。

请问你能帮帮我吗?

由于A = Pt()*L*U (其中的均等值仅由于舍入误差而近似),因此在Pt()*L*U*x = b求解x要求置换B行并执行正向和反向替换:

x = solve(trimatu(U), solve(trimatl(L), P*b) );

由于犰狳中缺少真正的三角求解器,并且缺乏执行行置换的快速方法,因此,相对于直接调用相关的计算LAPACK子例程而言,此过程将不是很有效。

一般建议是避免在更高版本的库(如犰狳)中进行显式LU分解。

  1. 如果同时知道所有不同的b ,则将它们作为列存储在矩形矩阵B并且X = solve(A,B);
  2. 如果一次知道不同的b ,则预先计算AINV = Ai(); 并且x = AINV*b; 如果不同的rhs向量的数量足够大,将更加有效。 看到类似问题的 答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM