SVD求解Ax=0

2024-05-27 13:20
文章标签 求解 ax svd

本文主要是介绍SVD求解Ax=0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源于计算机视觉life的LiDAR+视觉+IMU多传感器融合SLAM:原理推导+源码逐行详解+项目实战

SVD求解Ax=0

首先,我们需要了解四元数的基本概念。四元数是由三个虚部和一个实部组成的复数扩展,可以用来表示三维空间中的旋转。四元数的乘法规则如下:

q 1 ⊗ q 2 = [ q 1 ] L q 2 = [ q 2 ] R q 1 q_1 \otimes q_2 = [q_1]_L q_2 = [q_2]_R q_1 q1q2=[q1]Lq2=[q2]Rq1

其中,

  • [ q 1 ] L [q_1]_L [q1]L 是左乘矩阵:
    [ p w − p x − p y − p z p x p w − p z p y p y p z p w − p x p z − p y p x p w ] \begin{bmatrix}p_w & -p_x & -p_y & -p_z\\p_x & p_w & -p_z & p_y\\p_y & p_z & p_w & -p_x\\p_z & -p_y & p_x & p_w\end{bmatrix} pwpxpypzpxpwpzpypypzpwpxpzpypxpw
  • [ q 1 ] R [q_1]_R [q1]R 是右乘矩阵:
    [ q w − q x − q y − q z q x q w − q z q y q y q z q w − q x q z − q y q x q w ] \begin{bmatrix}q_w & -q_x & -q_y & -q_z\\q_x & q_w & -q_z & q_y\\q_y & q_z & q_w & -q_x\\q_z & -q_y & q_x & q_w\end{bmatrix} qwqxqyqzqxqwqzqyqyqzqwqxqzqyqxqw

化简一下,即:

  • [ q 1 ] L = q w I + [ 0 − q v → q v → [ q v → ] × ] [q_1]_L = q_w I + \begin{bmatrix}0 & -\overrightarrow{q_v}\\ \overrightarrow{q_v} & [\overrightarrow{q_v}]_{\times}\end{bmatrix} [q1]L=qwI+[0qv qv [qv ]×]
  • [ q 1 ] R = q w I + [ 0 − q v → q v → − [ q v → ] × ] [q_1]_R = q_w I + \begin{bmatrix}0 & -\overrightarrow{q_v}\\ \overrightarrow{q_v} & -[\overrightarrow{q_v}]_{\times}\end{bmatrix} [q1]R=qwI+[0qv qv [qv ]×]

其中,

  • [ a ] × ≜ [ 0 − a z a y a z 0 − a x − a y a x 0 ] [\mathbf{a}]_{\times} \triangleq \begin{bmatrix}0 & -a_z & a_y\\a_z & 0 & -a_x\\-a_y & a_x & 0\end{bmatrix} [a]× 0azayaz0axayax0

对于SVD求解Ax=0,举个例子,如lidar和IMU的外参标定,有以下关系

Q b h + 1 b k L q i l = Q l h + 1 l i R q l b Q^{b_k L}_{b_h+1} q^l_i = Q^{l_i R}_{l_{h+1}} q^b_l Qbh+1bkLqil=Qlh+1liRqlb

合并之后为:

( Q b h + 1 b k L − Q l h + 1 l i R ) q l b = 0 (Q^{b_k L}_{b_h+1} - Q^{l_i R}_{l_{h+1}}) q^b_l = 0 (Qbh+1bkLQlh+1liR)qlb=0

通常来说,我们会收集若干个IMU和lidar的相对旋转和平移,则可以联立如下:

[ Q b n − 1 b n L − Q l n − 1 l n R Q b n − 2 b n − 1 L − Q l n − 2 l n − 1 R ⋮ Q b 0 b 1 L − Q l 0 l 1 R ] q l b = A 4 n × 4 q l b = 0 (1) \begin{bmatrix} Q^{b_n L}_{b_{n-1}} - Q^{l_n R}_{l_{n-1}} \\ Q^{b_{n-1} L}_{b_{n-2}} - Q^{l_{n-1} R}_{l_{n-2}} \\ \vdots \\ Q^{b_1 L}_{b_0} - Q^{l_1 R}_{l_0} \end{bmatrix} q^b_l = A_{4n\times 4} q^b_l = 0 \tag{1} Qbn1bnLQln1lnRQbn2bn1LQln2ln1RQb0b1LQl0l1R qlb=A4n×4qlb=0(1)

相当于已知一个 4 n × 4 4n\times 4 4n×4的小矩阵,求出一个 4 × 1 4\times 1 4×1向量的最优解,通常 n > 4 n > 4 n>4,因此,这是一个基本的超定方程组求解问题,通常使用SVD方法求解。

