我正在尝试将卡尔曼滤波器应用于从iPhone加速度计输出的数据.我需要尽可能快地执行矩阵乘法和反演,所以我很好奇使用GPU执行这两项任务的可能性.截至目前,我发现矩阵乘法只有一个参考:
float mBone01[16] = { ... }
float mBone02[16] = { ... }
float mResult[16];
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity( );
glLoadMatrix ( mBone01 );
glMultMatrix ( mBone02 );
glGetMatrix ( GL_MODELVIEW, mResult );
Run Code Online (Sandbox Code Playgroud)
即使很难用户也不确定这种乘法是在GPU内部执行的.对于反演,您是否有任何关于如何做(如果可能)的提示?
谢谢你们!
我正在使用Numpy/Scipy来反转20k矩阵,这很慢.我试过了:
(1) M_inv = M.I
(2) Ident = np.Identity(len(M))
M_inv = scipy.linalg.solve(M, Ident)
(3) M_inv = scipy.linglg.inv(M)
Run Code Online (Sandbox Code Playgroud)
但没有看到任何加速.
还有其他方法可以加快速度吗?
我想处理具有反函数和许多函数的图像.对于快速运行的代码,可以在3种反演方法中建议快速方法吗?
double cvInvert(const CvArr* src, CvArr* dst, int method=CV_LU)
Run Code Online (Sandbox Code Playgroud)
我正在使用choleski分解来计算半正定矩阵的逆矩阵.然而,当我的矩阵变得非常大并且其中有零时,我得知我的矩阵不再(从计算机的角度来看数字)正定.因此,为了解决这个问题,我使用pivot = TRUE了choleski命令中的选项R.但是,(如下所示)两者返回相同的输出,但行和列或矩阵重新排列.我试图找出是否有一种方法(或转换)使它们相同.这是我的代码:
X = matrix(rnorm(9),nrow=3)
A = X%*%t(X)
inv1 = function(A){
Q = chol(A)
L = t(Q)
inverse = solve(Q)%*%solve(L)
return(inverse)
}
inv2 = function(A){
Q = chol(A,pivot=TRUE)
L = t(Q)
inverse = solve(Q)%*%solve(L)
return(inverse)
}
Run Code Online (Sandbox Code Playgroud)
运行时导致:
> inv1(A)
[,1] [,2] [,3]
[1,] 9.956119 -8.187262 -4.320911
[2,] -8.187262 7.469862 3.756087
[3,] -4.320911 3.756087 3.813175
>
> inv2(A)
[,1] [,2] [,3]
[1,] 7.469862 3.756087 -8.187262
[2,] 3.756087 3.813175 -4.320911
[3,] -8.187262 -4.320911 9.956119
Run Code Online (Sandbox Code Playgroud)
有没有办法让两个答案匹配?我想inv2()从中回答答案 …
我正在开发一种算法,它解决了Ax = b,其中A和b是已知的.
有两种方法可以做到这一点 x = A -1 b或使用Cholesky.我知道矩阵将始终是正方形和正定,尽管det(A)可能为零.在极少数情况下,我可以忽略它.但是从计算的角度和效率来看,创建一个反矩阵效率太低了吗?
按照我在这里找到的好的指示:https://github.com/haginile/SwiftAccelerate我验证了矩阵反转是有效的.事实上它确实给出了给出的例子.但是我得到EXC_BAD_ACCESS任何其他矩阵(大于2x2)的错误,例如下面的2D矩阵(转换为1D数组)已成功在matlab和python中测试过,它不起作用
m = [0.55481645013013, -1.15522603580724, 0.962090414322894, -0.530226035807236, 0.168545207161447, -0.38627124296868, 0.93401699437494, -0.999999999999995, 0.684016994374945, -0.23176274578121, 0.123606797749979, -0.323606797749979, 0.432893622827287, -0.323606797749979, 0.123606797749979, 0.231762745781211, -0.684016994374948, 1.0, -0.934016994374947, 0.386271242968684, 0.168545207161448, -0.530226035807237, 0.962090414322895, -1.15522603580724, 0.554816450130132]
Run Code Online (Sandbox Code Playgroud)
它的倒置矩阵应该是
inv(AA)
ans =
Columns 1 through 3
-262796763616197 -656991909040516 4.90007819375216
-162417332048282 -406043330120712 14.6405748712708
0.718958226823704 7.87760147961979 30.4010295628018
162417332048287 406043330120730 46.1614842543337
262796763616208 656991909040536 55.9019809318537
Columns 4 through 5
-656991909040528 262796763616211
-406043330120721 162417332048287
-4.28281034550088 -0.718958226823794
406043330120704 -162417332048283
656991909040497 -262796763616196
Run Code Online (Sandbox Code Playgroud)
你能否在Swift中给我另一种矩阵求逆方法?或者解释一下如何解决这个问题?我真的不明白为什么它不起作用.
我正在研究R编程.
我正在尝试反转矩阵.以下是我的尝试.
x <- matrix(1:16, 4, 4)
x
# [,1] [,2] [,3] [,4]
# [1,] 1 5 9 13
# [2,] 2 6 10 14
# [3,] 3 7 11 15
# [4,] 4 8 12 16
solve(x)
# Error in solve.default(x) :
# Lapack routine dgesv: system is exactly singular: U[3,3] = 0
solve(x) %*% x
# Error in solve.default(x) :
# Lapack routine dgesv: system is exactly singular: U[3,3] = 0
x %*% solve(x)
# Error in solve.default(x) …Run Code Online (Sandbox Code Playgroud) 我想反转一个方形对称正定矩阵.我知道R中有两个功能solve(),chol2inv()但结果不同.我需要知道为什么会这样?
谢谢.
我比较了计算对称矩阵的逆的各种方法:
通过特征值比较逆矩阵:
R
library(MASS)
## Create the matrix
m = replicate(10, runif(n=10))
m[lower.tri(m)] = t(m)[lower.tri(m)]
## Inverse the matrix
inv1 = solve(m)
inv2 = solve(m, tol = .Machine$double.eps)
inv3 = qr.solve(m)
inv4 = ginv(m)
inv5 = chol2inv(m)
## Eigenvalues of the inverse
em1=eigen(inv1)
em2=eigen(inv2)
em3=eigen(inv3)
em4=eigen(inv4)
em5=eigen(inv5)
## Plot the abs of the eigenvalues (may be complex)
myPch=c( 20, 15, 17, 25, 3 )
plot(abs(em1$values),pch=myPch[1],cex=1.5)
points(abs(em2$values),pch=myPch[2], cex=1.5)
points(abs(em3$values),pch=myPch[3], cex=1.5) …Run Code Online (Sandbox Code Playgroud) 我在 R 和 Mathematica 中计算了矩阵(I - Q)(I是单位矩阵)的逆矩阵,但与理论结果相比,R 给出了错误的结果。我附上了 R 和 Mathematica 中的代码,你可以看到结果是不同的。
R中的代码:
> Q <- matrix(c(25/26, 1/26, 0, 0, 0, 0, 0, 0,
+ 24/26, 1/26, 1/26, 0, 0, 0, 0, 0,
+ 25/26, 0, 0, 1/26, 0, 0, 0, 0,
+ 24/26, 1/26, 0, 0, 1/26, 0, 0, 0,
+ 24/26, 0, 0, 1/26, 0, 1/26, 0, 0,
+ 24/26, 1/26, 0, 0, 0, 0, 1/26, 0,
+ 24/26, 1/26, 0, 0, 0, 0, …Run Code Online (Sandbox Code Playgroud)