/* square.c * 最小二乗法数値計算プログラム(1次式)  * written by Naoyuki Kajino (98/11/5) */ #include #include void main(void) { FILE *fp1,*fp2; double q,z,l; double a,z0; double e=1.60; double sumq=0,sumz=0,sumqz=0,sumq2=0; int i,n; fp1=fopen("square1.dat","r"); fp2=fopen("square2.dat","w"); printf("Program 開始!!\n"); printf("input n.: "); scanf("%d",&n); printf("データの読み込み中!! ( 振動数 q ; 阻止電圧 z )\n"); for (i=1;i<=n;i++){ fscanf(fp1,"%lf %lf\n",&q,&z); sumq=sumq+q; sumz=sumz+z; sumqz=sumqz+(q*z); sumq2=sumq2+(q*q); } fclose(fp1); printf("データの読み込み終了!!\n"); printf("プランク定数 h と 光電管の仕事関数 W の計算中!!\n"); l=sumq*sumq-n*sumq2; a=(sumq*sumz-n*sumqz)/l; z0=-(sumq*sumqz-sumz*sumq2)/l; printf("プランク定数 h と 光電管の仕事関数 W の計算終了!!\n"); fprintf(fp2,"#最小二乗法結果#\n"); fprintf(fp2,"line(x)=%10.7lf*x+%10.7lf\n",a,-z0); fprintf(fp2,"#h = %10.4lf *10^(-33) [Js] W = %10.4lf *10^(-19) [eV]\n",(a*e),(z0*e)); fclose(fp2); printf("Program 終了!!\n"); }