fork(1) download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define nmax 100
  5. #define pi atan(1.0)*4.0
  6. #define xa 1.0 // 積分範囲_下限
  7. #define xb exp(2) // 積分範囲_上弦
  8. #define h 0.5 // 刻み幅
  9.  
  10. double f( double );
  11. double Sdai( int ni,double y[] );
  12.  
  13. int main(void)
  14. {
  15. double S,Sd,Err_d;
  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] = f(xt[i]);
  26. printf("%12.9f, %12.9f \n", xt[i], yt[i]);
  27. }
  28.  
  29. /** 面積の計算 **/
  30. S=6*(exp(2)-(1/4)*exp(4)+1/4); // 真値
  31. Sd=Sdai(ni,yt);
  32. Err_d=fabs(Sd-S);
  33.  
  34. /** 計算結果の出力 **/
  35. printf(" きざみ幅 真値 台形 \n");
  36. printf("%12.9f %12.9f %12.9f %12.9f \n",h,S,Sd,Err_d);
  37. }
  38.  
  39. /** 積分関数 **/
  40. double f(double xx)
  41. {
  42. return 6*xx*log(xx);
  43. }
  44.  
  45. /** 台形公式による積分 **/
  46. double Sdai(int ni,double y[])
  47. {
  48. double S;
  49. int l;
  50.  
  51. S=0.0;
  52. for(l=1; l<ni; l++) S+=2.0*y[l];
  53. S=(S+y[0]+y[ni])*h/2.0;
  54. return S;
  55. }
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
 1.000000000,  0.000000000 
 1.500000000,  3.649185973 
 2.000000000,  8.317766167 
 2.500000000, 13.744360978 
 3.000000000, 19.775021196 
 3.500000000, 26.308022338 
 4.000000000, 33.271064667 
 4.500000000, 40.610089713 
 5.000000000, 48.283137373 
 5.500000000, 56.256687044 
 6.000000000, 64.503340892 
 6.500000000, 73.000284899 
 7.000000000, 81.728226260 
  きざみ幅        真値         台形 
 0.500000000  44.334336594  214.291537185  169.957200592