我知道diff
计算了discreete衍生物,或者说是矢量的连续成分之间的区别。
我没有定义变量
x=-4:1/10:4;
y=diff(diff(x));
为什么我得到1.e-15*
和一行非零的向量? Matlab是诚实的,通过显示某种方式,在计算x=-4:1/10:4;
它已经舍入了一些数字,虽然我只执行y=(diff(x));
,虽然它显示所有数字相同,但它有些如何显示它的核心不存储为相同的数量(因为它舍入-4 + 0.1或一些数量不是-3.9 ???)。现在,我如何获得标准输出?当它真的为零时,我怎么得到0,就像在这种情况下一样,当它实际上非零时,如果像1*e-...
那样可能是非零的呢?
注意如果不可能,当diff实际为零时,如何计算实际/实际diff(x,2)
或至少准确的符号和零?并获得cosine
等函数的真实discreete导数,而不是一些误导性的值?
我需要使用diff来计算拐点。
答案 0 :(得分:0)
简而言之,这是因为浮点精度,在MATLAB中由eps
(即,epsilon)给出。你得到的任何结果都是准确的,而不是更多。关于你的问题,你可以通过舍入所有元素或将几乎为零的元素归零来美化结果。例如,要将所有元素设置为小,然后将10ε设置为零:
y = diff(x, 2);
y(abs(y) < 10 * eps) = 0;
有关详细信息,请参阅重复问题的答案。