Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.28 KB | None | 0 0
  1. function f(x, y :double) :double;
  2. begin
  3.   f := 2*x*x + 3*x*y + y*y + 3*x + 2*y - 1;
  4. end;
  5.  
  6. procedure TForm1.Button1Click(Sender: TObject);
  7. var h, he :double;
  8.     x, y, y1, g :double;
  9.     k1, k2, k3, k4 :double;
  10.     fe : array[1..4] of double;
  11.     i :integer;
  12. begin
  13.   h := 0.000001;
  14.   x := 0;
  15.   y := -1;
  16.   y1 := -1;
  17.  
  18.   y := y1 + h*f(x, y) + 2*h;
  19.   y1 := y;
  20.   x += h;
  21.   Memo1.Lines.Add('Метод Эйлера: ');
  22.   while (x < 1-h) do
  23.   begin
  24.     y := y1 + h*f(x, y);
  25.     y1 := y;
  26.     if ((trunc(x*1E6) = 2E5) or (trunc(x*1E6) = 4E5) or
  27.         (trunc(x*1E6) = 6E5) or (trunc(x*1E6) = 8E5)) then
  28.     begin
  29.       Memo1.Lines.Add('x= '+FloatToStrF(x, ffFixed, 0, 8));
  30.       Memo1.Lines.Add('y='+FloatToStrF(y, ffFixed, 0, 8));
  31.     end;
  32.     x += h;
  33.   end;
  34.  
  35.   x := 0;
  36.   y := -1;
  37.   y1 := -1;
  38.   Memo2.Lines.Add('Метод Рунге-Кутты: ');
  39.   while (x < 1-h) do
  40.   begin
  41.     k1 := f(x, y1);
  42.     k2 := f(x+h/2, y1+(h/2)*k1);
  43.     k3 := f(x+h/2, y1+(h/2)*k2);
  44.     k4 := f(x+h, y1+h*k3);
  45.     y := y1 + (h/6)*(k1+2*k2+2*k3+k4);
  46.     y1 := y;
  47.     x += h;
  48.     if ((trunc(x*1E6) = 2E5) or (trunc(x*1E6) = 4E5) or
  49.         (trunc(x*1E6) = 6E5) or (trunc(x*1E6) = 8E5)) then
  50.     begin
  51.       Memo2.Lines.Add('x= '+FloatToStrF(x, ffFixed, 0, 8));
  52.       Memo2.Lines.Add('y='+FloatToStrF(y, ffFixed, 0, 8));
  53.     end;
  54.   end;
  55.  
  56.   x := 0;
  57.   y := -1;
  58.   y1 := -1;
  59.   i := 1;
  60.   he := -0.001;
  61.   while (x > -1+he) do
  62.   begin
  63.     k1 := f(x, y1);
  64.     k2 := f(x+he/2, y1+(h/2)*k1);
  65.     k3 := f(x+he/2, y1+(h/2)*k2);
  66.     k4 := f(x+he, y1+h*k3);
  67.     y := y1 + (h/6)*(k1+2*k2+2*k3+k4);
  68.     y1 := y;
  69.     if ((floor(abs(x)*1E6) = 2E5) or (floor(abs(x)*1E6) = 4E5) or
  70.         (floor(abs(x)*1E6) = 6E5) or (floor(abs(x)*1E6) = 8E5)) then
  71.     begin
  72.       fe[i] := y;
  73.       inc(i);
  74.     end;
  75.     x += he;
  76.   end;
  77.  
  78.   x := 0;
  79.   y := -1;
  80.   y1 := -1;
  81.  
  82.   Memo3.Lines.Add('Метод Адамса: ');
  83.   while (x < 1-h) do
  84.   begin
  85.     y := y1 + (h/24)*(55*fe[1] - 59*fe[2] + 37*fe[3] - 9*fe[4]);
  86.     y1 := y;
  87.     if ((trunc(x*1E6) = 2E5) or (trunc(x*1E6) = 4E5) or
  88.         (trunc(x*1E6) = 6E5) or (trunc(x*1E6) = 8E5)) then
  89.     begin
  90.       Memo3.Lines.Add('x= '+FloatToStrF(x, ffFixed, 0, 8));
  91.       Memo3.Lines.Add('y='+FloatToStrF(y, ffFixed, 0, 8));
  92.     end;
  93.     x += h;
  94.   end;
  95. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement