2011-03-30 130 views
3

我参与了类型为Ax = b的系统的解析,其中A是方形稀疏矩阵,x是unknows的向量(我必须计算它),b是对于最后一个元素是1的所有零的向量excpet。 矩阵A的最后一行用于标准化,因此用1来满足。Matlab - 稀疏矩阵系统分辨率

该系统的解决方案是概率,因此必须遵守条件0<x(i)<1

为了解决该系统,使用了Matlab命令x = A \ b;

该方法似乎工作得很好,但有一个特殊情况,向量x也包含负值。为矩阵A的任何元素添加一个非常小的值(10^-6),分辨率返回以满足条件。

我不是数学家,所以我不知道这是否是一个代码问题,或者如果矩阵A必须尊重一些属性,以保证解决方案都为0和1之间

+0

是负值,你会得到非常小? (x,0)/ sum(max(x,0))'得到的结果'x'(及其负值)满足'Ax = b'的准确程度如何?暴力和固定正常化)对“Ax = b”的更好或更糟的解决方案? – 2011-03-30 16:07:22

+0

对于它的价值,我猜测这不是代码中的错误,而是积累的数值错误的后果。解决大系统的方程总是容易出错。你可能会提高解决方案的准确性,但需要花费额外的计算量,通过说'x = A \ b; x = x - A \(A * x-b);'; (1)“Ax-b”较小的解决方案和/或(2)否定元素不存在或负值较小的解决方案? – 2011-03-30 16:10:43

+0

@Gareth感谢您的回复,负值大小为10^-3,所以不容忽视。我甚至尝试过你的解决方案,并且:(1)准确性降低,(2)负值仍然存在。 – Beppe 2011-03-31 08:44:40

回答