Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2009, 21:41   #1
Gonzo
Форумчанин
 
Аватар для Gonzo
 
Регистрация: 07.03.2009
Сообщений: 123
Сообщение Задача Коши дописать процедуру

Составить программу решения задачи Коши dy/dx=f(x,y), x_принадлежит_[a,b], y(a)=y0, шаг

h=0.05 экстраполяционным четырехшаговым методом Адамса. "Начальный отрезок" вычислить по

методу Рунге-Кутта. f(x)=y*ln(y)/x, a=1,b=2,y0=e.

Есть такие наработки, но начальный отрезок находится по Эйлеру. Никто не поможет теорией, а

лучше процедуркой?

Код:
USES CRT;
TYPE MAS=ARRAY[1..100] OF REAL;
VAR YI_:MAS;
    I_:byte;

FUNCTION FUNC(X,Y:REAL):REAL;
 BEGIN
  FUNC:=y*ln(y)/x;
 END;

FUNCTION EYLER(X,Y,H,EPS:REAL):REAL;
 VAR YK,Y0:REAL;
     DN:BOOLEAN;
 BEGIN
  DN:=FALSE;
  Y0:=Y+FUNC(X,Y)*H;
  REPEAT
   YK:=Y+FUNC(X,Y0)*H*0.5;
   IF ABS(YK-Y0)<EPS THEN
   DN:=TRUE;
   Y0:=YK;
  UNTIL DN;
  EYLER:=Y0;
 END;

PROCEDURE ADAMS(A,B,H,EPS,YN:REAL;VAR YI:MAS);
 VAR X0,Y0,Y:REAL;
     FF:TEXT;
     I,L:INTEGER;
     XI,DYI,YSH,QI,DQI,D2QI,D3QI:MAS;
 BEGIN
  TEXTMODE(259);
  FOR I:=1 TO 20 DO XI[I]:=0.0;
  DYI:=XI;
  Y0:=YN;
  YI:=XI;
  QI:=XI;
  DQI:=XI;
  D2QI:=XI;
  D3QI:=XI;
  YSH:=XI;
  X0:=A;
  XI[1]:=X0;
  YI[1]:=Y0;
  I:=1;
  YSH[1]:=FUNC(X0,Y0);
  QI[1]:=H*YSH[1];
  REPEAT
   Y:=EYLER(X0,Y0,H,EPS);
   INC(I);
   X0:=X0+H;
   Y0:=Y;
   XI[I]:=X0;
   YI[I]:=Y;
   YSH[I]:=FUNC(X0,Y0);
   QI[I]:=H*YSH[I];
   DQI[I-1]:=QI[I]-QI[I-1];
   IF I>2 THEN
   D2QI[I-2]:=DQI[I-1]-DQI[I-2];
   IF I>3 THEN
   D3QI[I-3]:=D2QI[I-2]-D2QI[I-3];
  UNTIL I>=4;
  REPEAT
   DYI[I]:=QI[I]+0.5*DQI[I-1]+5*D2QI[I-2]/12+3*D3QI[I-3]/8;
   INC(I);
   X0:=X0+H;
   XI[I]:=X0;
   YI[I]:=YI[I-1]+DYI[I-1];
   YSH[I]:=FUNC(XI[I],YI[I]);
   QI[I]:=H*YSH[I];
   DQI[I-1]:=QI[I]-QI[I-1];
   D2QI[I-2]:=DQI[I-1]-DQI[I-2];
   D3QI[I-3]:=D2QI[I-2]-D2QI[I-3];
   L:=I;
  UNTIL (xi[i]>b-h) or (I=100);
  writeln(' ----------------------');
  writeln('|  i | x[i] |    y[i]  |');
  writeln(' ----------------------');
  I:=0;
  WHILE I<L DO
   BEGIN
    I:=I+1;
    WRITELN('|',i:3,' | ',XI[I]:4:2,' | ',YI[I]:8:5,' |');
    IF I mod 48 = 0 then
     begin
      writeln;
      write('Press any key to CONTINUE... ');
      readkey;
      clrscr;
     end;
   END;
  writeln(' ----------------------');
END;

 begin
  clrscr;
  writeln;
  writeln('KOSHI/ADAMS/AILER');
  write('Press any key to CONTINUE... ');
  readkey;
  ADAMS(1,2,0.05,0.00001,exp(1),YI_);
  writeln;
  write('Press any key to EXIT... ');
  readkey;
 end.
За мной отзывы
Не говорите что мне делать, и я не скажу куда Вам идти.
Пишу программы на заказ на Delphi и Pascal
Форум разработчиков Pascal и Delphi
Gonzo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите дописать БД Лорд_Оледжан Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2009 22:14
дописать файл Klyan Общие вопросы C/C++ 4 14.05.2009 14:37
Дописать... Lemo Помощь студентам 14 14.10.2008 20:49
Задача на процедуру с числовым параметром. xxxPascalxxx Помощь студентам 1 20.12.2007 15:32
Задача на процедуру в Паскале Плюшечка Помощь студентам 1 08.11.2007 07:31