楽しんだ者勝ち~就活を終えて伝えたいこと~

MENU

【C言語】統計的手法入門①

【スポンサーリンク】

 

はじめに

 ここでは、統計的手法の入門として、C言語で乱数を生成して、平均、偏差、分散、標準偏差、標準化までの方法を紹介します。

 

目的(求める結果)

 

  •  平均
  •  偏差
  •  分散
  •  標準偏差
  •  標準化

 

手順

 

  1.  乱数の生成
  2.  平均
  3.  偏差
  4.  分散
  5.  標準偏差
  6.  標準化
  7.  結果の出力

 1~7の順番で、プログラムを回します。乱数の生成には、srandを使用します。

 

 最初に、生成する数値は1~43の間で、srandを86回まわします。(86個の乱数を生成するということです。)

 次に、平均~標準化までを生成した乱数を元に求めます。

 最後は、printf、fprintfなどで出力します。(下記コード(抜粋)では、mainを省略して載せています。)

 

結果  

f:id:mottobungaku:20181126014005p:plain

 

f:id:mottobungaku:20181126014035p:plain

 

 上図の表は、結果を抜粋したものです。また、結果を視覚的にまとめたものが下図です。正規分布のようなもので表しました。

 

コード(抜粋)

/*****rand function*****/
void randnum1(com randout[]) {

  int i,rand_sum;
 double devi_sum;
/* initialization */ srand(time(NULL));  rand_sum = 0.0; /* 1 〜 43 random number */ for(i=0;i<count;i++){ randout[i].out = rand() % 43 + 1;    rand_sum += randout[i].out; } /* average */  randout[0].average = rand_sum/count; /* deviation & dispersion */  for(i=0;i<count;i++){ randout[i].deviation = randout[i].out - randout[0].average; devi_sum += pow(randout[i].deviation,2); }  randout[0].dispersion = devi_sum/count; /* standard deviation */  randout[0].sta_devi = sqrt(randout[0].dispersion); /*standardization*/  for(i=0;i<count;i++){ randout[i].stand = randout[i].deviation/randout[0].sta_devi; } }
 

 

最後に

 ここで紹介しているC言語を用いた統計的手法は、プログラミングが必修科目となったとき、初心者に向けて一つの指針になればと思い、載せています。コードを抜粋にしていますが、今後、GitHubかなんかに挙げようと思っています。