matlab中的diff函数

时间:2013-03-17 14:25:36

标签: matlab

我知道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来计算拐点。

1 个答案:

答案 0 :(得分:0)

简而言之,这是因为浮点精度,在MATLAB中由eps,epsilon)给出。你得到的任何结果都是准确的,而不是更多。关于你的问题,你可以通过舍入所有元素或将几乎为零的元素归零来美化结果。例如,要将所有元素设置为小,然后将10ε设置为零:

y = diff(x, 2);
y(abs(y) < 10 * eps) = 0;

有关详细信息,请参阅重复问题的答案。