/**
* Slope 계산
* 계산식 = sum[(eachX-avrg(Xs))(eachY-avg(Ys))] / sum[(eachX-avg(Xs))(eachX-avg(Xs))]
*/
function getSlope(X, Y) {
if( !Array.isArray(X) || !Array.isArray(Y) ) {
return null;
}
// x 평균 구하기
var sumX = 0.0;
for( var i=0; i<X.length; i++) {
sumX += parseFloat(X[i]);
}
var avgX = sumX / X.length;
// y 평균 구하기
var sumY = 0.0;
for( var i=0; i<Y.length; i++) {
sumY += parseFloat(Y[i]);
}
var avgY = sumY / Y.length;
var numerator = 0.0;
for( var i=0; i<X.length; i++) {
numerator += ((X[i]-avgX)*(Y[i]-avgY));
}
var denominator = 0.0;
for( var i=0; i<Y.length; i++) {
denominator += ((X[i]-avgX)*(X[i]-avgX));
}
var slope = numerator / denominator;
return slope;
}
/**
* 절편 계산
* 계산식 = avrg(Xs)-avg(Ys)*slope
*/
function getIntercept(X, Y, slope) {
if( !Array.isArray(X) || !Array.isArray(Y) ) {
return null;
}
if( slope == undefined || slope == null || slope == "" ) {
slope = getSlope(X, Y);
}
if( !(isFloat(slope) || isInt(slope)) ) {
return null;
}
// x 평균 구하기
var sumX = 0.0;
for( var i=0; i<X.length; i++) {
sumX += parseFloat(X[i]);
}
var avgX = sumX / X.length;
// y 평균 구하기
var sumY = 0.0;
for( var i=0; i<Y.length; i++) {
sumY += parseFloat(Y[i]);
}
var avgY = sumY / Y.length;
var intercept = avgY-slope*avgX;
return intercept;
}
function isInt(n){
return Number(n) === n && n % 1 === 0;
}
function isFloat(n){
return Number(n) === n && n % 1 !== 0;
}
프로그래밍/자바스크립트