matlab filter Function是否使用所有数据信息
请参阅下面的示例代码,了解Matlab中matlab filter Function是否使用所有数据信息,matlab,precision,numerical-methods,intel-mkl,Matlab,Precision,Numerical Methods,Intel Mkl,请参阅下面的示例代码,了解Matlab中过滤器函数的用法。对于截断的输入,我希望得到精确的结果,直到截断点,但是有微小的差异,尽管它在双精度范围内。这是预期的行为吗 X = randn(10000,1); b = ones(1, 500) / 500; Y = filter(b,1,X); Y1 = filter(b,1,X(1:end-1)); tmpdiff = Y(1:end-1)-Y1; sum(abs(tmpdiff)) % not equal to zero; in the orde
过滤器
函数的用法。对于截断的输入,我希望得到精确的结果,直到截断点,但是有微小的差异,尽管它在双精度范围内。这是预期的行为吗
X = randn(10000,1);
b = ones(1, 500) / 500;
Y = filter(b,1,X);
Y1 = filter(b,1,X(1:end-1));
tmpdiff = Y(1:end-1)-Y1;
sum(abs(tmpdiff)) % not equal to zero; in the order of 10^(-16)
plot(tmpdiff) % some spikes
对于截断输入,人们应该期望得到相同的结果,问题中的非零差异并不理想,可以避免。问题在于所使用的MKL代码分支。检查MKL版本时,我得到:
Intel(R) Math Kernel Library Version 2018.0.3 Product Build 20180406 for Intel(R) 64 architecture applications, CNR branch AVX2
通过设置环境变量
MKL\u DEBUG\u CPU\u TYPE=4
,CNR分支切换到AVX
,非零结果消失。“在双精度范围内”。如果你用两种不同的方式计算某件事,你应该预期舍入误差会导致差异。只需更改加法的顺序就可以做到这一点。或者创建一个过滤器对象,在其中指定输入、输出和系数的字长