请问如何改善病态矩阵条件数(Xb=A)?
现遇到一线性方程组X*b=A!(其中b为8X8型的方阵,X和A 为1X8);显然X= A *inv(b) or X = A/B; 运行后,matlab总显示
Warning: Matrix is close to singular or badly scaled.
Results may be
inaccurate.
RCOND =
2.041979e-017
一般的线性方程组都是针对AX = b 即左除X=A\B.如何改良此运算,使得条件数降低,运算结果准确?谢谢!!!
[ 本帖最后由 ChaChing 于 2009-12-17 11:02 编辑 ] 彻底改进应该是在形成这个方程前把不独立方程去掉
回复 沙发 VibrationMaster 的帖子
什么是不独立方程?那啥,事情是这样的。X是一个传递函数X=A *inv(b) ,A和b的每一个元素均为空间频率和时间频率的函数。当时间频率固定,取一个空间频率,解一次X=A *inv(b) 。貌似没有所说的不独立方程。 楼主的版本为何?回复 地板 ChaChing 的帖子
更新了的matlab2008版。 AX = b ==》X=inv(A)*b看得有点混乱
回复 6楼 VibrationMaster 的帖子
问的是Xb=A,X=A *inv(b),如何改善改运算的条件数?:@L回复 7楼 yingzhangning 的帖子
检查b的行列式是否为0或非常接近于0。若是想办法削去不独立的行和相应的未知数回复 8楼 VibrationMaster 的帖子
det(b) = 6.2883e-035.,接近0了,所以不能直接求拟啊,所以可以往Xb=A两边同右乘以D,即令b’=bD, A‘=AD,则转换成x =A' *inv(b').若bD的行列式不接近0,则改善算法可以。就是不知道这个D该怎么取。以前成功处理过bx=A病态条件数的运算,两边同左乘以D,D为b(为方阵)的每一行绝对值最大的元素组成的对角阵。则病态明显改善。
现在这种情况,对同样的方阵b,和行向量A(为前述情况的转置)。取同样的D却不能改善其条件数。
Master说得有道理。所以只要新构造的系数矩阵b‘=bD其行列式不等于或不接近0,则求逆运算合理,条件数应该不会很高,可这种情况下这个D该如何选取呢
敢问怎么消去不独立的行和相应的未知数?可以举个例子吗。多谢
[ 本帖最后由 ChaChing 于 2009-12-17 01:37 编辑 ] ok,已经搞定:@) 。还是谢谢各位!
回复 10楼 yingzhangning 的帖子
建议与大家分享你的成果, 做个结束!回复 10楼 yingzhangning 的帖子
同LS建议一样,望楼主造福众生啊~~回复 10楼 yingzhangning 的帖子
不妨说出你解决的方法。人人为我,我为人人! 你是怎样解决改善病态矩阵条件数的?急需!!!! 回复 chenmanstein 的帖子
不好意思。我的方法是,
对Ax=B,
令
key = max(abs(A),[],2);Di = sparse(1:2*N,1:2*N,1./key);
A = Di*A; B = Di*B;
X = A\B
页:
[1]
2