ulvis.paste.net

Paste Search Dynamic
Recent pastes
func_y
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define nmax 100000
  5. #define pi atan(1.0)*4.0
  6. #define xa 0.0 // 積分範囲_下限
  7. #define xb 1.0 // 積分範囲_上弦
  8. #define h  0.25 // 刻み幅
  9.  
  10. double func_y( double );
  11. double Ssim( int ni,double y[] );
  12.  
  13. int main(void)
  14. {
  15.   double S,Ss,Err_s;
  16.   double xt[nmax],yt[nmax];
  17.   int i,j,l,ni;
  18.  
  19.   /** きざみ幅 **/
  20.   ni=(xb-xa)/h;
  21.  
  22.   /** 初期値の代入 **/
  23.   for(i=0; i<=ni; i++){
  24.     xt[i] = xa + i*h;
  25.     yt[i] = func_y(xt[i]);
  26.     /** printf("%12.9f, %12.9f \n", xt[i], yt[i]); **/
  27.   }
  28.  
  29.   /** 面積の計算 **/
  30.   S=0.63212; // 真値
  31.   Ss=Ssim(ni,yt);
  32.   Err_s=fabs(S-Ss);
  33.  
  34.   /** 計算結果の出力 **/
  35.   printf("  きざみ幅        真値         シンプソン    誤差  \n");
  36.   printf("%12.9f  %12.9f  %12.9f %12.9f  \n",h, S,Ss,Err_s);  
  37. }  
  38.  
  39. /** 被積分関数 **/
  40. double func_y(double xx)
  41. {
  42.   return -1*exp(-1*xx);
  43. }
  44.  
  45. /** シンプソンの公式による積分 **/
  46. double Ssim(int ni,double y[])
  47. {
  48.   double S,S1,S2;
  49.   int l;
  50.  
  51.   S1=S2=0.0;
  52.   for(l=1; l<=ni-1; l+=2) S1+=4.0*y[l];
  53.   for(l=2; l<=ni-2; l+=2) S2+=2.0*y[l];  
  54.   S=(y[0]+S1+S2+y[ni])*h/3.0;
  55.   return S;
  56. }
  57.  
Parsed in 0.011 seconds