// gcc -g liner.cpp -o liner
// 体重変化を線形一次式の最小二乗法で求める
#include <stdio.h>
#include <stdlib.h>
int main()
{
double last_weight[14];
last_weight[0]=70.0; // 0日目
last_weight[1]=70.1;
last_weight[2]=70.2;
last_weight[3]=70.3;
last_weight[4]=70.4;
last_weight[5]=70.5;
last_weight[6]=70.6;
last_weight[7]=70.7;
last_weight[8]=70.8;
last_weight[9]=70.9;
last_weight[10]=71.0; // 10日目
last_weight[11]=71.1;
last_weight[12]=71.2;
last_weight[13]=71.3;
// 線形補完の傾き(a)と切片(b)を求める(14日分)
double k1=0,k2=0,k3=0,k4=0;
for (int i = 0; i < 14; i++ ){
k1 += (double)i * (double)i; // Σ(x^2)
k2 += (double)i * last_weight[i]; // Σ(xy)
k3 += (double)i; // Σ(x)
k4 += last_weight[i]; // Σ(y)
}
// 計算式 a = (nΣ(xy)-Σ(x)Σ(y)) / (nΣ(x^2)-(Σ(x))^2)
double a = (14.0 * k2 - k3 * k4) / (14.0 * k1 - k3*k3);
// 計算式 b = (Σ(xy)-Σ(x)Σ(y)) / (nΣ(x^2)-(Σ(x))^2)
double b = (k1 * k4 - k3 * k2) / (14.0 * k1 - k3*k3);
printf("a= %f b= %f \n",a,b);
}