数値解析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
ざっとこんな感じ。