犰狳C++;LU分解 < >我使用ARMADILO C++库求解中/大尺寸线性系统(100-5000个方程)。p>
因为我要解不同的线性系统 AX=b 其中A总是相同的,B是变化的,我只想对A进行一次LU分解,并将LU分解与不同的B重复使用。不幸的是,我不知道如何在犰狳中进行这种行动 我所做的只是矩阵的LU分解:犰狳C++;LU分解 < >我使用ARMADILO C++库求解中/大尺寸线性系统(100-5000个方程)。p>,c++,linear-algebra,numeric,armadillo,decomposition,C++,Linear Algebra,Numeric,Armadillo,Decomposition,因为我要解不同的线性系统 AX=b 其中A总是相同的,B是变化的,我只想对A进行一次LU分解,并将LU分解与不同的B重复使用。不幸的是,我不知道如何在犰狳中进行这种行动 我所做的只是矩阵的LU分解: arma::mat A; // ... fill the A matrix ... arma::mat P,L,U; arma::lu(L, U, P, A); 但是现在我想用矩阵p,L和U来解几个具有不同b向量的线性系统 你能帮我吗?因为A=p.t()*L*U(由于舍入误差,等式只是近似值),所
arma::mat A;
// ... fill the A matrix ...
arma::mat P,L,U;
arma::lu(L, U, P, A);
但是现在我想用矩阵p,L和U来解几个具有不同b向量的线性系统
你能帮我吗?因为A=p.t()*L*U
(由于舍入误差,等式只是近似值),所以在p.t()*L*U*x=b
中求解x
需要排列b
的行,并执行前后替换:
x = solve(trimatu(U), solve(trimatl(L), P*b) );
由于犰狳中缺少真正的三角形解算器,并且没有执行行置换的快速方法,相对于直接调用相关的计算拉巴克子例程而言,此过程将不是非常有效
一般建议是避免在高级库(如armadillo)中进行显式LU分解
b
,则将它们作为列存储在矩形矩阵b
和X=solve(a,b)中代码>
b
,则预计算AINV=a.i()代码>和x=AINV*b如果不同r.h.s.向量的数量足够大,则代码>将更有效。以类似的方式看待这一点
也许你可以告诉我们你已经试过什么了?也许你可以编辑你的问题,包括你的尝试的一部分?谢谢Joachim,我添加了我所尝试的。。。