// 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);
}