首页 > 解决方案 > matlab过滤函数是否使用所有数据信息

问题描述

请参阅下面的示例代码,了解filterMatlab 中的函数用法。对于截断的输入,我希望得到精确的结果,直到截断点,但存在微小的差异,尽管它在双精度范围内。这是预期的行为吗?

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

标签: matlabprecisionnumerical-methodsintel-mkl

解决方案


人们应该期望截断输入的结果相同,问题中的非零差异并不理想,可以避免。问题是使用的 MKL 代码分支。检查 MKL 版本时,我得到:

Intel(R) Math Kernel Library Version 2018.0.3 Product Build 20180406 for Intel(R) 64 architecture applications, CNR branch AVX2

通过设置环境变量MKL_DEBUG_CPU_TYPE=4,CNR 分支切换到AVX,非零结果消失。


推荐阅读