我想知道你推荐的计算矩阵逆的方法是什么?
我发现的方式似乎并不令人满意.例如,
> 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)
谢谢!
我正在寻找一个关于如何反转4x4矩阵的示例代码实现.我知道有高斯电气化,LU分解等等,但我没有详细查看它们,我真的只是在寻找代码来做到这一点.
语言理想情况下是C++,数据以16个浮点数的形式提供,以cloumn-major顺序排列.
谢谢!
如何在python中得到矩阵的逆?我自己实现了它,但它是纯粹的python,我怀疑有更快的模块可以做到这一点.
计算3x3矩阵逆的最简单方法是什么?
我只是在寻找一个简短的代码片段,它可以解决非奇异矩阵,可能使用Cramer的规则.它不需要高度优化.我更喜欢简单而不是速度.我宁愿不链接其他库.
我希望能够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 的逆?
我想在Python中采用像[[1,2],[3,4]] mod 7这样的矩阵的模逆.我看过numpy(它进行矩阵求逆而不是模块矩阵求逆),我在网上看到了一些数论包,但似乎没有什么比较常见的程序(至少对我而言似乎相对常见).
顺便说一下,上述矩阵的逆是[[5,1],[5,3]](mod 7).我希望Python能为我做这件事.
我在几个地方(在文档和这篇博文中阅读:http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/)中读到,在Matlab中使用inv不是建议因为它很慢而且不准确.
我试图找出这种不准确的原因.截至目前,谷歌没有给出有趣的结果,所以我认为有人可以指导我.
谢谢 !
我正在考虑采用大矩阵的逆矩阵,通常大小为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
我有一个方形矩阵,有几万行和一列,只有几1吨0,所以我用这个Matrix包以高效的方式存储在R中.由于base::matrix内存不足,对象无法处理该数量的单元格.
我的问题是我需要逆矩阵以及此类矩阵的Moore-Penrose广义逆,这是我目前无法计算的.
我尝试过的:
solve产生Error in LU.dgC(a) : cs_lu(A) failed: near-singular A (or out of memory)错误MASS::ginv与Matrix班级不相容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 …
我注意到如果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)*A或A*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
matrix-inverse ×10
matrix ×4
algorithm ×2
c++ ×2
math ×2
matlab ×2
python ×2
r ×2
c ×1
concurrency ×1
eigen ×1
lapack ×1
large-data ×1
precision ×1