首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有将LAPACK置换更改为真正置换的算法?

是否有将LAPACK置换更改为真正置换的算法?
EN

Stack Overflow用户
提问于 2017-07-15 21:16:01
回答 1查看 424关注 0票数 0

我意识到LAPACK中的ipiv参数(如在dgetrf中)不是置换向量(如matlab中的)。这是一个交换置换。

这里讨论的是:https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/290955

另一个例子是:

代码语言:javascript
复制
A = [ 1 2 3; 4 5 6; 7 8 0] %matlab notation

如果你跑

代码语言:javascript
复制
dgetrf_ (&m, &n, A, &lda, ipiv, &info); // C/C++ code

您所拥有的逆置换是:

代码语言:javascript
复制
ipiv = [ 3 3 3]

如果要将其显示为matlab逆置换,则为:[3 1 2]

我的问题是:是否有任何(内部)代码/算法将ipiv更改为置换?我用C.While BLAS编写的代码是常用的,我想可能有人会有这样的代码。我的矩阵可以非常大,我想要好的解决方案的时间和内存。

注意:一个明显的解决方案是在p = [1:3]迭代中初始化向量n和交换。(即第一元素与第三元素互换,第二元素与第三元素互换,第三元素与第三元素互换)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 19:02:13

我用C实现了它,我认为有一段人们可能需要的代码是很好的:

代码语言:javascript
复制
    for (int i = 0; i < m; i++) tmpPinv[i] = i;
    for (int i = 0; i < n; i++){
        int tmp;
        // swap (tmpPinv [ipiv [i]], tmpPinv[i] ) and it is off by one          
        tmp = tmpPinv [ipiv [i]-1];            
        tmpPinv [ipiv [i]-1] = tmpPinv [i];
        tmpPinv [i] = tmp;
    }

它不是内部的,而且是连续的;我可能需要实现LU分解myself.So,我不会花费太多的精力来修复这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45122804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档