p*****e 发帖数: 310 | 1 【 以下文字转载自 Computation 讨论区 】
发信人: pinacle (大石头), 信区: Computation
标 题: lapack如何求解XA=B
发信站: BBS 未名空间站 (Fri Jun 12 07:33:51 2009, 美东)
我用lapack的dgetrf把A进行LU分解,也发现用blas的dtrsm可以进行右边求解,但是发
现dgetrf里的iPiv,即pivoting得信息没法在dtrsm里体现出来。而lapack中的dgetrs没
用右边求解的功能。
我现在只好先用A的LU分解,用dgetri得到逆然后B*A^(-1),这样效率太低了。
另外的方法是用dtrsm求解完以后在对解进行列变换,即X*(PLU)=B => X*P = Y, 可是
发现lapack只提供dlaswp来进行行变换。
另外我还想到因为X*P=Y => P'X'=Y', 这样可以用行变换得到X转置再转置回来,但是这
也太麻烦了,而且还得知道inv(P'),效率如何也不清楚。
不知道有没有好办法? |
z*****a 发帖数: 3809 | 2 Why don't you just solve for A'X' = B'?
dgetrs没
可是
是这
【在 p*****e 的大作中提到】 : 【 以下文字转载自 Computation 讨论区 】 : 发信人: pinacle (大石头), 信区: Computation : 标 题: lapack如何求解XA=B : 发信站: BBS 未名空间站 (Fri Jun 12 07:33:51 2009, 美东) : 我用lapack的dgetrf把A进行LU分解,也发现用blas的dtrsm可以进行右边求解,但是发 : 现dgetrf里的iPiv,即pivoting得信息没法在dtrsm里体现出来。而lapack中的dgetrs没 : 用右边求解的功能。 : 我现在只好先用A的LU分解,用dgetri得到逆然后B*A^(-1),这样效率太低了。 : 另外的方法是用dtrsm求解完以后在对解进行列变换,即X*(PLU)=B => X*P = Y, 可是 : 发现lapack只提供dlaswp来进行行变换。
|
p*****e 发帖数: 310 | 3 因为我已经有了A的PLU,用于主要的计算,这个XA=B就是为了解另一个矩阵,它的出现
次数要比主要的计算频率少。
如果我单独为了它重新进行A的LU分解,那么和从A的PLU求inv(A)时间差不多了,除非A
'的PLU能方便的从A的PLU得到。
是发
【在 z*****a 的大作中提到】 : Why don't you just solve for A'X' = B'? : : dgetrs没 : 可是 : 是这
|
z*****a 发帖数: 3809 | 4 dgetrs can be used to solve both AX=B and A'X=B when given the factorization
of A computed by dgetrf, you just need to pass the right flag.
非A
【在 p*****e 的大作中提到】 : 因为我已经有了A的PLU,用于主要的计算,这个XA=B就是为了解另一个矩阵,它的出现 : 次数要比主要的计算频率少。 : 如果我单独为了它重新进行A的LU分解,那么和从A的PLU求inv(A)时间差不多了,除非A : '的PLU能方便的从A的PLU得到。 : : 是发
|
p*****e 发帖数: 310 | 5 多谢!blas/lapack貌似没有矩阵转置的函数吧?
factorization
出现
【在 z*****a 的大作中提到】 : dgetrs can be used to solve both AX=B and A'X=B when given the factorization : of A computed by dgetrf, you just need to pass the right flag. : : 非A
|