使用MATLAB计算四元数,原始数据为九轴传感器数据,使用pinv计算矩阵的逆,循环少次,能够计算出四元数,循环次数较多时就会出现SVD 的输入不能包含 NaN 或 Inf的错误;使用inv计算矩阵的逆时,循环少次能够计算出四元数的数值,多次时四元数显示为NaN,并且有警告矩阵接近奇异值,或者缩放错误。结果可能不准确。把数据放大也会出现这个问题,请问还有什么解决办法?请前辈指点!
1、你的输入矩阵可能包含无穷大或不包含数字(NaN)。
2、你可以在文件中设置一个断点,然后再次运行,当MATLAB达到断点时,查看输入矩阵值,应该有包含至少一个Inf,NaN或-Inf元素。
SVD函数无法计算具有非限定元素的矩阵的奇异值分解。根据你的描述,并不一定是你的初始输入矩阵,更大的可能是后续的迭代过程中产生。在这种情况下,一旦确定输入矩阵包含一个非限定值,就设置一个错误断点,然后在创建Inf或NaN值后立即停止。这样就知道是在何处产生的非限定元素,后面就要你自己根据对算法的了解跟需要,去防止引入非限定性值。
先行可以使用 any(any(isnan(你的矩阵))) 跟 any(any(isinf(你的矩阵))) 检查下,如果输出为1,那么你的输入矩阵(注意是迭代后SVD的输入矩阵)就确实是存在非限定元素。