为什么 MATLAB 以异常方式绘制余弦图?

Why MATLAB plots cosine in abnormal manner?

我在 MATLAB 中编写了下面的代码,根据正弦函数的导数绘制余弦函数,但输出图不是我期望的!

clear;
clc;
close all;
delta = 1e-15;
t = linspace(0, 20, 1000);
y_derived = (sin(t + delta) - sin(t)) / delta;
y_expected = cos(t);
hold on
plot(y_derived)
plot(y_expected)
legend('y_{derived}', 'y_{expected}')
grid on

输出图是这样的: 谁能帮我看看这是怎么回事?

MATLAB 会准确地绘制您告诉它绘制的内容。问题在于您计算导数的方式:您的有限差分商使用的 delta = 1e-15 非常接近 machine precision eps = 2.2e-16,这就是为什么会出现大量舍入误差的原因。实际上 staircase-ness 很好地显示了您正在使用的数字类型的离散性质。设置例如delta = 1e-6 看起来会好很多。