javascript - 以各种比率使价值翻倍的功能
问题描述
我正在尝试制作一个折线图,例如美国各州和国家随时间推移的《纽约时报》冠状病毒死亡人数:每日追踪。
纽约时报在图表中有一些巧妙的线条显示了翻倍率,每天、每 2 天、每 3 天、每周等等。我想知道如何编写一个函数,该函数返回代表这些行的值数组,起始值为 10,maxX 值为 36(截至今天的总天数)。
这就是我现在所处的位置,恐怕它无法正确计算值,但它可能解释了我想要实现的目标。
我怎样才能以正确的方式做到这一点?我的数学太生疏了。
var maxX = 36;
var start = 10;
function double(factor) {
var f = start;
var arr = [f];
for (var i = 1; i < maxX; i++) {
f = f + (f / factor)
arr.push(f)
}
return arr
}
var lines = [1, 2, 3, 7, 30].map(f => {
return {
days: f,
arr: double(f)
}
})
console.log(lines)
解决方案
在给定倍率的情况下,您首先需要弄清楚将每个每日价值乘以什么。例如,对于每 2 天的翻倍率,您希望每天的计数乘以 1.412(2 的平方根);1 天后为 1.412 倍,2 天后为 2 倍,4 天后为 4 倍,以此类推。
对于通解,求解方程为:
orig * (dayFactor ** daysToDouble) = 2 * orig
其中orig
是原始感染数(此处为 10),并且dayFactor
是您要求解的值,因为这是每天应该乘以的感染数。
orig * (dayFactor ** daysToDouble) = 2 * orig
(dayFactor ** daysToDouble) = 2
dayFactor = 2 ** (1 / daysToDouble)
在函数中,确定dayFactor
给定的加倍率,然后将计数乘以每天:
var maxX = 36;
var start = 10;
function double (daysToDouble) {
const dayFactor = 2 ** (1 / daysToDouble);
let currentInfected = start;
const arr = [currentInfected];
for (var i = 1; i < maxX; i++){
currentInfected *= dayFactor;
arr.push(currentInfected);
}
return arr;
}
var lines = [1,2,3,7,30].map(f => {
return {days: f, arr: double(f)}
});
console.log(lines[2]); // double every 3rd day
推荐阅读
- oracle - 使用 Sqoop 从 Oracle 数据库导入数据到本地文件系统?
- python - 熊猫将数据框作为参数传递,但变量在函数内没有得到正确的值
- python - model_arima_fit.plot_predict 和 model_arima_fit.forecast 有什么区别?
- django - 在Django的函数中传递模型的图像属性
- ios - 如何从 iOS 共享扩展中获取源应用程序?提醒应用程序知道文本是从笔记应用程序共享的
- vb.net - 检索存在连续行值VB.Net
- python - Pycharm找不到python.exe
- python - 没有参数/可迭代的函数的多处理池?
- javascript - 来自 Object 的数组为空。Javascript 和反应
- wpf - 文本未在修改按钮中居中