Размерность решаемой системы дифференциальных уравнений (значение переменной 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(*)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.