Tag: 线性代数

使用CSparse库在C中表示稀疏矩阵

我无法理解如何使用CSparese库轻松表示C中的稀疏矩阵。 这就是我想要的 | 6.0 0.0 2.0 | A = | 3.0 8.0 0.0 | | 6.0 0.0 1.0 | with | 40.0 | b = | 50.0 | | 30.0 | csparse的cs Struct就是这个 typedef struct cs_sparse /* matrix in compressed-column or triplet form */ { csi nzmax ; /* maximum number of entries */ csi […]

代表逐步下流程序

我正在阅读关于渐进式下溢概念及其在音乐行业中的重要性如何逐渐溢出应用于音乐 我很清楚溢出缓冲区的问题,但我不知道如何表示下溢。 你能给我一个例子(一个最好用c或c ++的程序),就像计算机如何处理逐渐下溢一样?

马哈拉诺比斯距离反演协方差矩阵

我正在编写一个函数来获取两个向量之间的Mahalanobis距离。 我知道这是使用等式a’* C ^ -1 * b实现的,其中a和b是向量,C是协方差矩阵。 我的问题是,有没有一种有效的方法可以在不使用Gauss-Jordan消除的情况下找到矩阵的逆矩阵,还是没有办法解决这个问题? 我正在寻找一种方法来做到这一点,而不是任何预定义的function。 我知道C是一个Hermitian,正定矩阵,那么有什么方法可以算法利用这个事实呢? 或者是否有一些聪明的方法来计算Mahalanobis距离而不计算协方差的倒数? 任何帮助,将不胜感激。 ***编辑:上面的马哈拉诺比斯距离方程是不正确的。 它应该是x’* C ^ -1 * x,其中x =(ba),而b和a是我们试图找到的距离的两个向量(感谢LRPurser)。 因此,在所选答案中提出的解决方案如下: d = x’* b,其中b = C ^ -1 * x C * b = x,因此使用LU分解或LDL’因子分解来求解b。

行主要与列主要混淆

我一直在阅读很多关于此事的内容,我读的越多,我就越困惑。 我的理解:在行主要行连续存储在内存中,列主要列连续存储在内存中。 因此,如果我们有一系列数字[1, …, 9]并且我们想将它们存储在行主矩阵中,我们得到: |1, 2, 3| |4, 5, 6| |7, 8, 9| 而专栏(如果我错了,请纠正我)是: |1, 4, 7| |2, 5, 8| |3, 6, 9| 这实际上是前一个矩阵的转置。 我的困惑:嗯,我没有看到任何区别。 如果我们迭代两个矩阵(按第一个中的行和第二个中的列),我们将以相同的顺序覆盖相同的值: 1, 2, 3, …, 9 即使矩阵乘法是相同的,我们采用第一个连续元素并将它们与第二个矩arrays相乘。 所以说我们有矩阵M : |1, 0, 4| |5, 2, 7| |6, 0, 0| 如果我们将前一行主矩阵R乘以M ,即R x M我们将得到: |1*1 + 2*0 + 3*4, 1*5 + […]

C(非C ++)的有限域(伽罗瓦域)线性代数库

我正在为C搜索有限域/ galois域精确线性代数库(C ++是不可接受的,因为我需要能够编写一个Haskell绑定到它,而这对C ++来说显然很难 )。 我找到了类似FFLAS-FFPACK和Givaro的库,但这些是C ++ – 模板库:-( 特别是我希望能够将𝔽pn ×1和𝔽p1 ×m矩阵(向量)乘以𝔽pn ×m矩阵。 那么,有没有人知道C或“extern C”库是否合适? PS:这是关于同一事项的我的Haskell问题 。

在C中有效计算kronecker产品

我对C很陌生,对于我的大多数研究来说,没有太多需要比python更快的东西。 然而,事实certificate我最近所做的工作需要计算相当大的向量/矩阵,因此可能需要C + MPI解决方案。 从数学上讲,任务很简单。 我有很多维数〜40k的向量,并希望计算这些向量的选定对的Kronecker积,然后对这些kronecker积进行求和。 问题是,如何有效地做到这一点? 以下代码结构是否有任何问题,使用for循环或获得效果? 下面描述的函数vector_size传递长度为vector_size向量A和B ,并计算它们存储在C的kronecker乘积,即vector_size*vector_size矩阵。 void kron(int *A, int *B, int *C, int vector_size) { int i,j; for(i = 0; i < vector_size; i++) { for (j = 0; j < vector_size; j++) { C[i*vector_size+j] = A[i] * B[j]; } } return; } 这对我来说似乎很好,当然(如果我没有做出一些愚蠢的语法错误)产生正确的结果,但我有一种潜在的怀疑,即嵌入式循环不是最佳的。 如果我还有另一种方法,请告诉我。 建议欢迎。 我感谢你的耐心和任何建议。 再一次,我对C非常缺乏经验,但谷歌搜索给我带来了这个查询的一点乐趣。

线性代数的C库

请给我一些关于线性代数的高性能C库(矩阵代数,特征值,特征向量等)的技巧。 可以是开源的也可以是闭源的。