import mean from "./mean.js";
/**
* 计算N次方偏差之和
* 当n=2时为平方偏差之和
* 当n=3时为立方偏差之和
*
* @param {Array<number>} x 数据数组
* @param {number} n 次方数
* @returns {number} N次方偏差之和
*
* @example
* var input = [1, 2, 3];
* // 由于数据集的方差是均方偏差,可以通过sumNthPowerDeviations计算:
* sumNthPowerDeviations(input, 2) / input.length;
*/
function sumNthPowerDeviations(x, n) {
const meanValue = mean(x);
let sum = 0;
let tempValue;
let i;
// 优化处理:当计算平方(n=2)时,
// 直接相乘比使用Math.pow方法更快
if (n === 2) {
for (i = 0; i < x.length; i++) {
tempValue = x[i] - meanValue;
sum += tempValue * tempValue;
}
} else {
for (i = 0; i < x.length; i++) {
sum += Math.pow(x[i] - meanValue, n);
}
}
return sum;
}
export default sumNthPowerDeviations;