我试图找到两个数字之间的 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
)]
请问有人可以帮我解决这个问题吗?没有必要遵循我的上述任何尝试,只需解释我的尝试即可。
最佳答案
最好的方法是从最终值和起始值的对数差除以间隔开始。
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/