먼저 masterdomon.tistory.com/5 를 참고하여 C#코드를 JAVA로 변형했다는 것을 알려드립니다.
JAVA로 구현한 trend 함수로 두 가지의 결과를 만들 수 있음
1. trend 함수를 이용해 예상값 찾기
2. 추세선 그래프 그리기
1. trend 함수를 이용해 예상값을 찾는 코드
function trend(arr, arr2, constVal) {
var numPoints = arr2.length;
var x1 = 0;
var y1 = 0;
var xy = 0;
var x2 = 0;
var J, M, B;
for (var i=0; i<numPoints; i++){
x1 = x1 + Number(arr[i]);
y1 = y1 + Number(arr2[i]);
xy = xy + Number(arr[i]) * Number(arr2[i]);
x2 = x2 + Number(arr[i]) * Number(arr[i]);
}
M = 0;
B = 0;
J = (numPoints * x2) - (x1 * x1);
if (J != 0){
M = ((numPoints * xy) - (x1 * y1)) / J;
B = ((y1 * x2) - (x1 * xy)) / J;
}
result = ((M * constVal) + B).toFixed(1);
return result;
}
trend(arr, arr2, constVal);
arr : x축에 해당하는 값 (배열)
arr2 : y축에 해당하는 값 & 구하고 싶은 값이 해당하는 필드 (배열)
constVal : 예상값(y)을 구하기 위한 상수(x)
result : 예상값(y)
2. 추세선 그래프 그리는 코드
function trend(arr, arr2) {
var numPoints = arr2.length;
var x1 = 0;
var y1 = 0;
var xy = 0;
var x2 = 0;
var J, M, B;
var result = [];
for (var i=0; i<numPoints; i++){
x1 = x1 + Number(arr[i]);
y1 = y1 + Number(arr2[i]);
xy = xy + Number(arr[i]) * Number(arr2[i]);
x2 = x2 + Number(arr[i]) * Number(arr[i]);
}
M = 0;
B = 0;
J = (numPoints * x2) - (x1 * x1);
if (J != 0){
M = ((numPoints * xy) - (x1 * y1)) / J;
B = ((y1 * x2) - (x1 * xy)) / J;
}
for(var i=0; i<arr.length; i++){
result.push( ((M * arr[i]) + B).toFixed(1) );
}
return result;
}
arr : x축에 해당하는 값 (배열)
arr2 : y축에 해당하는 값 & 구하고 싶은 값이 해당하는 필드 (배열)
result : 추세선 위의 x에 해당하는 y (배열)
y값들을 배열로 리턴해주기 때문에 arr에 들어간 x값과 짝을 지어 그래프를 만들어주면 됨