注意:这个问题与 Matlab 或任何其他环境没有严格的关系(尽管我希望你参考我的 Matlab 代码)。
我在这样产生的数组之间和n = 10000
中等间距的元素(在Matlab中):-pi
pi
n = 10000;
x = linspace(-pi, pi, n);
然后我创建第二个数组x_r
,它基本上包含x
四舍五入到小数点后第三位的元素:
x_r = chop(x, 3);
然后,我计算sin
所有元素的x
并调用结果数组y
。我对x_r
.
y = sin(x);
y_r = sin(x_r);
现在,我尝试将 的所有元素相加y
,然后将 的所有元素相加y_r
,即:
s = sum(y);
s_r = sum(y_r);
如果我尝试在点后打印s
并s_r
使用100
十进制数字,我会获得这些巨大的数字(可能第一个数字还没有完成):
s = -0.0000000000003170828901848210175171876477281318270923932134408573801920283585786819458007812500000000
s_r = -0.0000000000001331495677603378169351344695314764976501464843750000000000000000000000000000000000000000
现在,我想找到 和 的平均值y
,y_r
分别保存在m
和中m_r
:
m = mean(y);
m_r = mean(y_r);
如果我尝试使用 100 个十进制数字打印,我会得到另外两个巨大的数字m
:m_r
m = -0.0000000000000000317082890184820990794524483366356918770088064486473850012160369260527659207582473755
m_r = -0.0000000000000000133149567760337822432508902790402516613129923689416538035157344666004064492881298065
我的问题是(正如这个问题的标题所示)这两个操作中的哪一个对数字消除更健壮,sum
或者mean
操作?为什么?
我的猜测是,平均操作对数字消除的鲁棒性较差,因为它进行了更多计算,但我不确定,我不知道这是否是一个正确的解释。从结果中,我无法诚实地推断出任何有用的东西。