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

Размерность решаемой системы дифференциальных уравнений (значение переменной neqn) не должна превышать значения объявленной в модуле FMM размерности массивов (константа NDIM). Если это условие не выполняется, то следует переопределить значение константы NDIM соответствующим образом в своей головной программе.

Первое обращение к RKF45

Пользователь должен предусмотреть в своей вызывающей программе память для массивов, фигурирующих в списке вызова:

Y    – floatvector,

Work – rvecn,

Iwork – ivec5.

Кроме того, он должен присвоить начальные значения параметрам:

neqn

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

Y(*)

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

t

―  начальная точка интегрирования, t должно быть переменной.

tout

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

relerr

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

abserr

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

Эти границы должны быть неотрицательны. relerr должна быть переменной, а аbserr может быть и константой. Программе, вообще говоря не следует задавать границу для относительной ошибки, меньшую, чем примерно 1E-8, дабы избежать трудностей, связанных с очень высокими запросами к точности, программа требует, чтобы relerr была больше, чем некоторый параметр относительной ошибки, вычисляемый внутри ее и зависящий от машины. В частности, не разрешается задание только абсолютной ошибки. Если же задано значение relerr, меньшее допустимого, то RKF45 увеличивает relerr надлежащим образом и возвращает управление пользователю, прежде чем продолжать интегрирование.

iflag

―  = +1, -1. Это указатель настройки программы для каждой новой задачи. Нормальное входное значение равно +1. Пользователь должен задавать  лишь в том случае, когда необходимо управление одношаговым интегратором. В этом случае RKF45 пытается продолжить решение на один шаг в направлении tout при каждом очередном вызове. Поскольку этот режим работы весьма неэкономичен, его следует применять лишь в случае крайней необходимости.

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

Y(*)

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

t

―  последняя точка, достигнутая при интегрировании.

iflag

―  = 2 – при интегрировании достигнуто tout. Это значение параметра указывает на успешный выход и является нормальным режимом для продолжения интегрирования.

―  = 3 – интегрирование не было закончено из-за того, что заданное значение границы для относительной ошибки оказалось слишком мало. Для продолжения интегрирования rеlerr было надлежащим образом увеличено.

―  = 4 – интегрирование не было закончено из-за того, что потребовалось более maxnfe вычислений производной (в модуле FMM значение maxnfe задано как константа = 3000 в секции интерфейса и может быть при необходимости переопределено в программе пользователя). Значение  соответствует приблизительно 500 шагам.

―  = 5 – интегрирование не было закончено из-за того, что решение обратилось в нуль, вследствие чего тест только относительной ошибки не проходит. Для продолжения необходимо ненулевое значение параметра abserr. Использование на один шаг режима пошагового интегрирования является разумным выходом из положения.

―  = 6 – интегрирование не было закончено из-за того, что требуемая точность не могла быть достигнута даже при наименьшей допустимой величине шага. Пользователь должен увеличить границу погрешности, прежде чем можно будет попытаться продолжать интегрирование.

―  = 7 – по всей видимости, RKF45 неэффективна при решении этой задачи. Слишком большое число требуемых выходных точек препятствует выбору естественной величины шага. Следует использовать режим пошагового интегрирования.

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

 и  или

relerr или

 или  или .

work(*)