VC++にて最小二乗法のプログラムを作成しています
処理を続けていくと
denominaterの計算に使う変数の値は正しく表示されているのですがdenominaterの値がおかしくなります。
denominaterの計算をコメントアウトしてる変数に分けて計算した場合はうまくいきます。
なぜでしょうか。
どうしてもわからないのでアドバイス頂きたく思います。
よろしくお願いいたします。
double sqxline = 0;
double linexsum = 0;
double lineysum = 0;
double linexysum = 0;
double denominater = 0;
double count_line = 0;
for(int j = 0; j <= 100; j ++){
count_line = count_line + 1; linexsum = linexsum + LSx[ j ]; lineysum = lineysum + LSy[ j ]; linexysum = linexysum + LSx[ j ] * LSy[ j ]; sqxline = sqxline + LSx[ j ] * LSx[ j ]; } double GGG = ( count_line * sqxline ); double RRR = ( linexsum * linexsum ); TRACE("GGG %f RRR %f\n",GGG,RRR); double FFF = GGG - RRR; denominater = count_line * sqxline - linexsum * linexsum ; //double a1 = ((count_line) * linexysum - linexsum * lineysum ); //double b1 = ( sqxline * lineysum - linexysum * linexsum ); //double LLL = a1/FFF; //double WWW = b1/FFF; TRACE("a1 %f b1 %f LLL %f WWW %f\n",a1,b1,LLL,WWW); a = ((count_line) * linexysum - linexsum * lineysum ) / denominater ; b = ( sqxline * lineysum - linexysum * linexsum ) / denominater; TRACE("%d番目 denominater %f 傾き a %f 切片 b %f\n",i ,denominater, a , b ); count_line = 0; linexsum = 0; lineysum = 0; linexysum = 0; sqxline = 0; }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。