作者YoursEver (beyond the time!)
看板MATLAB
标题Re: [问题] Warning: Matrix is singular to working
时间Thu May 17 08:20:37 2018
※ 引述《Ecampus ()》之铭言:
: Warning: Matrix is singular to working precision.
: > In matlab.internal.math.mpower.viaMtimes (line 35)
: 刚刚执行matlab时候
: 出现这行字
: 虽然有猜测意思 但不敢确定 求高手教我
照经验,所有condition number过大的状况都会跳出这一行.
condition number的定义是 "绝对值最大和最小的两个eigenvalue的商"
因此一般实务上,
除了恰好"因为缘分问题导致某个eigenvalue非常接近零"这样的原因之外,
其他,当要解影像的registration/warping的问题时,
也有可能会发生这样的状况,
例如,当你要把一大群点的座标丢进矩阵里面求两群点之间的transformation matrix时,
就可能会因为 (x, y, z) 座标的scale差异太大,
(x,y的范围可能是1~1024, z的范围可能只有1~10)
导致某个eigenvalue的数值大小出现问题.
上面说的姑且可以想成下面这样,
[1000 ] [ x1 x2 x3 ... ]
[ B ] = [ alpha ] * [ A ] = [ 1000 ] * [ y1 y2 y3 ... ]
[ 1] [ z1 z2 z3 ... ]
(3-by-k matrix)
所以 矩阵B 的condition number极有可能会出问题,
因为 矩阵B 的其中两个eigenvalue,相当於是对应到 矩阵A 的那两个 eigenvalue 的1000倍.
理论上来说,
所有用类似的方式收集而来的 矩阵B 都有可能发生你说的那个问题.
至於要怎麽解决?
就如同上面的式子说的,
最简单的工程解答就是把 矩阵[alpha] 给除掉,
也就是把有问题的 column或row vector给 scale down 就好.
话说有一本书叫做"matrix computation",
非常适合在晚上失眠的时候拿来翻一下,
对於帮助睡眠十分有用.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.96.100.130
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1526516440.A.6AF.html
1F:推 j0958322080: 是说matlab好像会先帮你判断,可是解出来就怪怪的 05/17 09:47
2F:→ j0958322080: 我之後自己写个 LU 分解跟 QR 分解跟他的不太一样 05/17 09:47
3F:→ j0958322080: 不过文末那本书确实不错,可以看看 05/17 09:48
4F:→ Ecampus: 感谢 我测试一下Q_Q 05/18 23:43