我需要通过矩阵乘法反演Ruby和向量中的方差 - 协方差矩阵.我应该使用哪个数值Ruby库/ Gem?
我试图使用boost c ++库计算一个行列式.我找到了我在下面复制的函数InvertMatrix()的代码.每次我计算这个逆,我也想要行列式.我很清楚如何通过将U矩阵的对角线与LU分解相乘来计算.有一个问题,我能够正确计算行列式,除了符号.根据旋转,我在一半时间内得到的标志不正确.有没有人建议如何每次都正确的标志?提前致谢.
template<class T>
bool InvertMatrix(const ublas::matrix<T>& input, ublas::matrix<T>& inverse)
{
using namespace boost::numeric::ublas;
typedef permutation_matrix<std::size_t> pmatrix;
// create a working copy of the input
matrix<T> A(input);
// create a permutation matrix for the LU-factorization
pmatrix pm(A.size1());
// perform LU-factorization
int res = lu_factorize(A,pm);
if( res != 0 ) return false;
Run Code Online (Sandbox Code Playgroud)
这是我在计算行列式时插入最佳镜头的地方.
T determinant = 1;
for(int i = 0; i < A.size1(); i++)
{
determinant *= A(i,i);
}
Run Code Online (Sandbox Code Playgroud)
结束我的部分代码.
// create identity matrix of "inverse"
inverse.assign(ublas::identity_matrix<T>(A.size1()));
// backsubstitute …Run Code Online (Sandbox Code Playgroud) 我正在使用基于ARM Cortex-A8的处理器,我有几个地方可以计算3x3矩阵逆运算.
由于Cortex-a8处理器有一个NEON SIMD处理器,我有兴趣将这个协处理器用于3x3矩阵逆,我看到了几个4x4实现(英特尔SSE和freevec),但没有我在哪里看到3x3矩阵逆运算执行使用SIMD说明.freevec使用的方法是将4x4矩阵拆分为4个2x2矩阵,然后对每个矩阵执行微操作,最后重新组合结果得到4x4矩阵的逆矩阵.我没有看到3x3矩阵这样的机会.
任何人都知道如何使用SIMD指令进行3x3矩阵求逆,这对我有用吗?
关心维克拉姆
我给了一个非常大的矩阵(我不能改变矩阵的值),我需要计算(协方差)矩阵的逆.
有时我得到错误说
Matrix is close to singular or badly scaled.
Results may be inaccurate
Run Code Online (Sandbox Code Playgroud)
在这些情况下,我看到det的值返回0.
在计算逆(协方差矩阵)之前,我想检查det的值并执行类似的操作
covarianceFea=cov(fea_class);
covdet=det(covarianceFea);
if(covdet ==0)
covdet=covdet+.00001;
%calculate the covariance using this new det
end
Run Code Online (Sandbox Code Playgroud)
有没有办法使用新的det然后用它来计算协方差矩阵的逆?
我正在尝试计算矩阵逆的行列式。矩阵的逆存在。但是,当我尝试计算逆的行列式时,它在Matlab中为我提供了Inf值。这背后的原因是什么?
我想找到矩阵的逆.
我知道这涉及到第一次LU分解然后是反转步骤但是我找不到所需的功能,通过搜索苹果的10.7文档!
这似乎是使用CBLAS/LAPACK在C中有用的后对称矩阵求逆,指出应该使用sgetrf_和sgetri_函数.但是在搜索这些术语时,我在Xcode文档中找不到任何内容.
有没有人有这种矩阵运算的锅炉板代码?
我在复杂矩阵的逆过程中遇到了麻烦.据我所知,复数矩阵只是一个双通道矩阵(CV_32FC2/CV_64FC2).
假设我有一个矩阵C:
Mat C(2, 2, CV_64FC2);
C.at<Vec2d>(0,0)[0] = 1;
C.at<Vec2d>(0,0)[1] = 1;
C.at<Vec2d>(0,1)[0] = 3;
C.at<Vec2d>(0,1)[1] = 4;
C.at<Vec2d>(1,0)[0] = 2;
C.at<Vec2d>(1,0)[1] = -1;
C.at<Vec2d>(1,1)[0] = 5;
C.at<Vec2d>(1,1)[1] = 2;
Mat InverseMat;
invert(C, InverseMat, DECOMP_SVD);
Run Code Online (Sandbox Code Playgroud)
执行反转功能后,我不断收到此错误:
OpenCV错误:断言失败(类型== CV_32F || type == CV_64F)
反转函数适用于灰度加载图像(1通道),但我很难对包含实部和虚部的复矩阵进行反演.
有人可以告诉我如何解决复杂矩阵的逆问题吗?最好使用DECOMP_SVD方法,因为当我尝试使用单通道图像时,使用DECOMP_LU或DECOMP_CHOLESKY方法无法获得所需的结果,可能是因为奇异矩阵的问题.谢谢.
我在谷歌搜索,我找不到使用GSL计算矩形矩阵的逆的函数.由于很难找到,当需要找到矩形矩阵的逆时,这里的答案将有助于其他人.如果使用GSL是不可能的,那么请建议一些易于使用的替代库,并提供矩形矩阵的逆矩阵.
我有一个大的矩阵A状的(n, n, 3, 3)与n约5000.现在我想找到矩阵的逆和转置A:
import numpy as np
A = np.random.rand(1000, 1000, 3, 3)
identity = np.identity(3, dtype=A.dtype)
Ainv = np.zeros_like(A)
Atrans = np.zeros_like(A)
for i in range(1000):
for j in range(1000):
Ainv[i, j] = np.linalg.solve(A[i, j], identity)
Atrans[i, j] = np.transpose(A[i, j])
Run Code Online (Sandbox Code Playgroud)
有没有更快,更有效的方法来做到这一点?
我需要以下对角线:
diag(X %*% solve(A) %*% t(X))
Run Code Online (Sandbox Code Playgroud)
其中A是满秩矩阵,X是矩形矩阵.这两个A和X稀疏.
我知道发现矩阵的逆是坏的,除非你真的需要它.但是,我无法看到如何重写公式,以便用两个参数solve(A)替换solve,这样线性系统就可以在没有显式反转的情况下得到解决.那可能吗?