Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

милн (хуйзнат)

.pas
Скачиваний:
17
Добавлен:
09.12.2013
Размер:
2 Кб
Скачать
Program miln;
Uses crt;
type real=double;
const
  n=10;
  h=0.01;
function F(x, y: real): real;
begin
  F:= (-1*(2*x*y)/(y*y-3*x*x));
end;
Function ff(x: real): real;
begin
  ff:=(y*y*y-y*y);
end;
var
  i: integer;
  k: word;
  x: array[0..n] of real;
  y: array[0..n, 1..5]  of real; 
  yy: real;
  w, a1, a2, b1, b2: real;
begin
  clrscr;
  GOTOXY(20,2);

  WRITELN;
  y[0,1]:=ff(2); y[0,2]:=ff(2); y[0,3]:=ff(2); y[0, 4]:=ff(2);
  x[0]:=(2);
  for k:=1 to n do x[k]:=x[0]+h*k;
  {Метод Эйлера (простой)}
  for k:=0 to 2 do
    y[k+1, 1]:=y[k, 1]+h*F(x[k], y[k, 1]);
  {Метод Эйлера (модифиц)}
  for k:=0 to 2 do begin
    y[k+1, 2]:=y[k, 2]+h*F(x[k], y[k, 2]);
    y[k+1, 2]:=y[k, 2]+h/2*(f(x[k], y[k, 2])+f(x[k+1], y[k+1, 2]));
  end;
  { Метод Эйлера (уточнен)}
  for k:=0 to 2 do begin
    y[k+1, 3]:=y[k, 2]+h*F(x[k], y[k, 2]);
  {Уточняем}
    repeat
      yy:=y[k+1, 3];
      y[k+1, 3]:=y[k, 3]+h/2*(f(x[k], y[k, 3])+f(x[k+1], y[k+1, 3]));
    until y[k+1, 3]-yy<=0.000001
  end;
  {с наилучшей w}
  for k:=0 to 2 do begin
    w:=0.75;
    y[k+1, 4]:=y[k, 4]+h*((1-w)*f(x[k], y[k, 4])+w*f(x[k]+1/(2*w)*h, y[k, 4]+1/(2*w)*h*f(x[k], y[k, 4])));
 end;
  {точное решение}
  for k:=0 to n do
    y[k, 5]:=ff(x[k]);
  {Метод Милна (для всех столбиков)}
  for i:=1 to 4 do {четыре столбика}
    for k:=4 to n do begin
      {Предположительное значение:}
      y[k, i]:=y[k-4, i]+4*h/3*(2*f(x[k-3], y[k-3,  i]) -
                                  f(x[k-2], y[k-2,  i]) +
                                2*f(x[k-1], y[k-1,  i]));
      {Уточняем:}
      y[k, i]:=y[k-2, i] + h/3*(  f(x[k-2], y[k-2,  i]) +
                                4*f(x[k-1], y[k-1,  i]) +
                                  f(x[k],   y[k,  i]));
    end;
  WriteLn('N':3, '¦ ', 'Простой':12, '¦ ', 'Модифицир':12, '¦ ', 'Уточненный':12, '¦ ', 'С наилучшим':12, '¦ ','Точное':10);
  WriteLn(' ':3, '¦ ', 'Эйлер':12, '¦ ', 'Эйлер':12, '¦ ', 'Эйлер':12, '¦ ', 'w':12, '¦ ', 'значение':10);
  Writeln('===+=============+=============+=============+=============+===============');
  for i:=0 to n do begin
    WriteLn(i:3, '¦ ', y[i, 1]:12:7, '¦ ', y[i, 2]:12:7,  '¦ ', y[i, 3]:12:7, '¦ ',
            y[i, 4]:12:7, '¦ ', y[i, 5]:10:7);
        end;
 readln;
end.