【发布时间】:2019-05-29 15:25:35
【问题描述】:
我很抱歉我的问题会变得冗长,因为我什至不知道如何开始编码。非常感谢伪代码答案,如果只是为了让我了解如何解决这个问题(然后我可以编写一些实际代码并在必要时回来寻求帮助)。
我的问题与其说是代码,不如说是理解我需要的逻辑(这可以说是编程中更难的部分)。
我的问题的非正式解释是想要更改矩阵 A(它恰好是稀疏的),以使行总和等于列总和。我可以通过向 A 添加一个矩阵 AS 来做到这一点,其中 S 是一个比例矩阵。
形式上,我想找到一个 S 矩阵,使得 (A + AS)ONESn = T 和 (t(A) + T(A)S)ONESn = T 其中 ONESn 是创建 T 的向量,行和向量。
向量 T 是一成不变的,它是当前列的总和,也是行总和的目标。
我认为我想要解决这个问题的方法是针对 i = j 的每一行 i 和列 j 我想找到行总和并计算它与目标的距离。然后我想更改该行的每个元素,使行总和等于目标(或者至少“足够接近”,我可以设置“足够接近”)。
但是,这取决于第 j 列的总和也必须等于目标的条件。
如何设计逻辑,以便我可以从第 1 列和第 1 行开始,找出第 1 行中的值,然后在第 1 列的第一个条目被“固定”的情况下找出第 1 列的值按前面的程序。
之后,第 2 行的第一个值应该由上述“固定”,同样,程序现在需要找出第 2 列的前两个条目的固定值。
以此类推,直到到达最后一列和最后一行
我尝试过对梯度下降进行编程,但一直坚持如何使列的梯度下降依赖于行的梯度下降迭代。
我也手工解决了这个问题(对于 2x2 矩阵),我可以找出答案,但我不确定我是如何做到的,这就是我努力编写代码的原因。
假设 A 是 [1, 2, 3, 4] 的 2x2 矩阵。行和是 [4, 6]。列总和为 [3, 7]。
1 3 | 4
2 4 | 6
___
3 7
如果我添加矩阵 S = [1, 0, -1, 0]
1 -1
0 0
我得到 A + S = [2, 2, 2, 4],其中行和为 [4, 6]。
2 2 | 4
2 4 | 6
___
4 6
预期结果是一个矩阵 (A + AS),使得行和等于列和。
或者说“不收敛”的错误信息
【问题讨论】:
-
在math.stackexchange.com 上提问可能会更好 - 一个优点是它支持数学标记,因此您可以更清楚地表达您想要的内容。
-
如果您包含您的手工计算示例会有所帮助。
-
你正在做(A + S),但要求(A + AS)。我不明白。我错过了什么吗?
-
矩阵 A 应该是方阵。 @Shree A+AS 如果 A 是可逆矩阵,则可以从 A+S' 获得。
-
预期结果可以是对角矩阵吗?这是行总和等于列总和的最简单方法...