Скачиваний:
36
Добавлен:
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