Я работал над получением уравнения коэффициента вариации, портированного с PHP на Javascript, но не могу заставить его работать.
Оригинальный скрипт PHP:
// define variables, strip spaces
$weights = $_POST['weights'];
// define coefficient of variation function
function cv($array){
$n = 0;
$mean = 0;
$M2 = 0;
foreach($array as $x){
if ($x != NULL AND $x != '') {
$n++;
$delta = $x - $mean;
$mean = $mean + $delta/$n;
$M2 = $M2 + $delta*($x - $mean);
$total = $total + $x;
}
}
return (((sqrt($M2/($n - 1))) / ($total/$n))*100);
}
$cv = (cv($weights));
Это в основном берет массив и вычисляет коэффициент вариации для него.Теперь, когда я пытаюсь преобразовать его в Javascript с помощью некоторой функции Jquery:
var fields = $('#cvform').serializeArray();
var count = 0;
var num = 0;
var mean = 0;
var m2 = 0;
var total = 0;
var delta = 0;
jQuery.each(fields, function(i, field){
if (field.value > 0) {
num++;
delta=(field.value-mean);
mean=(mean+delta/num);
m2=(m2+delta*(field.value-mean));
total=(total+field.value);
};
});
var cov=(((Math.sqrt(m2/(num-1)))/(total/num))*100);
$("<span>Coefficient of Variation: " + cov + "</span>").appendTo('#cvdisplay');
Хотя функция javascript выводит ответ, это не правильно.Если я введу значения «3,3,2,3,3,4», PHP-скрипт выдаст результат 21,08, что правильно.Функция javascript дает мне значение 0.0011418432035849642.
Может кто-нибудь указать мне, где уравнения отличаются?