标签: matrix-inverse

R中矩阵的逆

我想知道你推荐的计算矩阵逆的方法是什么?

我发现的方式似乎并不令人满意.例如,

> c=rbind(c(1, -1/4), c(-1/4, 1))  
> c  
      [,1]  [,2]  
[1,]  1.00 -0.25  
[2,] -0.25  1.00  
> inv(c)  
Error: could not find function "inv"  
> solve(c)    
          [,1]      [,2]  
[1,] 1.0666667 0.2666667  
[2,] 0.2666667 1.0666667  
> solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  
> qr.solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  
Run Code Online (Sandbox Code Playgroud)

谢谢!

r matrix-inverse

83
推荐指数
3
解决办法
20万
查看次数

反转4x4矩阵

我正在寻找一个关于如何反转4x4矩阵的示例代码实现.我知道有高斯电气化,LU分解等等,但我没有详细查看它们,我真的只是在寻找代码来做到这一点.

语言理想情况下是C++,数据以16个浮点数的形式提供,以cloumn-major顺序排列.

谢谢!

c++ algorithm math matrix matrix-inverse

76
推荐指数
5
解决办法
7万
查看次数

Python的逆矩阵

如何在python中得到矩阵的逆?我自己实现了它,但它是纯粹的python,我怀疑有更快的模块可以做到这一点.

python algorithm matrix linear-algebra matrix-inverse

60
推荐指数
6
解决办法
11万
查看次数

简单的3x3矩阵逆码(C++)

计算3x3矩阵逆的最简单方法是什么?

我只是在寻找一个简短的代码片段,它可以解决非奇异矩阵,可能使用Cramer的规则.它不需要高度优化.我更喜欢简单而不是速度.我宁愿不链接其他库.

c++ math matrix matrix-inverse

36
推荐指数
4
解决办法
10万
查看次数

使用C中的lapack计算矩阵的逆矩阵

我希望能够NxN使用lapack 计算C/C++中一般矩阵的逆矩阵.

我的理解是在lapack中进行反转的方法是使用dgetri函数,但是,我无法弄清楚它的所有参数应该是什么.

这是我的代码:

void dgetri_(int* N, double* A, int* lda, int* IPIV, double* WORK, int* lwork, int* INFO);

