【问题标题】:Dealing with Roundoff Error when writing RREF编写 RREF 时处理舍入错误
【发布时间】:2011-11-02 04:06:12
【问题描述】:

我正在尝试编写一个程序来解决给定矩阵时的简化行梯形形式。基本上我正在做的是编写一个解决方程组的程序。但是,由于有时我需要进行除法以产生重复的数字(例如 2/3,即 .66666 ...),并且 java 会舍入到某个数字,因此有时会出现枢轴应该是 0 (意味着没有枢轴)类似于 .0000001 并且它弄乱了我的整个程序。

我的第一个问题是,如果我有某种 if 语句,那么最好的写法是什么,比如“如果这个数字距离整数小于 0.00001,则四舍五入到最接近的整数”。

我的第二个问题是,是否有人对处理这种情况的更优化方法有任何想法,而不仅仅是将 if 语句四舍五入。

非常感谢。

【问题讨论】:

    标签: java matrix rounding linear-algebra


    【解决方案1】:

    您说您正在编写一个求解方程组的程序。这是一个相当复杂的问题。如果你只想使用这样的程序,你最好使用别人写的库。我会假设你真的想自己编写程序,为了娱乐和/或教育。

    您发现了主要问题:使用浮点数会导致四舍五入,从而导致结果不准确。有两种解决方案。

    第一个解决方案是不使用浮点数。仅使用整数并将矩阵简化为行梯形(不简化);这可以在没有分裂的情况下完成。由于所有整数计算都是精确的,因此应该为 0 的枢轴将恰好为 0(实际上,可能存在溢出问题)。当然,这仅在您开始的矩阵由整数组成时才有效。您可以通过使用分数而不是整数来推广这种方法。

    第二种解决方案是使用浮点数并且要非常小心。这是数学/计算机科学整个分支的主题,称为数值分析。这里的答案解释起来太复杂了,所以你必须买一本关于数值分析的书。简单来说,您要做的是说如果 Math.abs(pivot)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      相关资源
      最近更新 更多