首页 > 解决方案 > 我的方法不行?有什么问题

问题描述

下面的代码是我的“消除方法”,它是关于高斯算法的。我正在努力理解为什么我的消除方法不起作用。其他 2 个(表示旋转的 pivotisiere 和表示求解方法的 loese)工作得非常好。我整天都坐在这里试图对其进行编码,但没有找到解决方案,如果有任何帮助,我会很高兴。

该方法应该如何工作:矩阵对角线下方的数字需要转换为“0”,并且与 0(包括向量)在同一行中的其余数字也需要相应地转换。

标签: javaarraysalgorithmmatrixgauss

解决方案


如果我使用 LCM(最小公倍数)来计算因子,我得到的结果仍然是正确的(和整数!!!)但仍然与测试用例相差 2 倍:

lcm(26,6) = 78

78/6 = 13
78/26 = 3

然后我得到

13*16 - 3*46 = 70
13*186 - 3*386 = 1260

这与预期的解决方案完全相同,但相差 2 倍。根据测试用例的编写方式,这可能会通过或不会通过。

无论如何,我认为在这里使用整数数学并确保不会发生舍入很重要。


所以,我突然想到,如果您只使用 26*6 而不是 lcm,则可以考虑因子 2:

26*6 = 156

156/6 = 23 (obviously)
156/26 = 6 (obviously)

然后我得到

26*16 - 6*46 = 140
26*186 - 6*386 = 2520

所以换句话说,你只是被期望,而不是这样做:

matrix[i][j] -= faktor * matrix[position][j]; 

matrix[i][j] = matrix[i][j]*matrix[position][position] - matrix[i][position]*matrix[position][j];

您未通过测试用例,因为您盲目地使用浮点数学,而没有考虑必须使用整数的事实。


推荐阅读