问题标签 [matrix-decomposition]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
math - LDL 形式的 Cholesky 分解的时间复杂度
Cholesky 分解有两种不同的形式:
和 LDL 形式
其中 ctranspose 是复杂的转置。
我想知道每种形式的浮点运算数。维基百科引用了一篇论文Matrix Inversion Using Cholesky Decomposition说
当有效实施时,LDL 分解的复杂性与 Cholesky 分解相同(原文如此)。
论文称 Cholesky 分解需要n^3/6 + O(n^2)
运算。然而,维基百科说浮点运算的数量是n^3/3
,我自己的计算也得到了第一种形式。它基本上归结为三角形数的总和,即:
这就是我认为论文得到的地方n^3/6
。但是对于第一种形式,最里面的三重和中的项a[i][k]*a[j][k]
基本上是一个点积。总和是 2*n 浮点运算。所以浮动指针操作应该是n^3/3 + O(n^2)
. 如果您查看 LDL 表格,最里面的总和是a[i][k]*a[j][k]*d[k]
。那是 3*n 浮动指针操作(2 次乘法和 1 次加法)。所以浮点运算应该是n^3/2 + O(n^2)
.
换句话说,LDL 形式需要多 50% 的浮点运算。 我对么? 我认为这篇论文是错误的(尽管他们没有定义手术的含义)。这很重要,因为我正在实现基于 LDL 形式的改进形式的 Choleksy 分解,并且我想估计我的算法的效率。
也许这个问题更适合https://math.stackexchange.com/
opencv - OpenCV中矩阵的Cholesky分解
OpenCV 中是否有任何函数可用于在矩阵上应用 Cholesky 分解?
r - R:irlba 错误
我正在尝试使用 R 包分解方阵,irlba
但收到以下消息:
“V[, 1:(k + dim(F)[2])] <- cbind(V[, 1:(dim(Bsvd$v)[1]) 中的错误,drop = FALSE] %*% : number要替换的项目数不是替换长度的倍数"
然而,用svd
or分解矩阵。eigen
我在其他地方发现这篇文章暗示了同样的问题(没有回应)。
我将感谢任何可以帮助我解决这个问题的人!
代码:
c - PETSc - MatLUFactor - 不支持此对象类型的此操作
我正在尝试在 PETSc 中编写 LU 分解应用程序。我的想法是,程序将打印未分解的矩阵,然后是分解的矩阵并计算分解本身所花费的时间。
我根据我在互联网上找到的少量信息编写了我的代码(我使用这篇文章中的信息来初始化我的矩阵),但不幸的是,这还不够。我的代码可以编译,但是当我尝试运行它时,它只会喊出这个错误:
此错误是由MatLUFactor函数引起的,我想将其用于就地 LU 分解。问题是,我不知道我的代码到底有什么问题。我认为,中心问题可能出在矩阵变量本身,可能是因为分配不当(我想到了 MatMPIAIJSetPreallocation 函数),但我不确定。
我试图用MatLUFactorNumeric和MatLUFactorSymbolic替换 MatLUFactor 函数,但它比 MatLUFactor 更糟糕,它的错误“更大”:-)
最后,我尝试使用以下命令启动我的程序:
因此,如果您知道任何解决方案,我将不胜感激;-) 谢谢!
Ps:我一直在寻找可能的解决方案,到目前为止我找到的最接近的文章是这个 maillist,但是提问者使用 ParMETIS 和 SuperLU 包,据我所知,我不使用。
这是我的源代码:
这是我使用 MatLUFactorNumeric 和 MatLUFactorSymbolic 函数时的错误:
r - 更快的解决方案()
如果chol2inv(chol(matrix))
不适用于我的矩阵(不是正定方阵),R 中是否还有其他替代方法可以进行矩阵求逆(或避免求逆)。我试图在合理的时间内将大小为 10K x 10K 的矩阵反转为 15K x 15K。
java - 我可以在Java中的一个方法(LDL^T Factroization)中同时返回两种数组类型吗
我在java中编写了这种用于LDL^T分解的方法(它将对称对称矩阵“A”分解为3个矩阵,其中“L”是对角线为1的下三角矩阵,“D”是具有正项的对角矩阵和“L^T”是L)的转置矩阵。想知道是否可以在同一方法中返回 L 和 D 矩阵,如果不是,我该如何拆分此方法。遵循我教科书中的算法(Faires and Douglas 第 9 版第 417 页的数值分析),我的代码仍然有一些我必须弄清楚的逻辑缺陷。所以我的问题是/是我可以在同一方法中返回两种不同类型的数组吗( L[][] 和 D[] 在同一时间所以 D 只返回对角线元素作为一个数组和 L 返回整个矩阵)和/或如何拆分此方法。
c - C - 检测到堆栈粉碎
我需要对矩阵 A 实现一个非常简单的就地 LU 分解。我正在使用高斯消元法,我想用 3x3 矩阵对其进行测试。问题是,我不断收到stack smashing
错误,我不知道为什么。我在我的代码中没有看到任何问题,这可以做到这一点。你有什么主意吗?
问题可能出在分解块中。
matlab - LU分解
我在 Matlab 中进行了 LU 分解练习,我的教授强调了一些问题,但我不明白我应该纠正什么。
这是下三角矩阵:
这是下三角矩阵:
LU分解
我该如何解决这个问题?他说这不是一个正确的算法......提前谢谢!
python - 在 python 中结合使用 max、xrange 和 lambda 函数
我找到了一个为 LU 分解旋转方阵的代码,但我无法理解其中的一些。
首先,ID 的行不就是单位矩阵吗?这样做有什么好处吗?
其次,我无法真正理解行的行。我知道 lambda 用于在文本中定义一个函数,一旦提供了 i 的值(并且 j 的值取决于 for 循环),它就会简单地返回 M_ij 的值,但是 i 是什么?
xrange 和 range 不相似吗?但它在这里返回了什么?
当与函数 max 结合时,会发生什么?我只是不知道正在比较的 max 函数中的内容是什么。
对不起,如果这个问题听起来很愚蠢。我对编程很陌生
matlab - MATLAB LU 分解 部分旋转
我正在尝试使用我的 lu 分解,主要基于带有部分旋转 Matlab 的 LU 分解
它似乎适用于大多数矩阵(等于 matlab lu 函数),但是以下矩阵似乎会产生不同的结果:
我只是不知道出了什么问题。它似乎在链接帖子中提到的矩阵上工作正常