Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.50 KB | None | 0 0
  1. program lenka_integral;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils;
  7.  
  8. const EPS = 0.001;
  9. const A1 = 5.09;
  10. const B1 = 5.1;
  11. const A2 = 4.2;
  12. const B2 = 4.27;
  13. const A3 = 1.3;
  14. const B3 = 1.38;
  15. const P = 0.066666666667;
  16.  
  17. type Func = function(x : real) : real;
  18. {$F+}
  19. Function f1 (x : real): real;
  20. begin
  21.   f1 := 3 * (0.5 / (x + 1) + 1);
  22. end;
  23.  
  24. Function f2 (x : real): real;
  25. begin
  26.   f2 := 2.5 * x - 9.5;
  27. end;
  28.  
  29. Function f3 (x : real): real;
  30. begin
  31.   f3 := 5 / x;
  32. end;
  33.  
  34. Function d1 (x : real): real;
  35. begin
  36.   d1 := -1.5 / ((x + 1) * (x + 1)) ;
  37. end;
  38.  
  39. Function d2 (x : real): real;
  40. begin
  41.   d2 := 2.5;
  42. end;
  43.  
  44. Function d3 (x : real): real;
  45. begin
  46.   d3 := - 5 / (x * x);
  47. end;
  48. {$F-}
  49.  
  50. Procedure root(f, g, f1, g1 : Func; a, b, EPS: real; var x : real);
  51. var
  52. d, c : real;
  53. begin
  54. if (f((a + b) / 2) - g((a + b) / 2) - (f(a) - g(a) + f(b) - g(b)) / 2) * f(a)  < 0 then
  55.   begin
  56.     d := b;
  57.     c := d - (f(d) - g(d)) / (f1(d) - g1(d));
  58.     while ((f(c) - g(c)) * (f(c - EPS) - g(c - EPS)) > 0)  do
  59.     //while ((f(c) - g(c))) / ((f1(c) - g1(c))) > EPS do
  60.       begin
  61.       d := c;
  62.       c := d - (f(d) - g(d)) / (f1(d) - g1(d));
  63.       end;
  64.   end
  65. else
  66.   begin
  67.     d := a;
  68.     c := d - (f(d) - g(d)) / (f1(d) - g1(d));
  69.     while ((f(c) - g(c)) * (f(c + EPS) - g(c + EPS)) > 0)  do
  70.     //while (f(c) - g(c)) / (f1(c) - g1(c)) > EPS do
  71.       begin
  72.       d := c;
  73.       c := d - (f(d) - g(d)) / (f1(d) - g1(d));
  74.       end;
  75.   end;
  76. x := c;
  77. end;
  78.  
  79. Function simpson(f : Func; a, b : real; n : integer) : real;
  80. var
  81. i : integer;
  82. s, h, x : real;
  83. begin
  84. s := 0;
  85. h :=  (b - a) / n;
  86. for i := 0 to n do
  87.   begin
  88.     x := a + h * i;
  89.         if (i = 0) or (i = n) then
  90.             s := s + f(x)
  91.         else if (i mod 2 = 0) then
  92.             s := s + f(x) * 2
  93.         else
  94.             s := s + f(x) * 4;
  95.   end;
  96. simpson := s * h / 3;
  97. end;
  98.  
  99. Function abs(a : real) : real;
  100. begin
  101. abs := a;
  102. if (a < 0) then
  103.   abs := -a;
  104. end;
  105.  
  106. Function integral(f : Func; a, b : real) : real;
  107. var
  108. n : integer;
  109. i, i2 : real;
  110. begin
  111. n := 10;
  112. i := simpson(f, a, b, n);
  113. i2 := simpson(f, a, b, n * 2);
  114. while (p * (abs(i - i2)) > EPS) do
  115.   begin
  116.   i := i2;
  117.   i2 := simpson(f, a, b, n * 2);
  118.   n := n * 2;
  119.   end;
  120. integral := i2;
  121. end;
  122.  
  123. var
  124. x1, x2, x3, y1, y2, y3, y4 : real;
  125. begin
  126. root(f1, f2, d1, d2, A1, B1, EPS, x1);
  127. root(f2, f3, d2, d3, A2, B2, EPS, x2);
  128. root(f1, f3, d1, d3, A3, B3, EPS, x3);
  129.  
  130. y1 := integral(f1, x3, x2);
  131. y2 := integral(f3, x3, x2);
  132. y3 := integral(f1, x2, x1);
  133. y4 := integral(f2, x2, x1);
  134. writeln(y1 - y2 + y3 - y4 : 9 : 9);
  135. readln;
  136. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement