baidu_41568376 2020-07-24 10:28 采纳率: 0%
浏览 6028

MATLAB中多次循环出现SVD 的输入不能包含 NaN 或 Inf?

使用MATLAB计算四元数,原始数据为九轴传感器数据,使用pinv计算矩阵的逆,循环少次,能够计算出四元数,循环次数较多时就会出现SVD 的输入不能包含 NaN 或 Inf的错误;使用inv计算矩阵的逆时,循环少次能够计算出四元数的数值,多次时四元数显示为NaN,并且有警告矩阵接近奇异值,或者缩放错误。结果可能不准确。把数据放大也会出现这个问题,请问还有什么解决办法?请前辈指点!

  • 写回答

1条回答 默认 最新

  • i-Data 2020-07-24 18:15
    关注

    1、你的输入矩阵可能包含无穷大或不包含数字(NaN)。

    2、你可以在文件中设置一个断点,然后再次运行,当MATLAB达到断点时,查看输入矩阵值,应该有包含至少一个Inf,NaN或-Inf元素。

    SVD函数无法计算具有非限定元素的矩阵的奇异值分解。根据你的描述,并不一定是你的初始输入矩阵,更大的可能是后续的迭代过程中产生。在这种情况下,一旦确定输入矩阵包含一个非限定值,就设置一个错误断点,然后在创建Inf或NaN值后立即停止。这样就知道是在何处产生的非限定元素,后面就要你自己根据对算法的了解跟需要,去防止引入非限定性值。

    先行可以使用 any(any(isnan(你的矩阵))) 跟 any(any(isinf(你的矩阵))) 检查下,如果输出为1,那么你的输入矩阵(注意是迭代后SVD的输入矩阵)就确实是存在非限定元素。

    评论

报告相同问题?

悬赏问题

  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大
  • ¥15 使用spss做psm(倾向性评分匹配)遇到问题