Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double MyFunc(double x)
  5. {
  6. return sin(x);
  7. }
  8. /*MyFunc .............*/
  9.  
  10. double Pr(double Xleft, double Xright, int k)
  11. /* метод прямоугольника*/
  12. {
  13. int i;
  14. double S,dx;
  15. dx = (Xright-Xleft)/k;
  16. S = 0;
  17. for(i = 0;i < k;i++)
  18. {
  19. S = S + dx*MyFunc(Xleft);
  20. Xleft = Xleft + dx;
  21. Xright = Xleft + dx;
  22. }
  23. return(S);
  24. }
  25.  
  26.  
  27. double Tr(double Xleft, double Xright,int k)
  28. /*метод трапеций*/
  29. {
  30. int i;
  31. double S, dx;
  32. dx = (Xright-Xleft)/k;
  33. S = (MyFunc(Xleft) + MyFunc(Xright))/2;
  34. for(i = 1;i < k;i++)
  35. {
  36. Xleft = Xleft + dx;
  37. S = S + MyFunc(Xleft);
  38. }
  39. S = S*dx;
  40. return(S);
  41. }
  42.  
  43.  
  44. double Sim( double Xleft, double Xright, int k)
  45. /*метод симпсона*/
  46. {
  47. int i;
  48. double S,dx;
  49. dx = (Xright- Xleft)/k;
  50. S = MyFunc(Xleft) + MyFunc(Xright);
  51. for(i = 1;i < k;i++)
  52. {
  53. if (i%2==0)
  54. {
  55. Xleft = Xleft + dx;
  56. S = S + 2*MyFunc(Xleft);
  57. }
  58. else
  59. {
  60. Xleft = Xleft + dx;
  61. S = S+ 4*MyFunc(Xleft);
  62. }
  63. }
  64. S = S*dx/3;
  65. return(S);
  66. }
  67.  
  68. int main()
  69. {
  70. double a, b, Eps, s1, s2, s3, s4, s5, s6;
  71. int i, Ncycles1, Ncycles2, Ncycles3;
  72.  
  73. a = 0.;
  74. b = M_PI/2;
  75.  
  76. printf("Eps\t Xpr\t\t Prm\t Xtr\t\t Trm\t Xsim\t\t Simm\n");
  77.  
  78. Eps = 0.1;
  79. for(i = 0;i < 4; i++)
  80. {
  81. Ncycles1 = 4;
  82. s1 = 0;
  83. s2 = Pr(a, b, Ncycles1);
  84. while(fabs(s1-s2)>Eps)
  85. {
  86. Ncycles1 = Ncycles1*2;
  87. s1 = s2;
  88. s2 = Pr(a, b, Ncycles1);
  89. }
  90.  
  91. Ncycles2 = 4;
  92. s3 = 0;
  93. s4 = Tr(a, b, Ncycles2);
  94. while(fabs(s3-s4)>Eps)
  95. {
  96. Ncycles2 = Ncycles2*2;
  97. s3 = s4;
  98. s4 = Tr(a, b, Ncycles2);
  99. }
  100.  
  101. Ncycles3 = 4;
  102. s5 = 0;
  103. s6 = Sim(a, b, Ncycles3);
  104. while(fabs(s5-s6)>Eps)
  105. {
  106. Ncycles3 = Ncycles3*2;
  107. s5 = s6;
  108. s6 = Sim(a, b, Ncycles3);
  109. }
  110.  
  111. printf("%6.4f\t %8.5f\t\t %4d\t %8.5f\t\t %4d\t %8.5f\t\t %4d\n",Eps, s2, Ncycles1, s4, Ncycles2, s6, Ncycles3);
  112. Eps = Eps*0.1;
  113. }
  114.  
  115. return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement