问题标签 [qr-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.
javascript - 求矩阵变换的旋转和偏斜
我在 CSS 中有以下变换矩阵
我可以使用这个找到旋转...
同样对于偏斜如果...
然而,一旦我同时使用倾斜和旋转,一切都会变得很奇怪,尤其是因为旋转的公式与倾斜的公式相同......所以公式不可能是正确的。
我如何确定两个属性都已应用的旋转和倾斜,我只知道矩阵变换。
比例也弄乱了我的偏斜值,我认为它不应该。
c++ - c ++中的薄QR分解
是否有一个易于使用的 c++ 库用于矩形矩阵的“薄”QR 分解?
Eigen 似乎只支持完整的 Q 矩阵。我可以取一个完整的 Q 并丢弃一些列,但是不计算它们会更有效吗?
r - lm和biglm中的QR分解不同?
我正在尝试从 biglm 中使用的 QR 分解中恢复 R 矩阵。为此,我使用了 vcov.biglm 中的一部分代码并将其放入如下函数中:
更具体地说,我试图从基本包中获得与使用 qr.R 相同的结果,该包用于类“qr”的 QR 分解,例如 lm 类 (lm$qr) 中包含的那些。基本函数的代码如下:
除了符号之外,我设法为样本回归获得了相同的结果。
比较两者,很明显绝对值匹配,但符号不匹配。
我不太明白为什么会这样。我希望能够从 biglm 获得与 lm 相同的 R 矩阵结果。
matlab - 使用 Givens 旋转的 QR 分解算法
我在 MATLAB 中编写了一个 QR 分解算法,只是为了确保我的机制是正确的。这是主要功能的代码:
下面给出了子函数 GivensRotation:
我已经完成了研究,我很确定这是实现这种分解的最直接的方法之一,尤其是在 MATLAB 中。但是当我在矩阵 A 上测试它时,产生的 R 并不是应有的直角三角形。Q 是正交的,并且 Q*R = A,所以该算法在做一些正确的事情,但它并没有产生完全正确的分解。也许我只是盯着这个问题太久了,但是任何关于我忽略了什么的见解都会受到赞赏。
mathnet-numerics - Math.NET Numerics 中的 QR 分解
Math.NET Numerics 中如何实现 QR 分解?
是使用 Gram-Schimdt 还是使用 Givens 旋转?我感觉它是用 Gram-Schimdt 实现的,但我不确定。我找不到实现。
就结果而言,使用 Gram-Schimdt 的 QR 分解与使用 Givens 旋转的不同吗?
我使用Givens旋转矩阵生成(手动)QR分解,然后使用MathNet.Numerics.LinearAlgebra.Generic.Factorization.QRMethod
(我相信它实现了Gram-Schimdt)生成QR分解,结果略有不同。数字之间的差异大约为 1E-16(不是那么大),并且某些行具有相反的符号 (*-1)(这是真正的问题 - 我认为这是因为 MathNet.Numerics 实现了不同的 QR 算法)。
你能推荐一些使用 Givens 旋转执行 QR 分解的库吗?
opencv - OpenCV中的QR分解
OpenCV 提供 SVD 分解,但我在它的库中找不到一般的 QR 分解。有没有其他方法可以实现这一目标?
opencv - 从视频中的单应性中提取人脸旋转
我正在尝试确定视频中人脸的方向。
视频从脸部的正面图像开始,因此没有旋转。在以下帧中,头部旋转,我试图确定旋转,这将引导我根据相机位置确定面部方向。
我正在使用 OpenCV 和 C++ 来完成这项工作。我正在使用 SURF 描述符来查找脸上的点,我用这些点来计算两个图像之间的单应性。由于两帧彼此非常接近,因此在该间隔内头部旋转将最小,并且我的单应矩阵将接近单位矩阵。
这是我的单应矩阵:
其中 k1 和 k2 是使用 SURF 提取的关键点。
我正在使用decomposeProjectionMatrix来提取旋转矩阵,但现在我不确定如何解释 rotMatrix。这个也基本上是 (1 0 0; 0 1 0; 0 0 1) (其中 0 是从 e-10 到 e-16 范围内的数字)。
理论上,试图做的是找到每帧的旋转角度并将其存储在某个地方,这样如果我在每帧中得到 1° 的变化,在 10 帧之后我知道我的头已经改变了它的方向10°。
我花了一些时间阅读我能找到的关于 QR 分解、单应矩阵等的所有内容,但我无法解决这个问题。因此,任何帮助将不胜感激。
谢谢!
c - 如何在 C 和 CUDA 中通过改进的 Gram-Schmidt 方法进行 QR 分解
任何人都知道如何通过 C 和 CUDA 中修改的 Gram-Schmidt 方法进行 QR 分解。一些例子/来源/论文或其他?非常感谢。
编辑:我无法回答我的问题,因为有人已经关闭它,所以我决定更新我的问题。
当我用 cuda-memcheck 运行程序时,我得到了这个结果:
[mcrociara@tesla project_CUDA]$ cuda-memcheck ./qr_gpu -r 4 -c 4 ========= CUDA-MEMCHECK optarg: 4 optarg: 4 GPUassert: unspecified launch failure src/qr_gpu.cu 99 == =======大小为 4 的全局读取无效 ========= xTA 中的 0x000000c8 ========== 块 (0,0) 中的线程 (0,0,0) ,0)
========= 地址 0x3b5273104 超出范围
========= 大小为 4 的全局读取无效========== xTA 中的 0x000000c8 ========= 块 (0) 中的线程 (1,0,0) ,0,0)
========= 地址 0x3b5273108 超出范围
========= 大小为 4 的全局读取无效========== xTA 中的 0x000000c8 ========= 块 (0) 中的线程 (2,0,0) ,0,0)
========= 地址 0x3b527310c 超出范围
========= 错误摘要:3 个错误
有人可以帮助理解为什么?我在这个算法上实现了似乎工作正常的串行版本:
提前致谢!
matlab - MatLab中的QR分解
我有以下问题。
我的任务是为数据拟合多项式。我想使用 Gram-Schimdt 正交化过程来实现 QR 算法。它内置在这个函数中:
矩阵 Q,R 与在 MatLab 函数中实现的这些 Q,R 几乎相同。唯一的区别是符号。如果我用 MatLab 函数求解我的方程组 R*x=Q*y,我会得到精确解。但是如果我使用我自己的矩阵 Q 和 R,那么我会得到错误的结果。谁能告诉我我的方法的问题在哪里?我还附上了我的脚本代码。
你认为这么大的错误会是计算错误造成的吗?我真的很绝望,因为我似乎有两个相同的线性方程组并且解决方案不同。