在JavaScript中插入“缺失年份”?

时间:2011-06-10 10:10:54

标签: javascript algorithm csv interpolation

之前:

id   year  value
SE   1950  67
SE   1960  71
SE   1965  82
NO   1975  65
NO   1985  75

后:

data : {
    SE : {
        data : {
             1950 : 67,
             1951 : 67.4,
             1952 : 67.8,
             [...]
             1965 : 82
        },
        min_year : 1950,
        max_year : 1965

    }    
    NO : {
        data : {
             [...]
        },
        [...]   
    }    
} 

基本上,基于JS中相邻值填充间隙/插值的最有效方法是什么?

2 个答案:

答案 0 :(得分:0)

如果你只是想要直线插值,那么给定n_0n_1作为你的指数知道值:

val[n] = val[n_0] + (n - n_0) * (val[n_1] - val[n_0]) / (n_1 - n_0);

例如,给定SE的数据,1960年的插值将为:

67.8 + (1960 - 1952) * (82 - 67.8) / (1965 - 1952)

即。关于76.5

答案 1 :(得分:0)

JS作为一种语言没有工具可以直接帮助你。

您可以非常轻松地实现线性或多项式插值。多项式(等级为3)可能会在中间提供稍微好一点的数字,尽管端点可能有问题 - 取决于数据。

线性插值更容易,但总的来说,我认为它不会像高阶多项式插值那样给出准确的估计。

替代方案可能是样条(立方体相对容易),这对于您的目的而言将足够准确。它可能是轻微的矫枉过正,虽然可能不是 - 不确定这个要求的范围。

您可能会考虑使用此服务器端,并将其中一个库用于实现这些插值函数的其他语言。这将为您提供一种非常准确和通用的方法来有效地解决问题,而无需自己实现。

很难说,因为准确程度,数据范围和项目范围都会影响你需要什么类型的插值,如果它可以在服务器/客户端完成等等。