即将A矩阵进行SVD分解,得

U D V T x = 0 UDV^T x = 0 UDVTx=0

这里U矩阵和V矩阵都是正交矩阵(类比旋转矩阵,不改变大小),D是奇异值由大到小的对角矩阵,因此等价求解

D V T x = 0 DV^T x = 0 DVTx=0

然后,我们令 V T x = y V^T x = y VTx=y,y仍然是一个四元数,所以 ∣ ∣ y ∣ ∣ = 1 ||y||=1 ∣∣y∣∣=1

当仅当 y = [ 0 , 0 , 0 , 1 ] T y=[0,0,0,1]^T y=[0,0,0,1]T时, D y Dy Dy取得最小值,则 x = V ∗ [ 0 , 0 , 0 , 1 ] T x=V*[0,0,0,1]^T x=V[0,0,0,1]T

此时对应的 x x x即为V矩阵中最小奇异值对应的列向量,然后将其转换成四元数即为所求的旋转。

这篇关于SVD求解Ax=0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007589

相关文章

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

2024 年高教社杯全国大学生数学建模竞赛题目——2024 年高教社杯全国大学生数学建模竞赛题目的求解

2024 年高教社杯全国大学生数学建模竞赛题目 (请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”) 2024 年高教社杯全国大学生数学建模竞赛题目 随着城市化进程的加快、机动车的快速普及, 以及人们活动范围的不断扩大,城市道 路交通拥堵问题日渐严重,即使在一些非中心城市,道路交通拥堵问题也成为影响地方经 济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。 考虑一个拥有知名景区

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩 目录 前言 一、特征值分解 二、应用特征值分解对图片进行压缩 三、矩阵的奇异值分解 四、应用奇异值分解对图片进行压缩 五、MATLAB仿真代码 前言         学习了特征值分解和奇异值分解相关知识,发现其可以用于图片压缩,但网上没有找到相应代码,本文在学习了之后编写出了图片压缩的代码,发现奇异值分

基于SA模拟退火算法的多车辆TSP问题求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述        基于SA模拟退火算法的多车辆TSP问题求解matlab仿真,三个车辆分别搜索其对应的最短路径,仿真后得到路线规划图和SA收敛曲线。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 (完整程序运行后无水印)

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

JD 1147:Jugs(一种用最少步骤求解的方法)

OJ题目:click here~~ 题目分析:九度上这道没有要求最少步数,只要得到最后结果即可AC , bfs , dfs都行。最少步骤的方法肯定也能AC啦,分析如下。 输入的三个数:a,b,n;> 由题不定方程ax+by=n必定有解> 如果b=n,则fill B即可,否则用试探法求出这样的两组解(a1,b1)及(a2,b2),其中a1 >0,b1<0;a1是满足方程的最小正整数;a2

【2024全国大学生数学建模竞赛】B题 模型建立与求解(含代码与论文)

目录 1问题重述1.1问题背景1.2研究意义1.3具体问题 2总体分析3模型假设4符号说明(等四问全部更新完再写)5模型的建立与求解5.1问题一模型的建立与求解5.1.1问题的具体分析5.1.2模型的准备 目前B题第一问的详细求解过程以及对应论文部分已经完成! - 晚上7-8点之前第二问完成 - 明天中文之前全部写完 按照提交论文的格式进行撰写!完整版请看文章最后!

《机器学习》 基于SVD的矩阵分解 推导、案例实现

目录 一、SVD奇异值分解 1、什么是SVD 2、SVD的应用         1)数据降维         2)推荐算法         3)自然语言处理 3、核心         1)什么是酉矩阵         2)什么是对角矩阵 4、分解过程 二、推导 1、如何求解这三个矩阵         1)已知:          2)根据酉矩阵的特点即可得出:

SVD降维

文章目录 一、SVD降维的基本原理二、SVD降维的步骤三、SVD降维的优点四、SVD降维的应用五、代码应用六、SVD降维的局限性 一、SVD降维的基本原理 SVD是线性代数中的一种技术,它将一个矩阵A分解为三个矩阵的乘积:A = UΣV^T。其中,U和V是正交矩阵,Σ是对角矩阵,对角线上的元素称为奇异值。这些奇异值表示了矩阵A在各个方向上的“重要性”或“能量”。 在降维过程中,

Java 快速求解x的x次幂结果为10

1.问题描述 如果x的x次幂结果为10(如图所示),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字。 可以使用牛顿迭代公式进行求解,因为是逼近算法可以大大减少运算次数 public static void main(String[] args) {int i = 0;double x1 = 2.5;while (true) {i++;//x^x - 10 = 0//这一步