Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab filter Function是否使用所有数据信息_Matlab_Precision_Numerical Methods_Intel Mkl - Fatal编程技术网

matlab filter Function是否使用所有数据信息

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

请参阅下面的示例代码,了解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 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
,非零结果消失。

“在双精度范围内”。如果你用两种不同的方式计算某件事,你应该预期舍入误差会导致差异。只需更改加法的顺序就可以做到这一点。或者创建一个过滤器对象,在其中指定输入、输出和系数的字长