Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program lenka_integral;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- const EPS = 0.001;
- const A1 = 5.09;
- const B1 = 5.1;
- const A2 = 4.2;
- const B2 = 4.27;
- const A3 = 1.3;
- const B3 = 1.38;
- const P = 0.066666666667;
- type Func = function(x : real) : real;
- {$F+}
- Function f1 (x : real): real;
- begin
- f1 := 3 * (0.5 / (x + 1) + 1);
- end;
- Function f2 (x : real): real;
- begin
- f2 := 2.5 * x - 9.5;
- end;
- Function f3 (x : real): real;
- begin
- f3 := 5 / x;
- end;
- Function d1 (x : real): real;
- begin
- d1 := -1.5 / ((x + 1) * (x + 1)) ;
- end;
- Function d2 (x : real): real;
- begin
- d2 := 2.5;
- end;
- Function d3 (x : real): real;
- begin
- d3 := - 5 / (x * x);
- end;
- {$F-}
- Procedure root(f, g, f1, g1 : Func; a, b, EPS: real; var x : real);
- var
- d, c : real;
- begin
- if (f((a + b) / 2) - g((a + b) / 2) - (f(a) - g(a) + f(b) - g(b)) / 2) * f(a) < 0 then
- begin
- d := b;
- c := d - (f(d) - g(d)) / (f1(d) - g1(d));
- while ((f(c) - g(c)) * (f(c - EPS) - g(c - EPS)) > 0) do
- //while ((f(c) - g(c))) / ((f1(c) - g1(c))) > EPS do
- begin
- d := c;
- c := d - (f(d) - g(d)) / (f1(d) - g1(d));
- end;
- end
- else
- begin
- d := a;
- c := d - (f(d) - g(d)) / (f1(d) - g1(d));
- while ((f(c) - g(c)) * (f(c + EPS) - g(c + EPS)) > 0) do
- //while (f(c) - g(c)) / (f1(c) - g1(c)) > EPS do
- begin
- d := c;
- c := d - (f(d) - g(d)) / (f1(d) - g1(d));
- end;
- end;
- x := c;
- end;
- Function simpson(f : Func; a, b : real; n : integer) : real;
- var
- i : integer;
- s, h, x : real;
- begin
- s := 0;
- h := (b - a) / n;
- for i := 0 to n do
- begin
- x := a + h * i;
- if (i = 0) or (i = n) then
- s := s + f(x)
- else if (i mod 2 = 0) then
- s := s + f(x) * 2
- else
- s := s + f(x) * 4;
- end;
- simpson := s * h / 3;
- end;
- Function abs(a : real) : real;
- begin
- abs := a;
- if (a < 0) then
- abs := -a;
- end;
- Function integral(f : Func; a, b : real) : real;
- var
- n : integer;
- i, i2 : real;
- begin
- n := 10;
- i := simpson(f, a, b, n);
- i2 := simpson(f, a, b, n * 2);
- while (p * (abs(i - i2)) > EPS) do
- begin
- i := i2;
- i2 := simpson(f, a, b, n * 2);
- n := n * 2;
- end;
- integral := i2;
- end;
- var
- x1, x2, x3, y1, y2, y3, y4 : real;
- begin
- root(f1, f2, d1, d2, A1, B1, EPS, x1);
- root(f2, f3, d2, d3, A2, B2, EPS, x2);
- root(f1, f3, d1, d3, A3, B3, EPS, x3);
- y1 := integral(f1, x3, x2);
- y2 := integral(f3, x3, x2);
- y3 := integral(f1, x2, x1);
- y4 := integral(f2, x2, x1);
- writeln(y1 - y2 + y3 - y4 : 9 : 9);
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement