Скачиваний:
33
Добавлен:
09.12.2013
Размер:
4 Кб
Скачать
{
y'=-y*(y+1/(x+1))
y(0)=1
y=1/((1+x)*(1+ln(abs(1+x))))
x[0;5]
}
program Lab3;{}
Uses crt;
Const a=1;
      b=5;
      h=0.25;
      Y0=0;
      n=round((b-a)/h);
      target=n;
Var y:array[0..n] of real;
    i:integer;
{n-�������. ��६.}
procedure Toch_func(var y:array of real;a,h:real);
var i:integer;
    x:real;
begin
  for i:=0 to n do
  begin
    x:=a+i*h;
    Y[i]:=-x*arctan(Ln(x));
  end;
end;
{�-� f(x,y)}
function F(x,y:real):real;
begin F:=y/x-1/cos(y/x);end;
{���⮩ ��⮤ �����}
procedure Eiler_prost(var y:array of real;a,h:real;n_:integer);
var xi:real;         {y-���ᨢ � ���஬ ������ y[0]}
    i:integer;       {n_-���-�� �㦭�� �祪(�����. y[0]}
begin
  for i:=0 to n_-2 do
  begin
  xi:=a+i*h;
  y[i+1]:=y[i]+h*F(xi,y[i]);
  end;
end;
{��ࠢ����� ��⮤ �����}
procedure Eiler_ispr(var y:array of real;a,h:real;n_:integer);
var xi,yi12:real;   {y-���ᨢ � ���஬ ������ y[0]}
    i:integer;      {n_-���-�� �㦭�� �祪(�����. y[0]}
begin
  for i:=0 to n_-2 do
  begin
  xi:=a+i*h;
  y[i+1]:=y[i]+h*(F(xi,y[i])+F(xi+h,y[i]+h*F(xi,y[i])))/2;
  end;
end;
{������஢���� ��⮤ �����}
procedure Eiler_mod(var y:array of real;a,h:real;n_:integer);
var xi,yi12:real;  {y-���ᨢ � ���஬ ������ y[0]}
    i:integer;     {n_-���-�� �㦭�� �祪(�����. y[0]}
begin
  for i:=0 to n_-2 do
  begin
  xi:=a+i*h;
  yi12:=y[i]+h*F(xi,y[i])/2;
  y[i+1]:=y[i]+h*F(xi+h/2,yi12);
  end;
end;
{��⮤ �㭣�-����}
procedure Runge_Kut(var y:array of real;a,h:real;n_:integer);
var i:integer;     {y-���ᨢ � ���஬ ������ y[0]}
    xi,k1,k2,k3,k4:real;{n_-���-�� �㦭�� �祪(�����. y[0]}
begin
  for i:=0 to n_-2 do
  begin
    xi:=a+i*h;
    k1:=F(xi,y[i]);
    k2:=F(xi+h/2,y[i]+k1*h/2);
    k3:=F(xi+h/2,y[i]+k2*h/2);
    k4:=F(xi+h,y[i]+k1*h);
    y[i+1]:=y[i]+h*(k1+2*k2+2*k3+k4)/6;
  end;
end;
{��⮤ �����}
procedure Miln(var y:array of real;a,h:real;n:integer);
var xi_2,xi_1,xi:real;{y-���ᨢ � ���஬ �����s y[0],y[1],y[2]}
    i:integer;        {n-���-�� �祪 � �⢥� ����� 1(�����. y[0],y[1],y[2].y[3]}
begin                 {a-��砫� �窠 x; h-蠣 �� x}
  for i:=3 to n-1 do
  begin
    xi_2:=a+(i-2)*h;
    xi_1:=xi_2+h;
    xi:=xi_1+h;
    {1-� �-��}
    y[i+1]:=y[i-3]+4*h*(2*F(xi_2,y[i-2])-F(xi_1,y[i-1])+2*F(xi,y[i]))/3;
    {����⠭���� y[i+1] �� 2-� �-��}
    y[i+1]:=y[i-1]+h*(F(xi+h,y[i+1])+4*F(xi,y[i])+F(xi_1,y[i-1]))/3;
  end;
end;
{�뢮� ���ᨢ� Y � ������� �⮫���
y,n-�������� ��६����}
procedure OutY(x_txt:integer);
var i:integer;
begin
  for i:=0 to n do
  begin
    if i<4 then textcolor(3) else textcolor(7);
    if (i<23)then begin
                    gotoxy(x_txt,i+2);
                    write('�',y[i]:10:3);
                  end;
    if i=target then begin
                       textcolor(2);
                       gotoxy(x_txt,25);
                       write('�',y[i]:10:3);
                     end;
  end;
end;
Begin
  y[0]:=Y0;
  clrscr;
  writeln('������ ����.������ ��ࠢ.������ �����.� �㭣�-����y=1/[(1+x)(1+ln|1+x|)]');
  {�����1}
  Eiler_prost(y,a,h,4);Miln(y,a,h,n);OutY(1);
  {�����2}
  Eiler_ispr(y,a,h,4);Miln(y,a,h,n);OutY(14);
  {�����3}
  Eiler_mod(y,a,h,4);Miln(y,a,h,n);OutY(28);
  {�㭣�-���}
  Runge_Kut(y,a,h,4);Miln(y,a,h,n);OutY(41);
  {���. �-�}
  Toch_func(y,a,h);OutY(53);
  textcolor(8);
  for i:=0 to n do
  begin
    if i<23 then begin
                   gotoxy(66,i+2);
                   write('�',i:2,'�',a+i*h:0:1);
                 end;
    if i=target then begin
                     textcolor(2);
                     gotoxy(66,25);
                     write('�',i:2,'�',a+i*h:0:1);
                     end;
  end;
  readkey;
End.
Соседние файлы в папке ЛАБА3