// データから回帰直線を求める. 2006/10/26 T.Ogawa 作成 // 回帰直線 y(i) = a x(i) + b // の係数a,bを求める. // n // EE = Sum(y - y(i))^2 // i = 1 // // n // = Sum(a*x(i)+b - y(i))^2 // i = 1 // よって EEの最小値を求めるために // d(EE)/da = 0 // d(EE)/db = 0 // を求めると, aa,bbは // // [ aa [ sum(x^2) sum(x) ^(-1) [ sum(xy) // bb ] = sum(x) n ] * sum(y) ] // // として求められる. // // 入力データ x = [1 3 5 7]; y = [3 9 25 52]; //係数aa,bbを求める. n = size(x,1); sum_x1y1 = 0; sum_y1 = 0; sum_x2 = 0; sum_x1 = 0; xone = ones(x); sum_x1 = xone'*x; sum_y1 = xone'*y; sum_x2 = x'*x; sum_x1y1 = x'*y; Coef_Matrix = inv([sum_x2 sum_x1;sum_x1 n])*[sum_x1y1;sum_y1]; aa = Coef_Matrix(1); bb = Coef_Matrix(2); // グラフ表示 plot(x,y,'O',x,aa*x+bb) f=get("current_figure"); a=f.children; // the handle on the Axes child a.data_bounds=[min(x)-abs(min(x))*0.1 max(x)+abs(max(x))*0.1 min(y)-abs(min(y))*0.1 max(y)+abs(max(y))*0.1]; // xaxis_left xaxis_right yaxis_down yaxis_up a.x_label.text = "x"; a.y_label.text = "y"; xgrid(2)