Существует ли эффективный способ расчета средневзвешенного значения ряда процентных значений переменных в различных диапазонах? - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть четыре переменные, которые имеют разные диапазоны.Мне нужно рассчитать процентное положение каждой переменной в пределах указанного диапазона, а затем рассчитать средневзвешенное значение процентилей.Некоторые веса измеряются по возрастанию, а некоторые по убыванию.Восходящий означает, что процент диапазона выше, когда переменная увеличивается выше минимального значения, а убывающий означает, что процентное значение диапазона увеличивается, когда переменная уменьшается ниже максимального значения.

Я использую 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;
  }
}

Буду признателен за некоторые предложения по более эффективному достижению этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...