数値解析IIの課題その1

ひさびさにプログラミングの話題。
携帯から読んでいる方は、パケット代注意。


課題.in01.datに入っている数字をそれぞれx,yの配列に格納し、
   各平均、分散、共分散を求めよ。
  
・ソースファイルwork1.c

#include<stdio.h>

#define data_number 100

int main()
{
	int i;
	double sum_x=0,sum_y=0;
	double sum_valx=0,sum_valy=0;
	double sum_valxy=0;
	double heikin_x,heikin_y;
	double varius_x,varius_y;
	double varius_xy;
	double data_x[data_number],data_y[data_number];
	FILE *ifp,*ofp;

	if((ifp=fopen("in01.dat","r"))==NULL){
		printf(">>> read open error <<<\n");
		return (-1);
	}

	for(i=0;i<data_number;i++){
		fscanf(ifp,"%lf",&data_x[i]);
		fscanf(ifp,"%lf",&data_y[i]);
	}
	fclose(ifp);

	/* 平均、分散、共分散 を求める。*/
	
	/* xとyの平均を求める。 */
	for(i=0;i<data_number;i++){
		sum_x+=data_x[i];
		sum_y+=data_y[i];
	}
	heikin_x=sum_x/data_number;
	heikin_y=sum_y/data_number;

	/* xとyの分散を求める。*/
	for(i=0;i<data_number;i++){
		sum_valx+=(data_x[i]-heikin_x)*(data_x[i]-heikin_x);
		sum_valy+=(data_y[i]-heikin_y)*(data_y[i]-heikin_y);
	}
	varius_x=sum_valx/(data_number-1);
	varius_y=sum_valy/(data_number-1);
	
	/* 共分散を求める。*/
	for(i=0;i<data_number;i++){
		sum_valxy+=(data_x[i]-heikin_x)*(data_y[i]-heikin_y);
	}
	varius_xy=sum_valxy/(data_number-1);
	
	/* 各計測値を出力する。*/
	if((ofp=fopen("odata.txt","w"))==NULL){
		printf(">>> write open error <<<\n");
		return(-1);
	}
	fprintf(ofp,"xの平均は %6.2lf\n",heikin_x);
	fprintf(ofp,"xの分散は %6.2lf\n",varius_x);
	fprintf(ofp,"yの平均は %6.2lf\n",heikin_y);
	fprintf(ofp,"yの分散は %6.2lf\n",varius_y);
	fprintf(ofp,"xとyの共分散は %6.2lf\n",varius_xy);
	fclose(ofp);
}

・出力ファイルodata.txt

xの平均は   1.05
xの分散は   0.92
yの平均は  -0.94
yの分散は   0.93
xとyの共分散は  -0.09

  
ざっとこんな感じ。