gpt4 book ai didi

algorithm - 消除矩阵的舍入误差

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:42:32 25 4
gpt4 key购买 nike

我的问题是我有一个矩阵,其中所有行的总和和所有列的总和为零。所有数字都四舍五入到 x 位小数。

然后我将整个矩阵乘以 0 到 1 之间的一个数字(例如 1/6)并将所有数字四舍五入到 x 位小数。现在我不能确定行和列的总和是否为零。我希望总和再次为零,并进行尽可能小的调整(或至少非常小的调整)

是否存在可以解决此类问题的算法?

例子(很简单):矩阵:

    200  -200  0

400 400 -800

-600 -200 800

round2( (1/6)*矩阵)

33.33  -33.33  0   

66.67 66.67 -133.33

-100 -33.33 133.33

最佳答案

这不是解决方案;只是对您要实现的目标进行更数学化的描述(不判断这是否是正确的做法):

由于您将所有数字四舍五入为 x 位小数,我们可以将这些数字视为整数(只需将它们乘以 10^x)。

现在,您正在尝试解决以下问题:

给定矩阵

A11+Adj11   A12+Adj12   ...   A1n+Adj1n
A21+Adj21 A22+Adj22 ... A2n+Adj2n
A31+Adj31 A32+Adj32 ... A3n+Adj3n
... ... ... ...
Am1+Adjm1 Am2+Adjm2 ... Amn+Adjmn

其中 A11..Amn 是常数整数,

查找整数 Adj11...Adjmn

最小化总和(abs(Adjxy))

(或者您可能更喜欢:最小化总和((Adjxy)^2)

服从于:

- for each row m: Adjm1+Adjm2+...+Adjmn = - (Am1+Am2+...+Amn)
- for each col n: Adj1n+Adj2n+...+Adjmn = - (A1n+A2n+...+Amn)

这是一个 integer programming问题,具有 m*n 个变量和 m+n 个约束。您试图最小化的函数不是线性的。

恐怕这个问题远非微不足道。我相信你最好把它贴在 https://math.stackexchange.com/

关于algorithm - 消除矩阵的舍入误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com