0

我知道diff计算离散导数,或者说向量的连续分量之间的差异。

不是我定义一个变量

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(x,2)当 diff 实际上为零时,我如何计算 real/actual 或至少准确的符号和零?并获得函数的真正离散导数,cosine而不是一些误导性的值?

我需要使用 diff 计算拐点。

4

1 回答 1

0

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

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

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

于 2013-03-17T14:46:46.380 回答