数値解析II課題1改訂版
どうやら問題の意味を取り違えてると先生から指摘が
あったので改良した。その改良したソースファイルがこちら。
#include<stdio.h> int main(int argc, char *argv[]) { int i,data_number; double data_x[100],data_y[100]; double heikin_x,heikin_y; double varius_x,varius_y; double varius_xy; FILE *ifp,*ofp; /* 各種値の初期化 */ double sum_x=0,sum_y=0; double sum_valx=0,sum_valy=0; double sum_valxy=0; if(argc<3){ printf(">>> too few parameter <<<\n"); return (-1); } if((ifp=fopen(argv[2],"r"))==NULL){ printf(">>> read open error <<<\n"); return (-1); } /* 数値を読み出し、それをdata_numberとする。*/ sscanf(argv[1],"%d",&data_number); 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); }
・使い方
コマンドプロンプトを開いてソースファイルとデータファイルがある
ディレクトリまで移動する。そして、コマンド上に
work1 100 in01.datを入力する。
ここで100とはデータの数であり、in01.datはデータファイルである。
これを実行すると、データファイル内の平均、分散、共分散が求まる。