精度误差,两个数学上相同的表达式在零附近

问题描述 投票:3回答:1

当绘制非常接近于零的两个数学上等效的表达式时,我们得到两个相似的结果,但是其中一个曲线具有步骤而不是平滑。

1-cosh(x) == -2*sinh(x/2)^2

Zero sum

现在快速观察一下,步长的高度确实等于Matlab的精度,即变量eps = 2.2204e-16 = 2^-52

这个图表的名称是“零和”,显然没有引用零和游戏。但显然这只会在添加(或减法)非常接近零的结果时发生。

然而,据我所知,浮点数(或双精度)的计算精度相似,无论计算的规模如何。所以我希望错误只会在一些非常小的事情上进行操作时才会发生变化,在这种情况下,较小的数字会被四舍五入。

Matlab代码重现了这个:

x = linspace(-5*10^-8, 5*10^-8, 1001);
y1 = @(x) 1 - cosh(x);
y2 = @(x) -2*(sinh(x/2)).^2;

plot(x,y1(x),'k',x,y2(x),'r')
legend('1-cosh(x)', '-2sinh(x/2)^2')

谁能解释一下这个有用吗?

matlab precision
1个回答
2
投票

舍入发生在cosh函数中。如果您绘制它并以相同比例放大图形,您将看到相同的阶梯效果,但在y轴上以1为中心。

那是因为你不能使用双精度表示那些中间值。

© www.soinside.com 2019 - 2024. All rights reserved.