#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define DIV_NUM 120 // 積分範囲の分割数
#define PI 3.14159265
#define exp 2.7182818
// 積分対象関数
float function (float x)
{
float result;
result
= pow(2.0*PI
, -0.5) * pow(exp , -0.5*(x
*x
)) ; // 正規分布return result;
}
double sekibun(double X_MIN , double X_MAX);
int main(){
int i,k;
int N;
double wa;
double num;
int a_max;
int a_min;
int rangenum=10;
int f[100]={};
double e[100];
double z[100]={};
double p[100]={};
double range;
double E;
double s;
double s2;
double X;
int a[1000];
FILE *fpi;
if((fpi
=fopen("tesuu.txt","r"))==NULL
) {
}
num=0;
wa=0;
for (N = 0; N < 1000; N++){
k
=fscanf(fpi
,"%d",&a
[N
]); //ファイルデータの読み込み if(k != 1)
{
break;
}
num++;//全度数
wa += a[N];
//printf("a[%d]:%d\n",N,a[N]);
}
a_max=a[0];
a_min=a[0];
//最大値と最小値を求める
for(N=1;N<num;N++){
if(a_max<a[N])a_max=a[N];
if(a_min>a[N])a_min=a[N];
}
range = (a_max - a_min) /rangenum;//階級の範囲をきめる
//各階級にデータの度数を与える
for(N=0;N<num;N++){
if(a[N]<a_min + range)f[0]++;
if(a[N]>a_max - range)f[rangenum-1]++;
for(i=1; i<rangenum-1; i++){
if(a_min + range*i <a[N] && a[N]<a_min + range*(i+1)) f[i]++;
}
}
//平均Eと分散s2をもとめる
E=wa/num;
s2=0;
for(N=0;N<num;N++){
s2 += (E-a[N])*(E-a[N])/num;
}
//各階級の上限値を標準化する
for(i=0; i<rangenum; i++){
z[i]= ((a_min + range*(i+1)) - E )/s;
}
//各階級の期待比率pを求める
p[0]=0.5 - sekibun(z[0] , 0);//最下位階級の期待比率
p[rangenum-1]=0.5 - sekibun( 0 , z[rangenum-2]);//最上位階級の期待比率
for(i=1; i<rangenum-1; i++){
p[i]=sekibun(z[i] , z[i+1]);
}
//期待度数eを求める
for(i=0; i<rangenum; i++){
e[i] = num * p[i];
}
//X^2の実現値
X=0;
for(i=0; i<rangenum; i++){
X += (f[i]-e[i])*(f[i]-e[i])/e[i];
}
//for(i=0; i<rangenum; i++){
//printf("p[%d]=%f\n",i,p[i]);
//printf("e[%d]=%f\n",i,e[i]);
//}
return 0;
}
double sekibun(double X_MIN , double X_MAX)
{
double integral; // 積分結果
double h; // 積分範囲を n 個に分割したときの幅
double x, dA;
int i;
//printf ("積分範囲=[%f,%f] 分割数=%d\n", X_MIN, X_MAX, DIV_NUM);
// === Simpson 法による積分 (開始) ===
h = (X_MAX - X_MIN) / (2.0*DIV_NUM); // 分割幅
x = X_MIN; // 積分範囲の変数を初期化
integral = function(x); // 積分結果の変数の初期値
for (i=1; i<DIV_NUM; i++) {
dA = 4.0*function(x+h) + 2.0*function(x+2.0*h);
integral += dA; // Σ
x += 2.0*h;
}
integral += ( 4.0*function(x+h) + function(x+2.0*h) );
integral *= h/3.0;
// === Simpson 法による積分 (終了) ===
//printf ("積分結果= %lf\n", integral);
//printf ("解析的に求めた結果 (底辺 100,高さ 100 の直角三角形)=%lf\n",
//(X_MAX-X_MIN)*function(X_MAX)/2.0);
return integral;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNkZWZpbmUgRElWX05VTSAxMjAgLy8g56mN5YiG56+E5Zuy44Gu5YiG5Ymy5pWwCiNkZWZpbmUgUEkgMy4xNDE1OTI2NQojZGVmaW5lIGV4cCAyLjcxODI4MTgKCi8vIOepjeWIhuWvvuixoemWouaVsApmbG9hdCBmdW5jdGlvbiAoZmxvYXQgeCkgCnsKZmxvYXQgcmVzdWx0OwpyZXN1bHQgPSBwb3coMi4wKlBJICwgLTAuNSkgKiBwb3coZXhwICwgLTAuNSooeCp4KSkgOyAvLyDmraPopo/liIbluIMKcmV0dXJuIHJlc3VsdDsKfQoKZG91YmxlIHNla2lidW4oZG91YmxlIFhfTUlOICwgZG91YmxlIFhfTUFYKTsKCmludCBtYWluKCl7CiBpbnQgaSxrOwogaW50IE47CmRvdWJsZSB3YTsKZG91YmxlIG51bTsKaW50IGFfbWF4OwppbnQgYV9taW47CmludCByYW5nZW51bT0xMDsKaW50IGZbMTAwXT17fTsKZG91YmxlIGVbMTAwXTsKZG91YmxlIHpbMTAwXT17fTsKZG91YmxlIHBbMTAwXT17fTsKZG91YmxlIHJhbmdlOwpkb3VibGUgRTsKZG91YmxlIHM7CmRvdWJsZSBzMjsKZG91YmxlIFg7CiBpbnQgYVsxMDAwXTsKIEZJTEUgKmZwaTsKCgkgaWYoKGZwaT1mb3BlbigidGVzdXUudHh0IiwiciIpKT09TlVMTCkKCSB7CgkgZnByaW50ZihzdGRlcnIsIuODleOCoeOCpOODq+OCkumWi+OBkeOBvuOBm+OCk1xuIik7CgkgZXhpdCgxKTsKCSB9IApudW09MDsKd2E9MDsKCSBmb3IgKE4gPSAwOyBOIDwgMTAwMDsgTisrKXsKCSBrPWZzY2FuZihmcGksIiVkIiwmYVtOXSk7IC8v44OV44Kh44Kk44Or44OH44O844K/44Gu6Kqt44G/6L6844G/CgkJaWYoayAhPSAxKQoJCXsKCQlmY2xvc2UoZnBpKTsKCQkgYnJlYWs7CgkJIH0KCW51bSsrOy8v5YWo5bqm5pWwCgl3YSArPSBhW05dOwoJIC8vcHJpbnRmKCJhWyVkXTolZFxuIixOLGFbTl0pOwoJIH0KYV9tYXg9YVswXTsKYV9taW49YVswXTsKCi8v5pyA5aSn5YCk44Go5pyA5bCP5YCk44KS5rGC44KB44KLCglmb3IoTj0xO048bnVtO04rKyl7CmlmKGFfbWF4PGFbTl0pYV9tYXg9YVtOXTsKaWYoYV9taW4+YVtOXSlhX21pbj1hW05dOwp9CnJhbmdlID0gKGFfbWF4IC0gYV9taW4pIC9yYW5nZW51bTsvL+majue0muOBruevhOWbsuOCkuOBjeOCgeOCiwoKLy/lkITpmo7ntJrjgavjg4fjg7zjgr/jga7luqbmlbDjgpLkuI7jgYjjgosKCWZvcihOPTA7TjxudW07TisrKXsKCWlmKGFbTl08YV9taW4gKyByYW5nZSlmWzBdKys7CglpZihhW05dPmFfbWF4IC0gcmFuZ2UpZltyYW5nZW51bS0xXSsrOwoJCWZvcihpPTE7IGk8cmFuZ2VudW0tMTsgaSsrKXsKCQlpZihhX21pbiArIHJhbmdlKmkgPGFbTl0gJiYgIGFbTl08YV9taW4gKyByYW5nZSooaSsxKSkgZltpXSsrOwoJCX0KCX0KLy/lubPlnYdF44Go5YiG5pWjczLjgpLjgoLjgajjgoHjgosKRT13YS9udW07CnMyPTA7Cglmb3IoTj0wO048bnVtO04rKyl7CglzMiArPSAoRS1hW05dKSooRS1hW05dKS9udW07Cgl9CnMgPSBzcXJ0KHMyKTsKcHJpbnRmKCJFPSVmXG4iLEUpOwpwcmludGYoInMyPSVmXG4iLHMyKTsKcHJpbnRmKCJzPSVmXG4iLHMpOwoKLy/lkITpmo7ntJrjga7kuIrpmZDlgKTjgpLmqJnmupbljJbjgZnjgosKZm9yKGk9MDsgaTxyYW5nZW51bTsgaSsrKXsKeltpXT0gKChhX21pbiArIHJhbmdlKihpKzEpKSAtIEUgKS9zOwpwcmludGYoImZbJWRdPSVkXG4iLGksZltpXSk7Cn0KCgovL+WQhOmajue0muOBruacn+W+heavlOeOh3DjgpLmsYLjgoHjgosKcFswXT0wLjUgLSBzZWtpYnVuKHpbMF0gLCAwKTsvL+acgOS4i+S9jemajue0muOBruacn+W+heavlOeOhwpwW3JhbmdlbnVtLTFdPTAuNSAtIHNla2lidW4oIDAgLCB6W3JhbmdlbnVtLTJdKTsvL+acgOS4iuS9jemajue0muOBruacn+W+heavlOeOhwpmb3IoaT0xOyBpPHJhbmdlbnVtLTE7IGkrKyl7CnBbaV09c2VraWJ1bih6W2ldICwgeltpKzFdKTsKfQoKLy/mnJ/lvoXluqbmlbBl44KS5rGC44KB44KLCmZvcihpPTA7IGk8cmFuZ2VudW07IGkrKyl7CmVbaV0gPSBudW0gKiBwW2ldOwpwcmludGYoImVbJWRdPSVmXG4iLGksZVtpXSk7Cn0KCi8vWF4y44Gu5a6f54++5YCkClg9MDsKZm9yKGk9MDsgaTxyYW5nZW51bTsgaSsrKXsKWCArPSAoZltpXS1lW2ldKSooZltpXS1lW2ldKS9lW2ldOwp9CnByaW50Zigi5a6f54++5YCkWF4yPSVmXG4iLFgpOwoKLy9mb3IoaT0wOyBpPHJhbmdlbnVtOyBpKyspewovL3ByaW50ZigicFslZF09JWZcbiIsaSxwW2ldKTsKLy9wcmludGYoImVbJWRdPSVmXG4iLGksZVtpXSk7Ci8vfQoKZmNsb3NlKGZwaSk7CiByZXR1cm4gMDsKIH0KCmRvdWJsZSBzZWtpYnVuKGRvdWJsZSBYX01JTiAsIGRvdWJsZSBYX01BWCkKewpkb3VibGUgaW50ZWdyYWw7IC8vIOepjeWIhue1kOaenApkb3VibGUgaDsgLy8g56mN5YiG56+E5Zuy44KSIG4g5YCL44Gr5YiG5Ymy44GX44Gf44Go44GN44Gu5bmFCmRvdWJsZSB4LCBkQTsKaW50IGk7CgovL3ByaW50ZiAoIuepjeWIhuevhOWbsj1bJWYsJWZdIOWIhuWJsuaVsD0lZFxuIiwgWF9NSU4sIFhfTUFYLCBESVZfTlVNKTsKCi8vID09PSBTaW1wc29uIOazleOBq+OCiOOCi+epjeWIhiAo6ZaL5aeL77yJID09PQpoID0gKFhfTUFYIC0gWF9NSU4pIC8gKDIuMCpESVZfTlVNKTsgLy8g5YiG5Ymy5bmFCnggPSBYX01JTjsgLy8g56mN5YiG56+E5Zuy44Gu5aSJ5pWw44KS5Yid5pyf5YyWCmludGVncmFsID0gZnVuY3Rpb24oeCk7IC8vIOepjeWIhue1kOaenOOBruWkieaVsOOBruWIneacn+WApAoKZm9yIChpPTE7IGk8RElWX05VTTsgaSsrKSB7CmRBID0gNC4wKmZ1bmN0aW9uKHgraCkgKyAyLjAqZnVuY3Rpb24oeCsyLjAqaCk7CmludGVncmFsICs9IGRBOyAvLyDOowp4ICs9IDIuMCpoOwp9CgppbnRlZ3JhbCArPSAoIDQuMCpmdW5jdGlvbih4K2gpICsgZnVuY3Rpb24oeCsyLjAqaCkgKTsKaW50ZWdyYWwgKj0gaC8zLjA7IAovLyA9PT0gU2ltcHNvbiDms5XjgavjgojjgovnqY3liIYgKOe1guS6hu+8iSA9PT0KLy9wcmludGYgKCLnqY3liIbntZDmnpw9ICVsZlxuIiwgaW50ZWdyYWwpOwovL3ByaW50ZiAoIuino+aekOeahOOBq+axguOCgeOBn+e1kOaenCAo5bqV6L66IDEwMO+8jOmrmOOBlSAxMDAg44Gu55u06KeS5LiJ6KeS5b2iKT0lbGZcbiIsCi8vKFhfTUFYLVhfTUlOKSpmdW5jdGlvbihYX01BWCkvMi4wKTsKCnJldHVybiBpbnRlZ3JhbDsKfQo=