int main(){

    double M [9] = {
        1,2,3,
        4,5,6,
        7,8,9
    };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

你将如何完成它以3x3使用dgetri_ 获得矩阵M 的逆?

c matrix-inverse lapack

23
推荐指数
2
解决办法
4万
查看次数

使用Python执行模块化矩阵反转的最简单方法?

我想在Python中采用像[[1,2],[3,4]] mod 7这样的矩阵的模逆.我看过numpy(它进行矩阵求逆而不是模块矩阵求逆),我在网上看到了一些数论包,但似乎没有什么比较常见的程序(至少对我而言似乎相对常见).

顺便说一下,上述矩阵的逆是[[5,1],[5,3]](mod 7).我希望Python能为我做这件事.

python matrix matrix-inverse number-theory

20
推荐指数
4
解决办法
9851
查看次数

为什么Matlab的inv缓慢且不准确?

我在几个地方(在文档和这篇博文中阅读:http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/)中读到,在Matlab中使用inv不是建议因为它很慢而且不准确.

我试图找出这种不准确的原因.截至目前,谷歌没有给出有趣的结果,所以我认为有人可以指导我.

谢谢 !

matlab linear-algebra matrix-inverse numerical-analysis

16
推荐指数
2
解决办法
7356
查看次数

大型矩阵反演

我正在考虑采用大矩阵的逆矩阵,通常大小为1000 x 1000,但有时超过100000 x 100000(由于时间和内存,目前失败).我知道正常的情绪是"不要反过来,找其他方法去做",但目前这是不可能的.造成这种情况的原因是由于已经制作的软件需要使矩阵反转.(注意:我正在研究如何改变这种情况,但这需要很长时间)

目前我们正在使用数值重新复制的LU分解方法,我目前正在测试特征库.特征库似乎更稳定,速度更快,但我仍在测试阶段的准确性.我已经快速浏览了其他库,例如ATLAS和LAPACK,但尚未对这些库进行任何实质性测试.

似乎特征库不使用并发方法来计算逆(尽管对于逆分的LU分解部分也是如此),并且据我所知,ATLAS和LAPACK在此限制中是相似的.(我目前正在使用openMP测试特征的速度差异而没有.)

第一个问题是任何人都可以解释如何通过并行化优化矩阵求逆.我在这里发现了一篇关于矩阵求逆并行算法的文章,但我不明白.看来这篇文章谈到另一种方法?我也不确定scaLAPACK或PETSc是否有用?

第二个问题,我看了这个文章使用GPU来提高性能的,但我从来没有编码的GPU,因此不知道是什么人所要表达的,但在底部的图表看起来相当惊人.这怎么可能,以及如果要成为现实,我该如何开始实现这样的事情.

我也发现这篇文章,还有时间阅读它来理解,但它似乎很有希望,因为内存是我们软件的当前问题.

有关这些文章或一般问题的任何信息都会有很大帮助.如果这个问题看起来含糊不清,我再次道歉,如果有必要,我会尽量扩大.

parallel-processing concurrency linear-algebra matrix-inverse eigen

15
推荐指数
3
解决办法
9790
查看次数

Moore-Penrose推广了一个大型稀疏矩阵的逆

我有一个方形矩阵,有几万行和一列,只有几10,所以我用这个Matrix包以高效的方式存储在R中.由于base::matrix内存不足,对象无法处理该数量的单元格.

我的问题是我需要矩阵以及此类矩阵的Moore-Penrose广义逆,这是我目前无法计算的.

我尝试过的:

  • solve产生Error in LU.dgC(a) : cs_lu(A) failed: near-singular A (or out of memory)错误
  • MASS::ginvMatrix班级不相容
  • 没有直接的方法将稀疏转换Matrix为例如bigmemory::big.matrix,而后者也MASS::ginv无论如何也无法工作
  • 如果我尝试计算矩阵的Choleski分解以便稍后调用Matrix::chol2inv它,我会收到以下错误消息:

    Error in .local(x, ...) : 
      internal_chm_factor: Cholesky factorization failed
    In addition: Warning message:
    In .local(x, ...) :
      Cholmod warning 'not positive definite' at file ../Cholesky/t_cholmod_rowfac.c, line 431
    
    Run Code Online (Sandbox Code Playgroud)
  • 基于相关问题,我还尝试pbdDMAT了单个节点上的包,但pbdDMAT::chol产生了Cholmod error …

r linear-algebra sparse-matrix matrix-inverse large-data

15
推荐指数
1
解决办法
2375
查看次数

为什么在Matlab和Octave中inv()和pinv()的输出不相等?

我注意到如果A是NxN矩阵并且它具有逆矩阵.但是inv()和pinv()函数输出是不同的. - 我的环境是Win7x64 SP1,Matlab R2012a,Cygwin Octave 3.6.4,FreeMat 4.2

看看Octave的例子:

A = rand(3,3)
A =
0.185987   0.192125   0.046346
0.140710   0.351007   0.236889
0.155899   0.107302   0.300623

pinv(A) == inv(A)
ans =
0 0 0
0 0 0
0 0 0
Run Code Online (Sandbox Code Playgroud)
  • 这一切都同ans通过上面运行在Matlab同一命令的结果.

  • 我计算inv(A)*AA*inv(A),结果是Octave和Matlab中的身份3x3矩阵.
  • 结果A*pinv(A)pinv(A)*A在Matlab和FreeMat身份3x3矩阵.
  • 的结果 A*pinv(A)是Octave中的身份3x3矩阵.
  • 结果pinv(A)*A不是在倍频身份3x3矩阵.

我不知道原因 inv(A) != pinv(A),我已经考虑了矩阵中元素的细节.这似乎是导致这个问题的浮动精度问题.

点点后10位数可能不同,如下所示:

  • 6.65858991579923298331777914427220821380615200000000inv(A)(1,1)反对的元素

  • 6.65858991579923209513935944414697587490081800000000 元素 pinv(A)(1,1)

precision matlab floating-accuracy matrix-inverse numerical-analysis

14
推荐指数
3
解决办法
2万
查看次数