Javascript中的可逆函数

时间:2013-12-02 21:23:22

标签: javascript function theory

我制作了很多等值区域的地图,我需要一个自定义函数来接受数据集中的值并返回相应的颜色。例如,以1到10,000对数分布的数据可能需要此功能:

var colors = ["#ffffcc","#c2e699","#78c679","#31a354","#006837"];
function val_to_index(val) {
    var index = Math.floor(Math.log(val) / Math.log(10));
    return colors[index];
}

同时,当我自动构建图例的文本时,我需要反向功能:

function index_to_val(index) {
    return Math.pow(10, index);
}
var legend_labels = [0,1,2,3,4].map(index_to_val);

当它像日志/指数一样简单时,编写这两个函数都没有问题。但是当它更复杂时,它变得非常乏味。例如:

    // divisions of 50,100,500,1000,5000,etc
function val_to_index(v) {
    var lg = Math.log(v) / Math.log(10);
    var remainder = lg % 1 > (Math.log(5) / Math.log(10)) ? 1 : 0;
    var index = return Math.floor(lg) * 2 - 3 + remainder;
    return colors[index];
}

function index_to_val(index) {
    index += 3;
    return Math.pow(10, Math.floor(index/2)) * Math.pow(5, index%2);
}

在中学代数中,我们学会了通过反转x和y变量并求解y来自动反转函数(当然,这只能用于某些函数)。我的问题是:计算机科学中有同等的操作吗?

1 个答案:

答案 0 :(得分:2)

自动查找函数的反函数需要某种计算机代数求解器(CAS)库。如果你总是做前进操作,首先,可能有一个更简单的方法;而不是丢弃原始数据,将原始值和计算结果一起包装在对象中。这样,计算逆仅需要检索包含原始值的字段。