【问题标题】:Matlab - Sparse Matrix system resolutionMatlab - 稀疏矩阵系统分辨率
【发布时间】: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


【解决方案1】:

听起来你真正想要的是:最小化 ||Ax-b||对于所有 x,x > 0。你可以用函数 lsqlin 做到这一点:http://www.mathworks.com/help/toolbox/optim/ug/lsqlin.html

'must add to 1'是一个线性等式约束,positivity是一个线性不等式约束。

与矩阵(非正方形)中的概率相关的问题是:http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5717139

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2017-07-02
    • 2012-06-20
    • 2014-05-12
    • 2022-08-18
    • 2012-04-02
    相关资源
    最近更新 更多