Описание типов и констант модуля FMM. Задачи линейной алгебры. Подпрограмма DECOMP. Подпрограмма SOLVE, страница 7

Результаты выполнения тестового примера

Иллюстрирующая программа для QUANC8

Будем интегрировать sin(k * x) / x

Введите, пожалуйста, пределы интегрирования:

Нижний, a:= 0

Верхний, b:= 2

K    Result     Errest     flag    Nofun

1  1.6054129768  1.8207674968E-12  0.00     33

11  1.6160837385  1.2829307175E-08  0.00     65

21  1.5808268837  1.0873235672E-08  0.00    129

31  1.5601310942  3.5187105248E-07  0.00    145

41  1.5591719919  1.2986614938E-07  0.00    225

51  1.5697048862  1.2898262675E-07  0.00    257

61  1.5778664925  3.4919497963E-07  0.00    289

71  1.5765217847  4.5026639761E-07  0.00    369

81  1.5695583003  2.3464019062E-07  0.00    449

91  1.5654319504  3.8398458905E-08  0.00    513

101  1.9919846201  8.7645142437E-08  0.00    273

ГЛАВА 5. Задача Коши для обыкновенных дифференциальных уравнений

Любое обыкновенное дифференциальное уравнение порядка , которое можно записать так, что его левая часть есть производная наивысшего порядка, а в правой части эта производная не встречается, может быть записано и в виде системы из  уравнений первого порядка путем введения  новой переменной.

Таким образом общая постановка задачи Коши может быть дана как

,

, где

 – вектор неизвестных функций, а  начальные условия в точке .

Численное решение задачи Коши выполняют с использованием процедуры RKF45.

§ 6. Подпрограмма RKF45

Объявление

Рrocedure rkf45( F: рointer;

neqn: integer;

var Y: floatvector;

var t, tout: float;

var relerr, abserr: float;

var iflag: integer;

var work: rvecn;

var iwork: ivec5 );

Назначение

RKF45 предназначена, главным образом, для решения нежестких и слабо жестких дифференциальных уравнений, когда вычисление производных не слишком дорогостоящее. RKF45 не следует использовать если пользователю требуется высокая точность.

Подпрограмма RKF45 интегрирует систему из nеqn обыкновенных дифференциальных уравнений первого порядка следующего вида:

, где  заданы в t.

Обычно подпрограмму применяют для интегрирования от t до tout, однако ее можно использовать и как одношаговый интегратор, чтобы продолжить решение на один шаг в направлении tout. На выходе параметрам, фигурирующим в списке вызова, присваиваются значения, необходимые для продолжения интегрирования. Пользователю нужно лишь еще раз обратиться к RKF45 (и, возможно, определить новое значение для tout).

В действительности RKF45 – это программа интерфейса, которая вызывает подпрограмму RKFS, осуществляющую процесс решения. RKFS в свою очередь вызывает подпрограмму FEHL, которая вычисляет приближенное решение на один шаг. Отметим, что FEHL не представлена в секции интерфейса модуля FMM, а присутствует лишь в его секции реализации.

Описание

Входная информация

FUN

―  указатель на внешнюю процедуру, реализующую вычисление производных  в точке t. Эта процедура должна удовлетворять двум следующим требованиям:

1.  Иметь описание:

рrocedure f( t: float;

var Y, YР: floatvector );

и по значениям t и вектора Y вычислять значения производных , .

2.  Функция FUN должна быть протранслирована с дальним типом вызова (с использованием директивы {$F+});

Nеqn

―  число интегрируемых уравнений;

Y(*)

―  решение в точке t;

t

―  независимая переменная;

tout

―  точка выхода, в которой нужно определить значение решения;

relerr

―  граница относительной погрешности для теста локальной ошибки;

аbserr

―  граница абсолютной погрешности для теста локальной ошибки. На каждом шаге программа требует выполнения условия

для каждой компоненты векторов локальной ошибки и решения;

Iflag

―  указатель режима интегрирования;

Work(*)

―  массив типа RVECN (см. ГЛАВА 1. Описание типов и констант модуля FMM), содержащий информацию, внутреннюю для RKF45, которая необходима при последующих вызовах. Его размерность должна быть не меньше ;

Iwork(*)

―  целый массив типа IVEC5 (см. ГЛАВА 1. Описание типов и констант модуля FMM), содержащий информацию, внутреннюю для RKF45, которая необходима при последующих вызовах. Его размерность должна быть не меньше 5.