javascript - 求两个端点之间的n个对数间隔

标签 javascript

我试图找到两个数字之间的 n 个对数间隔。

例如:对于一个函数 logDiv(10, 10000, 3) 其中 10 是起点,10000 是终点,3 是间隔数,我想得到以下输出: (* {10, 100, 1000, 10000} *)

我尝试过的:

function logInterval(total_intervals, start, end) {
   var index, interval, result = [];
    for (index = 0; index < total_intervals; index++) {
      interval = (index/total_intervals * Math.log((end - start) + 1) - 1 + start);
        result.push(interval);
    }
    return result;
}
var intervals = logInterval(5, 1, 500);

https://jsfiddle.net/qxqxwo3z/

这是基于我对堆栈交换数学中找到的以下解决方案的(较差)理解:

logspace [increments_, start_, end_] := Module[{a}, (
   a = Range[0, increments];
   Exp[a/increments*Log[(end - start) + 1]] - 1 + start
)]

https://mathematica.stackexchange.com/questions/13226/how-can-i-get-exactly-5-logarithmic-divisions-of-an-interval

请问有人可以帮我解决这个问题吗?没有必要遵循我的上述任何尝试,只需解释我的尝试即可。

最佳答案

最好的方法是从最终值和起始值的对数差除以间隔开始。

x = (Math.log(end) - Math.log(start)) / total_intervals;

对于因子,需要做相反的操作

factor = Math.exp(x);

要获取数组,您可以将起始值乘以因子并将其插入数组中。下一个值是最后一个值乘以因子,直到生成所有项目。

function logInterval(total_intervals, start, end) {
    var x = (Math.log(end) - Math.log(start)) / total_intervals,
        factor = Math.exp(x),
        result = [start],
        i;

    for (i = 1; i < total_intervals; i++) {
        result.push(result[result.length - 1] * factor);
    }
    result.push(end);
    return result;
}

console.log(logInterval(3, 10, 10000));
console.log(logInterval(5, 1, 500));
console.log(logInterval(12, 220, 440)); // some frequencies

关于javascript - 求两个端点之间的n个对数间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38457053/

相关文章:

javascript - html 根据点击的内容不同的页面内容

javascript - 故障排除索引

JavaScript:意外的 token 错误

javascript - react -在主组件中添加子组件

JavaScript 循环引用问题?

javascript - 如何在 javascript 中使用自动递增 id?

javascript - pandas to_json 返回一个字符串而不是一个 json 对象

带有箭头键的 Javascript 导航不适用于 AJAX 加载的内容输入

javascript - Angular 服务不触发

javascript - Vue 测试 : shallowMount & localVue produce error on second run of identical test. 不是纯函数吗?