Advertisement
Guest User

Untitled

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