4Manuals

  • PDF Cloud HOME

多项式的卷积返回意外值 Download

    RSQLite:如何增加列数和参数数? 使用plotstyle =“ ggplot”时,为什么在qqcomp函数中没有显示任何点? 如何测量时间序列功耗模式的变化性? 具有不存在点的四分之一圈ggplot-s 使用奇怪的结构构建列表(?) 从R中的数据帧读取值 使用broom :: augment函数和面板数据 如何以月-年格式获取日期? 向R中的函数添加可选参数 ggsurvplot:如何使检查标记仅出现在生存线上方

我正在使用R 3.6.2(平台= x86_64-w64-mingw32)

在以下两个多项式系数向量的卷积中,我希望第一个条目正好是1.0,但是convolve函数却不同:

g <- c(1, -49, 1155, -17441, 189700, -1583071, 10545901, -57608692, 
263063351, -1018546561, 3380085631, -9693547553, 24176423345, 
-52691112850)
u <- c(1, -6, 11, -6)
convolve(g, rev(u), type = 'o')
# output
 [1]  1.000172e+00 -5.500020e+01  1.460000e+03 -2.491600e+04
 [5]  3.073450e+05 -2.920052e+06  2.223567e+07 -1.394361e+08
 [9]  7.342188e+08 -3.293898e+09  1.273071e+10 -4.275645e+10
[13]  1.256299e+11 -3.246592e+11  6.402486e+11 -7.246608e+11
[17]  3.161467e+11

请注意,结果中的第一个条目是1.000172,而不是1.0。

在Python 3.7.4中执行相同的卷积可提供预期的答案:

import numpy as np
g = [1, -49, 1155, -17441, 189700, -1583071, 10545901, -57608692, 263063351, -1018546561, 3380085631, -9693547553, 24176423345, -52691112850]
u = [1, -6, 11, -6]
np.convolve(g,u)
array([            1,           -55,          1460,        -24916,
              307345,      -2920052,      22235673,    -139436079,
           734218840,   -3293897685,   12730714010,  -42756453616,
        125629929970, -324659189789,  640248619213, -724660781420,
        316146677100], dtype=int64)

此外,当我使用Rcpp vignette中的convolveCpp示例时,我得到的结果与上述Python中的结果相同。

convolve或基础fft是否存在舍入或精度问题?

1 个答案:

答案 0 :(得分:1)

R convolve function实际上在计算中使用了FFT。 如果我使用FFT在MATLAB中复制实验,也会得到不精确的结果:

format long

g = [1, -49, 1155, -17441, 189700, -1583071, 10545901, -57608692, ...
263063351, -1018546561, 3380085631, -9693547553, 24176423345, -52691112850];
u = [1, -6, 11, -6];
r = ifft(fft([g,zeros(1,numel(u)-1)]) .* fft(up[u,zeros(1,numel(g)-1)]);

第一个值r(1)是0.999971277573529。该值比R中convolve的结果小一个数量级。如果R使用的是FFT的较小实现,则您看到的差异很可能完全是由于FFT中的数值不精确所致

请注意,如果我将输入转换为单精度浮点数,则r(1)变为4.6261e+04,这意味着此特定问题的确需要很高的精度,以避免灾难性错误。


Python的np.convolve与MATLAB的conv一样,在计算中不使用FFT,因此能够产生精确的结果。



Similar searches
    Samsung RB215ACBP Refrigerator User Manual Asp.Net MVC SignalR如何在通知客户端新消息时刷新span元素(不单击页面刷新按钮) 如何以月-年格式获取日期? 编辑Json对象并保存 如何删除总体金字塔中的负X轴标签?