有没有一种有效的方法来计算不同范围内一系列变量的百分比值的加权平均值?

时间:2019-04-07 14:33:12

标签: javascript function range

我有四个具有不同范围的变量。我需要计算每个变量在其指定范围内的百分比位置,然后计算百分位数的加权平均值。有些权重是递增的,有些则是递减的。上升表示范围百分比随着变量增加到最小值以上而增大,而下降表示范围百分比值随着变量减小到最大值以下而增大。

我正在使用ES5。

我有一些蛮力代码,但这可能不是最有效的解决方案?

其他信息:目标是计算一个单一数字,以分析四个变量的值。对于每个变量,都有与所测量情况相关的一系列值。此外,每个变量对最终输出的权重都不同。

function fCalcWtdAvg() {

//Four variables are the inputs: vVar1, vVar2, vVar3, vVar4
//For each variable, there is a relevant range and a weight
//For example, for vVar1, a value above 50 is relevant and a value at or above 100 is most significant, so 60 would be 20%, then weighted by vVar1Wt 

var vVar1Min = 50,  vVar1Max = 100, vVar1Wt = 0.1;                  
var vVar2Min = 0.3, vVar2Max = 0.5, vVar2Wt = 0.3;  //Note: descending      
var vVar3Min = 150, vVar3Max = 500, vVar3Wt = 0.5;                  
var vVar4Min = 0.8, vVar4Max = 2,   vVar4Wt = 0.2;  

//next calculate the percentage that the value of the variable is "in the range"

var vStress1 = fPercentRange(vVar1, vVar1Min, vVar1Max);
var vStress2 = fPercentRangeDec(vVar2, vVar2Min, vVar2Max);
var vStress3 = fPercentRange(vVar3, vVar3Min, vVar3Max);
var vStress4 = fPercentRange(vVar4, vVar4Min, vVar4Max);

return vWtdAve = (vStress1 * vVar1Wt) + (vStress1 * vVar1Wt) + (vStress1 * vVar1Wt) + (vStress1 * vVar1Wt);

}

function fPercentRange (vVal, vMin, vMax) {
// if a higher value is more significant

  if (vVal > vMin) {
    var vPercent = ((vVal - vMin) / (vMax - vMin)) * 100;
    return number = Math.min(parseInt(vPercent), 100);
  } else { 
    return 0;
  }
}

function fPercentRangeDec (vVal, vMin, vMax) {
//if a lower value is more significant 

    if (vVal < vMax) {
        var vPercent = ((vMax - vVal) / (vMax - vMin)) * 100;
    return number = Math.min(parseInt(vPercent), 100);
  } else { 
    return 0;
  }
}

将感谢一些有关更有效地实现此目标的建议。

0 个答案:

没有答案