【发布时间】:2011-03-30 15:57:29
【问题描述】:
我参与了Ax = b 类型系统的解析,其中 A 是一个稀疏方阵,x 是未知数的向量(我必须计算它),b 是一个全零向量最后一个元素是 1 除外。
矩阵 A 的最后一行用于归一化,所以用 1 来满足。
这个系统的解是概率,因此必须遵守条件0<x(i)<1。
为了解决系统问题,使用了Matlab命令x = A \ b;。
该方法似乎运行良好,但有一种特殊情况,即向量 x 也包含负值。给矩阵A的任意元素加上一个很小的值(10^-6),分辨率回到满足条件。
我不是数学家,所以不知道是不是代码问题,还是矩阵A必须尊重一些属性才能保证解都在0到1之间。
【问题讨论】:
-
你得到的负值是不是很小?
Ax=b对得到的x(具有负值)的满足程度如何?例如,max(x,0)/sum(max(x,0))(通过蛮力摆脱它们并修复标准化)是对@987654327 更好或更差的解决方案@? -
对于它的价值,我猜这不是您的代码中的错误,而是累积数字错误的结果。求解大型方程组总是会出现一些错误。您可以通过说
x = A\b; x = x - A\(A*x-b);来提高解决方案的准确性,但代价是进行额外的计算;这是否给了您(1)Ax-b较小的解决方案和/或(2)负面元素不存在或负面较少的解决方案? -
@Gareth 谢谢回复,负值是10^-3的顺序,不能忽略。我什至尝试了您的解决方案,并且:(1)准确性下降,(2)负值仍然存在。
-
真可惜。如果向量是(或密切相关)马尔可夫链的平衡概率,并且您有转移概率矩阵(大概类似于 A),那么您正在寻找 Bx=x(或 x=Bx)的解决方案,取决于您编写转换矩阵的方式)。如果你有一个近似解,并且如果马尔可夫链是不可约的和非周期性的,那么 Bx 将是一个比 x 更精确的解。 (你可能想要重新规范化它。)
-
@Gareth 所以你的建议是将计算方法从
Ax=b切换到x=Px,其中P是转移概率矩阵,x是状态概率向量。我说得对吗?
标签: matlab linear-algebra sparse-matrix markov-chains